@asgardeo/auth-spa 0.3.6 → 0.3.9

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 (68) hide show
  1. package/dist/asgardeo-spa.production.esm.js +13 -13
  2. package/dist/asgardeo-spa.production.esm.js.map +1 -1
  3. package/dist/asgardeo-spa.production.js +13 -13
  4. package/dist/asgardeo-spa.production.js.map +1 -1
  5. package/dist/asgardeo-spa.production.min.js +1 -1
  6. package/dist/asgardeo-spa.production.min.js.map +1 -1
  7. package/dist/polyfilled/asgardeo-spa.production.esm.js +42 -40
  8. package/dist/polyfilled/asgardeo-spa.production.esm.js.map +1 -1
  9. package/dist/polyfilled/asgardeo-spa.production.js +42 -40
  10. package/dist/polyfilled/asgardeo-spa.production.js.map +1 -1
  11. package/dist/polyfilled/asgardeo-spa.production.min.js +1 -1
  12. package/dist/polyfilled/asgardeo-spa.production.min.js.map +1 -1
  13. package/dist/src/client.d.ts +21 -16
  14. package/dist/src/client.d.ts.map +1 -1
  15. package/dist/src/client.js +29 -3
  16. package/dist/src/client.js.map +1 -1
  17. package/dist/src/clients/main-thread-client.d.ts +3 -2
  18. package/dist/src/clients/main-thread-client.d.ts.map +1 -1
  19. package/dist/src/clients/main-thread-client.js +83 -385
  20. package/dist/src/clients/main-thread-client.js.map +1 -1
  21. package/dist/src/clients/web-worker-client.d.ts +3 -2
  22. package/dist/src/clients/web-worker-client.d.ts.map +1 -1
  23. package/dist/src/clients/web-worker-client.js +98 -138
  24. package/dist/src/clients/web-worker-client.js.map +1 -1
  25. package/dist/src/helpers/authentication-helper.d.ts +50 -0
  26. package/dist/src/helpers/authentication-helper.d.ts.map +1 -0
  27. package/dist/src/helpers/authentication-helper.js +482 -0
  28. package/dist/src/helpers/authentication-helper.js.map +1 -0
  29. package/dist/src/helpers/index.d.ts +1 -0
  30. package/dist/src/helpers/index.d.ts.map +1 -1
  31. package/dist/src/helpers/index.js +1 -0
  32. package/dist/src/helpers/index.js.map +1 -1
  33. package/dist/src/public-api.d.ts +3 -0
  34. package/dist/src/public-api.d.ts.map +1 -1
  35. package/dist/src/public-api.js +5 -0
  36. package/dist/src/public-api.js.map +1 -1
  37. package/dist/src/worker/index.d.ts +1 -1
  38. package/dist/src/worker/index.d.ts.map +1 -1
  39. package/dist/src/worker/index.js +1 -1
  40. package/dist/src/worker/index.js.map +1 -1
  41. package/dist/src/worker/worker-core.d.ts +3 -2
  42. package/dist/src/worker/worker-core.d.ts.map +1 -1
  43. package/dist/src/worker/worker-core.js +23 -202
  44. package/dist/src/worker/worker-core.js.map +1 -1
  45. package/dist/src/worker/worker-receiver.d.ts +22 -0
  46. package/dist/src/worker/worker-receiver.d.ts.map +1 -0
  47. package/dist/src/worker/worker-receiver.js +233 -0
  48. package/dist/src/worker/worker-receiver.js.map +1 -0
  49. package/dist/src/{worker/client.worker.d.ts → worker.d.ts} +2 -2
  50. package/dist/src/worker.d.ts.map +1 -0
  51. package/dist/src/worker.js +24 -0
  52. package/dist/src/worker.js.map +1 -0
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +1 -1
  55. package/src/client.ts +65 -19
  56. package/src/clients/main-thread-client.ts +137 -486
  57. package/src/clients/web-worker-client.ts +128 -169
  58. package/src/helpers/authentication-helper.ts +661 -0
  59. package/src/helpers/index.ts +1 -0
  60. package/src/public-api.ts +7 -0
  61. package/src/worker/index.ts +1 -1
  62. package/src/worker/worker-core.ts +48 -261
  63. package/src/worker/worker-receiver.ts +297 -0
  64. package/src/worker.ts +30 -0
  65. package/dist/src/worker/client.worker.d.ts.map +0 -1
  66. package/dist/src/worker/client.worker.js +0 -232
  67. package/dist/src/worker/client.worker.js.map +0 -1
  68. package/src/worker/client.worker.ts +0 -286
@@ -1,4 +1,6 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).AsgardeoAuth={})}(this,(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 r(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function a(e,t,n,r,i,c,o){try{var a=e[c](o),l=a.value}catch(e){return void n(e)}a.done?t(l):Promise.resolve(l).then(r,i)}function l(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var c=e.apply(t,n);function o(e){a(c,r,i,o,l,"next",e)}function l(e){a(c,r,i,o,l,"throw",e)}o(void 0)}))}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s(e,t,n){return t&&d(e.prototype,t),n&&d(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Z(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&b(e,t)}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}function b(e,t){return b=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},b(e,t)}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function I(e,t,n){return I=p()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&b(i,n.prototype),i},I.apply(null,arguments)}function g(e){var t="function"==typeof Map?new Map:void 0;return g=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return I(e,arguments,h(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),b(r,e)},g(e)}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function X(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return y(e)}function f(e){var t=p();return function(){var n,r=h(e);if(t){var i=h(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return X(this,n)}}function G(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,i,c=[],o=!0,a=!1;try{for(n=n.call(e);!(o=(r=n.next()).done)&&(c.push(r.value),!t||c.length!==t);o=!0);}catch(e){a=!0,i=e}finally{try{o||null==n.return||n.return()}finally{if(a)throw i}}return c}(e,t)||W(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function V(e){return function(e){if(Array.isArray(e))return C(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||W(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=W(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,c=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw c}}}}var R=function(e){return e&&e.Math==Math&&e},S=R("object"==("undefined"==typeof globalThis?"undefined":o(globalThis))&&globalThis)||R("object"==("undefined"==typeof window?"undefined":o(window))&&window)||R("object"==("undefined"==typeof self?"undefined":o(self))&&self)||R("object"==o(t)&&t)||function(){return this}()||Function("return this")(),Y={},J=function(e){try{return!!e()}catch(e){return!0}},K=!J((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),N=!J((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),L=N,H=Function.prototype.call,x=L?H.bind(H):function(){return H.apply(H,arguments)},k={},U={}.propertyIsEnumerable,A=Object.getOwnPropertyDescriptor,w=A&&!U.call({1:2},1);k.f=w?function(e){var t=A(this,e);return!!t&&t.enumerable}:U;var F,T,B=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},z=N,j=Function.prototype,M=j.bind,Q=j.call,P=z&&M.bind(Q,Q),E=z?function(e){return e&&P(e)}:function(e){return e&&function(){return Q.apply(e,arguments)}},D=E,O=D({}.toString),_=D("".slice),q=function(e){return _(O(e),8,-1)},$=E,ee=J,te=q,ne=S.Object,re=$("".split),ie=ee((function(){return!ne("z").propertyIsEnumerable(0)}))?function(e){return"String"==te(e)?re(e,""):ne(e)}:ne,ce=S.TypeError,oe=function(e){if(null==e)throw ce("Can't call method on "+e);return e},ae=ie,le=oe,ue=function(e){return ae(le(e))},de=function(e){return"function"==typeof e},se=de,me=function(e){return"object"==o(e)?null!==e:se(e)},Ze=S,he=de,be=function(e){return he(e)?e:void 0},pe=function(e,t){return arguments.length<2?be(Ze[e]):Ze[e]&&Ze[e][t]},Ie=E({}.isPrototypeOf),ge=pe("navigator","userAgent")||"",ye=S,Xe=ge,fe=ye.process,Ge=ye.Deno,Ve=fe&&fe.versions||Ge&&Ge.version,We=Ve&&Ve.v8;We&&(T=(F=We.split("."))[0]>0&&F[0]<4?1:+(F[0]+F[1])),!T&&Xe&&(!(F=Xe.match(/Edge\/(\d+)/))||F[1]>=74)&&(F=Xe.match(/Chrome\/(\d+)/))&&(T=+F[1]);var Ce=T,ve=Ce,Re=J,Se=!!Object.getOwnPropertySymbols&&!Re((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ve&&ve<41})),Ye=Se&&!Symbol.sham&&"symbol"==o(Symbol.iterator),Je=pe,Ke=de,Ne=Ie,Le=Ye,He=S.Object,xe=Le?function(e){return"symbol"==o(e)}:function(e){var t=Je("Symbol");return Ke(t)&&Ne(t.prototype,He(e))},ke=S.String,Ue=function(e){try{return ke(e)}catch(e){return"Object"}},Ae=de,we=Ue,Fe=S.TypeError,Te=function(e){if(Ae(e))return e;throw Fe(we(e)+" is not a function")},Be=Te,ze=function(e,t){var n=e[t];return null==n?void 0:Be(n)},je=x,Me=de,Qe=me,Pe=S.TypeError,Ee=function(e,t){var n,r;if("string"===t&&Me(n=e.toString)&&!Qe(r=je(n,e)))return r;if(Me(n=e.valueOf)&&!Qe(r=je(n,e)))return r;if("string"!==t&&Me(n=e.toString)&&!Qe(r=je(n,e)))return r;throw Pe("Can't convert object to primitive value")},De={exports:{}},Oe=S,_e=Object.defineProperty,qe=function(e,t){try{_e(Oe,e,{value:t,configurable:!0,writable:!0})}catch(n){Oe[e]=t}return t},$e=qe,et="__core-js_shared__",tt=S[et]||$e(et,{}),nt=tt;(De.exports=function(e,t){return nt[e]||(nt[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.22.4",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.4/LICENSE",source:"https://github.com/zloirock/core-js"});var rt=oe,it=S.Object,ct=function(e){return it(rt(e))},ot=ct,at=E({}.hasOwnProperty),lt=Object.hasOwn||function(e,t){return at(ot(e),t)},ut=E,dt=0,st=Math.random(),mt=ut(1..toString),Zt=function(e){return"Symbol("+(void 0===e?"":e)+")_"+mt(++dt+st,36)},ht=S,bt=De.exports,pt=lt,It=Zt,gt=Se,yt=Ye,Xt=bt("wks"),ft=ht.Symbol,Gt=ft&&ft.for,Vt=yt?ft:ft&&ft.withoutSetter||It,Wt=function(e){if(!pt(Xt,e)||!gt&&"string"!=typeof Xt[e]){var t="Symbol."+e;gt&&pt(ft,e)?Xt[e]=ft[e]:Xt[e]=yt&&Gt?Gt(t):Vt(t)}return Xt[e]},Ct=x,vt=me,Rt=xe,St=ze,Yt=Ee,Jt=Wt,Kt=S.TypeError,Nt=Jt("toPrimitive"),Lt=function(e,t){if(!vt(e)||Rt(e))return e;var n,r=St(e,Nt);if(r){if(void 0===t&&(t="default"),n=Ct(r,e,t),!vt(n)||Rt(n))return n;throw Kt("Can't convert object to primitive value")}return void 0===t&&(t="number"),Yt(e,t)},Ht=Lt,xt=xe,kt=function(e){var t=Ht(e,"string");return xt(t)?t:t+""},Ut=me,At=S.document,wt=Ut(At)&&Ut(At.createElement),Ft=function(e){return wt?At.createElement(e):{}},Tt=Ft,Bt=!K&&!J((function(){return 7!=Object.defineProperty(Tt("div"),"a",{get:function(){return 7}}).a})),zt=K,jt=x,Mt=k,Qt=B,Pt=ue,Et=kt,Dt=lt,Ot=Bt,_t=Object.getOwnPropertyDescriptor;Y.f=zt?_t:function(e,t){if(e=Pt(e),t=Et(t),Ot)try{return _t(e,t)}catch(e){}if(Dt(e,t))return Qt(!jt(Mt.f,e,t),e[t])};var qt={},$t=K&&J((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),en=S,tn=me,nn=en.String,rn=en.TypeError,cn=function(e){if(tn(e))return e;throw rn(nn(e)+" is not an object")},on=K,an=Bt,ln=$t,un=cn,dn=kt,sn=S.TypeError,mn=Object.defineProperty,Zn=Object.getOwnPropertyDescriptor,hn="enumerable",bn="configurable",pn="writable";qt.f=on?ln?function(e,t,n){if(un(e),t=dn(t),un(n),"function"==typeof e&&"prototype"===t&&"value"in n&&pn in n&&!n.writable){var r=Zn(e,t);r&&r.writable&&(e[t]=n.value,n={configurable:bn in n?n.configurable:r.configurable,enumerable:hn in n?n.enumerable:r.enumerable,writable:!1})}return mn(e,t,n)}:mn:function(e,t,n){if(un(e),t=dn(t),un(n),an)try{return mn(e,t,n)}catch(e){}if("get"in n||"set"in n)throw sn("Accessors not supported");return"value"in n&&(e[t]=n.value),e};var In=qt,gn=B,yn=K?function(e,t,n){return In.f(e,t,gn(1,n))}:function(e,t,n){return e[t]=n,e},Xn={exports:{}},fn=K,Gn=lt,Vn=Function.prototype,Wn=fn&&Object.getOwnPropertyDescriptor,Cn=Gn(Vn,"name"),vn={EXISTS:Cn,PROPER:Cn&&"something"===function(){}.name,CONFIGURABLE:Cn&&(!fn||fn&&Wn(Vn,"name").configurable)},Rn=de,Sn=tt,Yn=E(Function.toString);Rn(Sn.inspectSource)||(Sn.inspectSource=function(e){return Yn(e)});var Jn,Kn,Nn,Ln=Sn.inspectSource,Hn=de,xn=Ln,kn=S.WeakMap,Un=Hn(kn)&&/native code/.test(xn(kn)),An=De.exports,wn=Zt,Fn=An("keys"),Tn=function(e){return Fn[e]||(Fn[e]=wn(e))},Bn={},zn=Un,jn=S,Mn=E,Qn=me,Pn=yn,En=lt,Dn=tt,On=Tn,_n=Bn,qn="Object already initialized",$n=jn.TypeError,er=jn.WeakMap;if(zn||Dn.state){var tr=Dn.state||(Dn.state=new er),nr=Mn(tr.get),rr=Mn(tr.has),ir=Mn(tr.set);Jn=function(e,t){if(rr(tr,e))throw new $n(qn);return t.facade=e,ir(tr,e,t),t},Kn=function(e){return nr(tr,e)||{}},Nn=function(e){return rr(tr,e)}}else{var cr=On("state");_n[cr]=!0,Jn=function(e,t){if(En(e,cr))throw new $n(qn);return t.facade=e,Pn(e,cr,t),t},Kn=function(e){return En(e,cr)?e[cr]:{}},Nn=function(e){return En(e,cr)}}var or={set:Jn,get:Kn,has:Nn,enforce:function(e){return Nn(e)?Kn(e):Jn(e,{})},getterFor:function(e){return function(t){var n;if(!Qn(t)||(n=Kn(t)).type!==e)throw $n("Incompatible receiver, "+e+" required");return n}}},ar=J,lr=de,ur=lt,dr=qt.f,sr=vn.CONFIGURABLE,mr=Ln,Zr=or.enforce,hr=or.get,br=!ar((function(){return 8!==dr((function(){}),"length",{value:8}).length})),pr=String(String).split("String"),Ir=Xn.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),(!ur(e,"name")||sr&&e.name!==t)&&dr(e,"name",{value:t,configurable:!0}),br&&n&&ur(n,"arity")&&e.length!==n.arity&&dr(e,"length",{value:n.arity});var r=Zr(e);return ur(r,"source")||(r.source=pr.join("string"==typeof t?t:"")),e};Function.prototype.toString=Ir((function(){return lr(this)&&hr(this).source||mr(this)}),"toString");var gr=S,yr=de,Xr=yn,fr=Xn.exports,Gr=qe,Vr=function(e,t,n,r){var i=!!r&&!!r.unsafe,c=!!r&&!!r.enumerable,o=!!r&&!!r.noTargetGet,a=r&&void 0!==r.name?r.name:t;return yr(n)&&fr(n,a,r),e===gr?(c?e[t]=n:Gr(t,n),e):(i?!o&&e[t]&&(c=!0):delete e[t],c?e[t]=n:Xr(e,t,n),e)},Wr={},Cr=Math.ceil,vr=Math.floor,Rr=function(e){var t=+e;return t!=t||0===t?0:(t>0?vr:Cr)(t)},Sr=Rr,Yr=Math.max,Jr=Math.min,Kr=function(e,t){var n=Sr(e);return n<0?Yr(n+t,0):Jr(n,t)},Nr=Rr,Lr=Math.min,Hr=function(e){return e>0?Lr(Nr(e),9007199254740991):0},xr=Hr,kr=function(e){return xr(e.length)},Ur=ue,Ar=Kr,wr=kr,Fr=function(e){return function(t,n,r){var i,c=Ur(t),o=wr(c),a=Ar(r,o);if(e&&n!=n){for(;o>a;)if((i=c[a++])!=i)return!0}else for(;o>a;a++)if((e||a in c)&&c[a]===n)return e||a||0;return!e&&-1}},Tr={includes:Fr(!0),indexOf:Fr(!1)},Br=lt,zr=ue,jr=Tr.indexOf,Mr=Bn,Qr=E([].push),Pr=function(e,t){var n,r=zr(e),i=0,c=[];for(n in r)!Br(Mr,n)&&Br(r,n)&&Qr(c,n);for(;t.length>i;)Br(r,n=t[i++])&&(~jr(c,n)||Qr(c,n));return c},Er=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Dr=Pr,Or=Er.concat("length","prototype");Wr.f=Object.getOwnPropertyNames||function(e){return Dr(e,Or)};var _r={};_r.f=Object.getOwnPropertySymbols;var qr=pe,$r=Wr,ei=_r,ti=cn,ni=E([].concat),ri=qr("Reflect","ownKeys")||function(e){var t=$r.f(ti(e)),n=ei.f;return n?ni(t,n(e)):t},ii=lt,ci=ri,oi=Y,ai=qt,li=function(e,t,n){for(var r=ci(t),i=ai.f,c=oi.f,o=0;o<r.length;o++){var a=r[o];ii(e,a)||n&&ii(n,a)||i(e,a,c(t,a))}},ui=J,di=de,si=/#|\.prototype\./,mi=function(e,t){var n=hi[Zi(e)];return n==pi||n!=bi&&(di(t)?ui(t):!!t)},Zi=mi.normalize=function(e){return String(e).replace(si,".").toLowerCase()},hi=mi.data={},bi=mi.NATIVE="N",pi=mi.POLYFILL="P",Ii=mi,gi=S,yi=Y.f,Xi=yn,fi=Vr,Gi=qe,Vi=li,Wi=Ii,Ci=function(e,t){var n,r,i,c,a,l=e.target,u=e.global,d=e.stat;if(n=u?gi:d?gi[l]||Gi(l,{}):(gi[l]||{}).prototype)for(r in t){if(c=t[r],i=e.noTargetGet?(a=yi(n,r))&&a.value:n[r],!Wi(u?r:l+(d?".":"#")+r,e.forced)&&void 0!==i){if(o(c)==o(i))continue;Vi(c,i)}(e.sham||i&&i.sham)&&Xi(c,"sham",!0),fi(n,r,c,e)}},vi={};vi[Wt("toStringTag")]="z";var Ri="[object z]"===String(vi),Si=S,Yi=Ri,Ji=de,Ki=q,Ni=Wt("toStringTag"),Li=Si.Object,Hi="Arguments"==Ki(function(){return arguments}()),xi=Yi?Ki:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Li(e),Ni))?n:Hi?Ki(t):"Object"==(r=Ki(t))&&Ji(t.callee)?"Arguments":r},ki=xi,Ui=S.String,Ai=function(e){if("Symbol"===ki(e))throw TypeError("Cannot convert a Symbol value to a string");return Ui(e)},wi={},Fi=Pr,Ti=Er,Bi=Object.keys||function(e){return Fi(e,Ti)},zi=K,ji=$t,Mi=qt,Qi=cn,Pi=ue,Ei=Bi;wi.f=zi&&!ji?Object.defineProperties:function(e,t){Qi(e);for(var n,r=Pi(t),i=Ei(t),c=i.length,o=0;c>o;)Mi.f(e,n=i[o++],r[n]);return e};var Di,Oi=pe("document","documentElement"),_i=cn,qi=wi,$i=Er,ec=Bn,tc=Oi,nc=Ft,rc=Tn("IE_PROTO"),ic=function(){},cc=function(e){return"<script>"+e+"</"+"script>"},oc=function(e){e.write(cc("")),e.close();var t=e.parentWindow.Object;return e=null,t},ac=function(){try{Di=new ActiveXObject("htmlfile")}catch(e){}var e,t;ac="undefined"!=typeof document?document.domain&&Di?oc(Di):((t=nc("iframe")).style.display="none",tc.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(cc("document.F=Object")),e.close(),e.F):oc(Di);for(var n=$i.length;n--;)delete ac.prototype[$i[n]];return ac()};ec[rc]=!0;var lc=Object.create||function(e,t){var n;return null!==e?(ic.prototype=_i(e),n=new ic,ic.prototype=null,n[rc]=e):n=ac(),void 0===t?n:qi.f(n,t)},uc={},dc=kt,sc=qt,mc=B,Zc=function(e,t,n){var r=dc(t);r in e?sc.f(e,r,mc(0,n)):e[r]=n},hc=Kr,bc=kr,pc=Zc,Ic=S.Array,gc=Math.max,yc=function(e,t,n){for(var r=bc(e),i=hc(t,r),c=hc(void 0===n?r:n,r),o=Ic(gc(c-i,0)),a=0;i<c;i++,a++)pc(o,a,e[i]);return o.length=a,o},Xc=q,fc=ue,Gc=Wr.f,Vc=yc,Wc="object"==("undefined"==typeof window?"undefined":o(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];uc.f=function(e){return Wc&&"Window"==Xc(e)?function(e){try{return Gc(e)}catch(e){return Vc(Wc)}}(e):Gc(fc(e))};var Cc={},vc=Wt;Cc.f=vc;var Rc=S,Sc=lt,Yc=Cc,Jc=qt.f,Kc=function(e){var t=Rc.Symbol||(Rc.Symbol={});Sc(t,e)||Jc(t,e,{value:Yc.f(e)})},Nc=x,Lc=pe,Hc=Wt,xc=Vr,kc=function(){var e=Lc("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,r=Hc("toPrimitive");t&&!t[r]&&xc(t,r,(function(e){return Nc(n,this)}),{arity:1})},Uc=qt.f,Ac=lt,wc=Wt("toStringTag"),Fc=function(e,t,n){e&&!n&&(e=e.prototype),e&&!Ac(e,wc)&&Uc(e,wc,{configurable:!0,value:t})},Tc=Te,Bc=N,zc=E(E.bind),jc=function(e,t){return Tc(e),void 0===t?e:Bc?zc(e,t):function(){return e.apply(t,arguments)}},Mc=q,Qc=Array.isArray||function(e){return"Array"==Mc(e)},Pc=E,Ec=J,Dc=de,Oc=xi,_c=Ln,qc=function(){},$c=[],eo=pe("Reflect","construct"),to=/^\s*(?:class|function)\b/,no=Pc(to.exec),ro=!to.exec(qc),io=function(e){if(!Dc(e))return!1;try{return eo(qc,$c,e),!0}catch(e){return!1}},co=function(e){if(!Dc(e))return!1;switch(Oc(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return ro||!!no(to,_c(e))}catch(e){return!0}};co.sham=!0;var oo=!eo||Ec((function(){var e;return io(io.call)||!io(Object)||!io((function(){e=!0}))||e}))?co:io,ao=S,lo=Qc,uo=oo,so=me,mo=Wt("species"),Zo=ao.Array,ho=function(e){var t;return lo(e)&&(t=e.constructor,(uo(t)&&(t===Zo||lo(t.prototype))||so(t)&&null===(t=t[mo]))&&(t=void 0)),void 0===t?Zo:t},bo=function(e,t){return new(ho(e))(0===t?0:t)},po=jc,Io=ie,go=ct,yo=kr,Xo=bo,fo=E([].push),Go=function(e){var t=1==e,n=2==e,r=3==e,i=4==e,c=6==e,o=7==e,a=5==e||c;return function(l,u,d,s){for(var m,Z,h=go(l),b=Io(h),p=po(u,d),I=yo(b),g=0,y=s||Xo,X=t?y(l,I):n||o?y(l,0):void 0;I>g;g++)if((a||g in b)&&(Z=p(m=b[g],g,h),e))if(t)X[g]=Z;else if(Z)switch(e){case 3:return!0;case 5:return m;case 6:return g;case 2:fo(X,m)}else switch(e){case 4:return!1;case 7:fo(X,m)}return c?-1:r||i?i:X}},Vo={forEach:Go(0),map:Go(1),filter:Go(2),some:Go(3),every:Go(4),find:Go(5),findIndex:Go(6),filterReject:Go(7)},Wo=Ci,Co=S,vo=x,Ro=E,So=K,Yo=Se,Jo=J,Ko=lt,No=Ie,Lo=cn,Ho=ue,xo=kt,ko=Ai,Uo=B,Ao=lc,wo=Bi,Fo=Wr,To=uc,Bo=_r,zo=Y,jo=qt,Mo=wi,Qo=k,Po=Vr,Eo=De.exports,Do=Bn,Oo=Zt,_o=Wt,qo=Cc,$o=Kc,ea=kc,ta=Fc,na=or,ra=Vo.forEach,ia=Tn("hidden"),ca="Symbol",oa=na.set,aa=na.getterFor(ca),la=Object.prototype,ua=Co.Symbol,da=ua&&ua.prototype,sa=Co.TypeError,ma=Co.QObject,Za=zo.f,ha=jo.f,ba=To.f,pa=Qo.f,Ia=Ro([].push),ga=Eo("symbols"),ya=Eo("op-symbols"),Xa=Eo("wks"),fa=!ma||!ma.prototype||!ma.prototype.findChild,Ga=So&&Jo((function(){return 7!=Ao(ha({},"a",{get:function(){return ha(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Za(la,t);r&&delete la[t],ha(e,t,n),r&&e!==la&&ha(la,t,r)}:ha,Va=function(e,t){var n=ga[e]=Ao(da);return oa(n,{type:ca,tag:e,description:t}),So||(n.description=t),n},Wa=function(e,t,n){e===la&&Wa(ya,t,n),Lo(e);var r=xo(t);return Lo(n),Ko(ga,r)?(n.enumerable?(Ko(e,ia)&&e[ia][r]&&(e[ia][r]=!1),n=Ao(n,{enumerable:Uo(0,!1)})):(Ko(e,ia)||ha(e,ia,Uo(1,{})),e[ia][r]=!0),Ga(e,r,n)):ha(e,r,n)},Ca=function(e,t){Lo(e);var n=Ho(t),r=wo(n).concat(Ya(n));return ra(r,(function(t){So&&!vo(va,n,t)||Wa(e,t,n[t])})),e},va=function(e){var t=xo(e),n=vo(pa,this,t);return!(this===la&&Ko(ga,t)&&!Ko(ya,t))&&(!(n||!Ko(this,t)||!Ko(ga,t)||Ko(this,ia)&&this[ia][t])||n)},Ra=function(e,t){var n=Ho(e),r=xo(t);if(n!==la||!Ko(ga,r)||Ko(ya,r)){var i=Za(n,r);return!i||!Ko(ga,r)||Ko(n,ia)&&n[ia][r]||(i.enumerable=!0),i}},Sa=function(e){var t=ba(Ho(e)),n=[];return ra(t,(function(e){Ko(ga,e)||Ko(Do,e)||Ia(n,e)})),n},Ya=function(e){var t=e===la,n=ba(t?ya:Ho(e)),r=[];return ra(n,(function(e){!Ko(ga,e)||t&&!Ko(la,e)||Ia(r,ga[e])})),r};Yo||(ua=function(){if(No(da,this))throw sa("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?ko(arguments[0]):void 0,t=Oo(e),n=function e(n){this===la&&vo(e,ya,n),Ko(this,ia)&&Ko(this[ia],t)&&(this[ia][t]=!1),Ga(this,t,Uo(1,n))};return So&&fa&&Ga(la,t,{configurable:!0,set:n}),Va(t,e)},Po(da=ua.prototype,"toString",(function(){return aa(this).tag})),Po(ua,"withoutSetter",(function(e){return Va(Oo(e),e)})),Qo.f=va,jo.f=Wa,Mo.f=Ca,zo.f=Ra,Fo.f=To.f=Sa,Bo.f=Ya,qo.f=function(e){return Va(_o(e),e)},So&&(ha(da,"description",{configurable:!0,get:function(){return aa(this).description}}),Po(la,"propertyIsEnumerable",va,{unsafe:!0}))),Wo({global:!0,wrap:!0,forced:!Yo,sham:!Yo},{Symbol:ua}),ra(wo(Xa),(function(e){$o(e)})),Wo({target:ca,stat:!0,forced:!Yo},{useSetter:function(){fa=!0},useSimple:function(){fa=!1}}),Wo({target:"Object",stat:!0,forced:!Yo,sham:!So},{create:function(e,t){return void 0===t?Ao(e):Ca(Ao(e),t)},defineProperty:Wa,defineProperties:Ca,getOwnPropertyDescriptor:Ra}),Wo({target:"Object",stat:!0,forced:!Yo},{getOwnPropertyNames:Sa}),ea(),ta(ua,ca),Do[ia]=!0;var Ja=Se&&!!Symbol.for&&!!Symbol.keyFor,Ka=Ci,Na=pe,La=lt,Ha=Ai,xa=De.exports,ka=Ja,Ua=xa("string-to-symbol-registry"),Aa=xa("symbol-to-string-registry");Ka({target:"Symbol",stat:!0,forced:!ka},{for:function(e){var t=Ha(e);if(La(Ua,t))return Ua[t];var n=Na("Symbol")(t);return Ua[t]=n,Aa[n]=t,n}});var wa=Ci,Fa=lt,Ta=xe,Ba=Ue,za=Ja,ja=(0,De.exports)("symbol-to-string-registry");wa({target:"Symbol",stat:!0,forced:!za},{keyFor:function(e){if(!Ta(e))throw TypeError(Ba(e)+" is not a symbol");if(Fa(ja,e))return ja[e]}});var Ma=N,Qa=Function.prototype,Pa=Qa.apply,Ea=Qa.call,Da="object"==("undefined"==typeof Reflect?"undefined":o(Reflect))&&Reflect.apply||(Ma?Ea.bind(Pa):function(){return Ea.apply(Pa,arguments)}),Oa=E([].slice),_a=Ci,qa=pe,$a=Da,el=x,tl=E,nl=J,rl=Qc,il=de,cl=me,ol=xe,al=Oa,ll=Se,ul=qa("JSON","stringify"),dl=tl(/./.exec),sl=tl("".charAt),ml=tl("".charCodeAt),Zl=tl("".replace),hl=tl(1..toString),bl=/[\uD800-\uDFFF]/g,pl=/^[\uD800-\uDBFF]$/,Il=/^[\uDC00-\uDFFF]$/,gl=!ll||nl((function(){var e=qa("Symbol")();return"[null]"!=ul([e])||"{}"!=ul({a:e})||"{}"!=ul(Object(e))})),yl=nl((function(){return'"\\udf06\\ud834"'!==ul("\udf06\ud834")||'"\\udead"'!==ul("\udead")})),Xl=function(e,t){var n=al(arguments),r=t;if((cl(t)||void 0!==e)&&!ol(e))return rl(t)||(t=function(e,t){if(il(r)&&(t=el(r,this,e,t)),!ol(t))return t}),n[1]=t,$a(ul,null,n)},fl=function(e,t,n){var r=sl(n,t-1),i=sl(n,t+1);return dl(pl,e)&&!dl(Il,i)||dl(Il,e)&&!dl(pl,r)?"\\u"+hl(ml(e,0),16):e};ul&&_a({target:"JSON",stat:!0,arity:3,forced:gl||yl},{stringify:function(e,t,n){var r=al(arguments),i=$a(gl?Xl:ul,null,r);return yl&&"string"==typeof i?Zl(i,bl,fl):i}});var Gl=_r,Vl=ct;Ci({target:"Object",stat:!0,forced:!Se||J((function(){Gl.f(1)}))},{getOwnPropertySymbols:function(e){var t=Gl.f;return t?t(Vl(e)):[]}});var Wl=Ci,Cl=K,vl=S,Rl=E,Sl=lt,Yl=de,Jl=Ie,Kl=Ai,Nl=qt.f,Ll=li,Hl=vl.Symbol,xl=Hl&&Hl.prototype;if(Cl&&Yl(Hl)&&(!("description"in xl)||void 0!==Hl().description)){var kl={},Ul=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:Kl(arguments[0]),t=Jl(xl,this)?new Hl(e):void 0===e?Hl():Hl(e);return""===e&&(kl[t]=!0),t};Ll(Ul,Hl),Ul.prototype=xl,xl.constructor=Ul;var Al="Symbol(test)"==String(Hl("test")),wl=Rl(xl.toString),Fl=Rl(xl.valueOf),Tl=/^Symbol\((.*)\)[^)]+$/,Bl=Rl("".replace),zl=Rl("".slice);Nl(xl,"description",{configurable:!0,get:function(){var e=Fl(this),t=wl(e);if(Sl(kl,e))return"";var n=Al?zl(t,7,-1):Bl(t,Tl,"$1");return""===n?void 0:n}}),Wl({global:!0,forced:!0},{Symbol:Ul})}Kc("asyncIterator"),Kc("hasInstance"),Kc("isConcatSpreadable"),Kc("iterator"),Kc("match"),Kc("matchAll"),Kc("replace"),Kc("search"),Kc("species"),Kc("split");var jl=kc;Kc("toPrimitive"),jl();var Ml=pe,Ql=Fc;Kc("toStringTag"),Ql(Ml("Symbol"),"Symbol"),Kc("unscopables");var Pl=J,El=Ce,Dl=Wt("species"),Ol=function(e){return El>=51||!Pl((function(){var t=[];return(t.constructor={})[Dl]=function(){return{foo:1}},1!==t[e](Boolean).foo}))},_l=Ci,ql=S,$l=J,eu=Qc,tu=me,nu=ct,ru=kr,iu=Zc,cu=bo,ou=Ol,au=Ce,lu=Wt("isConcatSpreadable"),uu=9007199254740991,du="Maximum allowed index exceeded",su=ql.TypeError,mu=au>=51||!$l((function(){var e=[];return e[lu]=!1,e.concat()[0]!==e})),Zu=ou("concat"),hu=function(e){if(!tu(e))return!1;var t=e[lu];return void 0!==t?!!t:eu(e)};_l({target:"Array",proto:!0,arity:1,forced:!mu||!Zu},{concat:function(e){var t,n,r,i,c,o=nu(this),a=cu(o,0),l=0;for(t=-1,r=arguments.length;t<r;t++)if(hu(c=-1===t?o:arguments[t])){if(l+(i=ru(c))>uu)throw su(du);for(n=0;n<i;n++,l++)n in c&&iu(a,l,c[n])}else{if(l>=uu)throw su(du);iu(a,l++,c)}return a.length=l,a}});var bu=ct,pu=Kr,Iu=kr,gu=Math.min,yu=[].copyWithin||function(e,t){var n=bu(this),r=Iu(n),i=pu(e,r),c=pu(t,r),o=arguments.length>2?arguments[2]:void 0,a=gu((void 0===o?r:pu(o,r))-c,r-i),l=1;for(c<i&&i<c+a&&(l=-1,c+=a-1,i+=a-1);a-- >0;)c in n?n[i]=n[c]:delete n[i],i+=l,c+=l;return n},Xu=lc,fu=qt,Gu=Wt("unscopables"),Vu=Array.prototype;null==Vu[Gu]&&fu.f(Vu,Gu,{configurable:!0,value:Xu(null)});var Wu=function(e){Vu[Gu][e]=!0},Cu=Wu;Ci({target:"Array",proto:!0},{copyWithin:yu}),Cu("copyWithin");var vu=ct,Ru=Kr,Su=kr,Yu=function(e){for(var t=vu(this),n=Su(t),r=arguments.length,i=Ru(r>1?arguments[1]:void 0,n),c=r>2?arguments[2]:void 0,o=void 0===c?n:Ru(c,n);o>i;)t[i++]=e;return t},Ju=Wu;Ci({target:"Array",proto:!0},{fill:Yu}),Ju("fill");var Ku=Vo.filter;Ci({target:"Array",proto:!0,forced:!Ol("filter")},{filter:function(e){return Ku(this,e,arguments.length>1?arguments[1]:void 0)}});var Nu=Ci,Lu=Vo.find,Hu=Wu,xu="find",ku=!0;xu in[]&&Array(1).find((function(){ku=!1})),Nu({target:"Array",proto:!0,forced:ku},{find:function(e){return Lu(this,e,arguments.length>1?arguments[1]:void 0)}}),Hu(xu);var Uu=Ci,Au=Vo.findIndex,wu=Wu,Fu="findIndex",Tu=!0;Fu in[]&&Array(1).findIndex((function(){Tu=!1})),Uu({target:"Array",proto:!0,forced:Tu},{findIndex:function(e){return Au(this,e,arguments.length>1?arguments[1]:void 0)}}),wu(Fu);var Bu=Qc,zu=kr,ju=jc,Mu=S.TypeError,Qu=function e(t,n,r,i,c,o,a,l){for(var u,d=c,s=0,m=!!a&&ju(a,l);s<i;){if(s in r){if(u=m?m(r[s],s,n):r[s],o>0&&Bu(u))d=e(t,n,u,zu(u),d,o-1)-1;else{if(d>=9007199254740991)throw Mu("Exceed the acceptable array length");t[d]=u}d++}s++}return d},Pu=Qu,Eu=ct,Du=kr,Ou=Rr,_u=bo;Ci({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=Eu(this),n=Du(t),r=_u(t,0);return r.length=Pu(r,t,t,n,0,void 0===e?1:Ou(e)),r}});var qu=Qu,$u=Te,ed=ct,td=kr,nd=bo;Ci({target:"Array",proto:!0},{flatMap:function(e){var t,n=ed(this),r=td(n);return $u(e),(t=nd(n,0)).length=qu(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:void 0),t}});var rd=x,id=cn,cd=ze,od=function(e,t,n){var r,i;id(e);try{if(!(r=cd(e,"return"))){if("throw"===t)throw n;return n}r=rd(r,e)}catch(e){i=!0,r=e}if("throw"===t)throw n;if(i)throw r;return id(r),n},ad=cn,ld=od,ud={},dd=ud,sd=Wt("iterator"),md=Array.prototype,Zd=function(e){return void 0!==e&&(dd.Array===e||md[sd]===e)},hd=xi,bd=ze,pd=ud,Id=Wt("iterator"),gd=function(e){if(null!=e)return bd(e,Id)||bd(e,"@@iterator")||pd[hd(e)]},yd=x,Xd=Te,fd=cn,Gd=Ue,Vd=gd,Wd=S.TypeError,Cd=function(e,t){var n=arguments.length<2?Vd(e):t;if(Xd(n))return fd(yd(n,e));throw Wd(Gd(e)+" is not iterable")},vd=jc,Rd=x,Sd=ct,Yd=function(e,t,n,r){try{return r?t(ad(n)[0],n[1]):t(n)}catch(t){ld(e,"throw",t)}},Jd=Zd,Kd=oo,Nd=kr,Ld=Zc,Hd=Cd,xd=gd,kd=S.Array,Ud=function(e){var t=Sd(e),n=Kd(this),r=arguments.length,i=r>1?arguments[1]:void 0,c=void 0!==i;c&&(i=vd(i,r>2?arguments[2]:void 0));var o,a,l,u,d,s,m=xd(t),Z=0;if(!m||this==kd&&Jd(m))for(o=Nd(t),a=n?new this(o):kd(o);o>Z;Z++)s=c?i(t[Z],Z):t[Z],Ld(a,Z,s);else for(d=(u=Hd(t,m)).next,a=n?new this:[];!(l=Rd(d,u)).done;Z++)s=c?Yd(u,i,[l.value,Z],!0):l.value,Ld(a,Z,s);return a.length=Z,a},Ad=Wt("iterator"),wd=!1;try{var Fd=0,Td={next:function(){return{done:!!Fd++}},return:function(){wd=!0}};Td[Ad]=function(){return this},Array.from(Td,(function(){throw 2}))}catch(e){}var Bd=function(e,t){if(!t&&!wd)return!1;var n=!1;try{var r={};r[Ad]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch(e){}return n},zd=Ud;Ci({target:"Array",stat:!0,forced:!Bd((function(e){Array.from(e)}))},{from:zd});var jd=Tr.includes,Md=Wu;Ci({target:"Array",proto:!0,forced:J((function(){return!Array(1).includes()}))},{includes:function(e){return jd(this,e,arguments.length>1?arguments[1]:void 0)}}),Md("includes");var Qd,Pd,Ed,Dd=!J((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Od=S,_d=lt,qd=de,$d=ct,es=Dd,ts=Tn("IE_PROTO"),ns=Od.Object,rs=ns.prototype,is=es?ns.getPrototypeOf:function(e){var t=$d(e);if(_d(t,ts))return t[ts];var n=t.constructor;return qd(n)&&t instanceof n?n.prototype:t instanceof ns?rs:null},cs=J,os=de,as=is,ls=Vr,us=Wt("iterator"),ds=!1;[].keys&&("next"in(Ed=[].keys())?(Pd=as(as(Ed)))!==Object.prototype&&(Qd=Pd):ds=!0);var ss=null==Qd||cs((function(){var e={};return Qd[us].call(e)!==e}));ss&&(Qd={}),os(Qd[us])||ls(Qd,us,(function(){return this}));var ms={IteratorPrototype:Qd,BUGGY_SAFARI_ITERATORS:ds},Zs=ms.IteratorPrototype,hs=lc,bs=B,ps=Fc,Is=ud,gs=function(){return this},ys=function(e,t,n,r){var i=t+" Iterator";return e.prototype=hs(Zs,{next:bs(+!r,n)}),ps(e,i,!1),Is[i]=gs,e},Xs=S,fs=de,Gs=Xs.String,Vs=Xs.TypeError,Ws=function(e){if("object"==o(e)||fs(e))return e;throw Vs("Can't set "+Gs(e)+" as a prototype")},Cs=E,vs=cn,Rs=Ws,Ss=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Cs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return vs(n),Rs(r),t?e(n,r):n.__proto__=r,n}}():void 0),Ys=Ci,Js=x,Ks=de,Ns=ys,Ls=is,Hs=Ss,xs=Fc,ks=yn,Us=Vr,As=ud,ws=vn.PROPER,Fs=vn.CONFIGURABLE,Ts=ms.IteratorPrototype,Bs=ms.BUGGY_SAFARI_ITERATORS,zs=Wt("iterator"),js="keys",Ms="values",Qs="entries",Ps=function(){return this},Es=function(e,t,n,r,i,c,o){Ns(n,t,r);var a,l,u,d=function(e){if(e===i&&b)return b;if(!Bs&&e in Z)return Z[e];switch(e){case js:case Ms:case Qs:return function(){return new n(this,e)}}return function(){return new n(this)}},s=t+" Iterator",m=!1,Z=e.prototype,h=Z[zs]||Z["@@iterator"]||i&&Z[i],b=!Bs&&h||d(i),p="Array"==t&&Z.entries||h;if(p&&(a=Ls(p.call(new e)))!==Object.prototype&&a.next&&(Ls(a)!==Ts&&(Hs?Hs(a,Ts):Ks(a[zs])||Us(a,zs,Ps)),xs(a,s,!0)),ws&&i==Ms&&h&&h.name!==Ms&&(Fs?ks(Z,"name",Ms):(m=!0,b=function(){return Js(h,this)})),i)if(l={values:d(Ms),keys:c?b:d(js),entries:d(Qs)},o)for(u in l)(Bs||m||!(u in Z))&&Us(Z,u,l[u]);else Ys({target:t,proto:!0,forced:Bs||m},l);return Z[zs]!==b&&Us(Z,zs,b,{name:i}),As[t]=b,l},Ds=ue,Os=Wu,_s=ud,qs=or,$s=qt.f,em=Es,tm=K,nm="Array Iterator",rm=qs.set,im=qs.getterFor(nm),cm=em(Array,"Array",(function(e,t){rm(this,{type:nm,target:Ds(e),index:0,kind:t})}),(function(){var e=im(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),om=_s.Arguments=_s.Array;if(Os("keys"),Os("values"),Os("entries"),tm&&"values"!==om.name)try{$s(om,"name",{value:"values"})}catch(e){}var am=J,lm=function(e,t){var n=[][e];return!!n&&am((function(){n.call(null,t||function(){return 1},1)}))},um=Ci,dm=ie,sm=ue,mm=lm,Zm=E([].join),hm=dm!=Object,bm=mm("join",",");um({target:"Array",proto:!0,forced:hm||!bm},{join:function(e){return Zm(sm(this),void 0===e?",":e)}});var pm=Vo.map;Ci({target:"Array",proto:!0,forced:!Ol("map")},{map:function(e){return pm(this,e,arguments.length>1?arguments[1]:void 0)}});var Im=Ci,gm=J,ym=oo,Xm=Zc,fm=S.Array;Im({target:"Array",stat:!0,forced:gm((function(){function e(){}return!(fm.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new(ym(this)?this:fm)(t);t>e;)Xm(n,e,arguments[e++]);return n.length=t,n}});var Gm=Ci,Vm=S,Wm=Qc,Cm=oo,vm=me,Rm=Kr,Sm=kr,Ym=ue,Jm=Zc,Km=Wt,Nm=Oa,Lm=Ol("slice"),Hm=Km("species"),xm=Vm.Array,km=Math.max;Gm({target:"Array",proto:!0,forced:!Lm},{slice:function(e,t){var n,r,i,c=Ym(this),o=Sm(c),a=Rm(e,o),l=Rm(void 0===t?o:t,o);if(Wm(c)&&(n=c.constructor,(Cm(n)&&(n===xm||Wm(n.prototype))||vm(n)&&null===(n=n[Hm]))&&(n=void 0),n===xm||void 0===n))return Nm(c,a,l);for(r=new(void 0===n?xm:n)(km(l-a,0)),i=0;a<l;a++,i++)a in c&&Jm(r,i,c[a]);return r.length=i,r}});var Um=yc,Am=Math.floor,wm=function(e,t){for(var n,r,i=e.length,c=1;c<i;){for(r=c,n=e[c];r&&t(e[r-1],n)>0;)e[r]=e[--r];r!==c++&&(e[r]=n)}return e},Fm=function(e,t,n,r){for(var i=t.length,c=n.length,o=0,a=0;o<i||a<c;)e[o+a]=o<i&&a<c?r(t[o],n[a])<=0?t[o++]:n[a++]:o<i?t[o++]:n[a++];return e},Tm=function e(t,n){var r=t.length,i=Am(r/2);return r<8?wm(t,n):Fm(t,e(Um(t,0,i),n),e(Um(t,i),n),n)},Bm=ge.match(/firefox\/(\d+)/i),zm=!!Bm&&+Bm[1],jm=/MSIE|Trident/.test(ge),Mm=ge.match(/AppleWebKit\/(\d+)\./),Qm=!!Mm&&+Mm[1],Pm=Ci,Em=E,Dm=Te,Om=ct,_m=kr,qm=Ai,$m=J,eZ=Tm,tZ=lm,nZ=zm,rZ=jm,iZ=Ce,cZ=Qm,oZ=[],aZ=Em(oZ.sort),lZ=Em(oZ.push),uZ=$m((function(){oZ.sort(void 0)})),dZ=$m((function(){oZ.sort(null)})),sZ=tZ("sort"),mZ=!$m((function(){if(iZ)return iZ<70;if(!(nZ&&nZ>3)){if(rZ)return!0;if(cZ)return cZ<603;var e,t,n,r,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)oZ.push({k:t+r,v:n})}for(oZ.sort((function(e,t){return t.v-e.v})),r=0;r<oZ.length;r++)t=oZ[r].k.charAt(0),i.charAt(i.length-1)!==t&&(i+=t);return"DGBEFHACIJK"!==i}}));Pm({target:"Array",proto:!0,forced:uZ||!dZ||!sZ||!mZ},{sort:function(e){void 0!==e&&Dm(e);var t=Om(this);if(mZ)return void 0===e?aZ(t):aZ(t,e);var n,r,i=[],c=_m(t);for(r=0;r<c;r++)r in t&&lZ(i,t[r]);for(eZ(i,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:qm(t)>qm(n)?1:-1}}(e)),n=i.length,r=0;r<n;)t[r]=i[r++];for(;r<c;)delete t[r++];return t}});var ZZ=pe,hZ=qt,bZ=K,pZ=Wt("species"),IZ=function(e){var t=ZZ(e),n=hZ.f;bZ&&t&&!t[pZ]&&n(t,pZ,{configurable:!0,get:function(){return this}})};IZ("Array");var gZ=Ci,yZ=S,XZ=Kr,fZ=Rr,GZ=kr,VZ=ct,WZ=bo,CZ=Zc,vZ=Ol("splice"),RZ=yZ.TypeError,SZ=Math.max,YZ=Math.min,JZ=9007199254740991,KZ="Maximum allowed length exceeded";gZ({target:"Array",proto:!0,forced:!vZ},{splice:function(e,t){var n,r,i,c,o,a,l=VZ(this),u=GZ(l),d=XZ(e,u),s=arguments.length;if(0===s?n=r=0:1===s?(n=0,r=u-d):(n=s-2,r=YZ(SZ(fZ(t),0),u-d)),u+n-r>JZ)throw RZ(KZ);for(i=WZ(l,r),c=0;c<r;c++)(o=d+c)in l&&CZ(i,c,l[o]);if(i.length=r,n<r){for(c=d;c<u-r;c++)a=c+n,(o=c+r)in l?l[a]=l[o]:delete l[a];for(c=u;c>u-r+n;c--)delete l[c-1]}else if(n>r)for(c=u-r;c>d;c--)a=c+n-1,(o=c+r-1)in l?l[a]=l[o]:delete l[a];for(c=0;c<n;c++)l[c+d]=arguments[c+2];return l.length=u-r+n,i}}),Wu("flat"),Wu("flatMap");var NZ="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,LZ=Vr,HZ=function(e,t,n){for(var r in t)LZ(e,r,t[r],n);return e},xZ=Ie,kZ=S.TypeError,UZ=function(e,t){if(xZ(t,e))return e;throw kZ("Incorrect invocation")},AZ=Rr,wZ=Hr,FZ=S.RangeError,TZ=function(e){if(void 0===e)return 0;var t=AZ(e),n=wZ(t);if(t!==n)throw FZ("Wrong length or index");return n},BZ=S.Array,zZ=Math.abs,jZ=Math.pow,MZ=Math.floor,QZ=Math.log,PZ=Math.LN2,EZ={pack:function(e,t,n){var r,i,c,o=BZ(n),a=8*n-t-1,l=(1<<a)-1,u=l>>1,d=23===t?jZ(2,-24)-jZ(2,-77):0,s=e<0||0===e&&1/e<0?1:0,m=0;for((e=zZ(e))!=e||e===1/0?(i=e!=e?1:0,r=l):(r=MZ(QZ(e)/PZ),e*(c=jZ(2,-r))<1&&(r--,c*=2),(e+=r+u>=1?d/c:d*jZ(2,1-u))*c>=2&&(r++,c/=2),r+u>=l?(i=0,r=l):r+u>=1?(i=(e*c-1)*jZ(2,t),r+=u):(i=e*jZ(2,u-1)*jZ(2,t),r=0));t>=8;)o[m++]=255&i,i/=256,t-=8;for(r=r<<t|i,a+=t;a>0;)o[m++]=255&r,r/=256,a-=8;return o[--m]|=128*s,o},unpack:function(e,t){var n,r=e.length,i=8*r-t-1,c=(1<<i)-1,o=c>>1,a=i-7,l=r-1,u=e[l--],d=127&u;for(u>>=7;a>0;)d=256*d+e[l--],a-=8;for(n=d&(1<<-a)-1,d>>=-a,a+=t;a>0;)n=256*n+e[l--],a-=8;if(0===d)d=1-o;else{if(d===c)return n?NaN:u?-1/0:1/0;n+=jZ(2,t),d-=o}return(u?-1:1)*n*jZ(2,d-t)}},DZ=S,OZ=E,_Z=K,qZ=NZ,$Z=vn,eh=yn,th=HZ,nh=J,rh=UZ,ih=Rr,ch=Hr,oh=TZ,ah=EZ,lh=is,uh=Ss,dh=Wr.f,sh=qt.f,mh=Yu,Zh=yc,hh=Fc,bh=$Z.PROPER,ph=$Z.CONFIGURABLE,Ih=or.get,gh=or.set,yh="ArrayBuffer",Xh="DataView",fh="Wrong index",Gh=DZ.ArrayBuffer,Vh=Gh,Wh=Vh&&Vh.prototype,Ch=DZ.DataView,vh=Ch&&Ch.prototype,Rh=Object.prototype,Sh=DZ.Array,Yh=DZ.RangeError,Jh=OZ(mh),Kh=OZ([].reverse),Nh=ah.pack,Lh=ah.unpack,Hh=function(e){return[255&e]},xh=function(e){return[255&e,e>>8&255]},kh=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},Uh=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},Ah=function(e){return Nh(e,23,4)},wh=function(e){return Nh(e,52,8)},Fh=function(e,t){sh(e.prototype,t,{get:function(){return Ih(this)[t]}})},Th=function(e,t,n,r){var i=oh(n),c=Ih(e);if(i+t>c.byteLength)throw Yh(fh);var o=Ih(c.buffer).bytes,a=i+c.byteOffset,l=Zh(o,a,a+t);return r?l:Kh(l)},Bh=function(e,t,n,r,i,c){var o=oh(n),a=Ih(e);if(o+t>a.byteLength)throw Yh(fh);for(var l=Ih(a.buffer).bytes,u=o+a.byteOffset,d=r(+i),s=0;s<t;s++)l[u+s]=d[c?s:t-s-1]};if(qZ){var zh=bh&&Gh.name!==yh;if(nh((function(){Gh(1)}))&&nh((function(){new Gh(-1)}))&&!nh((function(){return new Gh,new Gh(1.5),new Gh(NaN),zh&&!ph})))zh&&ph&&eh(Gh,"name",yh);else{(Vh=function(e){return rh(this,Wh),new Gh(oh(e))}).prototype=Wh;for(var jh,Mh=dh(Gh),Qh=0;Mh.length>Qh;)(jh=Mh[Qh++])in Vh||eh(Vh,jh,Gh[jh]);Wh.constructor=Vh}uh&&lh(vh)!==Rh&&uh(vh,Rh);var Ph=new Ch(new Vh(2)),Eh=OZ(vh.setInt8);Ph.setInt8(0,2147483648),Ph.setInt8(1,2147483649),!Ph.getInt8(0)&&Ph.getInt8(1)||th(vh,{setInt8:function(e,t){Eh(this,e,t<<24>>24)},setUint8:function(e,t){Eh(this,e,t<<24>>24)}},{unsafe:!0})}else Vh=function(e){rh(this,Wh);var t=oh(e);gh(this,{bytes:Jh(Sh(t),0),byteLength:t}),_Z||(this.byteLength=t)},Wh=Vh.prototype,Ch=function(e,t,n){rh(this,vh),rh(e,Wh);var r=Ih(e).byteLength,i=ih(t);if(i<0||i>r)throw Yh("Wrong offset");if(i+(n=void 0===n?r-i:ch(n))>r)throw Yh("Wrong length");gh(this,{buffer:e,byteLength:n,byteOffset:i}),_Z||(this.buffer=e,this.byteLength=n,this.byteOffset=i)},vh=Ch.prototype,_Z&&(Fh(Vh,"byteLength"),Fh(Ch,"buffer"),Fh(Ch,"byteLength"),Fh(Ch,"byteOffset")),th(vh,{getInt8:function(e){return Th(this,1,e)[0]<<24>>24},getUint8:function(e){return Th(this,1,e)[0]},getInt16:function(e){var t=Th(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Th(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return Uh(Th(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return Uh(Th(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return Lh(Th(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return Lh(Th(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){Bh(this,1,e,Hh,t)},setUint8:function(e,t){Bh(this,1,e,Hh,t)},setInt16:function(e,t){Bh(this,2,e,xh,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){Bh(this,2,e,xh,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){Bh(this,4,e,kh,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){Bh(this,4,e,kh,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){Bh(this,4,e,Ah,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){Bh(this,8,e,wh,t,arguments.length>2?arguments[2]:void 0)}});hh(Vh,yh),hh(Ch,Xh);var Dh={ArrayBuffer:Vh,DataView:Ch},Oh=IZ,_h="ArrayBuffer",qh=Dh.ArrayBuffer;Ci({global:!0,forced:S.ArrayBuffer!==qh},{ArrayBuffer:qh}),Oh(_h);var $h=cn,eb=Ee,tb=S.TypeError,nb=lt,rb=Vr,ib=function(e){if($h(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw tb("Incorrect hint");return eb(this,e)},cb=Wt("toPrimitive"),ob=Date.prototype;nb(ob,cb)||rb(ob,cb,ib);var ab=de,lb=me,ub=qt,db=is,sb=Wt,mb=Xn.exports,Zb=sb("hasInstance"),hb=Function.prototype;Zb in hb||ub.f(hb,Zb,{value:mb((function(e){if(!ab(this)||!lb(e))return!1;var t=this.prototype;if(!lb(t))return e instanceof this;for(;e=db(e);)if(t===e)return!0;return!1}),Zb)});var bb=K,pb=vn.EXISTS,Ib=E,gb=qt.f,yb=Function.prototype,Xb=Ib(yb.toString),fb=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,Gb=Ib(fb.exec);bb&&!pb&&gb(yb,"name",{configurable:!0,get:function(){try{return Gb(fb,Xb(this))[1]}catch(e){return""}}}),Ci({global:!0},{globalThis:S}),Fc(S.JSON,"JSON",!0);var Vb={exports:{}},Wb=J((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}})),Cb=J,vb=me,Rb=q,Sb=Wb,Yb=Object.isExtensible,Jb=Cb((function(){Yb(1)}))||Sb?function(e){return!!vb(e)&&((!Sb||"ArrayBuffer"!=Rb(e))&&(!Yb||Yb(e)))}:Yb,Kb=!J((function(){return Object.isExtensible(Object.preventExtensions({}))})),Nb=Ci,Lb=E,Hb=Bn,xb=me,kb=lt,Ub=qt.f,Ab=Wr,wb=uc,Fb=Jb,Tb=Kb,Bb=!1,zb=Zt("meta"),jb=0,Mb=function(e){Ub(e,zb,{value:{objectID:"O"+jb++,weakData:{}}})},Qb=Vb.exports={enable:function(){Qb.enable=function(){},Bb=!0;var e=Ab.f,t=Lb([].splice),n={};n[zb]=1,e(n).length&&(Ab.f=function(n){for(var r=e(n),i=0,c=r.length;i<c;i++)if(r[i]===zb){t(r,i,1);break}return r},Nb({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:wb.f}))},fastKey:function(e,t){if(!xb(e))return"symbol"==o(e)?e:("string"==typeof e?"S":"P")+e;if(!kb(e,zb)){if(!Fb(e))return"F";if(!t)return"E";Mb(e)}return e[zb].objectID},getWeakData:function(e,t){if(!kb(e,zb)){if(!Fb(e))return!0;if(!t)return!1;Mb(e)}return e[zb].weakData},onFreeze:function(e){return Tb&&Bb&&Fb(e)&&!kb(e,zb)&&Mb(e),e}};Hb[zb]=!0;var Pb=jc,Eb=x,Db=cn,Ob=Ue,_b=Zd,qb=kr,$b=Ie,ep=Cd,tp=gd,np=od,rp=S.TypeError,ip=function(e,t){this.stopped=e,this.result=t},cp=ip.prototype,op=function(e,t,n){var r,i,c,a,l,u,d,s=n&&n.that,m=!(!n||!n.AS_ENTRIES),Z=!(!n||!n.IS_ITERATOR),h=!(!n||!n.INTERRUPTED),b=Pb(t,s),p=function(e){return r&&np(r,"normal",e),new ip(!0,e)},I=function(e){return m?(Db(e),h?b(e[0],e[1],p):b(e[0],e[1])):h?b(e,p):b(e)};if(Z)r=e;else{if(!(i=tp(e)))throw rp(Ob(e)+" is not iterable");if(_b(i)){for(c=0,a=qb(e);a>c;c++)if((l=I(e[c]))&&$b(cp,l))return l;return new ip(!1)}r=ep(e,i)}for(u=r.next;!(d=Eb(u,r)).done;){try{l=I(d.value)}catch(e){np(r,"throw",e)}if("object"==o(l)&&l&&$b(cp,l))return l}return new ip(!1)},ap=de,lp=me,up=Ss,dp=function(e,t,n){var r,i;return up&&ap(r=t.constructor)&&r!==n&&lp(i=r.prototype)&&i!==n.prototype&&up(e,i),e},sp=Ci,mp=S,Zp=E,hp=Ii,bp=Vr,pp=Vb.exports,Ip=op,gp=UZ,yp=de,Xp=me,fp=J,Gp=Bd,Vp=Fc,Wp=dp,Cp=function(e,t,n){var r=-1!==e.indexOf("Map"),i=-1!==e.indexOf("Weak"),c=r?"set":"add",o=mp[e],a=o&&o.prototype,l=o,u={},d=function(e){var t=Zp(a[e]);bp(a,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(i&&!Xp(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return i&&!Xp(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(i&&!Xp(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(hp(e,!yp(o)||!(i||a.forEach&&!fp((function(){(new o).entries().next()})))))l=n.getConstructor(t,e,r,c),pp.enable();else if(hp(e,!0)){var s=new l,m=s[c](i?{}:-0,1)!=s,Z=fp((function(){s.has(1)})),h=Gp((function(e){new o(e)})),b=!i&&fp((function(){for(var e=new o,t=5;t--;)e[c](t,t);return!e.has(-0)}));h||((l=t((function(e,t){gp(e,a);var n=Wp(new o,e,l);return null!=t&&Ip(t,n[c],{that:n,AS_ENTRIES:r}),n}))).prototype=a,a.constructor=l),(Z||b)&&(d("delete"),d("has"),r&&d("get")),(b||m)&&d(c),i&&a.clear&&delete a.clear}return u[e]=l,sp({global:!0,forced:l!=o},u),Vp(l,e),i||n.setStrong(l,e,r),l},vp=qt.f,Rp=lc,Sp=HZ,Yp=jc,Jp=UZ,Kp=op,Np=Es,Lp=IZ,Hp=K,xp=Vb.exports.fastKey,kp=or.set,Up=or.getterFor,Ap={getConstructor:function(e,t,n,r){var i=e((function(e,i){Jp(e,c),kp(e,{type:t,index:Rp(null),first:void 0,last:void 0,size:0}),Hp||(e.size=0),null!=i&&Kp(i,e[r],{that:e,AS_ENTRIES:n})})),c=i.prototype,o=Up(t),a=function(e,t,n){var r,i,c=o(e),a=l(e,t);return a?a.value=n:(c.last=a={index:i=xp(t,!0),key:t,value:n,previous:r=c.last,next:void 0,removed:!1},c.first||(c.first=a),r&&(r.next=a),Hp?c.size++:e.size++,"F"!==i&&(c.index[i]=a)),e},l=function(e,t){var n,r=o(e),i=xp(t);if("F"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==t)return n};return Sp(c,{clear:function(){for(var e=o(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,Hp?e.size=0:this.size=0},delete:function(e){var t=this,n=o(t),r=l(t,e);if(r){var i=r.next,c=r.previous;delete n.index[r.index],r.removed=!0,c&&(c.next=i),i&&(i.previous=c),n.first==r&&(n.first=i),n.last==r&&(n.last=c),Hp?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=o(this),r=Yp(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!l(this,e)}}),Sp(c,n?{get:function(e){var t=l(this,e);return t&&t.value},set:function(e,t){return a(this,0===e?0:e,t)}}:{add:function(e){return a(this,e=0===e?0:e,e)}}),Hp&&vp(c,"size",{get:function(){return o(this).size}}),i},setStrong:function(e,t,n){var r=t+" Iterator",i=Up(t),c=Up(r);Np(e,t,(function(e,t){kp(this,{type:r,target:e,state:i(e),kind:t,last:void 0})}),(function(){for(var e=c(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),Lp(t)}};Cp("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),Ap);var wp=Math.log,Fp=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:wp(1+e)},Tp=Ci,Bp=Fp,zp=Math.acosh,jp=Math.log,Mp=Math.sqrt,Qp=Math.LN2;Tp({target:"Math",stat:!0,forced:!zp||710!=Math.floor(zp(Number.MAX_VALUE))||zp(1/0)!=1/0},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?jp(e)+Qp:Bp(e-1+Mp(e-1)*Mp(e+1))}});var Pp=Ci,Ep=Math.asinh,Dp=Math.log,Op=Math.sqrt;Pp({target:"Math",stat:!0,forced:!(Ep&&1/Ep(0)>0)},{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Dp(t+Op(t*t+1)):t}});var _p=Ci,qp=Math.atanh,$p=Math.log;_p({target:"Math",stat:!0,forced:!(qp&&1/qp(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:$p((1+e)/(1-e))/2}});var eI=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},tI=Ci,nI=eI,rI=Math.abs,iI=Math.pow;tI({target:"Math",stat:!0},{cbrt:function(e){return nI(e=+e)*iI(rI(e),1/3)}});var cI=Ci,oI=Math.floor,aI=Math.log,lI=Math.LOG2E;cI({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-oI(aI(e+.5)*lI):32}});var uI=Math.expm1,dI=Math.exp,sI=!uI||uI(10)>22025.465794806718||uI(10)<22025.465794806718||-2e-17!=uI(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:dI(e)-1}:uI,mI=Ci,ZI=sI,hI=Math.cosh,bI=Math.abs,pI=Math.E;mI({target:"Math",stat:!0,forced:!hI||hI(710)===1/0},{cosh:function(e){var t=ZI(bI(e)-1)+1;return(t+1/(t*pI*pI))*(pI/2)}});var II=sI;Ci({target:"Math",stat:!0,forced:II!=Math.expm1},{expm1:II});var gI=eI,yI=Math.abs,XI=Math.pow,fI=XI(2,-52),GI=XI(2,-23),VI=XI(2,127)*(2-GI),WI=XI(2,-126),CI=Math.fround||function(e){var t,n,r=yI(e),i=gI(e);return r<WI?i*function(e){return e+1/fI-1/fI}(r/WI/GI)*WI*GI:(n=(t=(1+GI/fI)*r)-(t-r))>VI||n!=n?i*(1/0):i*n};Ci({target:"Math",stat:!0},{fround:CI});var vI=Ci,RI=Math.hypot,SI=Math.abs,YI=Math.sqrt;vI({target:"Math",stat:!0,arity:2,forced:!!RI&&RI(1/0,NaN)!==1/0},{hypot:function(e,t){for(var n,r,i=0,c=0,o=arguments.length,a=0;c<o;)a<(n=SI(arguments[c++]))?(i=i*(r=a/n)*r+1,a=n):i+=n>0?(r=n/a)*r:n;return a===1/0?1/0:a*YI(i)}});var JI=Ci,KI=J,NI=Math.imul;JI({target:"Math",stat:!0,forced:KI((function(){return-5!=NI(4294967295,5)||2!=NI.length}))},{imul:function(e,t){var n=65535,r=+e,i=+t,c=n&r,o=n&i;return 0|c*o+((n&r>>>16)*o+c*(n&i>>>16)<<16>>>0)}});var LI=Math.log,HI=Math.LOG10E;Ci({target:"Math",stat:!0},{log10:Math.log10||function(e){return LI(e)*HI}}),Ci({target:"Math",stat:!0},{log1p:Fp});var xI=Ci,kI=Math.log,UI=Math.LN2;xI({target:"Math",stat:!0},{log2:function(e){return kI(e)/UI}}),Ci({target:"Math",stat:!0},{sign:eI});var AI=Ci,wI=J,FI=sI,TI=Math.abs,BI=Math.exp,zI=Math.E;AI({target:"Math",stat:!0,forced:wI((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return TI(e=+e)<1?(FI(e)-FI(-e))/2:(BI(e-1)-BI(-e-1))*(zI/2)}});var jI=Ci,MI=sI,QI=Math.exp;jI({target:"Math",stat:!0},{tanh:function(e){var t=MI(e=+e),n=MI(-e);return t==1/0?1:n==1/0?-1:(t-n)/(QI(e)+QI(-e))}}),Fc(Math,"Math",!0);var PI=Ci,EI=Math.ceil,DI=Math.floor;PI({target:"Math",stat:!0},{trunc:function(e){return(e>0?DI:EI)(e)}});var OI=E(1..valueOf),_I="\t\n\v\f\r                 \u2028\u2029\ufeff",qI=oe,$I=Ai,eg=E("".replace),tg="[\t\n\v\f\r                 \u2028\u2029\ufeff]",ng=RegExp("^"+tg+tg+"*"),rg=RegExp(tg+tg+"*$"),ig=function(e){return function(t){var n=$I(qI(t));return 1&e&&(n=eg(n,ng,"")),2&e&&(n=eg(n,rg,"")),n}},cg={start:ig(1),end:ig(2),trim:ig(3)},og=K,ag=S,lg=E,ug=Ii,dg=Vr,sg=lt,mg=dp,Zg=Ie,hg=xe,bg=Lt,pg=J,Ig=Wr.f,gg=Y.f,yg=qt.f,Xg=OI,fg=cg.trim,Gg="Number",Vg=ag.Number,Wg=Vg.prototype,Cg=ag.TypeError,vg=lg("".slice),Rg=lg("".charCodeAt),Sg=function(e){var t=bg(e,"number");return"bigint"==typeof t?t:Yg(t)},Yg=function(e){var t,n,r,i,c,o,a,l,u=bg(e,"number");if(hg(u))throw Cg("Cannot convert a Symbol value to a number");if("string"==typeof u&&u.length>2)if(u=fg(u),43===(t=Rg(u,0))||45===t){if(88===(n=Rg(u,2))||120===n)return NaN}else if(48===t){switch(Rg(u,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+u}for(o=(c=vg(u,2)).length,a=0;a<o;a++)if((l=Rg(c,a))<48||l>i)return NaN;return parseInt(c,r)}return+u};if(ug(Gg,!Vg(" 0o1")||!Vg("0b1")||Vg("+0x1"))){for(var Jg,Kg=function(e){var t=arguments.length<1?0:Vg(Sg(e)),n=this;return Zg(Wg,n)&&pg((function(){Xg(n)}))?mg(Object(t),n,Kg):t},Ng=og?Ig(Vg):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),Lg=0;Ng.length>Lg;Lg++)sg(Vg,Jg=Ng[Lg])&&!sg(Kg,Jg)&&yg(Kg,Jg,gg(Vg,Jg));Kg.prototype=Wg,Wg.constructor=Kg,dg(ag,Gg,Kg)}Ci({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var Hg=S.isFinite;Ci({target:"Number",stat:!0},{isFinite:Number.isFinite||function(e){return"number"==typeof e&&Hg(e)}});var xg=me,kg=Math.floor,Ug=Number.isInteger||function(e){return!xg(e)&&isFinite(e)&&kg(e)===e};Ci({target:"Number",stat:!0},{isInteger:Ug}),Ci({target:"Number",stat:!0},{isNaN:function(e){return e!=e}});var Ag=Ci,wg=Ug,Fg=Math.abs;Ag({target:"Number",stat:!0},{isSafeInteger:function(e){return wg(e)&&Fg(e)<=9007199254740991}}),Ci({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),Ci({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var Tg=S,Bg=J,zg=Ai,jg=cg.trim,Mg=E("".charAt),Qg=Tg.parseFloat,Pg=Tg.Symbol,Eg=Pg&&Pg.iterator,Dg=1/Qg("\t\n\v\f\r                 \u2028\u2029\ufeff-0")!=-1/0||Eg&&!Bg((function(){Qg(Object(Eg))}))?function(e){var t=jg(zg(e)),n=Qg(t);return 0===n&&"-"==Mg(t,0)?-0:n}:Qg;Ci({target:"Number",stat:!0,forced:Number.parseFloat!=Dg},{parseFloat:Dg});var Og=S,_g=J,qg=E,$g=Ai,ey=cg.trim,ty=_I,ny=Og.parseInt,ry=Og.Symbol,iy=ry&&ry.iterator,cy=/^[+-]?0x/i,oy=qg(cy.exec),ay=8!==ny(ty+"08")||22!==ny(ty+"0x16")||iy&&!_g((function(){ny(Object(iy))}))?function(e,t){var n=ey($g(e));return ny(n,t>>>0||(oy(cy,n)?16:10))}:ny,ly=ay;Ci({target:"Number",stat:!0,forced:Number.parseInt!=ly},{parseInt:ly});var uy=Rr,dy=Ai,sy=oe,my=S.RangeError,Zy=function(e){var t=dy(sy(this)),n="",r=uy(e);if(r<0||r==1/0)throw my("Wrong number of repetitions");for(;r>0;(r>>>=1)&&(t+=t))1&r&&(n+=t);return n},hy=Ci,by=S,py=E,Iy=Rr,gy=OI,yy=Zy,Xy=J,fy=by.RangeError,Gy=by.String,Vy=Math.floor,Wy=py(yy),Cy=py("".slice),vy=py(1..toFixed),Ry=function e(t,n,r){return 0===n?r:n%2==1?e(t,n-1,r*t):e(t*t,n/2,r)},Sy=function(e,t,n){for(var r=-1,i=n;++r<6;)i+=t*e[r],e[r]=i%1e7,i=Vy(i/1e7)},Yy=function(e,t){for(var n=6,r=0;--n>=0;)r+=e[n],e[n]=Vy(r/t),r=r%t*1e7},Jy=function(e){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==e[t]){var r=Gy(e[t]);n=""===n?r:n+Wy("0",7-r.length)+r}return n};hy({target:"Number",proto:!0,forced:Xy((function(){return"0.000"!==vy(8e-5,3)||"1"!==vy(.9,0)||"1.25"!==vy(1.255,2)||"1000000000000000128"!==vy(0xde0b6b3a7640080,0)}))||!Xy((function(){vy({})}))},{toFixed:function(e){var t,n,r,i,c=gy(this),o=Iy(e),a=[0,0,0,0,0,0],l="",u="0";if(o<0||o>20)throw fy("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return Gy(c);if(c<0&&(l="-",c=-c),c>1e-21)if(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(c*Ry(2,69,1))-69,n=t<0?c*Ry(2,-t,1):c/Ry(2,t,1),n*=4503599627370496,(t=52-t)>0){for(Sy(a,0,n),r=o;r>=7;)Sy(a,1e7,0),r-=7;for(Sy(a,Ry(10,r,1),0),r=t-1;r>=23;)Yy(a,1<<23),r-=23;Yy(a,1<<r),Sy(a,1,1),Yy(a,2),u=Jy(a)}else Sy(a,0,n),Sy(a,1<<-t,0),u=Jy(a)+Wy("0",o);return u=o>0?l+((i=u.length)<=o?"0."+Wy("0",o-i)+u:Cy(u,0,i-o)+"."+Cy(u,i-o)):l+u}});var Ky=K,Ny=E,Ly=x,Hy=J,xy=Bi,ky=_r,Uy=k,Ay=ct,wy=ie,Fy=Object.assign,Ty=Object.defineProperty,By=Ny([].concat),zy=!Fy||Hy((function(){if(Ky&&1!==Fy({b:1},Fy(Ty({},"a",{enumerable:!0,get:function(){Ty(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=Fy({},e)[n]||xy(Fy({},t)).join("")!=r}))?function(e,t){for(var n=Ay(e),r=arguments.length,i=1,c=ky.f,o=Uy.f;r>i;)for(var a,l=wy(arguments[i++]),u=c?By(xy(l),c(l)):xy(l),d=u.length,s=0;d>s;)a=u[s++],Ky&&!Ly(o,l,a)||(n[a]=l[a]);return n}:Fy,jy=zy;Ci({target:"Object",stat:!0,arity:2,forced:Object.assign!==jy},{assign:jy});var My=S,Qy=Qm,Py=!J((function(){if(!(Qy&&Qy<535)){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete My[e]}})),Ey=Te,Dy=ct,Oy=qt;K&&Ci({target:"Object",proto:!0,forced:Py},{__defineGetter__:function(e,t){Oy.f(Dy(this),e,{get:Ey(t),enumerable:!0,configurable:!0})}});var _y=Te,qy=ct,$y=qt;K&&Ci({target:"Object",proto:!0,forced:Py},{__defineSetter__:function(e,t){$y.f(qy(this),e,{set:_y(t),enumerable:!0,configurable:!0})}});var eX=K,tX=E,nX=Bi,rX=ue,iX=tX(k.f),cX=tX([].push),oX=function(e){return function(t){for(var n,r=rX(t),i=nX(r),c=i.length,o=0,a=[];c>o;)n=i[o++],eX&&!iX(r,n)||cX(a,e?[n,r[n]]:r[n]);return a}},aX={entries:oX(!0),values:oX(!1)},lX=aX.entries;Ci({target:"Object",stat:!0},{entries:function(e){return lX(e)}});var uX=Ci,dX=Kb,sX=J,mX=me,ZX=Vb.exports.onFreeze,hX=Object.freeze;uX({target:"Object",stat:!0,forced:sX((function(){hX(1)})),sham:!dX},{freeze:function(e){return hX&&mX(e)?hX(ZX(e)):e}});var bX=op,pX=Zc;Ci({target:"Object",stat:!0},{fromEntries:function(e){var t={};return bX(e,(function(e,n){pX(t,e,n)}),{AS_ENTRIES:!0}),t}});var IX=Ci,gX=J,yX=ue,XX=Y.f,fX=K,GX=gX((function(){XX(1)}));IX({target:"Object",stat:!0,forced:!fX||GX,sham:!fX},{getOwnPropertyDescriptor:function(e,t){return XX(yX(e),t)}});var VX=ri,WX=ue,CX=Y,vX=Zc;Ci({target:"Object",stat:!0,sham:!K},{getOwnPropertyDescriptors:function(e){for(var t,n,r=WX(e),i=CX.f,c=VX(r),o={},a=0;c.length>a;)void 0!==(n=i(r,t=c[a++]))&&vX(o,t,n);return o}});var RX=Ci,SX=J,YX=uc.f;RX({target:"Object",stat:!0,forced:SX((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:YX});var JX=ct,KX=is,NX=Dd;Ci({target:"Object",stat:!0,forced:J((function(){KX(1)})),sham:!NX},{getPrototypeOf:function(e){return KX(JX(e))}});var LX=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};Ci({target:"Object",stat:!0},{is:LX});var HX=Jb;Ci({target:"Object",stat:!0,forced:Object.isExtensible!==HX},{isExtensible:HX});var xX=Ci,kX=J,UX=me,AX=q,wX=Wb,FX=Object.isFrozen;xX({target:"Object",stat:!0,forced:kX((function(){FX(1)}))||wX},{isFrozen:function(e){return!UX(e)||(!(!wX||"ArrayBuffer"!=AX(e))||!!FX&&FX(e))}});var TX=Ci,BX=J,zX=me,jX=q,MX=Wb,QX=Object.isSealed;TX({target:"Object",stat:!0,forced:BX((function(){QX(1)}))||MX},{isSealed:function(e){return!zX(e)||(!(!MX||"ArrayBuffer"!=jX(e))||!!QX&&QX(e))}});var PX=ct,EX=Bi;Ci({target:"Object",stat:!0,forced:J((function(){EX(1)}))},{keys:function(e){return EX(PX(e))}});var DX=Ci,OX=K,_X=Py,qX=ct,$X=kt,ef=is,tf=Y.f;OX&&DX({target:"Object",proto:!0,forced:_X},{__lookupGetter__:function(e){var t,n=qX(this),r=$X(e);do{if(t=tf(n,r))return t.get}while(n=ef(n))}});var nf=Ci,rf=K,cf=Py,of=ct,af=kt,lf=is,uf=Y.f;rf&&nf({target:"Object",proto:!0,forced:cf},{__lookupSetter__:function(e){var t,n=of(this),r=af(e);do{if(t=uf(n,r))return t.set}while(n=lf(n))}});var df=Ci,sf=me,mf=Vb.exports.onFreeze,Zf=Kb,hf=J,bf=Object.preventExtensions;df({target:"Object",stat:!0,forced:hf((function(){bf(1)})),sham:!Zf},{preventExtensions:function(e){return bf&&sf(e)?bf(mf(e)):e}});var pf=Ci,If=me,gf=Vb.exports.onFreeze,yf=Kb,Xf=J,ff=Object.seal;pf({target:"Object",stat:!0,forced:Xf((function(){ff(1)})),sham:!yf},{seal:function(e){return ff&&If(e)?ff(gf(e)):e}});var Gf=xi,Vf=Ri?{}.toString:function(){return"[object "+Gf(this)+"]"};Ri||Vr(Object.prototype,"toString",Vf,{unsafe:!0});var Wf=aX.values;Ci({target:"Object",stat:!0},{values:function(e){return Wf(e)}});var Cf,vf,Rf,Sf,Yf="process"==q(S.process),Jf=oo,Kf=Ue,Nf=S.TypeError,Lf=function(e){if(Jf(e))return e;throw Nf(Kf(e)+" is not a constructor")},Hf=cn,xf=Lf,kf=Wt("species"),Uf=function(e,t){var n,r=Hf(e).constructor;return void 0===r||null==(n=Hf(r)[kf])?t:xf(n)},Af=S.TypeError,wf=function(e,t){if(e<t)throw Af("Not enough arguments");return e},Ff=/(?:ipad|iphone|ipod).*applewebkit/i.test(ge),Tf=S,Bf=Da,zf=jc,jf=de,Mf=lt,Qf=J,Pf=Oi,Ef=Oa,Df=Ft,Of=wf,_f=Ff,qf=Yf,$f=Tf.setImmediate,eG=Tf.clearImmediate,tG=Tf.process,nG=Tf.Dispatch,rG=Tf.Function,iG=Tf.MessageChannel,cG=Tf.String,oG=0,aG={},lG="onreadystatechange";try{Cf=Tf.location}catch(e){}var uG=function(e){if(Mf(aG,e)){var t=aG[e];delete aG[e],t()}},dG=function(e){return function(){uG(e)}},sG=function(e){uG(e.data)},mG=function(e){Tf.postMessage(cG(e),Cf.protocol+"//"+Cf.host)};$f&&eG||($f=function(e){Of(arguments.length,1);var t=jf(e)?e:rG(e),n=Ef(arguments,1);return aG[++oG]=function(){Bf(t,void 0,n)},vf(oG),oG},eG=function(e){delete aG[e]},qf?vf=function(e){tG.nextTick(dG(e))}:nG&&nG.now?vf=function(e){nG.now(dG(e))}:iG&&!_f?(Sf=(Rf=new iG).port2,Rf.port1.onmessage=sG,vf=zf(Sf.postMessage,Sf)):Tf.addEventListener&&jf(Tf.postMessage)&&!Tf.importScripts&&Cf&&"file:"!==Cf.protocol&&!Qf(mG)?(vf=mG,Tf.addEventListener("message",sG,!1)):vf=lG in Df("script")?function(e){Pf.appendChild(Df("script")).onreadystatechange=function(){Pf.removeChild(this),uG(e)}}:function(e){setTimeout(dG(e),0)});var ZG,hG,bG,pG,IG,gG,yG,XG,fG={set:$f,clear:eG},GG=S,VG=/ipad|iphone|ipod/i.test(ge)&&void 0!==GG.Pebble,WG=/web0s(?!.*chrome)/i.test(ge),CG=S,vG=jc,RG=Y.f,SG=fG.set,YG=Ff,JG=VG,KG=WG,NG=Yf,LG=CG.MutationObserver||CG.WebKitMutationObserver,HG=CG.document,xG=CG.process,kG=CG.Promise,UG=RG(CG,"queueMicrotask"),AG=UG&&UG.value;AG||(ZG=function(){var e,t;for(NG&&(e=xG.domain)&&e.exit();hG;){t=hG.fn,hG=hG.next;try{t()}catch(e){throw hG?pG():bG=void 0,e}}bG=void 0,e&&e.enter()},YG||NG||KG||!LG||!HG?!JG&&kG&&kG.resolve?((yG=kG.resolve(void 0)).constructor=kG,XG=vG(yG.then,yG),pG=function(){XG(ZG)}):NG?pG=function(){xG.nextTick(ZG)}:(SG=vG(SG,CG),pG=function(){SG(ZG)}):(IG=!0,gG=HG.createTextNode(""),new LG(ZG).observe(gG,{characterData:!0}),pG=function(){gG.data=IG=!IG}));var wG=AG||function(e){var t={fn:e,next:void 0};bG&&(bG.next=t),hG||(hG=t,pG()),bG=t},FG=S,TG=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},BG=function(){this.head=null,this.tail=null};BG.prototype={add:function(e){var t={item:e,next:null};this.head?this.tail.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return this.head=e.next,this.tail===e&&(this.tail=null),e.item}};var zG=BG,jG=S.Promise,MG="object"==("undefined"==typeof window?"undefined":o(window))&&"object"!=("undefined"==typeof Deno?"undefined":o(Deno)),QG=S,PG=jG,EG=de,DG=Ii,OG=Ln,_G=Wt,qG=MG,$G=Ce;PG&&PG.prototype;var eV=_G("species"),tV=!1,nV=EG(QG.PromiseRejectionEvent),rV=DG("Promise",(function(){var e=OG(PG),t=e!==String(PG);if(!t&&66===$G)return!0;if($G>=51&&/native code/.test(e))return!1;var n=new PG((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};return(n.constructor={})[eV]=r,!(tV=n.then((function(){}))instanceof r)||!t&&qG&&!nV})),iV={CONSTRUCTOR:rV,REJECTION_EVENT:nV,SUBCLASSING:tV},cV={},oV=Te,aV=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=oV(t),this.reject=oV(n)};cV.f=function(e){return new aV(e)};var lV,uV,dV,sV=Ci,mV=Yf,ZV=S,hV=x,bV=Vr,pV=Ss,IV=Fc,gV=IZ,yV=Te,XV=de,fV=me,GV=UZ,VV=Uf,WV=fG.set,CV=wG,vV=function(e,t){var n=FG.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))},RV=TG,SV=zG,YV=or,JV=jG,KV=cV,NV="Promise",LV=iV.CONSTRUCTOR,HV=iV.REJECTION_EVENT,xV=iV.SUBCLASSING,kV=YV.getterFor(NV),UV=YV.set,AV=JV&&JV.prototype,wV=JV,FV=AV,TV=ZV.TypeError,BV=ZV.document,zV=ZV.process,jV=KV.f,MV=jV,QV=!!(BV&&BV.createEvent&&ZV.dispatchEvent),PV="unhandledrejection",EV=function(e){var t;return!(!fV(e)||!XV(t=e.then))&&t},DV=function(e,t){var n,r,i,c=t.value,o=1==t.state,a=o?e.ok:e.fail,l=e.resolve,u=e.reject,d=e.domain;try{a?(o||(2===t.rejection&&eW(t),t.rejection=1),!0===a?n=c:(d&&d.enter(),n=a(c),d&&(d.exit(),i=!0)),n===e.promise?u(TV("Promise-chain cycle")):(r=EV(n))?hV(r,n,l,u):l(n)):u(c)}catch(e){d&&!i&&d.exit(),u(e)}},OV=function(e,t){e.notified||(e.notified=!0,CV((function(){for(var n,r=e.reactions;n=r.get();)DV(n,e);e.notified=!1,t&&!e.rejection&&qV(e)})))},_V=function(e,t,n){var r,i;QV?((r=BV.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),ZV.dispatchEvent(r)):r={promise:t,reason:n},!HV&&(i=ZV["on"+e])?i(r):e===PV&&vV("Unhandled promise rejection",n)},qV=function(e){hV(WV,ZV,(function(){var t,n=e.facade,r=e.value;if($V(e)&&(t=RV((function(){mV?zV.emit("unhandledRejection",r,n):_V(PV,n,r)})),e.rejection=mV||$V(e)?2:1,t.error))throw t.value}))},$V=function(e){return 1!==e.rejection&&!e.parent},eW=function(e){hV(WV,ZV,(function(){var t=e.facade;mV?zV.emit("rejectionHandled",t):_V("rejectionhandled",t,e.value)}))},tW=function(e,t,n){return function(r){e(t,r,n)}},nW=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,OV(e,!0))},rW=function e(t,n,r){if(!t.done){t.done=!0,r&&(t=r);try{if(t.facade===n)throw TV("Promise can't be resolved itself");var i=EV(n);i?CV((function(){var r={done:!1};try{hV(i,n,tW(e,r,t),tW(nW,r,t))}catch(e){nW(r,e,t)}})):(t.value=n,t.state=1,OV(t,!1))}catch(e){nW({done:!1},e,t)}}};if(LV&&(FV=(wV=function(e){GV(this,FV),yV(e),hV(lV,this);var t=kV(this);try{e(tW(rW,t),tW(nW,t))}catch(e){nW(t,e)}}).prototype,(lV=function(e){UV(this,{type:NV,done:!1,notified:!1,parent:!1,reactions:new SV,rejection:!1,state:0,value:void 0})}).prototype=bV(FV,"then",(function(e,t){var n=kV(this),r=jV(VV(this,wV));return n.parent=!0,r.ok=!XV(e)||e,r.fail=XV(t)&&t,r.domain=mV?zV.domain:void 0,0==n.state?n.reactions.add(r):CV((function(){DV(r,n)})),r.promise})),uV=function(){var e=new lV,t=kV(e);this.promise=e,this.resolve=tW(rW,t),this.reject=tW(nW,t)},KV.f=jV=function(e){return e===wV||undefined===e?new uV(e):MV(e)},XV(JV)&&AV!==Object.prototype)){dV=AV.then,xV||bV(AV,"then",(function(e,t){var n=this;return new wV((function(e,t){hV(dV,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete AV.constructor}catch(e){}pV&&pV(AV,FV)}sV({global:!0,wrap:!0,forced:LV},{Promise:wV}),IV(wV,NV,!1),gV(NV);var iW=jG,cW=iV.CONSTRUCTOR||!Bd((function(e){iW.all(e).then(void 0,(function(){}))})),oW=x,aW=Te,lW=cV,uW=TG,dW=op;Ci({target:"Promise",stat:!0,forced:cW},{all:function(e){var t=this,n=lW.f(t),r=n.resolve,i=n.reject,c=uW((function(){var n=aW(t.resolve),c=[],o=0,a=1;dW(e,(function(e){var l=o++,u=!1;a++,oW(n,t,e).then((function(e){u||(u=!0,c[l]=e,--a||r(c))}),i)})),--a||r(c)}));return c.error&&i(c.value),n.promise}});var sW=Ci,mW=iV.CONSTRUCTOR,ZW=jG,hW=pe,bW=de,pW=Vr,IW=ZW&&ZW.prototype;if(sW({target:"Promise",proto:!0,forced:mW,real:!0},{catch:function(e){return this.then(void 0,e)}}),bW(ZW)){var gW=hW("Promise").prototype.catch;IW.catch!==gW&&pW(IW,"catch",gW,{unsafe:!0})}var yW=x,XW=Te,fW=cV,GW=TG,VW=op;Ci({target:"Promise",stat:!0,forced:cW},{race:function(e){var t=this,n=fW.f(t),r=n.reject,i=GW((function(){var i=XW(t.resolve);VW(e,(function(e){yW(i,t,e).then(n.resolve,r)}))}));return i.error&&r(i.value),n.promise}});var WW=x,CW=cV;Ci({target:"Promise",stat:!0,forced:iV.CONSTRUCTOR},{reject:function(e){var t=CW.f(this);return WW(t.reject,void 0,e),t.promise}});var vW=cn,RW=me,SW=cV,YW=function(e,t){if(vW(e),RW(t)&&t.constructor===e)return t;var n=SW.f(e);return(0,n.resolve)(t),n.promise},JW=Ci,KW=iV.CONSTRUCTOR,NW=YW;pe("Promise"),JW({target:"Promise",stat:!0,forced:KW},{resolve:function(e){return NW(this,e)}});var LW=x,HW=Te,xW=cV,kW=TG,UW=op;Ci({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=xW.f(t),r=n.resolve,i=n.reject,c=kW((function(){var n=HW(t.resolve),i=[],c=0,o=1;UW(e,(function(e){var a=c++,l=!1;o++,LW(n,t,e).then((function(e){l||(l=!0,i[a]={status:"fulfilled",value:e},--o||r(i))}),(function(e){l||(l=!0,i[a]={status:"rejected",reason:e},--o||r(i))}))})),--o||r(i)}));return c.error&&i(c.value),n.promise}});var AW=Ci,wW=jG,FW=J,TW=pe,BW=de,zW=Uf,jW=YW,MW=Vr,QW=wW&&wW.prototype;if(AW({target:"Promise",proto:!0,real:!0,forced:!!wW&&FW((function(){QW.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=zW(this,TW("Promise")),n=BW(e);return this.then(n?function(n){return jW(t,e()).then((function(){return n}))}:e,n?function(n){return jW(t,e()).then((function(){throw n}))}:e)}}),BW(wW)){var PW=TW("Promise").prototype.finally;QW.finally!==PW&&MW(QW,"finally",PW,{unsafe:!0})}var EW=Da,DW=Te,OW=cn;Ci({target:"Reflect",stat:!0,forced:!J((function(){Reflect.apply((function(){}))}))},{apply:function(e,t,n){return EW(DW(e),t,OW(n))}});var _W=E,qW=Te,$W=me,eC=lt,tC=Oa,nC=N,rC=S.Function,iC=_W([].concat),cC=_W([].join),oC={},aC=function(e,t,n){if(!eC(oC,t)){for(var r=[],i=0;i<t;i++)r[i]="a["+i+"]";oC[t]=rC("C,a","return new C("+cC(r,",")+")")}return oC[t](e,n)},lC=nC?rC.bind:function(e){var t=qW(this),n=t.prototype,r=tC(arguments,1),i=function(){var n=iC(r,tC(arguments));return this instanceof i?aC(t,n.length,n):t.apply(e,n)};return $W(n)&&(i.prototype=n),i},uC=Ci,dC=Da,sC=lC,mC=Lf,ZC=cn,hC=me,bC=lc,pC=J,IC=pe("Reflect","construct"),gC=Object.prototype,yC=[].push,XC=pC((function(){function e(){}return!(IC((function(){}),[],e)instanceof e)})),fC=!pC((function(){IC((function(){}))})),GC=XC||fC;uC({target:"Reflect",stat:!0,forced:GC,sham:GC},{construct:function(e,t){mC(e),ZC(t);var n=arguments.length<3?e:mC(arguments[2]);if(fC&&!XC)return IC(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return dC(yC,r,t),new(dC(sC,e,r))}var i=n.prototype,c=bC(hC(i)?i:gC),o=dC(e,c,t);return hC(o)?o:c}});var VC=K,WC=cn,CC=kt,vC=qt;Ci({target:"Reflect",stat:!0,forced:J((function(){Reflect.defineProperty(vC.f({},1,{value:1}),1,{value:2})})),sham:!VC},{defineProperty:function(e,t,n){WC(e);var r=CC(t);WC(n);try{return vC.f(e,r,n),!0}catch(e){return!1}}});var RC=Ci,SC=cn,YC=Y.f;RC({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=YC(SC(e),t);return!(n&&!n.configurable)&&delete e[t]}});var JC=lt,KC=function(e){return void 0!==e&&(JC(e,"value")||JC(e,"writable"))},NC=x,LC=me,HC=cn,xC=KC,kC=Y,UC=is;Ci({target:"Reflect",stat:!0},{get:function e(t,n){var r,i,c=arguments.length<3?t:arguments[2];return HC(t)===c?t[n]:(r=kC.f(t,n))?xC(r)?r.value:void 0===r.get?void 0:NC(r.get,c):LC(i=UC(t))?e(i,n,c):void 0}});var AC=cn,wC=Y;Ci({target:"Reflect",stat:!0,sham:!K},{getOwnPropertyDescriptor:function(e,t){return wC.f(AC(e),t)}});var FC=cn,TC=is;Ci({target:"Reflect",stat:!0,sham:!Dd},{getPrototypeOf:function(e){return TC(FC(e))}}),Ci({target:"Reflect",stat:!0},{has:function(e,t){return t in e}});var BC=cn,zC=Jb;Ci({target:"Reflect",stat:!0},{isExtensible:function(e){return BC(e),zC(e)}}),Ci({target:"Reflect",stat:!0},{ownKeys:ri});var jC=pe,MC=cn;Ci({target:"Reflect",stat:!0,sham:!Kb},{preventExtensions:function(e){MC(e);try{var t=jC("Object","preventExtensions");return t&&t(e),!0}catch(e){return!1}}});var QC=Ci,PC=x,EC=cn,DC=me,OC=KC,_C=qt,qC=Y,$C=is,ev=B;var tv=J((function(){var e=function(){},t=_C.f(new e,"a",{configurable:!0});return!1!==Reflect.set(e.prototype,"a",1,t)}));QC({target:"Reflect",stat:!0,forced:tv},{set:function e(t,n,r){var i,c,o,a=arguments.length<4?t:arguments[3],l=qC.f(EC(t),n);if(!l){if(DC(c=$C(t)))return e(c,n,r,a);l=ev(0)}if(OC(l)){if(!1===l.writable||!DC(a))return!1;if(i=qC.f(a,n)){if(i.get||i.set||!1===i.writable)return!1;i.value=r,_C.f(a,n,i)}else _C.f(a,n,ev(0,r))}else{if(void 0===(o=l.set))return!1;PC(o,a,r)}return!0}});var nv=cn,rv=Ws,iv=Ss;iv&&Ci({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){nv(e),rv(t);try{return iv(e,t),!0}catch(e){return!1}}});var cv=me,ov=q,av=Wt("match"),lv=function(e){var t;return cv(e)&&(void 0!==(t=e[av])?!!t:"RegExp"==ov(e))},uv=cn,dv=function(){var e=uv(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.sticky&&(t+="y"),t},sv=x,mv=lt,Zv=Ie,hv=dv,bv=RegExp.prototype,pv=function(e){var t=e.flags;return void 0!==t||"flags"in bv||mv(e,"flags")||!Zv(bv,e)?t:sv(hv,e)},Iv=J,gv=S.RegExp,yv=Iv((function(){var e=gv("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Xv=yv||Iv((function(){return!gv("a","y").sticky})),fv=yv||Iv((function(){var e=gv("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),Gv={BROKEN_CARET:fv,MISSED_STICKY:Xv,UNSUPPORTED_Y:yv},Vv=qt.f,Wv=J,Cv=S.RegExp,vv=Wv((function(){var e=Cv(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),Rv=J,Sv=S.RegExp,Yv=Rv((function(){var e=Sv("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Jv=K,Kv=S,Nv=E,Lv=Ii,Hv=dp,xv=yn,kv=Wr.f,Uv=Ie,Av=lv,wv=Ai,Fv=pv,Tv=Gv,Bv=function(e,t,n){n in e||Vv(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})},zv=Vr,jv=J,Mv=lt,Qv=or.enforce,Pv=IZ,Ev=vv,Dv=Yv,Ov=Wt("match"),_v=Kv.RegExp,qv=_v.prototype,$v=Kv.SyntaxError,eR=Nv(qv.exec),tR=Nv("".charAt),nR=Nv("".replace),rR=Nv("".indexOf),iR=Nv("".slice),cR=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,oR=/a/g,aR=/a/g,lR=new _v(oR)!==oR,uR=Tv.MISSED_STICKY,dR=Tv.UNSUPPORTED_Y,sR=Jv&&(!lR||uR||Ev||Dv||jv((function(){return aR[Ov]=!1,_v(oR)!=oR||_v(aR)==aR||"/a/i"!=_v(oR,"i")})));if(Lv("RegExp",sR)){for(var mR=function(e,t){var n,r,i,c,o,a,l=Uv(qv,this),u=Av(e),d=void 0===t,s=[],m=e;if(!l&&u&&d&&e.constructor===mR)return e;if((u||Uv(qv,e))&&(e=e.source,d&&(t=Fv(m))),e=void 0===e?"":wv(e),t=void 0===t?"":wv(t),m=e,Ev&&"dotAll"in oR&&(r=!!t&&rR(t,"s")>-1)&&(t=nR(t,/s/g,"")),n=t,uR&&"sticky"in oR&&(i=!!t&&rR(t,"y")>-1)&&dR&&(t=nR(t,/y/g,"")),Dv&&(c=function(e){for(var t,n=e.length,r=0,i="",c=[],o={},a=!1,l=!1,u=0,d="";r<=n;r++){if("\\"===(t=tR(e,r)))t+=tR(e,++r);else if("]"===t)a=!1;else if(!a)switch(!0){case"["===t:a=!0;break;case"("===t:eR(cR,iR(e,r+1))&&(r+=2,l=!0),i+=t,u++;continue;case">"===t&&l:if(""===d||Mv(o,d))throw new $v("Invalid capture group name");o[d]=!0,c[c.length]=[d,u],l=!1,d="";continue}l?d+=t:i+=t}return[i,c]}(e),e=c[0],s=c[1]),o=Hv(_v(e,t),l?this:qv,mR),(r||i||s.length)&&(a=Qv(o),r&&(a.dotAll=!0,a.raw=mR(function(e){for(var t,n=e.length,r=0,i="",c=!1;r<=n;r++)"\\"!==(t=tR(e,r))?c||"."!==t?("["===t?c=!0:"]"===t&&(c=!1),i+=t):i+="[\\s\\S]":i+=t+tR(e,++r);return i}(e),n)),i&&(a.sticky=!0),s.length&&(a.groups=s)),e!==m)try{xv(o,"source",""===m?"(?:)":m)}catch(e){}return o},ZR=kv(_v),hR=0;ZR.length>hR;)Bv(mR,_v,ZR[hR++]);qv.constructor=mR,mR.prototype=qv,zv(Kv,"RegExp",mR)}Pv("RegExp");var bR=x,pR=E,IR=Ai,gR=dv,yR=Gv,XR=De.exports,fR=lc,GR=or.get,VR=vv,WR=Yv,CR=XR("native-string-replace",String.prototype.replace),vR=RegExp.prototype.exec,RR=vR,SR=pR("".charAt),YR=pR("".indexOf),JR=pR("".replace),KR=pR("".slice),NR=function(){var e=/a/,t=/b*/g;return bR(vR,e,"a"),bR(vR,t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),LR=yR.BROKEN_CARET,HR=void 0!==/()??/.exec("")[1];(NR||HR||LR||VR||WR)&&(RR=function(e){var t,n,r,i,c,o,a,l=this,u=GR(l),d=IR(e),s=u.raw;if(s)return s.lastIndex=l.lastIndex,t=bR(RR,s,d),l.lastIndex=s.lastIndex,t;var m=u.groups,Z=LR&&l.sticky,h=bR(gR,l),b=l.source,p=0,I=d;if(Z&&(h=JR(h,"y",""),-1===YR(h,"g")&&(h+="g"),I=KR(d,l.lastIndex),l.lastIndex>0&&(!l.multiline||l.multiline&&"\n"!==SR(d,l.lastIndex-1))&&(b="(?: "+b+")",I=" "+I,p++),n=new RegExp("^(?:"+b+")",h)),HR&&(n=new RegExp("^"+b+"$(?!\\s)",h)),NR&&(r=l.lastIndex),i=bR(vR,Z?n:l,I),Z?i?(i.input=KR(i.input,p),i[0]=KR(i[0],p),i.index=l.lastIndex,l.lastIndex+=i[0].length):l.lastIndex=0:NR&&i&&(l.lastIndex=l.global?i.index+i[0].length:r),HR&&i&&i.length>1&&bR(CR,i[0],n,(function(){for(c=1;c<arguments.length-2;c++)void 0===arguments[c]&&(i[c]=void 0)})),i&&m)for(i.groups=o=fR(null),c=0;c<m.length;c++)o[(a=m[c])[0]]=i[a[1]];return i});var xR=RR;Ci({target:"RegExp",proto:!0,forced:/./.exec!==xR},{exec:xR});var kR=Xn.exports,UR=qt,AR=function(e,t,n){return n.get&&kR(n.get,t,{getter:!0}),n.set&&kR(n.set,t,{setter:!0}),UR.f(e,t,n)},wR=K,FR=AR,TR=dv,BR=J,zR=RegExp.prototype;wR&&BR((function(){return"sy"!==Object.getOwnPropertyDescriptor(zR,"flags").get.call({dotAll:!0,sticky:!0})}))&&FR(zR,"flags",{configurable:!0,get:TR});var jR=S,MR=K,QR=Gv.MISSED_STICKY,PR=q,ER=AR,DR=or.get,OR=RegExp.prototype,_R=jR.TypeError;MR&&QR&&ER(OR,"sticky",{configurable:!0,get:function(){if(this!==OR){if("RegExp"===PR(this))return!!DR(this).sticky;throw _R("Incompatible receiver, RegExp required")}}});var qR,$R,eS=Ci,tS=S,nS=x,rS=E,iS=de,cS=me,oS=(qR=!1,($R=/[ac]/).exec=function(){return qR=!0,/./.exec.apply(this,arguments)},!0===$R.test("abc")&&qR),aS=tS.Error,lS=rS(/./.test);eS({target:"RegExp",proto:!0,forced:!oS},{test:function(e){var t=this.exec;if(!iS(t))return lS(this,e);var n=nS(t,this,e);if(null!==n&&!cS(n))throw new aS("RegExp exec method returned something other than an Object or null");return!!n}});var uS=vn.PROPER,dS=Vr,sS=cn,mS=Ai,ZS=J,hS=pv,bS="toString",pS=RegExp.prototype.toString,IS=ZS((function(){return"/a/b"!=pS.call({source:"a",flags:"b"})})),gS=uS&&pS.name!=bS;(IS||gS)&&dS(RegExp.prototype,bS,(function(){var e=sS(this);return"/"+mS(e.source)+"/"+mS(hS(e))}),{unsafe:!0}),Cp("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),Ap);var yS=E,XS=Rr,fS=Ai,GS=oe,VS=yS("".charAt),WS=yS("".charCodeAt),CS=yS("".slice),vS=function(e){return function(t,n){var r,i,c=fS(GS(t)),o=XS(n),a=c.length;return o<0||o>=a?e?"":void 0:(r=WS(c,o))<55296||r>56319||o+1===a||(i=WS(c,o+1))<56320||i>57343?e?VS(c,o):r:e?CS(c,o,o+2):i-56320+(r-55296<<10)+65536}},RS={codeAt:vS(!1),charAt:vS(!0)},SS=RS.codeAt;Ci({target:"String",proto:!0},{codePointAt:function(e){return SS(this,e)}});var YS,JS=lv,KS=S.TypeError,NS=function(e){if(JS(e))throw KS("The method doesn't accept regular expressions");return e},LS=Wt("match"),HS=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[LS]=!1,"/./"[e](t)}catch(e){}}return!1},xS=Ci,kS=E,US=Y.f,AS=Hr,wS=Ai,FS=NS,TS=oe,BS=HS,zS=kS("".endsWith),jS=kS("".slice),MS=Math.min,QS=BS("endsWith");xS({target:"String",proto:!0,forced:!!(QS||(YS=US(String.prototype,"endsWith"),!YS||YS.writable))&&!QS},{endsWith:function(e){var t=wS(TS(this));FS(e);var n=arguments.length>1?arguments[1]:void 0,r=t.length,i=void 0===n?r:MS(AS(n),r),c=wS(e);return zS?zS(t,c,i):jS(t,i-c.length,i)===c}});var PS=Ci,ES=E,DS=Kr,OS=S.RangeError,_S=String.fromCharCode,qS=String.fromCodePoint,$S=ES([].join);PS({target:"String",stat:!0,arity:1,forced:!!qS&&1!=qS.length},{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,i=0;r>i;){if(t=+arguments[i++],DS(t,1114111)!==t)throw OS(t+" is not a valid code point");n[i]=t<65536?_S(t):_S(55296+((t-=65536)>>10),t%1024+56320)}return $S(n,"")}});var eY=Ci,tY=NS,nY=oe,rY=Ai,iY=HS,cY=E("".indexOf);eY({target:"String",proto:!0,forced:!iY("includes")},{includes:function(e){return!!~cY(rY(nY(this)),rY(tY(e)),arguments.length>1?arguments[1]:void 0)}});var oY=RS.charAt,aY=Ai,lY=or,uY=Es,dY="String Iterator",sY=lY.set,mY=lY.getterFor(dY);uY(String,"String",(function(e){sY(this,{type:dY,string:aY(e),index:0})}),(function(){var e,t=mY(this),n=t.string,r=t.index;return r>=n.length?{value:void 0,done:!0}:(e=oY(n,r),t.index+=e.length,{value:e,done:!1})}));var ZY=E,hY=Vr,bY=xR,pY=J,IY=Wt,gY=yn,yY=IY("species"),XY=RegExp.prototype,fY=function(e,t,n,r){var i=IY(e),c=!pY((function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})),o=c&&!pY((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[yY]=function(){return n},n.flags="",n[i]=/./[i]),n.exec=function(){return t=!0,null},n[i](""),!t}));if(!c||!o||n){var a=ZY(/./[i]),l=t(i,""[e],(function(e,t,n,r,i){var o=ZY(e),l=t.exec;return l===bY||l===XY.exec?c&&!i?{done:!0,value:a(t,n,r)}:{done:!0,value:o(n,t,r)}:{done:!1}}));hY(String.prototype,e,l[0]),hY(XY,i,l[1])}r&&gY(XY[i],"sham",!0)},GY=RS.charAt,VY=function(e,t,n){return t+(n?GY(e,t).length:1)},WY=x,CY=cn,vY=de,RY=q,SY=xR,YY=S.TypeError,JY=function(e,t){var n=e.exec;if(vY(n)){var r=WY(n,e,t);return null!==r&&CY(r),r}if("RegExp"===RY(e))return WY(SY,e,t);throw YY("RegExp#exec called on incompatible receiver")},KY=x,NY=cn,LY=Hr,HY=Ai,xY=oe,kY=ze,UY=VY,AY=JY;fY("match",(function(e,t,n){return[function(t){var n=xY(this),r=null==t?void 0:kY(t,e);return r?KY(r,t,n):new RegExp(t)[e](HY(n))},function(e){var r=NY(this),i=HY(e),c=n(t,r,i);if(c.done)return c.value;if(!r.global)return AY(r,i);var o=r.unicode;r.lastIndex=0;for(var a,l=[],u=0;null!==(a=AY(r,i));){var d=HY(a[0]);l[u]=d,""===d&&(r.lastIndex=UY(i,LY(r.lastIndex),o)),u++}return 0===u?null:l}]}));var wY=Ci,FY=S,TY=x,BY=E,zY=ys,jY=oe,MY=Hr,QY=Ai,PY=cn,EY=lv,DY=pv,OY=ze,_Y=Vr,qY=J,$Y=Uf,eJ=VY,tJ=JY,nJ=or,rJ=Wt("matchAll"),iJ="RegExp String",cJ="RegExp String Iterator",oJ=nJ.set,aJ=nJ.getterFor(cJ),lJ=RegExp.prototype,uJ=FY.TypeError,dJ=BY("".indexOf),sJ=BY("".matchAll),mJ=!!sJ&&!qY((function(){sJ("a",/./)})),ZJ=zY((function(e,t,n,r){oJ(this,{type:cJ,regexp:e,string:t,global:n,unicode:r,done:!1})}),iJ,(function(){var e=aJ(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,n=e.string,r=tJ(t,n);return null===r?{value:void 0,done:e.done=!0}:e.global?(""===QY(r[0])&&(t.lastIndex=eJ(n,MY(t.lastIndex),e.unicode)),{value:r,done:!1}):(e.done=!0,{value:r,done:!1})})),hJ=function(e){var t,n,r,i=PY(this),c=QY(e),o=$Y(i,RegExp),a=QY(DY(i));return t=new o(o===RegExp?i.source:i,a),n=!!~dJ(a,"g"),r=!!~dJ(a,"u"),t.lastIndex=MY(i.lastIndex),new ZJ(t,c,n,r)};wY({target:"String",proto:!0,forced:mJ},{matchAll:function(e){var t,n,r,i=jY(this);if(null!=e){if(EY(e)&&(t=QY(jY(DY(e))),!~dJ(t,"g")))throw uJ("`.matchAll` does not allow non-global regexes");if(mJ)return sJ(i,e);if(r=OY(e,rJ))return TY(r,e,i)}else if(mJ)return sJ(i,e);return n=QY(i),new RegExp(e,"g")[rJ](n)}}),rJ in lJ||_Y(lJ,rJ,hJ);var bJ=E,pJ=Hr,IJ=Ai,gJ=oe,yJ=bJ(Zy),XJ=bJ("".slice),fJ=Math.ceil,GJ=function(e){return function(t,n,r){var i,c,o=IJ(gJ(t)),a=pJ(n),l=o.length,u=void 0===r?" ":IJ(r);return a<=l||""==u?o:((c=yJ(u,fJ((i=a-l)/u.length))).length>i&&(c=XJ(c,0,i)),e?o+c:c+o)}},VJ={start:GJ(!1),end:GJ(!0)},WJ=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(ge),CJ=VJ.end;Ci({target:"String",proto:!0,forced:WJ},{padEnd:function(e){return CJ(this,e,arguments.length>1?arguments[1]:void 0)}});var vJ=VJ.start;Ci({target:"String",proto:!0,forced:WJ},{padStart:function(e){return vJ(this,e,arguments.length>1?arguments[1]:void 0)}});var RJ=Ci,SJ=E,YJ=ue,JJ=ct,KJ=Ai,NJ=kr,LJ=SJ([].push),HJ=SJ([].join);RJ({target:"String",stat:!0},{raw:function(e){for(var t=YJ(JJ(e).raw),n=NJ(t),r=arguments.length,i=[],c=0;n>c;){if(LJ(i,KJ(t[c++])),c===n)return HJ(i,"");c<r&&LJ(i,KJ(arguments[c]))}}}),Ci({target:"String",proto:!0},{repeat:Zy});var xJ=E,kJ=ct,UJ=Math.floor,AJ=xJ("".charAt),wJ=xJ("".replace),FJ=xJ("".slice),TJ=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,BJ=/\$([$&'`]|\d{1,2})/g,zJ=Da,jJ=x,MJ=E,QJ=fY,PJ=J,EJ=cn,DJ=de,OJ=Rr,_J=Hr,qJ=Ai,$J=oe,eK=VY,tK=ze,nK=function(e,t,n,r,i,c){var o=n+e.length,a=r.length,l=BJ;return void 0!==i&&(i=kJ(i),l=TJ),wJ(c,l,(function(c,l){var u;switch(AJ(l,0)){case"$":return"$";case"&":return e;case"`":return FJ(t,0,n);case"'":return FJ(t,o);case"<":u=i[FJ(l,1,-1)];break;default:var d=+l;if(0===d)return c;if(d>a){var s=UJ(d/10);return 0===s?c:s<=a?void 0===r[s-1]?AJ(l,1):r[s-1]+AJ(l,1):c}u=r[d-1]}return void 0===u?"":u}))},rK=JY,iK=Wt("replace"),cK=Math.max,oK=Math.min,aK=MJ([].concat),lK=MJ([].push),uK=MJ("".indexOf),dK=MJ("".slice),sK="$0"==="a".replace(/./,"$0"),mK=!!/./[iK]&&""===/./[iK]("a","$0"),ZK=!PJ((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}));QJ("replace",(function(e,t,n){var r=mK?"$":"$0";return[function(e,n){var r=$J(this),i=null==e?void 0:tK(e,iK);return i?jJ(i,e,r,n):jJ(t,qJ(r),e,n)},function(e,i){var c=EJ(this),o=qJ(e);if("string"==typeof i&&-1===uK(i,r)&&-1===uK(i,"$<")){var a=n(t,c,o,i);if(a.done)return a.value}var l=DJ(i);l||(i=qJ(i));var u=c.global;if(u){var d=c.unicode;c.lastIndex=0}for(var s=[];;){var m=rK(c,o);if(null===m)break;if(lK(s,m),!u)break;""===qJ(m[0])&&(c.lastIndex=eK(o,_J(c.lastIndex),d))}for(var Z,h="",b=0,p=0;p<s.length;p++){for(var I=qJ((m=s[p])[0]),g=cK(oK(OJ(m.index),o.length),0),y=[],X=1;X<m.length;X++)lK(y,void 0===(Z=m[X])?Z:String(Z));var f=m.groups;if(l){var G=aK([I],y,g,o);void 0!==f&&lK(G,f);var V=qJ(zJ(i,void 0,G))}else V=nK(I,o,g,y,f,i);g>=b&&(h+=dK(o,b,g)+V,b=g+I.length)}return h+dK(o,b)}]}),!ZK||!sK||mK);var hK=x,bK=cn,pK=oe,IK=LX,gK=Ai,yK=ze,XK=JY;fY("search",(function(e,t,n){return[function(t){var n=pK(this),r=null==t?void 0:yK(t,e);return r?hK(r,t,n):new RegExp(t)[e](gK(n))},function(e){var r=bK(this),i=gK(e),c=n(t,r,i);if(c.done)return c.value;var o=r.lastIndex;IK(o,0)||(r.lastIndex=0);var a=XK(r,i);return IK(r.lastIndex,o)||(r.lastIndex=o),null===a?-1:a.index}]}));var fK=Da,GK=x,VK=E,WK=fY,CK=lv,vK=cn,RK=oe,SK=Uf,YK=VY,JK=Hr,KK=Ai,NK=ze,LK=yc,HK=JY,xK=xR,kK=J,UK=Gv.UNSUPPORTED_Y,AK=4294967295,wK=Math.min,FK=[].push,TK=VK(/./.exec),BK=VK(FK),zK=VK("".slice),jK=!kK((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));WK("split",(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=KK(RK(this)),i=void 0===n?AK:n>>>0;if(0===i)return[];if(void 0===e)return[r];if(!CK(e))return GK(t,r,e,i);for(var c,o,a,l=[],u=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),d=0,s=new RegExp(e.source,u+"g");(c=GK(xK,s,r))&&!((o=s.lastIndex)>d&&(BK(l,zK(r,d,c.index)),c.length>1&&c.index<r.length&&fK(FK,l,LK(c,1)),a=c[0].length,d=o,l.length>=i));)s.lastIndex===c.index&&s.lastIndex++;return d===r.length?!a&&TK(s,"")||BK(l,""):BK(l,zK(r,d)),l.length>i?LK(l,0,i):l}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:GK(t,this,e,n)}:t,[function(t,n){var i=RK(this),c=null==t?void 0:NK(t,e);return c?GK(c,t,i,n):GK(r,KK(i),t,n)},function(e,i){var c=vK(this),o=KK(e),a=n(r,c,o,i,r!==t);if(a.done)return a.value;var l=SK(c,RegExp),u=c.unicode,d=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(UK?"g":"y"),s=new l(UK?"^(?:"+c.source+")":c,d),m=void 0===i?AK:i>>>0;if(0===m)return[];if(0===o.length)return null===HK(s,o)?[o]:[];for(var Z=0,h=0,b=[];h<o.length;){s.lastIndex=UK?0:h;var p,I=HK(s,UK?zK(o,h):o);if(null===I||(p=wK(JK(s.lastIndex+(UK?h:0)),o.length))===Z)h=YK(o,h,u);else{if(BK(b,zK(o,Z,h)),b.length===m)return b;for(var g=1;g<=I.length-1;g++)if(BK(b,I[g]),b.length===m)return b;h=Z=p}}return BK(b,zK(o,Z)),b}]}),!jK,UK);var MK=Ci,QK=E,PK=Y.f,EK=Hr,DK=Ai,OK=NS,_K=oe,qK=HS,$K=QK("".startsWith),eN=QK("".slice),tN=Math.min,nN=qK("startsWith"),rN=!nN&&!!function(){var e=PK(String.prototype,"startsWith");return e&&!e.writable}();MK({target:"String",proto:!0,forced:!rN&&!nN},{startsWith:function(e){var t=DK(_K(this));OK(e);var n=EK(tN(arguments.length>1?arguments[1]:void 0,t.length)),r=DK(e);return $K?$K(t,r,n):eN(t,n,n+r.length)===r}});var iN=vn.PROPER,cN=J,oN=_I,aN=function(e){return cN((function(){return!!oN[e]()||"​…᠎"!=="​…᠎"[e]()||iN&&oN[e].name!==e}))},lN=cg.trim;Ci({target:"String",proto:!0,forced:aN("trim")},{trim:function(){return lN(this)}});var uN=cg.end,dN=aN("trimEnd")?function(){return uN(this)}:"".trimEnd;Ci({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==dN},{trimRight:dN});Ci({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==dN},{trimEnd:dN});var sN=cg.start,mN=aN("trimStart")?function(){return sN(this)}:"".trimStart;Ci({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==mN},{trimLeft:mN});Ci({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==mN},{trimStart:mN});var ZN=oe,hN=Ai,bN=/"/g,pN=E("".replace),IN=function(e,t,n,r){var i=hN(ZN(e)),c="<"+t;return""!==n&&(c+=" "+n+'="'+pN(hN(r),bN,"&quot;")+'"'),c+">"+i+"</"+t+">"},gN=J,yN=function(e){return gN((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))},XN=IN;Ci({target:"String",proto:!0,forced:yN("anchor")},{anchor:function(e){return XN(this,"a","name",e)}});var fN=IN;Ci({target:"String",proto:!0,forced:yN("big")},{big:function(){return fN(this,"big","","")}});var GN=IN;Ci({target:"String",proto:!0,forced:yN("blink")},{blink:function(){return GN(this,"blink","","")}});var VN=IN;Ci({target:"String",proto:!0,forced:yN("bold")},{bold:function(){return VN(this,"b","","")}});var WN=IN;Ci({target:"String",proto:!0,forced:yN("fixed")},{fixed:function(){return WN(this,"tt","","")}});var CN=IN;Ci({target:"String",proto:!0,forced:yN("fontcolor")},{fontcolor:function(e){return CN(this,"font","color",e)}});var vN=IN;Ci({target:"String",proto:!0,forced:yN("fontsize")},{fontsize:function(e){return vN(this,"font","size",e)}});var RN=IN;Ci({target:"String",proto:!0,forced:yN("italics")},{italics:function(){return RN(this,"i","","")}});var SN=IN;Ci({target:"String",proto:!0,forced:yN("link")},{link:function(e){return SN(this,"a","href",e)}});var YN=IN;Ci({target:"String",proto:!0,forced:yN("small")},{small:function(){return YN(this,"small","","")}});var JN=IN;Ci({target:"String",proto:!0,forced:yN("strike")},{strike:function(){return JN(this,"strike","","")}});var KN=IN;Ci({target:"String",proto:!0,forced:yN("sub")},{sub:function(){return KN(this,"sub","","")}});var NN=IN;Ci({target:"String",proto:!0,forced:yN("sup")},{sup:function(){return NN(this,"sup","","")}});var LN,HN,xN,kN={exports:{}},UN=NZ,AN=K,wN=S,FN=de,TN=me,BN=lt,zN=xi,jN=Ue,MN=yn,QN=Vr,PN=qt.f,EN=Ie,DN=is,ON=Ss,_N=Wt,qN=Zt,$N=wN.Int8Array,eL=$N&&$N.prototype,tL=wN.Uint8ClampedArray,nL=tL&&tL.prototype,rL=$N&&DN($N),iL=eL&&DN(eL),cL=Object.prototype,oL=wN.TypeError,aL=_N("toStringTag"),lL=qN("TYPED_ARRAY_TAG"),uL=qN("TYPED_ARRAY_CONSTRUCTOR"),dL=UN&&!!ON&&"Opera"!==zN(wN.opera),sL=!1,mL={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},ZL={BigInt64Array:8,BigUint64Array:8},hL=function(e){if(!TN(e))return!1;var t=zN(e);return BN(mL,t)||BN(ZL,t)};for(LN in mL)(xN=(HN=wN[LN])&&HN.prototype)?MN(xN,uL,HN):dL=!1;for(LN in ZL)(xN=(HN=wN[LN])&&HN.prototype)&&MN(xN,uL,HN);if((!dL||!FN(rL)||rL===Function.prototype)&&(rL=function(){throw oL("Incorrect invocation")},dL))for(LN in mL)wN[LN]&&ON(wN[LN],rL);if((!dL||!iL||iL===cL)&&(iL=rL.prototype,dL))for(LN in mL)wN[LN]&&ON(wN[LN].prototype,iL);if(dL&&DN(nL)!==iL&&ON(nL,iL),AN&&!BN(iL,aL))for(LN in sL=!0,PN(iL,aL,{get:function(){return TN(this)?this[lL]:void 0}}),mL)wN[LN]&&MN(wN[LN],lL,LN);var bL={NATIVE_ARRAY_BUFFER_VIEWS:dL,TYPED_ARRAY_CONSTRUCTOR:uL,TYPED_ARRAY_TAG:sL&&lL,aTypedArray:function(e){if(hL(e))return e;throw oL("Target is not a typed array")},aTypedArrayConstructor:function(e){if(FN(e)&&(!ON||EN(rL,e)))return e;throw oL(jN(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,r){if(AN){if(n)for(var i in mL){var c=wN[i];if(c&&BN(c.prototype,e))try{delete c.prototype[e]}catch(n){try{c.prototype[e]=t}catch(e){}}}iL[e]&&!n||QN(iL,e,n?t:dL&&eL[e]||t,r)}},exportTypedArrayStaticMethod:function(e,t,n){var r,i;if(AN){if(ON){if(n)for(r in mL)if((i=wN[r])&&BN(i,e))try{delete i[e]}catch(e){}if(rL[e]&&!n)return;try{return QN(rL,e,n?t:dL&&rL[e]||t)}catch(e){}}for(r in mL)!(i=wN[r])||i[e]&&!n||QN(i,e,t)}},isView:function(e){if(!TN(e))return!1;var t=zN(e);return"DataView"===t||BN(mL,t)||BN(ZL,t)},isTypedArray:hL,TypedArray:rL,TypedArrayPrototype:iL},pL=S,IL=J,gL=Bd,yL=bL.NATIVE_ARRAY_BUFFER_VIEWS,XL=pL.ArrayBuffer,fL=pL.Int8Array,GL=!yL||!IL((function(){fL(1)}))||!IL((function(){new fL(-1)}))||!gL((function(e){new fL,new fL(null),new fL(1.5),new fL(e)}),!0)||IL((function(){return 1!==new fL(new XL(2),1,void 0).length})),VL=Rr,WL=S.RangeError,CL=function(e){var t=VL(e);if(t<0)throw WL("The argument can't be less than 0");return t},vL=S.RangeError,RL=function(e,t){var n=CL(e);if(n%t)throw vL("Wrong offset");return n},SL=jc,YL=x,JL=Lf,KL=ct,NL=kr,LL=Cd,HL=gd,xL=Zd,kL=bL.aTypedArrayConstructor,UL=function(e){var t,n,r,i,c,o,a=JL(this),l=KL(e),u=arguments.length,d=u>1?arguments[1]:void 0,s=void 0!==d,m=HL(l);if(m&&!xL(m))for(o=(c=LL(l,m)).next,l=[];!(i=YL(o,c)).done;)l.push(i.value);for(s&&u>2&&(d=SL(d,arguments[2])),n=NL(l),r=new(kL(a))(n),t=0;n>t;t++)r[t]=s?d(l[t],t):l[t];return r},AL=Ci,wL=S,FL=x,TL=K,BL=GL,zL=bL,jL=Dh,ML=UZ,QL=B,PL=yn,EL=Ug,DL=Hr,OL=TZ,_L=RL,qL=kt,$L=lt,eH=xi,tH=me,nH=xe,rH=lc,iH=Ie,cH=Ss,oH=Wr.f,aH=UL,lH=Vo.forEach,uH=IZ,dH=qt,sH=Y,mH=dp,ZH=or.get,hH=or.set,bH=dH.f,pH=sH.f,IH=Math.round,gH=wL.RangeError,yH=jL.ArrayBuffer,XH=yH.prototype,fH=jL.DataView,GH=zL.NATIVE_ARRAY_BUFFER_VIEWS,VH=zL.TYPED_ARRAY_CONSTRUCTOR,WH=zL.TYPED_ARRAY_TAG,CH=zL.TypedArray,vH=zL.TypedArrayPrototype,RH=zL.aTypedArrayConstructor,SH=zL.isTypedArray,YH="BYTES_PER_ELEMENT",JH="Wrong length",KH=function(e,t){RH(e);for(var n=0,r=t.length,i=new e(r);r>n;)i[n]=t[n++];return i},NH=function(e,t){bH(e,t,{get:function(){return ZH(this)[t]}})},LH=function(e){var t;return iH(XH,e)||"ArrayBuffer"==(t=eH(e))||"SharedArrayBuffer"==t},HH=function(e,t){return SH(e)&&!nH(t)&&t in e&&EL(+t)&&t>=0},xH=function(e,t){return t=qL(t),HH(e,t)?QL(2,e[t]):pH(e,t)},kH=function(e,t,n){return t=qL(t),!(HH(e,t)&&tH(n)&&$L(n,"value"))||$L(n,"get")||$L(n,"set")||n.configurable||$L(n,"writable")&&!n.writable||$L(n,"enumerable")&&!n.enumerable?bH(e,t,n):(e[t]=n.value,e)};TL?(GH||(sH.f=xH,dH.f=kH,NH(vH,"buffer"),NH(vH,"byteOffset"),NH(vH,"byteLength"),NH(vH,"length")),AL({target:"Object",stat:!0,forced:!GH},{getOwnPropertyDescriptor:xH,defineProperty:kH}),kN.exports=function(e,t,n){var r=e.match(/\d+$/)[0]/8,i=e+(n?"Clamped":"")+"Array",c="get"+e,o="set"+e,a=wL[i],l=a,u=l&&l.prototype,d={},s=function(e,t){bH(e,t,{get:function(){return function(e,t){var n=ZH(e);return n.view[c](t*r+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,i){var c=ZH(e);n&&(i=(i=IH(i))<0?0:i>255?255:255&i),c.view[o](t*r+c.byteOffset,i,!0)}(this,t,e)},enumerable:!0})};GH?BL&&(l=t((function(e,t,n,i){return ML(e,u),mH(tH(t)?LH(t)?void 0!==i?new a(t,_L(n,r),i):void 0!==n?new a(t,_L(n,r)):new a(t):SH(t)?KH(l,t):FL(aH,l,t):new a(OL(t)),e,l)})),cH&&cH(l,CH),lH(oH(a),(function(e){e in l||PL(l,e,a[e])})),l.prototype=u):(l=t((function(e,t,n,i){ML(e,u);var c,o,a,d=0,m=0;if(tH(t)){if(!LH(t))return SH(t)?KH(l,t):FL(aH,l,t);c=t,m=_L(n,r);var Z=t.byteLength;if(void 0===i){if(Z%r)throw gH(JH);if((o=Z-m)<0)throw gH(JH)}else if((o=DL(i)*r)+m>Z)throw gH(JH);a=o/r}else a=OL(t),c=new yH(o=a*r);for(hH(e,{buffer:c,byteOffset:m,byteLength:o,length:a,view:new fH(c)});d<a;)s(e,d++)})),cH&&cH(l,CH),u=l.prototype=rH(vH)),u.constructor!==l&&PL(u,"constructor",l),PL(u,VH,l),WH&&PL(u,WH,i),d[i]=l,AL({global:!0,forced:l!=a,sham:!GH},d),YH in l||PL(l,YH,r),YH in u||PL(u,YH,r),uH(i)}):kN.exports=function(){},(0,kN.exports)("Float32",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Float64",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Int8",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Int16",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Int32",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}),!0),(0,kN.exports)("Uint16",(function(e){return function(t,n,r){return e(this,t,n,r)}})),(0,kN.exports)("Uint32",(function(e){return function(t,n,r){return e(this,t,n,r)}}));var UH=bL,AH=E(yu),wH=UH.aTypedArray;(0,UH.exportTypedArrayMethod)("copyWithin",(function(e,t){return AH(wH(this),e,t,arguments.length>2?arguments[2]:void 0)}));var FH=Vo.every,TH=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("every",(function(e){return FH(TH(this),e,arguments.length>1?arguments[1]:void 0)}));var BH=x,zH=Yu,jH=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("fill",(function(e){var t=arguments.length;return BH(zH,jH(this),e,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}));var MH=kr,QH=Uf,PH=bL.TYPED_ARRAY_CONSTRUCTOR,EH=bL.aTypedArrayConstructor,DH=function(e){return EH(QH(e,e[PH]))},OH=function(e,t){for(var n=0,r=MH(t),i=new e(r);r>n;)i[n]=t[n++];return i},_H=DH,qH=Vo.filter,$H=function(e,t){return OH(_H(e),t)},ex=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("filter",(function(e){var t=qH(ex(this),e,arguments.length>1?arguments[1]:void 0);return $H(this,t)}));var tx=Vo.find,nx=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("find",(function(e){return tx(nx(this),e,arguments.length>1?arguments[1]:void 0)}));var rx=Vo.findIndex,ix=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("findIndex",(function(e){return rx(ix(this),e,arguments.length>1?arguments[1]:void 0)}));var cx=Vo.forEach,ox=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("forEach",(function(e){cx(ox(this),e,arguments.length>1?arguments[1]:void 0)})),(0,bL.exportTypedArrayStaticMethod)("from",UL,GL);var ax=Tr.includes,lx=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("includes",(function(e){return ax(lx(this),e,arguments.length>1?arguments[1]:void 0)}));var ux=Tr.indexOf,dx=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("indexOf",(function(e){return ux(dx(this),e,arguments.length>1?arguments[1]:void 0)}));var sx=S,mx=J,Zx=E,hx=bL,bx=cm,px=Wt("iterator"),Ix=sx.Uint8Array,gx=Zx(bx.values),yx=Zx(bx.keys),Xx=Zx(bx.entries),fx=hx.aTypedArray,Gx=hx.exportTypedArrayMethod,Vx=Ix&&Ix.prototype,Wx=!mx((function(){Vx[px].call([1])})),Cx=!!Vx&&Vx.values&&Vx[px]===Vx.values&&"values"===Vx.values.name,vx=function(){return gx(fx(this))};Gx("entries",(function(){return Xx(fx(this))}),Wx),Gx("keys",(function(){return yx(fx(this))}),Wx),Gx("values",vx,Wx||!Cx,{name:"values"}),Gx(px,vx,Wx||!Cx,{name:"values"});var Rx=bL.aTypedArray,Sx=bL.exportTypedArrayMethod,Yx=E([].join);Sx("join",(function(e){return Yx(Rx(this),e)}));var Jx=Da,Kx=ue,Nx=Rr,Lx=kr,Hx=lm,xx=Math.min,kx=[].lastIndexOf,Ux=!!kx&&1/[1].lastIndexOf(1,-0)<0,Ax=Hx("lastIndexOf"),wx=Ux||!Ax?function(e){if(Ux)return Jx(kx,this,arguments)||0;var t=Kx(this),n=Lx(t),r=n-1;for(arguments.length>1&&(r=xx(r,Nx(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}:kx,Fx=Da,Tx=wx,Bx=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("lastIndexOf",(function(e){var t=arguments.length;return Fx(Tx,Bx(this),t>1?[e,arguments[1]]:[e])}));var zx=Vo.map,jx=DH,Mx=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("map",(function(e){return zx(Mx(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(jx(e))(t)}))}));var Qx=bL.aTypedArrayConstructor;(0,bL.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(Qx(this))(t);t>e;)n[e]=arguments[e++];return n}),GL);var Px=Te,Ex=ct,Dx=ie,Ox=kr,_x=S.TypeError,qx=function(e){return function(t,n,r,i){Px(n);var c=Ex(t),o=Dx(c),a=Ox(c),l=e?a-1:0,u=e?-1:1;if(r<2)for(;;){if(l in o){i=o[l],l+=u;break}if(l+=u,e?l<0:a<=l)throw _x("Reduce of empty array with no initial value")}for(;e?l>=0:a>l;l+=u)l in o&&(i=n(i,o[l],l,c));return i}},$x={left:qx(!1),right:qx(!0)},ek=$x.left,tk=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("reduce",(function(e){var t=arguments.length;return ek(tk(this),e,t,t>1?arguments[1]:void 0)}));var nk=$x.right,rk=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("reduceRight",(function(e){var t=arguments.length;return nk(rk(this),e,t,t>1?arguments[1]:void 0)}));var ik=bL.aTypedArray,ck=bL.exportTypedArrayMethod,ok=Math.floor;ck("reverse",(function(){for(var e,t=this,n=ik(t).length,r=ok(n/2),i=0;i<r;)e=t[i],t[i++]=t[--n],t[n]=e;return t}));var ak=S,lk=x,uk=bL,dk=kr,sk=RL,mk=ct,Zk=J,hk=ak.RangeError,bk=ak.Int8Array,pk=bk&&bk.prototype,Ik=pk&&pk.set,gk=uk.aTypedArray,yk=uk.exportTypedArrayMethod,Xk=!Zk((function(){var e=new Uint8ClampedArray(2);return lk(Ik,e,{length:1,0:3},1),3!==e[1]})),fk=Xk&&uk.NATIVE_ARRAY_BUFFER_VIEWS&&Zk((function(){var e=new bk(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));yk("set",(function(e){gk(this);var t=sk(arguments.length>1?arguments[1]:void 0,1),n=mk(e);if(Xk)return lk(Ik,this,n,t);var r=this.length,i=dk(n),c=0;if(i+t>r)throw hk("Wrong length");for(;c<i;)this[t+c]=n[c++]}),!Xk||fk);var Gk=DH,Vk=Oa,Wk=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("slice",(function(e,t){for(var n=Vk(Wk(this),e,t),r=Gk(this),i=0,c=n.length,o=new r(c);c>i;)o[i]=n[i++];return o}),J((function(){new Int8Array(1).slice()})));var Ck=Vo.some,vk=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("some",(function(e){return Ck(vk(this),e,arguments.length>1?arguments[1]:void 0)}));var Rk=E,Sk=J,Yk=Te,Jk=Tm,Kk=zm,Nk=jm,Lk=Ce,Hk=Qm,xk=bL.aTypedArray,kk=bL.exportTypedArrayMethod,Uk=S.Uint16Array,Ak=Uk&&Rk(Uk.prototype.sort),wk=!(!Ak||Sk((function(){Ak(new Uk(2),null)}))&&Sk((function(){Ak(new Uk(2),{})}))),Fk=!!Ak&&!Sk((function(){if(Lk)return Lk<74;if(Kk)return Kk<67;if(Nk)return!0;if(Hk)return Hk<602;var e,t,n=new Uk(516),r=Array(516);for(e=0;e<516;e++)t=e%4,n[e]=515-e,r[e]=e-2*t+3;for(Ak(n,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(n[e]!==r[e])return!0}));kk("sort",(function(e){return void 0!==e&&Yk(e),Fk?Ak(this,e):Jk(xk(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))}),!Fk||wk);var Tk=Hr,Bk=Kr,zk=DH,jk=bL.aTypedArray;(0,bL.exportTypedArrayMethod)("subarray",(function(e,t){var n=jk(this),r=n.length,i=Bk(e,r);return new(zk(n))(n.buffer,n.byteOffset+i*n.BYTES_PER_ELEMENT,Tk((void 0===t?r:Bk(t,r))-i))}));var Mk=Da,Qk=bL,Pk=J,Ek=Oa,Dk=S.Int8Array,Ok=Qk.aTypedArray,_k=Qk.exportTypedArrayMethod,qk=[].toLocaleString,$k=!!Dk&&Pk((function(){qk.call(new Dk(1))}));_k("toLocaleString",(function(){return Mk(qk,$k?Ek(Ok(this)):Ok(this),Ek(arguments))}),Pk((function(){return[1,2].toLocaleString()!=new Dk([1,2]).toLocaleString()}))||!Pk((function(){Dk.prototype.toLocaleString.call([1,2])})));var eU=bL.exportTypedArrayMethod,tU=J,nU=E,rU=S.Uint8Array,iU=rU&&rU.prototype||{},cU=[].toString,oU=nU([].join);tU((function(){cU.call({})}))&&(cU=function(){return oU(this)});var aU=iU.toString!=cU;eU("toString",cU,aU);var lU=E,uU=HZ,dU=Vb.exports.getWeakData,sU=cn,mU=me,ZU=UZ,hU=op,bU=lt,pU=or.set,IU=or.getterFor,gU=Vo.find,yU=Vo.findIndex,XU=lU([].splice),fU=0,GU=function(e){return e.frozen||(e.frozen=new VU)},VU=function(){this.entries=[]},WU=function(e,t){return gU(e.entries,(function(e){return e[0]===t}))};VU.prototype={get:function(e){var t=WU(this,e);if(t)return t[1]},has:function(e){return!!WU(this,e)},set:function(e,t){var n=WU(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=yU(this.entries,(function(t){return t[0]===e}));return~t&&XU(this.entries,t,1),!!~t}};var CU,vU={getConstructor:function(e,t,n,r){var i=e((function(e,i){ZU(e,c),pU(e,{type:t,id:fU++,frozen:void 0}),null!=i&&hU(i,e[r],{that:e,AS_ENTRIES:n})})),c=i.prototype,o=IU(t),a=function(e,t,n){var r=o(e),i=dU(sU(t),!0);return!0===i?GU(r).set(t,n):i[r.id]=n,e};return uU(c,{delete:function(e){var t=o(this);if(!mU(e))return!1;var n=dU(e);return!0===n?GU(t).delete(e):n&&bU(n,t.id)&&delete n[t.id]},has:function(e){var t=o(this);if(!mU(e))return!1;var n=dU(e);return!0===n?GU(t).has(e):n&&bU(n,t.id)}}),uU(c,n?{get:function(e){var t=o(this);if(mU(e)){var n=dU(e);return!0===n?GU(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return a(this,e,t)}}:{add:function(e){return a(this,e,!0)}}),i}},RU=S,SU=E,YU=HZ,JU=Vb.exports,KU=Cp,NU=vU,LU=me,HU=Jb,xU=or.enforce,kU=Un,UU=!RU.ActiveXObject&&"ActiveXObject"in RU,AU=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},wU=KU("WeakMap",AU,NU);if(kU&&UU){CU=NU.getConstructor(AU,"WeakMap",!0),JU.enable();var FU=wU.prototype,TU=SU(FU.delete),BU=SU(FU.has),zU=SU(FU.get),jU=SU(FU.set);YU(FU,{delete:function(e){if(LU(e)&&!HU(e)){var t=xU(this);return t.frozen||(t.frozen=new CU),TU(this,e)||t.frozen.delete(e)}return TU(this,e)},has:function(e){if(LU(e)&&!HU(e)){var t=xU(this);return t.frozen||(t.frozen=new CU),BU(this,e)||t.frozen.has(e)}return BU(this,e)},get:function(e){if(LU(e)&&!HU(e)){var t=xU(this);return t.frozen||(t.frozen=new CU),BU(this,e)?zU(this,e):t.frozen.get(e)}return zU(this,e)},set:function(e,t){if(LU(e)&&!HU(e)){var n=xU(this);n.frozen||(n.frozen=new CU),BU(this,e)?jU(this,e,t):n.frozen.set(e,t)}else jU(this,e,t);return this}})}Cp("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),vU);var MU={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},QU=Ft("span").classList,PU=QU&&QU.constructor&&QU.constructor.prototype,EU=PU===Object.prototype?void 0:PU,DU=Vo.forEach,OU=lm("forEach")?[].forEach:function(e){return DU(this,e,arguments.length>1?arguments[1]:void 0)},_U=S,qU=MU,$U=EU,eA=OU,tA=yn,nA=function(e){if(e&&e.forEach!==eA)try{tA(e,"forEach",eA)}catch(t){e.forEach=eA}};for(var rA in qU)qU[rA]&&nA(_U[rA]&&_U[rA].prototype);nA($U);var iA=S,cA=MU,oA=EU,aA=cm,lA=yn,uA=Wt,dA=uA("iterator"),sA=uA("toStringTag"),mA=aA.values,ZA=function(e,t){if(e){if(e[dA]!==mA)try{lA(e,dA,mA)}catch(t){e[dA]=mA}if(e[sA]||lA(e,sA,t),cA[t])for(var n in aA)if(e[n]!==aA[n])try{lA(e,n,aA[n])}catch(t){e[n]=aA[n]}}};for(var hA in cA)ZA(iA[hA]&&iA[hA].prototype,hA);ZA(oA,"DOMTokenList");var bA=fG.clear;Ci({global:!0,bind:!0,enumerable:!0,forced:S.clearImmediate!==bA},{clearImmediate:bA});var pA=fG.set;Ci({global:!0,bind:!0,enumerable:!0,forced:S.setImmediate!==pA},{setImmediate:pA});var IA=Ci,gA=wG,yA=Te,XA=wf,fA=Yf,GA=S.process;IA({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){XA(arguments.length,1),yA(e);var t=fA&&GA.domain;gA(t?t.bind(e):e)}});var VA=J,WA=Wt("iterator"),CA=!VA((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,r){t.delete("b"),n+=r+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[WA]||"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})),vA=E,RA=2147483647,SA=/[^\0-\u007E]/,YA=/[.\u3002\uFF0E\uFF61]/g,JA="Overflow: input needs wider integers to process",KA=S.RangeError,NA=vA(YA.exec),LA=Math.floor,HA=String.fromCharCode,xA=vA("".charCodeAt),kA=vA([].join),UA=vA([].push),AA=vA("".replace),wA=vA("".split),FA=vA("".toLowerCase),TA=function(e){return e+22+75*(e<26)},BA=function(e,t,n){var r=0;for(e=n?LA(e/700):e>>1,e+=LA(e/t);e>455;)e=LA(e/35),r+=36;return LA(r+36*e/(e+38))},zA=function(e){var t=[];e=function(e){for(var t=[],n=0,r=e.length;n<r;){var i=xA(e,n++);if(i>=55296&&i<=56319&&n<r){var c=xA(e,n++);56320==(64512&c)?UA(t,((1023&i)<<10)+(1023&c)+65536):(UA(t,i),n--)}else UA(t,i)}return t}(e);var n,r,i=e.length,c=128,o=0,a=72;for(n=0;n<e.length;n++)(r=e[n])<128&&UA(t,HA(r));var l=t.length,u=l;for(l&&UA(t,"-");u<i;){var d=RA;for(n=0;n<e.length;n++)(r=e[n])>=c&&r<d&&(d=r);var s=u+1;if(d-c>LA((RA-o)/s))throw KA(JA);for(o+=(d-c)*s,c=d,n=0;n<e.length;n++){if((r=e[n])<c&&++o>RA)throw KA(JA);if(r==c){for(var m=o,Z=36;;){var h=Z<=a?1:Z>=a+26?26:Z-a;if(m<h)break;var b=m-h,p=36-h;UA(t,HA(TA(h+b%p))),m=LA(b/p),Z+=36}UA(t,HA(TA(m))),a=BA(o,s,u==l),o=0,u++}}o++,c++}return kA(t,"")},jA=Ci,MA=S,QA=x,PA=E,EA=K,DA=CA,OA=Vr,_A=HZ,qA=Fc,$A=ys,ew=or,tw=UZ,nw=de,rw=lt,iw=jc,cw=xi,ow=cn,aw=me,lw=Ai,uw=lc,dw=B,sw=Cd,mw=gd,Zw=wf,hw=Tm,bw=Wt("iterator"),pw="URLSearchParams",Iw="URLSearchParamsIterator",gw=ew.set,yw=ew.getterFor(pw),Xw=ew.getterFor(Iw),fw=Object.getOwnPropertyDescriptor,Gw=function(e){if(!EA)return MA[e];var t=fw(MA,e);return t&&t.value},Vw=Gw("fetch"),Ww=Gw("Request"),Cw=Gw("Headers"),vw=Ww&&Ww.prototype,Rw=Cw&&Cw.prototype,Sw=MA.RegExp,Yw=MA.TypeError,Jw=MA.decodeURIComponent,Kw=MA.encodeURIComponent,Nw=PA("".charAt),Lw=PA([].join),Hw=PA([].push),xw=PA("".replace),kw=PA([].shift),Uw=PA([].splice),Aw=PA("".split),ww=PA("".slice),Fw=/\+/g,Tw=Array(4),Bw=function(e){return Tw[e-1]||(Tw[e-1]=Sw("((?:%[\\da-f]{2}){"+e+"})","gi"))},zw=function(e){try{return Jw(e)}catch(t){return e}},jw=function(e){var t=xw(e,Fw," "),n=4;try{return Jw(t)}catch(e){for(;n;)t=xw(t,Bw(n--),zw);return t}},Mw=/[!'()~]|%20/g,Qw={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Pw=function(e){return Qw[e]},Ew=function(e){return xw(Kw(e),Mw,Pw)},Dw=$A((function(e,t){gw(this,{type:Iw,iterator:sw(yw(e).entries),kind:t})}),"Iterator",(function(){var e=Xw(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value="keys"===t?r.key:"values"===t?r.value:[r.key,r.value]),n}),!0),Ow=function(e){this.entries=[],this.url=null,void 0!==e&&(aw(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===Nw(e,0)?ww(e,1):e:lw(e)))};Ow.prototype={type:pw,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,i,c,o,a,l=mw(e);if(l)for(n=(t=sw(e,l)).next;!(r=QA(n,t)).done;){if(c=(i=sw(ow(r.value))).next,(o=QA(c,i)).done||(a=QA(c,i)).done||!QA(c,i).done)throw Yw("Expected sequence with length 2");Hw(this.entries,{key:lw(o.value),value:lw(a.value)})}else for(var u in e)rw(e,u)&&Hw(this.entries,{key:u,value:lw(e[u])})},parseQuery:function(e){if(e)for(var t,n,r=Aw(e,"&"),i=0;i<r.length;)(t=r[i++]).length&&(n=Aw(t,"="),Hw(this.entries,{key:jw(kw(n)),value:jw(Lw(n,"="))}))},serialize:function(){for(var e,t=this.entries,n=[],r=0;r<t.length;)e=t[r++],Hw(n,Ew(e.key)+"="+Ew(e.value));return Lw(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var _w=function(){tw(this,qw);var e=arguments.length>0?arguments[0]:void 0;gw(this,new Ow(e))},qw=_w.prototype;if(_A(qw,{append:function(e,t){Zw(arguments.length,2);var n=yw(this);Hw(n.entries,{key:lw(e),value:lw(t)}),n.updateURL()},delete:function(e){Zw(arguments.length,1);for(var t=yw(this),n=t.entries,r=lw(e),i=0;i<n.length;)n[i].key===r?Uw(n,i,1):i++;t.updateURL()},get:function(e){Zw(arguments.length,1);for(var t=yw(this).entries,n=lw(e),r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){Zw(arguments.length,1);for(var t=yw(this).entries,n=lw(e),r=[],i=0;i<t.length;i++)t[i].key===n&&Hw(r,t[i].value);return r},has:function(e){Zw(arguments.length,1);for(var t=yw(this).entries,n=lw(e),r=0;r<t.length;)if(t[r++].key===n)return!0;return!1},set:function(e,t){Zw(arguments.length,1);for(var n,r=yw(this),i=r.entries,c=!1,o=lw(e),a=lw(t),l=0;l<i.length;l++)(n=i[l]).key===o&&(c?Uw(i,l--,1):(c=!0,n.value=a));c||Hw(i,{key:o,value:a}),r.updateURL()},sort:function(){var e=yw(this);hw(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=yw(this).entries,r=iw(e,arguments.length>1?arguments[1]:void 0),i=0;i<n.length;)r((t=n[i++]).value,t.key,this)},keys:function(){return new Dw(this,"keys")},values:function(){return new Dw(this,"values")},entries:function(){return new Dw(this,"entries")}},{enumerable:!0}),OA(qw,bw,qw.entries,{name:"entries"}),OA(qw,"toString",(function(){return yw(this).serialize()}),{enumerable:!0}),qA(_w,pw),jA({global:!0,forced:!DA},{URLSearchParams:_w}),!DA&&nw(Cw)){var $w=PA(Rw.has),eF=PA(Rw.set),tF=function(e){if(aw(e)){var t,n=e.body;if(cw(n)===pw)return t=e.headers?new Cw(e.headers):new Cw,$w(t,"content-type")||eF(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),uw(e,{body:dw(0,lw(n)),headers:dw(0,t)})}return e};if(nw(Vw)&&jA({global:!0,enumerable:!0,noTargetGet:!0,forced:!0},{fetch:function(e){return Vw(e,arguments.length>1?tF(arguments[1]):{})}}),nw(Ww)){var nF=function(e){return tw(this,vw),new Ww(e,arguments.length>1?tF(arguments[1]):{})};vw.constructor=nF,nF.prototype=vw,jA({global:!0,forced:!0,noTargetGet:!0},{Request:nF})}}var rF,iF=Ci,cF=K,oF=CA,aF=S,lF=jc,uF=E,dF=Vr,sF=AR,mF=UZ,ZF=lt,hF=zy,bF=Ud,pF=yc,IF=RS.codeAt,gF=function(e){var t,n,r=[],i=wA(AA(FA(e),YA,"."),".");for(t=0;t<i.length;t++)n=i[t],UA(r,NA(SA,n)?"xn--"+zA(n):n);return kA(r,".")},yF=Ai,XF=Fc,fF=wf,GF={URLSearchParams:_w,getState:yw},VF=or,WF=VF.set,CF=VF.getterFor("URL"),vF=GF.URLSearchParams,RF=GF.getState,SF=aF.URL,YF=aF.TypeError,JF=aF.parseInt,KF=Math.floor,NF=Math.pow,LF=uF("".charAt),HF=uF(/./.exec),xF=uF([].join),kF=uF(1..toString),UF=uF([].pop),AF=uF([].push),wF=uF("".replace),FF=uF([].shift),TF=uF("".split),BF=uF("".slice),zF=uF("".toLowerCase),jF=uF([].unshift),MF="Invalid scheme",QF="Invalid host",PF="Invalid port",EF=/[a-z]/i,DF=/[\d+-.a-z]/i,OF=/\d/,_F=/^0x/i,qF=/^[0-7]+$/,$F=/^\d+$/,eT=/^[\da-f]+$/i,tT=/[\0\t\n\r #%/:<>?@[\\\]^|]/,nT=/[\0\t\n\r #/:<>?@[\\\]^|]/,rT=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,iT=/[\t\n\r]/g,cT=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)jF(t,e%256),e=KF(e/256);return xF(t,".")}if("object"==o(e)){for(t="",r=function(e){for(var t=null,n=1,r=null,i=0,c=0;c<8;c++)0!==e[c]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=c),++i);return i>n&&(t=r,n=i),t}(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=kF(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},oT={},aT=hF({},oT,{" ":1,'"':1,"<":1,">":1,"`":1}),lT=hF({},aT,{"#":1,"?":1,"{":1,"}":1}),uT=hF({},lT,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),dT=function(e,t){var n=IF(e,0);return n>32&&n<127&&!ZF(t,e)?e:encodeURIComponent(e)},sT={ftp:21,file:null,http:80,https:443,ws:80,wss:443},mT=function(e,t){var n;return 2==e.length&&HF(EF,LF(e,0))&&(":"==(n=LF(e,1))||!t&&"|"==n)},ZT=function(e){var t;return e.length>1&&mT(BF(e,0,2))&&(2==e.length||"/"===(t=LF(e,2))||"\\"===t||"?"===t||"#"===t)},hT=function(e){return"."===e||"%2e"===zF(e)},bT={},pT={},IT={},gT={},yT={},XT={},fT={},GT={},VT={},WT={},CT={},vT={},RT={},ST={},YT={},JT={},KT={},NT={},LT={},HT={},xT={},kT=function e(t,n,r){var i,c,o,a=yF(t);if(n){if(c=this.parse(a))throw YF(c);this.searchParams=null}else{if(void 0!==r&&(i=new e(r,!0)),c=this.parse(a,null,i))throw YF(c);(o=RF(new vF)).bindURL(this),this.searchParams=o}};kT.prototype={type:"URL",parse:function(e,t,n){var r,i,c,o,a,l=this,u=t||bT,d=0,s="",m=!1,Z=!1,h=!1;for(e=yF(e),t||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,e=wF(e,rT,"")),e=wF(e,iT,""),r=bF(e);d<=r.length;){switch(i=r[d],u){case bT:if(!i||!HF(EF,i)){if(t)return MF;u=IT;continue}s+=zF(i),u=pT;break;case pT:if(i&&(HF(DF,i)||"+"==i||"-"==i||"."==i))s+=zF(i);else{if(":"!=i){if(t)return MF;s="",u=IT,d=0;continue}if(t&&(l.isSpecial()!=ZF(sT,s)||"file"==s&&(l.includesCredentials()||null!==l.port)||"file"==l.scheme&&!l.host))return;if(l.scheme=s,t)return void(l.isSpecial()&&sT[l.scheme]==l.port&&(l.port=null));s="","file"==l.scheme?u=ST:l.isSpecial()&&n&&n.scheme==l.scheme?u=gT:l.isSpecial()?u=GT:"/"==r[d+1]?(u=yT,d++):(l.cannotBeABaseURL=!0,AF(l.path,""),u=LT)}break;case IT:if(!n||n.cannotBeABaseURL&&"#"!=i)return MF;if(n.cannotBeABaseURL&&"#"==i){l.scheme=n.scheme,l.path=pF(n.path),l.query=n.query,l.fragment="",l.cannotBeABaseURL=!0,u=xT;break}u="file"==n.scheme?ST:XT;continue;case gT:if("/"!=i||"/"!=r[d+1]){u=XT;continue}u=VT,d++;break;case yT:if("/"==i){u=WT;break}u=NT;continue;case XT:if(l.scheme=n.scheme,i==rF)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=pF(n.path),l.query=n.query;else if("/"==i||"\\"==i&&l.isSpecial())u=fT;else if("?"==i)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=pF(n.path),l.query="",u=HT;else{if("#"!=i){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=pF(n.path),l.path.length--,u=NT;continue}l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=pF(n.path),l.query=n.query,l.fragment="",u=xT}break;case fT:if(!l.isSpecial()||"/"!=i&&"\\"!=i){if("/"!=i){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,u=NT;continue}u=WT}else u=VT;break;case GT:if(u=VT,"/"!=i||"/"!=LF(s,d+1))continue;d++;break;case VT:if("/"!=i&&"\\"!=i){u=WT;continue}break;case WT:if("@"==i){m&&(s="%40"+s),m=!0,c=bF(s);for(var b=0;b<c.length;b++){var p=c[b];if(":"!=p||h){var I=dT(p,uT);h?l.password+=I:l.username+=I}else h=!0}s=""}else if(i==rF||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(m&&""==s)return"Invalid authority";d-=bF(s).length+1,s="",u=CT}else s+=i;break;case CT:case vT:if(t&&"file"==l.scheme){u=JT;continue}if(":"!=i||Z){if(i==rF||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(l.isSpecial()&&""==s)return QF;if(t&&""==s&&(l.includesCredentials()||null!==l.port))return;if(o=l.parseHost(s))return o;if(s="",u=KT,t)return;continue}"["==i?Z=!0:"]"==i&&(Z=!1),s+=i}else{if(""==s)return QF;if(o=l.parseHost(s))return o;if(s="",u=RT,t==vT)return}break;case RT:if(!HF(OF,i)){if(i==rF||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()||t){if(""!=s){var g=JF(s,10);if(g>65535)return PF;l.port=l.isSpecial()&&g===sT[l.scheme]?null:g,s=""}if(t)return;u=KT;continue}return PF}s+=i;break;case ST:if(l.scheme="file","/"==i||"\\"==i)u=YT;else{if(!n||"file"!=n.scheme){u=NT;continue}if(i==rF)l.host=n.host,l.path=pF(n.path),l.query=n.query;else if("?"==i)l.host=n.host,l.path=pF(n.path),l.query="",u=HT;else{if("#"!=i){ZT(xF(pF(r,d),""))||(l.host=n.host,l.path=pF(n.path),l.shortenPath()),u=NT;continue}l.host=n.host,l.path=pF(n.path),l.query=n.query,l.fragment="",u=xT}}break;case YT:if("/"==i||"\\"==i){u=JT;break}n&&"file"==n.scheme&&!ZT(xF(pF(r,d),""))&&(mT(n.path[0],!0)?AF(l.path,n.path[0]):l.host=n.host),u=NT;continue;case JT:if(i==rF||"/"==i||"\\"==i||"?"==i||"#"==i){if(!t&&mT(s))u=NT;else if(""==s){if(l.host="",t)return;u=KT}else{if(o=l.parseHost(s))return o;if("localhost"==l.host&&(l.host=""),t)return;s="",u=KT}continue}s+=i;break;case KT:if(l.isSpecial()){if(u=NT,"/"!=i&&"\\"!=i)continue}else if(t||"?"!=i)if(t||"#"!=i){if(i!=rF&&(u=NT,"/"!=i))continue}else l.fragment="",u=xT;else l.query="",u=HT;break;case NT:if(i==rF||"/"==i||"\\"==i&&l.isSpecial()||!t&&("?"==i||"#"==i)){if(".."===(a=zF(a=s))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(l.shortenPath(),"/"==i||"\\"==i&&l.isSpecial()||AF(l.path,"")):hT(s)?"/"==i||"\\"==i&&l.isSpecial()||AF(l.path,""):("file"==l.scheme&&!l.path.length&&mT(s)&&(l.host&&(l.host=""),s=LF(s,0)+":"),AF(l.path,s)),s="","file"==l.scheme&&(i==rF||"?"==i||"#"==i))for(;l.path.length>1&&""===l.path[0];)FF(l.path);"?"==i?(l.query="",u=HT):"#"==i&&(l.fragment="",u=xT)}else s+=dT(i,lT);break;case LT:"?"==i?(l.query="",u=HT):"#"==i?(l.fragment="",u=xT):i!=rF&&(l.path[0]+=dT(i,oT));break;case HT:t||"#"!=i?i!=rF&&("'"==i&&l.isSpecial()?l.query+="%27":l.query+="#"==i?"%23":dT(i,oT)):(l.fragment="",u=xT);break;case xT:i!=rF&&(l.fragment+=dT(i,aT))}d++}},parseHost:function(e){var t,n,r;if("["==LF(e,0)){if("]"!=LF(e,e.length-1))return QF;if(t=function(e){var t,n,r,i,c,o,a,l=[0,0,0,0,0,0,0,0],u=0,d=null,s=0,m=function(){return LF(e,s)};if(":"==m()){if(":"!=LF(e,1))return;s+=2,d=++u}for(;m();){if(8==u)return;if(":"!=m()){for(t=n=0;n<4&&HF(eT,m());)t=16*t+JF(m(),16),s++,n++;if("."==m()){if(0==n)return;if(s-=n,u>6)return;for(r=0;m();){if(i=null,r>0){if(!("."==m()&&r<4))return;s++}if(!HF(OF,m()))return;for(;HF(OF,m());){if(c=JF(m(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;s++}l[u]=256*l[u]+i,2!=++r&&4!=r||u++}if(4!=r)return;break}if(":"==m()){if(s++,!m())return}else if(m())return;l[u++]=t}else{if(null!==d)return;s++,d=++u}}if(null!==d)for(o=u-d,u=7;0!=u&&o>0;)a=l[u],l[u--]=l[d+o-1],l[d+--o]=a;else if(8!=u)return;return l}(BF(e,1,-1)),!t)return QF;this.host=t}else if(this.isSpecial()){if(e=gF(e),HF(tT,e))return QF;if(t=function(e){var t,n,r,i,c,o,a,l=TF(e,".");if(l.length&&""==l[l.length-1]&&l.length--,(t=l.length)>4)return e;for(n=[],r=0;r<t;r++){if(""==(i=l[r]))return e;if(c=10,i.length>1&&"0"==LF(i,0)&&(c=HF(_F,i)?16:8,i=BF(i,8==c?1:2)),""===i)o=0;else{if(!HF(10==c?$F:8==c?qF:eT,i))return e;o=JF(i,c)}AF(n,o)}for(r=0;r<t;r++)if(o=n[r],r==t-1){if(o>=NF(256,5-t))return null}else if(o>255)return null;for(a=UF(n),r=0;r<n.length;r++)a+=n[r]*NF(256,3-r);return a}(e),null===t)return QF;this.host=t}else{if(HF(nT,e))return QF;for(t="",n=bF(e),r=0;r<n.length;r++)t+=dT(n[r],oT);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return ZF(sT,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&mT(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,n=e.username,r=e.password,i=e.host,c=e.port,o=e.path,a=e.query,l=e.fragment,u=t+":";return null!==i?(u+="//",e.includesCredentials()&&(u+=n+(r?":"+r:"")+"@"),u+=cT(i),null!==c&&(u+=":"+c)):"file"==t&&(u+="//"),u+=e.cannotBeABaseURL?o[0]:o.length?"/"+xF(o,"/"):"",null!==a&&(u+="?"+a),null!==l&&(u+="#"+l),u},setHref:function(e){var t=this.parse(e);if(t)throw YF(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new UT(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+cT(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(yF(e)+":",bT)},getUsername:function(){return this.username},setUsername:function(e){var t=bF(yF(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<t.length;n++)this.username+=dT(t[n],uT)}},getPassword:function(){return this.password},setPassword:function(e){var t=bF(yF(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<t.length;n++)this.password+=dT(t[n],uT)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?cT(e):cT(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,CT)},getHostname:function(){var e=this.host;return null===e?"":cT(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,vT)},getPort:function(){var e=this.port;return null===e?"":yF(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=yF(e))?this.port=null:this.parse(e,RT))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+xF(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,KT))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=yF(e))?this.query=null:("?"==LF(e,0)&&(e=BF(e,1)),this.query="",this.parse(e,HT)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=yF(e))?("#"==LF(e,0)&&(e=BF(e,1)),this.fragment="",this.parse(e,xT)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var UT=function(e){var t=mF(this,AT),n=fF(arguments.length,1)>1?arguments[1]:void 0,r=WF(t,new kT(e,!1,n));cF||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},AT=UT.prototype,wT=function(e,t){return{get:function(){return CF(this)[e]()},set:t&&function(e){return CF(this)[t](e)},configurable:!0,enumerable:!0}};if(cF&&(sF(AT,"href",wT("serialize","setHref")),sF(AT,"origin",wT("getOrigin")),sF(AT,"protocol",wT("getProtocol","setProtocol")),sF(AT,"username",wT("getUsername","setUsername")),sF(AT,"password",wT("getPassword","setPassword")),sF(AT,"host",wT("getHost","setHost")),sF(AT,"hostname",wT("getHostname","setHostname")),sF(AT,"port",wT("getPort","setPort")),sF(AT,"pathname",wT("getPathname","setPathname")),sF(AT,"search",wT("getSearch","setSearch")),sF(AT,"searchParams",wT("getSearchParams")),sF(AT,"hash",wT("getHash","setHash"))),dF(AT,"toJSON",(function(){return CF(this).serialize()}),{enumerable:!0}),dF(AT,"toString",(function(){return CF(this).serialize()}),{enumerable:!0}),SF){var FT=SF.createObjectURL,TT=SF.revokeObjectURL;FT&&dF(UT,"createObjectURL",lF(FT,SF)),TT&&dF(UT,"revokeObjectURL",lF(TT,SF))}XF(UT,"URL"),iF({global:!0,forced:!oF,sham:!cF},{URL:UT});var BT=x;function zT(e,t,n,r){return new(n||(n=Promise))((function(i,c){function o(e){try{l(r.next(e))}catch(e){c(e)}}function a(e){try{l(r.throw(e))}catch(e){c(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))}
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).AsgardeoAuth={})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function i(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})})),e}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function c(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){h(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function o(){
2
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
3
+ o=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},r=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function l(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,n){return t[e]=n}}function u(t,e,n,i){var r=e&&e.prototype instanceof m?e:m,c=Object.create(r.prototype),o=new W(i||[]);return c._invoke=function(t,e,n){var i="suspendedStart";return function(r,c){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===r)throw c;return C()}for(n.method=r,n.arg=c;;){var o=n.delegate;if(o){var a=G(o,n);if(a){if(a===s)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===i)throw i="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i="executing";var l=d(t,e,n);if("normal"===l.type){if(i=n.done?"completed":"suspendedYield",l.arg===s)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i="completed",n.method="throw",n.arg=l.arg)}}}(t,n,o),c}function d(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var s={};function m(){}function h(){}function b(){}var p={};l(p,r,(function(){return this}));var Z=Object.getPrototypeOf,I=Z&&Z(Z(v([])));I&&I!==e&&n.call(I,r)&&(p=I);var y=b.prototype=m.prototype=Object.create(p);function g(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function X(t,e){function i(r,c,o,a){var l=d(t[r],t,c);if("throw"!==l.type){var u=l.arg,s=u.value;return s&&"object"==typeof s&&n.call(s,"__await")?e.resolve(s.__await).then((function(t){i("next",t,o,a)}),(function(t){i("throw",t,o,a)})):e.resolve(s).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,a)}))}a(l.arg)}var r;this._invoke=function(t,n){function c(){return new e((function(e,r){i(t,n,e,r)}))}return r=r?r.then(c,c):c()}}function G(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,G(t,e),"throw"===e.method))return s;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return s}var i=d(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,s;var r=i.arg;return r?r.done?(e[t.resultName]=r.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,s):r:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,s)}function f(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function V(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(f,this),this.reset(!0)}function v(t){if(t){var e=t[r];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,c=function e(){for(;++i<t.length;)if(n.call(t,i))return e.value=t[i],e.done=!1,e;return e.value=void 0,e.done=!0,e};return c.next=c}}return{next:C}}function C(){return{value:void 0,done:!0}}return h.prototype=b,l(y,"constructor",b),l(b,"constructor",h),h.displayName=l(b,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===h||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,l(t,a,"GeneratorFunction")),t.prototype=Object.create(y),t},t.awrap=function(t){return{__await:t}},g(X.prototype),l(X.prototype,c,(function(){return this})),t.AsyncIterator=X,t.async=function(e,n,i,r,c){void 0===c&&(c=Promise);var o=new X(u(e,n,i,r),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},g(y),l(y,a,"Generator"),l(y,r,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var i=e.pop();if(i in t)return n.value=i,n.done=!1,n}return n.done=!0,n}},t.values=v,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function i(n,i){return o.type="throw",o.arg=t,e.next=n,i&&(e.method="next",e.arg=void 0),!!i}for(var r=this.tryEntries.length-1;r>=0;--r){var c=this.tryEntries[r],o=c.completion;if("root"===c.tryLoc)return i("end");if(c.tryLoc<=this.prev){var a=n.call(c,"catchLoc"),l=n.call(c,"finallyLoc");if(a&&l){if(this.prev<c.catchLoc)return i(c.catchLoc,!0);if(this.prev<c.finallyLoc)return i(c.finallyLoc)}else if(a){if(this.prev<c.catchLoc)return i(c.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return i(c.finallyLoc)}}}},abrupt:function(t,e){for(var i=this.tryEntries.length-1;i>=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var c=r;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=e,c?(this.method="next",this.next=c.finallyLoc,s):this.complete(o)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),s},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),s}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var i=n.completion;if("throw"===i.type){var r=i.arg;V(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:v(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),s}},t}function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function l(t,e,n,i,r,c,o){try{var a=t[c](o),l=a.value}catch(t){return void n(t)}a.done?e(l):Promise.resolve(l).then(i,r)}function u(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var c=t.apply(e,n);function o(t){l(c,i,r,o,a,"next",t)}function a(t){l(c,i,r,o,a,"throw",t)}o(void 0)}))}}function d(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function m(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function b(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Z(t,e)}function p(t){return p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},p(t)}function Z(t,e){return Z=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},Z(t,e)}function I(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function y(t,e,n){return y=I()?Reflect.construct:function(t,e,n){var i=[null];i.push.apply(i,e);var r=new(Function.bind.apply(t,i));return n&&Z(r,n.prototype),r},y.apply(null,arguments)}function g(t){var e="function"==typeof Map?new Map:void 0;return g=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,i)}function i(){return y(t,arguments,p(this).constructor)}return i.prototype=Object.create(t.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),Z(i,t)},g(t)}function X(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function G(t,e){if(e&&("object"==typeof e||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return X(t)}function f(t){var e=I();return function(){var n,i=p(t);if(e){var r=p(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return G(this,n)}}function V(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var i,r,c=[],o=!0,a=!1;try{for(n=n.call(t);!(o=(i=n.next()).done)&&(c.push(i.value),!e||c.length!==e);o=!0);}catch(t){a=!0,r=t}finally{try{o||null==n.return||n.return()}finally{if(a)throw r}}return c}(t,e)||v(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function W(t){return function(t){if(Array.isArray(t))return C(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||v(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(t,e){if(t){if("string"==typeof t)return C(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(t,e):void 0}}function C(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function S(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=v(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,o=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){a=!0,c=t},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw c}}}}var Y=function(t){return t&&t.Math==Math&&t},R=Y("object"==("undefined"==typeof globalThis?"undefined":a(globalThis))&&globalThis)||Y("object"==("undefined"==typeof window?"undefined":a(window))&&window)||Y("object"==("undefined"==typeof self?"undefined":a(self))&&self)||Y("object"==a(e)&&e)||function(){return this}()||Function("return this")(),K={},N=function(t){try{return!!t()}catch(t){return!0}},L=!N((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),J=!N((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),x=J,H=Function.prototype.call,k=x?H.bind(H):function(){return H.apply(H,arguments)},U={},T={}.propertyIsEnumerable,w=Object.getOwnPropertyDescriptor,F=w&&!T.call({1:2},1);U.f=F?function(t){var e=w(this,t);return!!e&&e.enumerable}:T;var A,B,z=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},j=J,M=Function.prototype,Q=M.bind,P=M.call,E=j&&Q.bind(P,P),D=j?function(t){return t&&E(t)}:function(t){return t&&function(){return P.apply(t,arguments)}},O=D,_=O({}.toString),q=O("".slice),$=function(t){return q(_(t),8,-1)},tt=D,et=N,nt=$,it=R.Object,rt=tt("".split),ct=et((function(){return!it("z").propertyIsEnumerable(0)}))?function(t){return"String"==nt(t)?rt(t,""):it(t)}:it,ot=R.TypeError,at=function(t){if(null==t)throw ot("Can't call method on "+t);return t},lt=ct,ut=at,dt=function(t){return lt(ut(t))},st=function(t){return"function"==typeof t},mt=st,ht=function(t){return"object"==a(t)?null!==t:mt(t)},bt=R,pt=st,Zt=function(t){return pt(t)?t:void 0},It=function(t,e){return arguments.length<2?Zt(bt[t]):bt[t]&&bt[t][e]},yt=D({}.isPrototypeOf),gt=It("navigator","userAgent")||"",Xt=R,Gt=gt,ft=Xt.process,Vt=Xt.Deno,Wt=ft&&ft.versions||Vt&&Vt.version,vt=Wt&&Wt.v8;vt&&(B=(A=vt.split("."))[0]>0&&A[0]<4?1:+(A[0]+A[1])),!B&&Gt&&(!(A=Gt.match(/Edge\/(\d+)/))||A[1]>=74)&&(A=Gt.match(/Chrome\/(\d+)/))&&(B=+A[1]);var Ct=B,St=Ct,Yt=N,Rt=!!Object.getOwnPropertySymbols&&!Yt((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&St&&St<41})),Kt=Rt&&!Symbol.sham&&"symbol"==a(Symbol.iterator),Nt=It,Lt=st,Jt=yt,xt=Kt,Ht=R.Object,kt=xt?function(t){return"symbol"==a(t)}:function(t){var e=Nt("Symbol");return Lt(e)&&Jt(e.prototype,Ht(t))},Ut=R.String,Tt=function(t){try{return Ut(t)}catch(t){return"Object"}},wt=st,Ft=Tt,At=R.TypeError,Bt=function(t){if(wt(t))return t;throw At(Ft(t)+" is not a function")},zt=Bt,jt=function(t,e){var n=t[e];return null==n?void 0:zt(n)},Mt=k,Qt=st,Pt=ht,Et=R.TypeError,Dt=function(t,e){var n,i;if("string"===e&&Qt(n=t.toString)&&!Pt(i=Mt(n,t)))return i;if(Qt(n=t.valueOf)&&!Pt(i=Mt(n,t)))return i;if("string"!==e&&Qt(n=t.toString)&&!Pt(i=Mt(n,t)))return i;throw Et("Can't convert object to primitive value")},Ot={exports:{}},_t=R,qt=Object.defineProperty,$t=function(t,e){try{qt(_t,t,{value:e,configurable:!0,writable:!0})}catch(n){_t[t]=e}return e},te=$t,ee="__core-js_shared__",ne=R[ee]||te(ee,{}),ie=ne;(Ot.exports=function(t,e){return ie[t]||(ie[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.6",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.6/LICENSE",source:"https://github.com/zloirock/core-js"});var re=at,ce=R.Object,oe=function(t){return ce(re(t))},ae=oe,le=D({}.hasOwnProperty),ue=Object.hasOwn||function(t,e){return le(ae(t),e)},de=D,se=0,me=Math.random(),he=de(1..toString),be=function(t){return"Symbol("+(void 0===t?"":t)+")_"+he(++se+me,36)},pe=R,Ze=Ot.exports,Ie=ue,ye=be,ge=Rt,Xe=Kt,Ge=Ze("wks"),fe=pe.Symbol,Ve=fe&&fe.for,We=Xe?fe:fe&&fe.withoutSetter||ye,ve=function(t){if(!Ie(Ge,t)||!ge&&"string"!=typeof Ge[t]){var e="Symbol."+t;ge&&Ie(fe,t)?Ge[t]=fe[t]:Ge[t]=Xe&&Ve?Ve(e):We(e)}return Ge[t]},Ce=k,Se=ht,Ye=kt,Re=jt,Ke=Dt,Ne=ve,Le=R.TypeError,Je=Ne("toPrimitive"),xe=function(t,e){if(!Se(t)||Ye(t))return t;var n,i=Re(t,Je);if(i){if(void 0===e&&(e="default"),n=Ce(i,t,e),!Se(n)||Ye(n))return n;throw Le("Can't convert object to primitive value")}return void 0===e&&(e="number"),Ke(t,e)},He=xe,ke=kt,Ue=function(t){var e=He(t,"string");return ke(e)?e:e+""},Te=ht,we=R.document,Fe=Te(we)&&Te(we.createElement),Ae=function(t){return Fe?we.createElement(t):{}},Be=Ae,ze=!L&&!N((function(){return 7!=Object.defineProperty(Be("div"),"a",{get:function(){return 7}}).a})),je=L,Me=k,Qe=U,Pe=z,Ee=dt,De=Ue,Oe=ue,_e=ze,qe=Object.getOwnPropertyDescriptor;K.f=je?qe:function(t,e){if(t=Ee(t),e=De(e),_e)try{return qe(t,e)}catch(t){}if(Oe(t,e))return Pe(!Me(Qe.f,t,e),t[e])};var $e={},tn=L&&N((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),en=R,nn=ht,rn=en.String,cn=en.TypeError,on=function(t){if(nn(t))return t;throw cn(rn(t)+" is not an object")},an=L,ln=ze,un=tn,dn=on,sn=Ue,mn=R.TypeError,hn=Object.defineProperty,bn=Object.getOwnPropertyDescriptor,pn="enumerable",Zn="configurable",In="writable";$e.f=an?un?function(t,e,n){if(dn(t),e=sn(e),dn(n),"function"==typeof t&&"prototype"===e&&"value"in n&&In in n&&!n.writable){var i=bn(t,e);i&&i.writable&&(t[e]=n.value,n={configurable:Zn in n?n.configurable:i.configurable,enumerable:pn in n?n.enumerable:i.enumerable,writable:!1})}return hn(t,e,n)}:hn:function(t,e,n){if(dn(t),e=sn(e),dn(n),ln)try{return hn(t,e,n)}catch(t){}if("get"in n||"set"in n)throw mn("Accessors not supported");return"value"in n&&(t[e]=n.value),t};var yn=$e,gn=z,Xn=L?function(t,e,n){return yn.f(t,e,gn(1,n))}:function(t,e,n){return t[e]=n,t},Gn={exports:{}},fn=L,Vn=ue,Wn=Function.prototype,vn=fn&&Object.getOwnPropertyDescriptor,Cn=Vn(Wn,"name"),Sn={EXISTS:Cn,PROPER:Cn&&"something"===function(){}.name,CONFIGURABLE:Cn&&(!fn||fn&&vn(Wn,"name").configurable)},Yn=st,Rn=ne,Kn=D(Function.toString);Yn(Rn.inspectSource)||(Rn.inspectSource=function(t){return Kn(t)});var Nn,Ln,Jn,xn=Rn.inspectSource,Hn=st,kn=xn,Un=R.WeakMap,Tn=Hn(Un)&&/native code/.test(kn(Un)),wn=Ot.exports,Fn=be,An=wn("keys"),Bn=function(t){return An[t]||(An[t]=Fn(t))},zn={},jn=Tn,Mn=R,Qn=D,Pn=ht,En=Xn,Dn=ue,On=ne,_n=Bn,qn=zn,$n="Object already initialized",ti=Mn.TypeError,ei=Mn.WeakMap;if(jn||On.state){var ni=On.state||(On.state=new ei),ii=Qn(ni.get),ri=Qn(ni.has),ci=Qn(ni.set);Nn=function(t,e){if(ri(ni,t))throw new ti($n);return e.facade=t,ci(ni,t,e),e},Ln=function(t){return ii(ni,t)||{}},Jn=function(t){return ri(ni,t)}}else{var oi=_n("state");qn[oi]=!0,Nn=function(t,e){if(Dn(t,oi))throw new ti($n);return e.facade=t,En(t,oi,e),e},Ln=function(t){return Dn(t,oi)?t[oi]:{}},Jn=function(t){return Dn(t,oi)}}var ai={set:Nn,get:Ln,has:Jn,enforce:function(t){return Jn(t)?Ln(t):Nn(t,{})},getterFor:function(t){return function(e){var n;if(!Pn(e)||(n=Ln(e)).type!==t)throw ti("Incompatible receiver, "+t+" required");return n}}},li=N,ui=st,di=ue,si=L,mi=Sn.CONFIGURABLE,hi=xn,bi=ai.enforce,pi=ai.get,Zi=Object.defineProperty,Ii=si&&!li((function(){return 8!==Zi((function(){}),"length",{value:8}).length})),yi=String(String).split("String"),gi=Gn.exports=function(t,e,n){if("Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!di(t,"name")||mi&&t.name!==e)&&Zi(t,"name",{value:e,configurable:!0}),Ii&&n&&di(n,"arity")&&t.length!==n.arity&&Zi(t,"length",{value:n.arity}),n&&di(n,"constructor")&&n.constructor){if(si)try{Zi(t,"prototype",{writable:!1})}catch(t){}}else t.prototype=void 0;var i=bi(t);return di(i,"source")||(i.source=yi.join("string"==typeof e?e:"")),t};Function.prototype.toString=gi((function(){return ui(this)&&pi(this).source||hi(this)}),"toString");var Xi=st,Gi=Xn,fi=Gn.exports,Vi=$t,Wi=function(t,e,n,i){i||(i={});var r=i.enumerable,c=void 0!==i.name?i.name:e;return Xi(n)&&fi(n,c,i),i.global?r?t[e]=n:Vi(e,n):(i.unsafe?t[e]&&(r=!0):delete t[e],r?t[e]=n:Gi(t,e,n)),t},vi={},Ci=Math.ceil,Si=Math.floor,Yi=Math.trunc||function(t){var e=+t;return(e>0?Si:Ci)(e)},Ri=Yi,Ki=function(t){var e=+t;return e!=e||0===e?0:Ri(e)},Ni=Ki,Li=Math.max,Ji=Math.min,xi=function(t,e){var n=Ni(t);return n<0?Li(n+e,0):Ji(n,e)},Hi=Ki,ki=Math.min,Ui=function(t){return t>0?ki(Hi(t),9007199254740991):0},Ti=Ui,wi=function(t){return Ti(t.length)},Fi=dt,Ai=xi,Bi=wi,zi=function(t){return function(e,n,i){var r,c=Fi(e),o=Bi(c),a=Ai(i,o);if(t&&n!=n){for(;o>a;)if((r=c[a++])!=r)return!0}else for(;o>a;a++)if((t||a in c)&&c[a]===n)return t||a||0;return!t&&-1}},ji={includes:zi(!0),indexOf:zi(!1)},Mi=ue,Qi=dt,Pi=ji.indexOf,Ei=zn,Di=D([].push),Oi=function(t,e){var n,i=Qi(t),r=0,c=[];for(n in i)!Mi(Ei,n)&&Mi(i,n)&&Di(c,n);for(;e.length>r;)Mi(i,n=e[r++])&&(~Pi(c,n)||Di(c,n));return c},_i=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],qi=Oi,$i=_i.concat("length","prototype");vi.f=Object.getOwnPropertyNames||function(t){return qi(t,$i)};var tr={};tr.f=Object.getOwnPropertySymbols;var er=It,nr=vi,ir=tr,rr=on,cr=D([].concat),or=er("Reflect","ownKeys")||function(t){var e=nr.f(rr(t)),n=ir.f;return n?cr(e,n(t)):e},ar=ue,lr=or,ur=K,dr=$e,sr=function(t,e,n){for(var i=lr(e),r=dr.f,c=ur.f,o=0;o<i.length;o++){var a=i[o];ar(t,a)||n&&ar(n,a)||r(t,a,c(e,a))}},mr=N,hr=st,br=/#|\.prototype\./,pr=function(t,e){var n=Ir[Zr(t)];return n==gr||n!=yr&&(hr(e)?mr(e):!!e)},Zr=pr.normalize=function(t){return String(t).replace(br,".").toLowerCase()},Ir=pr.data={},yr=pr.NATIVE="N",gr=pr.POLYFILL="P",Xr=pr,Gr=R,fr=K.f,Vr=Xn,Wr=Wi,vr=$t,Cr=sr,Sr=Xr,Yr=function(t,e){var n,i,r,c,o,l=t.target,u=t.global,d=t.stat;if(n=u?Gr:d?Gr[l]||vr(l,{}):(Gr[l]||{}).prototype)for(i in e){if(c=e[i],r=t.dontCallGetSet?(o=fr(n,i))&&o.value:n[i],!Sr(u?i:l+(d?".":"#")+i,t.forced)&&void 0!==r){if(a(c)==a(r))continue;Cr(c,r)}(t.sham||r&&r.sham)&&Vr(c,"sham",!0),Wr(n,i,c,t)}},Rr={};Rr[ve("toStringTag")]="z";var Kr="[object z]"===String(Rr),Nr=R,Lr=Kr,Jr=st,xr=$,Hr=ve("toStringTag"),kr=Nr.Object,Ur="Arguments"==xr(function(){return arguments}()),Tr=Lr?xr:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=kr(t),Hr))?n:Ur?xr(e):"Object"==(i=xr(e))&&Jr(e.callee)?"Arguments":i},wr=Tr,Fr=R.String,Ar=function(t){if("Symbol"===wr(t))throw TypeError("Cannot convert a Symbol value to a string");return Fr(t)},Br={},zr=Oi,jr=_i,Mr=Object.keys||function(t){return zr(t,jr)},Qr=L,Pr=tn,Er=$e,Dr=on,Or=dt,_r=Mr;Br.f=Qr&&!Pr?Object.defineProperties:function(t,e){Dr(t);for(var n,i=Or(e),r=_r(e),c=r.length,o=0;c>o;)Er.f(t,n=r[o++],i[n]);return t};var qr,$r=It("document","documentElement"),tc=on,ec=Br,nc=_i,ic=zn,rc=$r,cc=Ae,oc=Bn("IE_PROTO"),ac=function(){},lc=function(t){return"<script>"+t+"</"+"script>"},uc=function(t){t.write(lc("")),t.close();var e=t.parentWindow.Object;return t=null,e},dc=function(){try{qr=new ActiveXObject("htmlfile")}catch(t){}var t,e;dc="undefined"!=typeof document?document.domain&&qr?uc(qr):((e=cc("iframe")).style.display="none",rc.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(lc("document.F=Object")),t.close(),t.F):uc(qr);for(var n=nc.length;n--;)delete dc.prototype[nc[n]];return dc()};ic[oc]=!0;var sc=Object.create||function(t,e){var n;return null!==t?(ac.prototype=tc(t),n=new ac,ac.prototype=null,n[oc]=t):n=dc(),void 0===e?n:ec.f(n,e)},mc={},hc=Ue,bc=$e,pc=z,Zc=function(t,e,n){var i=hc(e);i in t?bc.f(t,i,pc(0,n)):t[i]=n},Ic=xi,yc=wi,gc=Zc,Xc=R.Array,Gc=Math.max,fc=function(t,e,n){for(var i=yc(t),r=Ic(e,i),c=Ic(void 0===n?i:n,i),o=Xc(Gc(c-r,0)),a=0;r<c;r++,a++)gc(o,a,t[r]);return o.length=a,o},Vc=$,Wc=dt,vc=vi.f,Cc=fc,Sc="object"==("undefined"==typeof window?"undefined":a(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];mc.f=function(t){return Sc&&"Window"==Vc(t)?function(t){try{return vc(t)}catch(t){return Cc(Sc)}}(t):vc(Wc(t))};var Yc={},Rc=ve;Yc.f=Rc;var Kc=R,Nc=ue,Lc=Yc,Jc=$e.f,xc=function(t){var e=Kc.Symbol||(Kc.Symbol={});Nc(e,t)||Jc(e,t,{value:Lc.f(t)})},Hc=k,kc=It,Uc=ve,Tc=Wi,wc=function(){var t=kc("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,i=Uc("toPrimitive");e&&!e[i]&&Tc(e,i,(function(t){return Hc(n,this)}),{arity:1})},Fc=$e.f,Ac=ue,Bc=ve("toStringTag"),zc=function(t,e,n){t&&!n&&(t=t.prototype),t&&!Ac(t,Bc)&&Fc(t,Bc,{configurable:!0,value:e})},jc=Bt,Mc=J,Qc=D(D.bind),Pc=function(t,e){return jc(t),void 0===e?t:Mc?Qc(t,e):function(){return t.apply(e,arguments)}},Ec=$,Dc=Array.isArray||function(t){return"Array"==Ec(t)},Oc=D,_c=N,qc=st,$c=Tr,to=xn,eo=function(){},no=[],io=It("Reflect","construct"),ro=/^\s*(?:class|function)\b/,co=Oc(ro.exec),oo=!ro.exec(eo),ao=function(t){if(!qc(t))return!1;try{return io(eo,no,t),!0}catch(t){return!1}},lo=function(t){if(!qc(t))return!1;switch($c(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return oo||!!co(ro,to(t))}catch(t){return!0}};lo.sham=!0;var uo=!io||_c((function(){var t;return ao(ao.call)||!ao(Object)||!ao((function(){t=!0}))||t}))?lo:ao,so=R,mo=Dc,ho=uo,bo=ht,po=ve("species"),Zo=so.Array,Io=function(t){var e;return mo(t)&&(e=t.constructor,(ho(e)&&(e===Zo||mo(e.prototype))||bo(e)&&null===(e=e[po]))&&(e=void 0)),void 0===e?Zo:e},yo=function(t,e){return new(Io(t))(0===e?0:e)},go=Pc,Xo=ct,Go=oe,fo=wi,Vo=yo,Wo=D([].push),vo=function(t){var e=1==t,n=2==t,i=3==t,r=4==t,c=6==t,o=7==t,a=5==t||c;return function(l,u,d,s){for(var m,h,b=Go(l),p=Xo(b),Z=go(u,d),I=fo(p),y=0,g=s||Vo,X=e?g(l,I):n||o?g(l,0):void 0;I>y;y++)if((a||y in p)&&(h=Z(m=p[y],y,b),t))if(e)X[y]=h;else if(h)switch(t){case 3:return!0;case 5:return m;case 6:return y;case 2:Wo(X,m)}else switch(t){case 4:return!1;case 7:Wo(X,m)}return c?-1:i||r?r:X}},Co={forEach:vo(0),map:vo(1),filter:vo(2),some:vo(3),every:vo(4),find:vo(5),findIndex:vo(6),filterReject:vo(7)},So=Yr,Yo=R,Ro=k,Ko=D,No=L,Lo=Rt,Jo=N,xo=ue,Ho=yt,ko=on,Uo=dt,To=Ue,wo=Ar,Fo=z,Ao=sc,Bo=Mr,zo=vi,jo=mc,Mo=tr,Qo=K,Po=$e,Eo=Br,Do=U,Oo=Wi,_o=Ot.exports,qo=zn,$o=be,ta=ve,ea=Yc,na=xc,ia=wc,ra=zc,ca=ai,oa=Co.forEach,aa=Bn("hidden"),la="Symbol",ua=ca.set,da=ca.getterFor(la),sa=Object.prototype,ma=Yo.Symbol,ha=ma&&ma.prototype,ba=Yo.TypeError,pa=Yo.QObject,Za=Qo.f,Ia=Po.f,ya=jo.f,ga=Do.f,Xa=Ko([].push),Ga=_o("symbols"),fa=_o("op-symbols"),Va=_o("wks"),Wa=!pa||!pa.prototype||!pa.prototype.findChild,va=No&&Jo((function(){return 7!=Ao(Ia({},"a",{get:function(){return Ia(this,"a",{value:7}).a}})).a}))?function(t,e,n){var i=Za(sa,e);i&&delete sa[e],Ia(t,e,n),i&&t!==sa&&Ia(sa,e,i)}:Ia,Ca=function(t,e){var n=Ga[t]=Ao(ha);return ua(n,{type:la,tag:t,description:e}),No||(n.description=e),n},Sa=function(t,e,n){t===sa&&Sa(fa,e,n),ko(t);var i=To(e);return ko(n),xo(Ga,i)?(n.enumerable?(xo(t,aa)&&t[aa][i]&&(t[aa][i]=!1),n=Ao(n,{enumerable:Fo(0,!1)})):(xo(t,aa)||Ia(t,aa,Fo(1,{})),t[aa][i]=!0),va(t,i,n)):Ia(t,i,n)},Ya=function(t,e){ko(t);var n=Uo(e),i=Bo(n).concat(La(n));return oa(i,(function(e){No&&!Ro(Ra,n,e)||Sa(t,e,n[e])})),t},Ra=function(t){var e=To(t),n=Ro(ga,this,e);return!(this===sa&&xo(Ga,e)&&!xo(fa,e))&&(!(n||!xo(this,e)||!xo(Ga,e)||xo(this,aa)&&this[aa][e])||n)},Ka=function(t,e){var n=Uo(t),i=To(e);if(n!==sa||!xo(Ga,i)||xo(fa,i)){var r=Za(n,i);return!r||!xo(Ga,i)||xo(n,aa)&&n[aa][i]||(r.enumerable=!0),r}},Na=function(t){var e=ya(Uo(t)),n=[];return oa(e,(function(t){xo(Ga,t)||xo(qo,t)||Xa(n,t)})),n},La=function(t){var e=t===sa,n=ya(e?fa:Uo(t)),i=[];return oa(n,(function(t){!xo(Ga,t)||e&&!xo(sa,t)||Xa(i,Ga[t])})),i};Lo||(ma=function(){if(Ho(ha,this))throw ba("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?wo(arguments[0]):void 0,e=$o(t),n=function t(n){this===sa&&Ro(t,fa,n),xo(this,aa)&&xo(this[aa],e)&&(this[aa][e]=!1),va(this,e,Fo(1,n))};return No&&Wa&&va(sa,e,{configurable:!0,set:n}),Ca(e,t)},Oo(ha=ma.prototype,"toString",(function(){return da(this).tag})),Oo(ma,"withoutSetter",(function(t){return Ca($o(t),t)})),Do.f=Ra,Po.f=Sa,Eo.f=Ya,Qo.f=Ka,zo.f=jo.f=Na,Mo.f=La,ea.f=function(t){return Ca(ta(t),t)},No&&(Ia(ha,"description",{configurable:!0,get:function(){return da(this).description}}),Oo(sa,"propertyIsEnumerable",Ra,{unsafe:!0}))),So({global:!0,constructor:!0,wrap:!0,forced:!Lo,sham:!Lo},{Symbol:ma}),oa(Bo(Va),(function(t){na(t)})),So({target:la,stat:!0,forced:!Lo},{useSetter:function(){Wa=!0},useSimple:function(){Wa=!1}}),So({target:"Object",stat:!0,forced:!Lo,sham:!No},{create:function(t,e){return void 0===e?Ao(t):Ya(Ao(t),e)},defineProperty:Sa,defineProperties:Ya,getOwnPropertyDescriptor:Ka}),So({target:"Object",stat:!0,forced:!Lo},{getOwnPropertyNames:Na}),ia(),ra(ma,la),qo[aa]=!0;var Ja=Rt&&!!Symbol.for&&!!Symbol.keyFor,xa=Yr,Ha=It,ka=ue,Ua=Ar,Ta=Ot.exports,wa=Ja,Fa=Ta("string-to-symbol-registry"),Aa=Ta("symbol-to-string-registry");xa({target:"Symbol",stat:!0,forced:!wa},{for:function(t){var e=Ua(t);if(ka(Fa,e))return Fa[e];var n=Ha("Symbol")(e);return Fa[e]=n,Aa[n]=e,n}});var Ba=Yr,za=ue,ja=kt,Ma=Tt,Qa=Ja,Pa=(0,Ot.exports)("symbol-to-string-registry");Ba({target:"Symbol",stat:!0,forced:!Qa},{keyFor:function(t){if(!ja(t))throw TypeError(Ma(t)+" is not a symbol");if(za(Pa,t))return Pa[t]}});var Ea=J,Da=Function.prototype,Oa=Da.apply,_a=Da.call,qa="object"==("undefined"==typeof Reflect?"undefined":a(Reflect))&&Reflect.apply||(Ea?_a.bind(Oa):function(){return _a.apply(Oa,arguments)}),$a=D([].slice),tl=Yr,el=It,nl=qa,il=k,rl=D,cl=N,ol=Dc,al=st,ll=ht,ul=kt,dl=$a,sl=Rt,ml=el("JSON","stringify"),hl=rl(/./.exec),bl=rl("".charAt),pl=rl("".charCodeAt),Zl=rl("".replace),Il=rl(1..toString),yl=/[\uD800-\uDFFF]/g,gl=/^[\uD800-\uDBFF]$/,Xl=/^[\uDC00-\uDFFF]$/,Gl=!sl||cl((function(){var t=el("Symbol")();return"[null]"!=ml([t])||"{}"!=ml({a:t})||"{}"!=ml(Object(t))})),fl=cl((function(){return'"\\udf06\\ud834"'!==ml("\udf06\ud834")||'"\\udead"'!==ml("\udead")})),Vl=function(t,e){var n=dl(arguments),i=e;if((ll(e)||void 0!==t)&&!ul(t))return ol(e)||(e=function(t,e){if(al(i)&&(e=il(i,this,t,e)),!ul(e))return e}),n[1]=e,nl(ml,null,n)},Wl=function(t,e,n){var i=bl(n,e-1),r=bl(n,e+1);return hl(gl,t)&&!hl(Xl,r)||hl(Xl,t)&&!hl(gl,i)?"\\u"+Il(pl(t,0),16):t};ml&&tl({target:"JSON",stat:!0,arity:3,forced:Gl||fl},{stringify:function(t,e,n){var i=dl(arguments),r=nl(Gl?Vl:ml,null,i);return fl&&"string"==typeof r?Zl(r,yl,Wl):r}});var vl=tr,Cl=oe;Yr({target:"Object",stat:!0,forced:!Rt||N((function(){vl.f(1)}))},{getOwnPropertySymbols:function(t){var e=vl.f;return e?e(Cl(t)):[]}});var Sl=Yr,Yl=L,Rl=R,Kl=D,Nl=ue,Ll=st,Jl=yt,xl=Ar,Hl=$e.f,kl=sr,Ul=Rl.Symbol,Tl=Ul&&Ul.prototype;if(Yl&&Ll(Ul)&&(!("description"in Tl)||void 0!==Ul().description)){var wl={},Fl=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:xl(arguments[0]),e=Jl(Tl,this)?new Ul(t):void 0===t?Ul():Ul(t);return""===t&&(wl[e]=!0),e};kl(Fl,Ul),Fl.prototype=Tl,Tl.constructor=Fl;var Al="Symbol(test)"==String(Ul("test")),Bl=Kl(Tl.toString),zl=Kl(Tl.valueOf),jl=/^Symbol\((.*)\)[^)]+$/,Ml=Kl("".replace),Ql=Kl("".slice);Hl(Tl,"description",{configurable:!0,get:function(){var t=zl(this),e=Bl(t);if(Nl(wl,t))return"";var n=Al?Ql(e,7,-1):Ml(e,jl,"$1");return""===n?void 0:n}}),Sl({global:!0,constructor:!0,forced:!0},{Symbol:Fl})}xc("asyncIterator"),xc("hasInstance"),xc("isConcatSpreadable"),xc("iterator"),xc("match"),xc("matchAll"),xc("replace"),xc("search"),xc("species"),xc("split");var Pl=wc;xc("toPrimitive"),Pl();var El=It,Dl=zc;xc("toStringTag"),Dl(El("Symbol"),"Symbol"),xc("unscopables");var Ol=N,_l=Ct,ql=ve("species"),$l=function(t){return _l>=51||!Ol((function(){var e=[];return(e.constructor={})[ql]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},tu=Yr,eu=R,nu=N,iu=Dc,ru=ht,cu=oe,ou=wi,au=Zc,lu=yo,uu=$l,du=Ct,su=ve("isConcatSpreadable"),mu=9007199254740991,hu="Maximum allowed index exceeded",bu=eu.TypeError,pu=du>=51||!nu((function(){var t=[];return t[su]=!1,t.concat()[0]!==t})),Zu=uu("concat"),Iu=function(t){if(!ru(t))return!1;var e=t[su];return void 0!==e?!!e:iu(t)};tu({target:"Array",proto:!0,arity:1,forced:!pu||!Zu},{concat:function(t){var e,n,i,r,c,o=cu(this),a=lu(o,0),l=0;for(e=-1,i=arguments.length;e<i;e++)if(Iu(c=-1===e?o:arguments[e])){if(l+(r=ou(c))>mu)throw bu(hu);for(n=0;n<r;n++,l++)n in c&&au(a,l,c[n])}else{if(l>=mu)throw bu(hu);au(a,l++,c)}return a.length=l,a}});var yu=oe,gu=xi,Xu=wi,Gu=Math.min,fu=[].copyWithin||function(t,e){var n=yu(this),i=Xu(n),r=gu(t,i),c=gu(e,i),o=arguments.length>2?arguments[2]:void 0,a=Gu((void 0===o?i:gu(o,i))-c,i-r),l=1;for(c<r&&r<c+a&&(l=-1,c+=a-1,r+=a-1);a-- >0;)c in n?n[r]=n[c]:delete n[r],r+=l,c+=l;return n},Vu=ve,Wu=sc,vu=$e.f,Cu=Vu("unscopables"),Su=Array.prototype;null==Su[Cu]&&vu(Su,Cu,{configurable:!0,value:Wu(null)});var Yu=function(t){Su[Cu][t]=!0},Ru=Yu;Yr({target:"Array",proto:!0},{copyWithin:fu}),Ru("copyWithin");var Ku=oe,Nu=xi,Lu=wi,Ju=function(t){for(var e=Ku(this),n=Lu(e),i=arguments.length,r=Nu(i>1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,o=void 0===c?n:Nu(c,n);o>r;)e[r++]=t;return e},xu=Yu;Yr({target:"Array",proto:!0},{fill:Ju}),xu("fill");var Hu=Co.filter;Yr({target:"Array",proto:!0,forced:!$l("filter")},{filter:function(t){return Hu(this,t,arguments.length>1?arguments[1]:void 0)}});var ku=Yr,Uu=Co.find,Tu=Yu,wu="find",Fu=!0;wu in[]&&Array(1).find((function(){Fu=!1})),ku({target:"Array",proto:!0,forced:Fu},{find:function(t){return Uu(this,t,arguments.length>1?arguments[1]:void 0)}}),Tu(wu);var Au=Yr,Bu=Co.findIndex,zu=Yu,ju="findIndex",Mu=!0;ju in[]&&Array(1).findIndex((function(){Mu=!1})),Au({target:"Array",proto:!0,forced:Mu},{findIndex:function(t){return Bu(this,t,arguments.length>1?arguments[1]:void 0)}}),zu(ju);var Qu=Dc,Pu=wi,Eu=Pc,Du=R.TypeError,Ou=function t(e,n,i,r,c,o,a,l){for(var u,d=c,s=0,m=!!a&&Eu(a,l);s<r;){if(s in i){if(u=m?m(i[s],s,n):i[s],o>0&&Qu(u))d=t(e,n,u,Pu(u),d,o-1)-1;else{if(d>=9007199254740991)throw Du("Exceed the acceptable array length");e[d]=u}d++}s++}return d},_u=Ou,qu=oe,$u=wi,td=Ki,ed=yo;Yr({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=qu(this),n=$u(e),i=ed(e,0);return i.length=_u(i,e,e,n,0,void 0===t?1:td(t)),i}});var nd=Ou,id=Bt,rd=oe,cd=wi,od=yo;Yr({target:"Array",proto:!0},{flatMap:function(t){var e,n=rd(this),i=cd(n);return id(t),(e=od(n,0)).length=nd(e,n,n,i,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var ad=k,ld=on,ud=jt,dd=function(t,e,n){var i,r;ld(t);try{if(!(i=ud(t,"return"))){if("throw"===e)throw n;return n}i=ad(i,t)}catch(t){r=!0,i=t}if("throw"===e)throw n;if(r)throw i;return ld(i),n},sd=on,md=dd,hd={},bd=hd,pd=ve("iterator"),Zd=Array.prototype,Id=function(t){return void 0!==t&&(bd.Array===t||Zd[pd]===t)},yd=Tr,gd=jt,Xd=hd,Gd=ve("iterator"),fd=function(t){if(null!=t)return gd(t,Gd)||gd(t,"@@iterator")||Xd[yd(t)]},Vd=k,Wd=Bt,vd=on,Cd=Tt,Sd=fd,Yd=R.TypeError,Rd=function(t,e){var n=arguments.length<2?Sd(t):e;if(Wd(n))return vd(Vd(n,t));throw Yd(Cd(t)+" is not iterable")},Kd=Pc,Nd=k,Ld=oe,Jd=function(t,e,n,i){try{return i?e(sd(n)[0],n[1]):e(n)}catch(e){md(t,"throw",e)}},xd=Id,Hd=uo,kd=wi,Ud=Zc,Td=Rd,wd=fd,Fd=R.Array,Ad=function(t){var e=Ld(t),n=Hd(this),i=arguments.length,r=i>1?arguments[1]:void 0,c=void 0!==r;c&&(r=Kd(r,i>2?arguments[2]:void 0));var o,a,l,u,d,s,m=wd(e),h=0;if(!m||this==Fd&&xd(m))for(o=kd(e),a=n?new this(o):Fd(o);o>h;h++)s=c?r(e[h],h):e[h],Ud(a,h,s);else for(d=(u=Td(e,m)).next,a=n?new this:[];!(l=Nd(d,u)).done;h++)s=c?Jd(u,r,[l.value,h],!0):l.value,Ud(a,h,s);return a.length=h,a},Bd=ve("iterator"),zd=!1;try{var jd=0,Md={next:function(){return{done:!!jd++}},return:function(){zd=!0}};Md[Bd]=function(){return this},Array.from(Md,(function(){throw 2}))}catch(t){}var Qd=function(t,e){if(!e&&!zd)return!1;var n=!1;try{var i={};i[Bd]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n},Pd=Ad;Yr({target:"Array",stat:!0,forced:!Qd((function(t){Array.from(t)}))},{from:Pd});var Ed=ji.includes,Dd=Yu;Yr({target:"Array",proto:!0,forced:N((function(){return!Array(1).includes()}))},{includes:function(t){return Ed(this,t,arguments.length>1?arguments[1]:void 0)}}),Dd("includes");var Od,_d,qd,$d=!N((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),ts=R,es=ue,ns=st,is=oe,rs=$d,cs=Bn("IE_PROTO"),os=ts.Object,as=os.prototype,ls=rs?os.getPrototypeOf:function(t){var e=is(t);if(es(e,cs))return e[cs];var n=e.constructor;return ns(n)&&e instanceof n?n.prototype:e instanceof os?as:null},us=N,ds=st,ss=ls,ms=Wi,hs=ve("iterator"),bs=!1;[].keys&&("next"in(qd=[].keys())?(_d=ss(ss(qd)))!==Object.prototype&&(Od=_d):bs=!0);var ps=null==Od||us((function(){var t={};return Od[hs].call(t)!==t}));ps&&(Od={}),ds(Od[hs])||ms(Od,hs,(function(){return this}));var Zs={IteratorPrototype:Od,BUGGY_SAFARI_ITERATORS:bs},Is=Zs.IteratorPrototype,ys=sc,gs=z,Xs=zc,Gs=hd,fs=function(){return this},Vs=function(t,e,n,i){var r=e+" Iterator";return t.prototype=ys(Is,{next:gs(+!i,n)}),Xs(t,r,!1),Gs[r]=fs,t},Ws=R,vs=st,Cs=Ws.String,Ss=Ws.TypeError,Ys=function(t){if("object"==a(t)||vs(t))return t;throw Ss("Can't set "+Cs(t)+" as a prototype")},Rs=D,Ks=on,Ns=Ys,Ls=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Rs(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,i){return Ks(n),Ns(i),e?t(n,i):n.__proto__=i,n}}():void 0),Js=Yr,xs=k,Hs=st,ks=Vs,Us=ls,Ts=Ls,ws=zc,Fs=Xn,As=Wi,Bs=hd,zs=Sn.PROPER,js=Sn.CONFIGURABLE,Ms=Zs.IteratorPrototype,Qs=Zs.BUGGY_SAFARI_ITERATORS,Ps=ve("iterator"),Es="keys",Ds="values",Os="entries",_s=function(){return this},qs=function(t,e,n,i,r,c,o){ks(n,e,i);var a,l,u,d=function(t){if(t===r&&p)return p;if(!Qs&&t in h)return h[t];switch(t){case Es:case Ds:case Os:return function(){return new n(this,t)}}return function(){return new n(this)}},s=e+" Iterator",m=!1,h=t.prototype,b=h[Ps]||h["@@iterator"]||r&&h[r],p=!Qs&&b||d(r),Z="Array"==e&&h.entries||b;if(Z&&(a=Us(Z.call(new t)))!==Object.prototype&&a.next&&(Us(a)!==Ms&&(Ts?Ts(a,Ms):Hs(a[Ps])||As(a,Ps,_s)),ws(a,s,!0)),zs&&r==Ds&&b&&b.name!==Ds&&(js?Fs(h,"name",Ds):(m=!0,p=function(){return xs(b,this)})),r)if(l={values:d(Ds),keys:c?p:d(Es),entries:d(Os)},o)for(u in l)(Qs||m||!(u in h))&&As(h,u,l[u]);else Js({target:e,proto:!0,forced:Qs||m},l);return h[Ps]!==p&&As(h,Ps,p,{name:r}),Bs[e]=p,l},$s=dt,tm=Yu,em=hd,nm=ai,im=$e.f,rm=qs,cm=L,om="Array Iterator",am=nm.set,lm=nm.getterFor(om),um=rm(Array,"Array",(function(t,e){am(this,{type:om,target:$s(t),index:0,kind:e})}),(function(){var t=lm(this),e=t.target,n=t.kind,i=t.index++;return!e||i>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:i,done:!1}:"values"==n?{value:e[i],done:!1}:{value:[i,e[i]],done:!1}}),"values"),dm=em.Arguments=em.Array;if(tm("keys"),tm("values"),tm("entries"),cm&&"values"!==dm.name)try{im(dm,"name",{value:"values"})}catch(t){}var sm=N,mm=function(t,e){var n=[][t];return!!n&&sm((function(){n.call(null,e||function(){return 1},1)}))},hm=Yr,bm=ct,pm=dt,Zm=mm,Im=D([].join),ym=bm!=Object,gm=Zm("join",",");hm({target:"Array",proto:!0,forced:ym||!gm},{join:function(t){return Im(pm(this),void 0===t?",":t)}});var Xm=Co.map;Yr({target:"Array",proto:!0,forced:!$l("map")},{map:function(t){return Xm(this,t,arguments.length>1?arguments[1]:void 0)}});var Gm=Yr,fm=N,Vm=uo,Wm=Zc,vm=R.Array;Gm({target:"Array",stat:!0,forced:fm((function(){function t(){}return!(vm.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new(Vm(this)?this:vm)(e);e>t;)Wm(n,t,arguments[t++]);return n.length=e,n}});var Cm=Yr,Sm=R,Ym=Dc,Rm=uo,Km=ht,Nm=xi,Lm=wi,Jm=dt,xm=Zc,Hm=ve,km=$a,Um=$l("slice"),Tm=Hm("species"),wm=Sm.Array,Fm=Math.max;Cm({target:"Array",proto:!0,forced:!Um},{slice:function(t,e){var n,i,r,c=Jm(this),o=Lm(c),a=Nm(t,o),l=Nm(void 0===e?o:e,o);if(Ym(c)&&(n=c.constructor,(Rm(n)&&(n===wm||Ym(n.prototype))||Km(n)&&null===(n=n[Tm]))&&(n=void 0),n===wm||void 0===n))return km(c,a,l);for(i=new(void 0===n?wm:n)(Fm(l-a,0)),r=0;a<l;a++,r++)a in c&&xm(i,r,c[a]);return i.length=r,i}});var Am=fc,Bm=Math.floor,zm=function(t,e){for(var n,i,r=t.length,c=1;c<r;){for(i=c,n=t[c];i&&e(t[i-1],n)>0;)t[i]=t[--i];i!==c++&&(t[i]=n)}return t},jm=function(t,e,n,i){for(var r=e.length,c=n.length,o=0,a=0;o<r||a<c;)t[o+a]=o<r&&a<c?i(e[o],n[a])<=0?e[o++]:n[a++]:o<r?e[o++]:n[a++];return t},Mm=function t(e,n){var i=e.length,r=Bm(i/2);return i<8?zm(e,n):jm(e,t(Am(e,0,r),n),t(Am(e,r),n),n)},Qm=gt.match(/firefox\/(\d+)/i),Pm=!!Qm&&+Qm[1],Em=/MSIE|Trident/.test(gt),Dm=gt.match(/AppleWebKit\/(\d+)\./),Om=!!Dm&&+Dm[1],_m=Yr,qm=D,$m=Bt,th=oe,eh=wi,nh=Ar,ih=N,rh=Mm,ch=mm,oh=Pm,ah=Em,lh=Ct,uh=Om,dh=[],sh=qm(dh.sort),mh=qm(dh.push),hh=ih((function(){dh.sort(void 0)})),bh=ih((function(){dh.sort(null)})),ph=ch("sort"),Zh=!ih((function(){if(lh)return lh<70;if(!(oh&&oh>3)){if(ah)return!0;if(uh)return uh<603;var t,e,n,i,r="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(i=0;i<47;i++)dh.push({k:e+i,v:n})}for(dh.sort((function(t,e){return e.v-t.v})),i=0;i<dh.length;i++)e=dh[i].k.charAt(0),r.charAt(r.length-1)!==e&&(r+=e);return"DGBEFHACIJK"!==r}}));_m({target:"Array",proto:!0,forced:hh||!bh||!ph||!Zh},{sort:function(t){void 0!==t&&$m(t);var e=th(this);if(Zh)return void 0===t?sh(e):sh(e,t);var n,i,r=[],c=eh(e);for(i=0;i<c;i++)i in e&&mh(r,e[i]);for(rh(r,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:nh(e)>nh(n)?1:-1}}(t)),n=r.length,i=0;i<n;)e[i]=r[i++];for(;i<c;)delete e[i++];return e}});var Ih=It,yh=$e,gh=L,Xh=ve("species"),Gh=function(t){var e=Ih(t),n=yh.f;gh&&e&&!e[Xh]&&n(e,Xh,{configurable:!0,get:function(){return this}})};Gh("Array");var fh=Yr,Vh=R,Wh=xi,vh=Ki,Ch=wi,Sh=oe,Yh=yo,Rh=Zc,Kh=$l("splice"),Nh=Vh.TypeError,Lh=Math.max,Jh=Math.min,xh=9007199254740991,Hh="Maximum allowed length exceeded";fh({target:"Array",proto:!0,forced:!Kh},{splice:function(t,e){var n,i,r,c,o,a,l=Sh(this),u=Ch(l),d=Wh(t,u),s=arguments.length;if(0===s?n=i=0:1===s?(n=0,i=u-d):(n=s-2,i=Jh(Lh(vh(e),0),u-d)),u+n-i>xh)throw Nh(Hh);for(r=Yh(l,i),c=0;c<i;c++)(o=d+c)in l&&Rh(r,c,l[o]);if(r.length=i,n<i){for(c=d;c<u-i;c++)a=c+n,(o=c+i)in l?l[a]=l[o]:delete l[a];for(c=u;c>u-i+n;c--)delete l[c-1]}else if(n>i)for(c=u-i;c>d;c--)a=c+n-1,(o=c+i-1)in l?l[a]=l[o]:delete l[a];for(c=0;c<n;c++)l[c+d]=arguments[c+2];return l.length=u-i+n,r}}),Yu("flat"),Yu("flatMap");var kh="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Uh=Wi,Th=function(t,e,n){for(var i in e)Uh(t,i,e[i],n);return t},wh=yt,Fh=R.TypeError,Ah=function(t,e){if(wh(e,t))return t;throw Fh("Incorrect invocation")},Bh=Ki,zh=Ui,jh=R.RangeError,Mh=function(t){if(void 0===t)return 0;var e=Bh(t),n=zh(e);if(e!==n)throw jh("Wrong length or index");return n},Qh=R.Array,Ph=Math.abs,Eh=Math.pow,Dh=Math.floor,Oh=Math.log,_h=Math.LN2,qh={pack:function(t,e,n){var i,r,c,o=Qh(n),a=8*n-e-1,l=(1<<a)-1,u=l>>1,d=23===e?Eh(2,-24)-Eh(2,-77):0,s=t<0||0===t&&1/t<0?1:0,m=0;for((t=Ph(t))!=t||t===1/0?(r=t!=t?1:0,i=l):(i=Dh(Oh(t)/_h),t*(c=Eh(2,-i))<1&&(i--,c*=2),(t+=i+u>=1?d/c:d*Eh(2,1-u))*c>=2&&(i++,c/=2),i+u>=l?(r=0,i=l):i+u>=1?(r=(t*c-1)*Eh(2,e),i+=u):(r=t*Eh(2,u-1)*Eh(2,e),i=0));e>=8;)o[m++]=255&r,r/=256,e-=8;for(i=i<<e|r,a+=e;a>0;)o[m++]=255&i,i/=256,a-=8;return o[--m]|=128*s,o},unpack:function(t,e){var n,i=t.length,r=8*i-e-1,c=(1<<r)-1,o=c>>1,a=r-7,l=i-1,u=t[l--],d=127&u;for(u>>=7;a>0;)d=256*d+t[l--],a-=8;for(n=d&(1<<-a)-1,d>>=-a,a+=e;a>0;)n=256*n+t[l--],a-=8;if(0===d)d=1-o;else{if(d===c)return n?NaN:u?-1/0:1/0;n+=Eh(2,e),d-=o}return(u?-1:1)*n*Eh(2,d-e)}},$h=R,tb=D,eb=L,nb=kh,ib=Sn,rb=Xn,cb=Th,ob=N,ab=Ah,lb=Ki,ub=Ui,db=Mh,sb=qh,mb=ls,hb=Ls,bb=vi.f,pb=$e.f,Zb=Ju,Ib=fc,yb=zc,gb=ib.PROPER,Xb=ib.CONFIGURABLE,Gb=ai.get,fb=ai.set,Vb="ArrayBuffer",Wb="DataView",vb="Wrong index",Cb=$h.ArrayBuffer,Sb=Cb,Yb=Sb&&Sb.prototype,Rb=$h.DataView,Kb=Rb&&Rb.prototype,Nb=Object.prototype,Lb=$h.Array,Jb=$h.RangeError,xb=tb(Zb),Hb=tb([].reverse),kb=sb.pack,Ub=sb.unpack,Tb=function(t){return[255&t]},wb=function(t){return[255&t,t>>8&255]},Fb=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},Ab=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Bb=function(t){return kb(t,23,4)},zb=function(t){return kb(t,52,8)},jb=function(t,e){pb(t.prototype,e,{get:function(){return Gb(this)[e]}})},Mb=function(t,e,n,i){var r=db(n),c=Gb(t);if(r+e>c.byteLength)throw Jb(vb);var o=Gb(c.buffer).bytes,a=r+c.byteOffset,l=Ib(o,a,a+e);return i?l:Hb(l)},Qb=function(t,e,n,i,r,c){var o=db(n),a=Gb(t);if(o+e>a.byteLength)throw Jb(vb);for(var l=Gb(a.buffer).bytes,u=o+a.byteOffset,d=i(+r),s=0;s<e;s++)l[u+s]=d[c?s:e-s-1]};if(nb){var Pb=gb&&Cb.name!==Vb;if(ob((function(){Cb(1)}))&&ob((function(){new Cb(-1)}))&&!ob((function(){return new Cb,new Cb(1.5),new Cb(NaN),Pb&&!Xb})))Pb&&Xb&&rb(Cb,"name",Vb);else{(Sb=function(t){return ab(this,Yb),new Cb(db(t))}).prototype=Yb;for(var Eb,Db=bb(Cb),Ob=0;Db.length>Ob;)(Eb=Db[Ob++])in Sb||rb(Sb,Eb,Cb[Eb]);Yb.constructor=Sb}hb&&mb(Kb)!==Nb&&hb(Kb,Nb);var _b=new Rb(new Sb(2)),qb=tb(Kb.setInt8);_b.setInt8(0,2147483648),_b.setInt8(1,2147483649),!_b.getInt8(0)&&_b.getInt8(1)||cb(Kb,{setInt8:function(t,e){qb(this,t,e<<24>>24)},setUint8:function(t,e){qb(this,t,e<<24>>24)}},{unsafe:!0})}else Sb=function(t){ab(this,Yb);var e=db(t);fb(this,{bytes:xb(Lb(e),0),byteLength:e}),eb||(this.byteLength=e)},Yb=Sb.prototype,Rb=function(t,e,n){ab(this,Kb),ab(t,Yb);var i=Gb(t).byteLength,r=lb(e);if(r<0||r>i)throw Jb("Wrong offset");if(r+(n=void 0===n?i-r:ub(n))>i)throw Jb("Wrong length");fb(this,{buffer:t,byteLength:n,byteOffset:r}),eb||(this.buffer=t,this.byteLength=n,this.byteOffset=r)},Kb=Rb.prototype,eb&&(jb(Sb,"byteLength"),jb(Rb,"buffer"),jb(Rb,"byteLength"),jb(Rb,"byteOffset")),cb(Kb,{getInt8:function(t){return Mb(this,1,t)[0]<<24>>24},getUint8:function(t){return Mb(this,1,t)[0]},getInt16:function(t){var e=Mb(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=Mb(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return Ab(Mb(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return Ab(Mb(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Ub(Mb(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Ub(Mb(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Qb(this,1,t,Tb,e)},setUint8:function(t,e){Qb(this,1,t,Tb,e)},setInt16:function(t,e){Qb(this,2,t,wb,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Qb(this,2,t,wb,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Qb(this,4,t,Fb,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Qb(this,4,t,Fb,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Qb(this,4,t,Bb,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Qb(this,8,t,zb,e,arguments.length>2?arguments[2]:void 0)}});yb(Sb,Vb),yb(Rb,Wb);var $b={ArrayBuffer:Sb,DataView:Rb},tp=Gh,ep="ArrayBuffer",np=$b.ArrayBuffer;Yr({global:!0,constructor:!0,forced:R.ArrayBuffer!==np},{ArrayBuffer:np}),tp(ep);var ip=on,rp=Dt,cp=R.TypeError,op=ue,ap=Wi,lp=function(t){if(ip(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw cp("Incorrect hint");return rp(this,t)},up=ve("toPrimitive"),dp=Date.prototype;op(dp,up)||ap(dp,up,lp);var sp=st,mp=ht,hp=$e,bp=ls,pp=ve,Zp=Gn.exports,Ip=pp("hasInstance"),yp=Function.prototype;Ip in yp||hp.f(yp,Ip,{value:Zp((function(t){if(!sp(this)||!mp(t))return!1;var e=this.prototype;if(!mp(e))return t instanceof this;for(;t=bp(t);)if(e===t)return!0;return!1}),Ip)});var gp=L,Xp=Sn.EXISTS,Gp=D,fp=$e.f,Vp=Function.prototype,Wp=Gp(Vp.toString),vp=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,Cp=Gp(vp.exec);gp&&!Xp&&fp(Vp,"name",{configurable:!0,get:function(){try{return Cp(vp,Wp(this))[1]}catch(t){return""}}}),Yr({global:!0},{globalThis:R}),zc(R.JSON,"JSON",!0);var Sp={exports:{}},Yp=N((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}})),Rp=N,Kp=ht,Np=$,Lp=Yp,Jp=Object.isExtensible,xp=Rp((function(){Jp(1)}))||Lp?function(t){return!!Kp(t)&&((!Lp||"ArrayBuffer"!=Np(t))&&(!Jp||Jp(t)))}:Jp,Hp=!N((function(){return Object.isExtensible(Object.preventExtensions({}))})),kp=Yr,Up=D,Tp=zn,wp=ht,Fp=ue,Ap=$e.f,Bp=vi,zp=mc,jp=xp,Mp=Hp,Qp=!1,Pp=be("meta"),Ep=0,Dp=function(t){Ap(t,Pp,{value:{objectID:"O"+Ep++,weakData:{}}})},Op=Sp.exports={enable:function(){Op.enable=function(){},Qp=!0;var t=Bp.f,e=Up([].splice),n={};n[Pp]=1,t(n).length&&(Bp.f=function(n){for(var i=t(n),r=0,c=i.length;r<c;r++)if(i[r]===Pp){e(i,r,1);break}return i},kp({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:zp.f}))},fastKey:function(t,e){if(!wp(t))return"symbol"==a(t)?t:("string"==typeof t?"S":"P")+t;if(!Fp(t,Pp)){if(!jp(t))return"F";if(!e)return"E";Dp(t)}return t[Pp].objectID},getWeakData:function(t,e){if(!Fp(t,Pp)){if(!jp(t))return!0;if(!e)return!1;Dp(t)}return t[Pp].weakData},onFreeze:function(t){return Mp&&Qp&&jp(t)&&!Fp(t,Pp)&&Dp(t),t}};Tp[Pp]=!0;var _p=Pc,qp=k,$p=on,tZ=Tt,eZ=Id,nZ=wi,iZ=yt,rZ=Rd,cZ=fd,oZ=dd,aZ=R.TypeError,lZ=function(t,e){this.stopped=t,this.result=e},uZ=lZ.prototype,dZ=function(t,e,n){var i,r,c,o,l,u,d,s=n&&n.that,m=!(!n||!n.AS_ENTRIES),h=!(!n||!n.IS_ITERATOR),b=!(!n||!n.INTERRUPTED),p=_p(e,s),Z=function(t){return i&&oZ(i,"normal",t),new lZ(!0,t)},I=function(t){return m?($p(t),b?p(t[0],t[1],Z):p(t[0],t[1])):b?p(t,Z):p(t)};if(h)i=t;else{if(!(r=cZ(t)))throw aZ(tZ(t)+" is not iterable");if(eZ(r)){for(c=0,o=nZ(t);o>c;c++)if((l=I(t[c]))&&iZ(uZ,l))return l;return new lZ(!1)}i=rZ(t,r)}for(u=i.next;!(d=qp(u,i)).done;){try{l=I(d.value)}catch(t){oZ(i,"throw",t)}if("object"==a(l)&&l&&iZ(uZ,l))return l}return new lZ(!1)},sZ=st,mZ=ht,hZ=Ls,bZ=function(t,e,n){var i,r;return hZ&&sZ(i=e.constructor)&&i!==n&&mZ(r=i.prototype)&&r!==n.prototype&&hZ(t,r),t},pZ=Yr,ZZ=R,IZ=D,yZ=Xr,gZ=Wi,XZ=Sp.exports,GZ=dZ,fZ=Ah,VZ=st,WZ=ht,vZ=N,CZ=Qd,SZ=zc,YZ=bZ,RZ=function(t,e,n){var i=-1!==t.indexOf("Map"),r=-1!==t.indexOf("Weak"),c=i?"set":"add",o=ZZ[t],a=o&&o.prototype,l=o,u={},d=function(t){var e=IZ(a[t]);gZ(a,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(r&&!WZ(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return r&&!WZ(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(r&&!WZ(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(yZ(t,!VZ(o)||!(r||a.forEach&&!vZ((function(){(new o).entries().next()})))))l=n.getConstructor(e,t,i,c),XZ.enable();else if(yZ(t,!0)){var s=new l,m=s[c](r?{}:-0,1)!=s,h=vZ((function(){s.has(1)})),b=CZ((function(t){new o(t)})),p=!r&&vZ((function(){for(var t=new o,e=5;e--;)t[c](e,e);return!t.has(-0)}));b||((l=e((function(t,e){fZ(t,a);var n=YZ(new o,t,l);return null!=e&&GZ(e,n[c],{that:n,AS_ENTRIES:i}),n}))).prototype=a,a.constructor=l),(h||p)&&(d("delete"),d("has"),i&&d("get")),(p||m)&&d(c),r&&a.clear&&delete a.clear}return u[t]=l,pZ({global:!0,constructor:!0,forced:l!=o},u),SZ(l,t),r||n.setStrong(l,t,i),l},KZ=$e.f,NZ=sc,LZ=Th,JZ=Pc,xZ=Ah,HZ=dZ,kZ=qs,UZ=Gh,TZ=L,wZ=Sp.exports.fastKey,FZ=ai.set,AZ=ai.getterFor,BZ={getConstructor:function(t,e,n,i){var r=t((function(t,r){xZ(t,c),FZ(t,{type:e,index:NZ(null),first:void 0,last:void 0,size:0}),TZ||(t.size=0),null!=r&&HZ(r,t[i],{that:t,AS_ENTRIES:n})})),c=r.prototype,o=AZ(e),a=function(t,e,n){var i,r,c=o(t),a=l(t,e);return a?a.value=n:(c.last=a={index:r=wZ(e,!0),key:e,value:n,previous:i=c.last,next:void 0,removed:!1},c.first||(c.first=a),i&&(i.next=a),TZ?c.size++:t.size++,"F"!==r&&(c.index[r]=a)),t},l=function(t,e){var n,i=o(t),r=wZ(e);if("F"!==r)return i.index[r];for(n=i.first;n;n=n.next)if(n.key==e)return n};return LZ(c,{clear:function(){for(var t=o(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,TZ?t.size=0:this.size=0},delete:function(t){var e=this,n=o(e),i=l(e,t);if(i){var r=i.next,c=i.previous;delete n.index[i.index],i.removed=!0,c&&(c.next=r),r&&(r.previous=c),n.first==i&&(n.first=r),n.last==i&&(n.last=c),TZ?n.size--:e.size--}return!!i},forEach:function(t){for(var e,n=o(this),i=JZ(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(i(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!l(this,t)}}),LZ(c,n?{get:function(t){var e=l(this,t);return e&&e.value},set:function(t,e){return a(this,0===t?0:t,e)}}:{add:function(t){return a(this,t=0===t?0:t,t)}}),TZ&&KZ(c,"size",{get:function(){return o(this).size}}),r},setStrong:function(t,e,n){var i=e+" Iterator",r=AZ(e),c=AZ(i);kZ(t,e,(function(t,e){FZ(this,{type:i,target:t,state:r(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),UZ(e)}};RZ("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),BZ);var zZ=Math.log,jZ=Math.log1p||function(t){var e=+t;return e>-1e-8&&e<1e-8?e-e*e/2:zZ(1+e)},MZ=Yr,QZ=jZ,PZ=Math.acosh,EZ=Math.log,DZ=Math.sqrt,OZ=Math.LN2;MZ({target:"Math",stat:!0,forced:!PZ||710!=Math.floor(PZ(Number.MAX_VALUE))||PZ(1/0)!=1/0},{acosh:function(t){var e=+t;return e<1?NaN:e>94906265.62425156?EZ(e)+OZ:QZ(e-1+DZ(e-1)*DZ(e+1))}});var _Z=Yr,qZ=Math.asinh,$Z=Math.log,tI=Math.sqrt;_Z({target:"Math",stat:!0,forced:!(qZ&&1/qZ(0)>0)},{asinh:function t(e){var n=+e;return isFinite(n)&&0!=n?n<0?-t(-n):$Z(n+tI(n*n+1)):n}});var eI=Yr,nI=Math.atanh,iI=Math.log;eI({target:"Math",stat:!0,forced:!(nI&&1/nI(-0)<0)},{atanh:function(t){var e=+t;return 0==e?e:iI((1+e)/(1-e))/2}});var rI=Math.sign||function(t){var e=+t;return 0==e||e!=e?e:e<0?-1:1},cI=Yr,oI=rI,aI=Math.abs,lI=Math.pow;cI({target:"Math",stat:!0},{cbrt:function(t){var e=+t;return oI(e)*lI(aI(e),1/3)}});var uI=Yr,dI=Math.floor,sI=Math.log,mI=Math.LOG2E;uI({target:"Math",stat:!0},{clz32:function(t){var e=t>>>0;return e?31-dI(sI(e+.5)*mI):32}});var hI=Math.expm1,bI=Math.exp,pI=!hI||hI(10)>22025.465794806718||hI(10)<22025.465794806718||-2e-17!=hI(-2e-17)?function(t){var e=+t;return 0==e?e:e>-1e-6&&e<1e-6?e+e*e/2:bI(e)-1}:hI,ZI=Yr,II=pI,yI=Math.cosh,gI=Math.abs,XI=Math.E;ZI({target:"Math",stat:!0,forced:!yI||yI(710)===1/0},{cosh:function(t){var e=II(gI(t)-1)+1;return(e+1/(e*XI*XI))*(XI/2)}});var GI=pI;Yr({target:"Math",stat:!0,forced:GI!=Math.expm1},{expm1:GI});var fI=rI,VI=Math.abs,WI=Math.pow,vI=WI(2,-52),CI=WI(2,-23),SI=WI(2,127)*(2-CI),YI=WI(2,-126),RI=Math.fround||function(t){var e,n,i=+t,r=VI(i),c=fI(i);return r<YI?c*function(t){return t+1/vI-1/vI}(r/YI/CI)*YI*CI:(n=(e=(1+CI/vI)*r)-(e-r))>SI||n!=n?c*(1/0):c*n};Yr({target:"Math",stat:!0},{fround:RI});var KI=Yr,NI=Math.hypot,LI=Math.abs,JI=Math.sqrt;KI({target:"Math",stat:!0,arity:2,forced:!!NI&&NI(1/0,NaN)!==1/0},{hypot:function(t,e){for(var n,i,r=0,c=0,o=arguments.length,a=0;c<o;)a<(n=LI(arguments[c++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*JI(r)}});var xI=Yr,HI=N,kI=Math.imul;xI({target:"Math",stat:!0,forced:HI((function(){return-5!=kI(4294967295,5)||2!=kI.length}))},{imul:function(t,e){var n=65535,i=+t,r=+e,c=n&i,o=n&r;return 0|c*o+((n&i>>>16)*o+c*(n&r>>>16)<<16>>>0)}});var UI=Math.log,TI=Math.LOG10E;Yr({target:"Math",stat:!0},{log10:Math.log10||function(t){return UI(t)*TI}}),Yr({target:"Math",stat:!0},{log1p:jZ});var wI=Yr,FI=Math.log,AI=Math.LN2;wI({target:"Math",stat:!0},{log2:function(t){return FI(t)/AI}}),Yr({target:"Math",stat:!0},{sign:rI});var BI=Yr,zI=N,jI=pI,MI=Math.abs,QI=Math.exp,PI=Math.E;BI({target:"Math",stat:!0,forced:zI((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){var e=+t;return MI(e)<1?(jI(e)-jI(-e))/2:(QI(e-1)-QI(-e-1))*(PI/2)}});var EI=Yr,DI=pI,OI=Math.exp;EI({target:"Math",stat:!0},{tanh:function(t){var e=+t,n=DI(e),i=DI(-e);return n==1/0?1:i==1/0?-1:(n-i)/(OI(e)+OI(-e))}}),zc(Math,"Math",!0),Yr({target:"Math",stat:!0},{trunc:Yi});var _I=D(1..valueOf),qI="\t\n\v\f\r                 \u2028\u2029\ufeff",$I=at,ty=Ar,ey=D("".replace),ny="[\t\n\v\f\r                 \u2028\u2029\ufeff]",iy=RegExp("^"+ny+ny+"*"),ry=RegExp(ny+ny+"*$"),cy=function(t){return function(e){var n=ty($I(e));return 1&t&&(n=ey(n,iy,"")),2&t&&(n=ey(n,ry,"")),n}},oy={start:cy(1),end:cy(2),trim:cy(3)},ay=L,ly=R,uy=D,dy=Xr,sy=Wi,my=ue,hy=bZ,by=yt,py=kt,Zy=xe,Iy=N,yy=vi.f,gy=K.f,Xy=$e.f,Gy=_I,fy=oy.trim,Vy="Number",Wy=ly.Number,vy=Wy.prototype,Cy=ly.TypeError,Sy=uy("".slice),Yy=uy("".charCodeAt),Ry=function(t){var e=Zy(t,"number");return"bigint"==typeof e?e:Ky(e)},Ky=function(t){var e,n,i,r,c,o,a,l,u=Zy(t,"number");if(py(u))throw Cy("Cannot convert a Symbol value to a number");if("string"==typeof u&&u.length>2)if(u=fy(u),43===(e=Yy(u,0))||45===e){if(88===(n=Yy(u,2))||120===n)return NaN}else if(48===e){switch(Yy(u,1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+u}for(o=(c=Sy(u,2)).length,a=0;a<o;a++)if((l=Yy(c,a))<48||l>r)return NaN;return parseInt(c,i)}return+u};if(dy(Vy,!Wy(" 0o1")||!Wy("0b1")||Wy("+0x1"))){for(var Ny,Ly=function(t){var e=arguments.length<1?0:Wy(Ry(t)),n=this;return by(vy,n)&&Iy((function(){Gy(n)}))?hy(Object(e),n,Ly):e},Jy=ay?yy(Wy):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),xy=0;Jy.length>xy;xy++)my(Wy,Ny=Jy[xy])&&!my(Ly,Ny)&&Xy(Ly,Ny,gy(Wy,Ny));Ly.prototype=vy,vy.constructor=Ly,sy(ly,Vy,Ly,{constructor:!0})}Yr({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var Hy=R.isFinite;Yr({target:"Number",stat:!0},{isFinite:Number.isFinite||function(t){return"number"==typeof t&&Hy(t)}});var ky=ht,Uy=Math.floor,Ty=Number.isInteger||function(t){return!ky(t)&&isFinite(t)&&Uy(t)===t};Yr({target:"Number",stat:!0},{isInteger:Ty}),Yr({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var wy=Yr,Fy=Ty,Ay=Math.abs;wy({target:"Number",stat:!0},{isSafeInteger:function(t){return Fy(t)&&Ay(t)<=9007199254740991}}),Yr({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),Yr({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var By=R,zy=N,jy=Ar,My=oy.trim,Qy=D("".charAt),Py=By.parseFloat,Ey=By.Symbol,Dy=Ey&&Ey.iterator,Oy=1/Py("\t\n\v\f\r                 \u2028\u2029\ufeff-0")!=-1/0||Dy&&!zy((function(){Py(Object(Dy))}))?function(t){var e=My(jy(t)),n=Py(e);return 0===n&&"-"==Qy(e,0)?-0:n}:Py;Yr({target:"Number",stat:!0,forced:Number.parseFloat!=Oy},{parseFloat:Oy});var _y=R,qy=N,$y=D,tg=Ar,eg=oy.trim,ng=qI,ig=_y.parseInt,rg=_y.Symbol,cg=rg&&rg.iterator,og=/^[+-]?0x/i,ag=$y(og.exec),lg=8!==ig(ng+"08")||22!==ig(ng+"0x16")||cg&&!qy((function(){ig(Object(cg))}))?function(t,e){var n=eg(tg(t));return ig(n,e>>>0||(ag(og,n)?16:10))}:ig,ug=lg;Yr({target:"Number",stat:!0,forced:Number.parseInt!=ug},{parseInt:ug});var dg=Ki,sg=Ar,mg=at,hg=R.RangeError,bg=function(t){var e=sg(mg(this)),n="",i=dg(t);if(i<0||i==1/0)throw hg("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n},pg=Yr,Zg=R,Ig=D,yg=Ki,gg=_I,Xg=bg,Gg=N,fg=Zg.RangeError,Vg=Zg.String,Wg=Math.floor,vg=Ig(Xg),Cg=Ig("".slice),Sg=Ig(1..toFixed),Yg=function t(e,n,i){return 0===n?i:n%2==1?t(e,n-1,i*e):t(e*e,n/2,i)},Rg=function(t,e,n){for(var i=-1,r=n;++i<6;)r+=e*t[i],t[i]=r%1e7,r=Wg(r/1e7)},Kg=function(t,e){for(var n=6,i=0;--n>=0;)i+=t[n],t[n]=Wg(i/e),i=i%e*1e7},Ng=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var i=Vg(t[e]);n=""===n?i:n+vg("0",7-i.length)+i}return n};pg({target:"Number",proto:!0,forced:Gg((function(){return"0.000"!==Sg(8e-5,3)||"1"!==Sg(.9,0)||"1.25"!==Sg(1.255,2)||"1000000000000000128"!==Sg(0xde0b6b3a7640080,0)}))||!Gg((function(){Sg({})}))},{toFixed:function(t){var e,n,i,r,c=gg(this),o=yg(t),a=[0,0,0,0,0,0],l="",u="0";if(o<0||o>20)throw fg("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return Vg(c);if(c<0&&(l="-",c=-c),c>1e-21)if(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(c*Yg(2,69,1))-69,n=e<0?c*Yg(2,-e,1):c/Yg(2,e,1),n*=4503599627370496,(e=52-e)>0){for(Rg(a,0,n),i=o;i>=7;)Rg(a,1e7,0),i-=7;for(Rg(a,Yg(10,i,1),0),i=e-1;i>=23;)Kg(a,1<<23),i-=23;Kg(a,1<<i),Rg(a,1,1),Kg(a,2),u=Ng(a)}else Rg(a,0,n),Rg(a,1<<-e,0),u=Ng(a)+vg("0",o);return u=o>0?l+((r=u.length)<=o?"0."+vg("0",o-r)+u:Cg(u,0,r-o)+"."+Cg(u,r-o)):l+u}});var Lg=L,Jg=D,xg=k,Hg=N,kg=Mr,Ug=tr,Tg=U,wg=oe,Fg=ct,Ag=Object.assign,Bg=Object.defineProperty,zg=Jg([].concat),jg=!Ag||Hg((function(){if(Lg&&1!==Ag({b:1},Ag(Bg({},"a",{enumerable:!0,get:function(){Bg(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach((function(t){e[t]=t})),7!=Ag({},t)[n]||kg(Ag({},e)).join("")!=i}))?function(t,e){for(var n=wg(t),i=arguments.length,r=1,c=Ug.f,o=Tg.f;i>r;)for(var a,l=Fg(arguments[r++]),u=c?zg(kg(l),c(l)):kg(l),d=u.length,s=0;d>s;)a=u[s++],Lg&&!xg(o,l,a)||(n[a]=l[a]);return n}:Ag,Mg=jg;Yr({target:"Object",stat:!0,arity:2,forced:Object.assign!==Mg},{assign:Mg});var Qg=R,Pg=Om,Eg=!N((function(){if(!(Pg&&Pg<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete Qg[t]}})),Dg=Bt,Og=oe,_g=$e;L&&Yr({target:"Object",proto:!0,forced:Eg},{__defineGetter__:function(t,e){_g.f(Og(this),t,{get:Dg(e),enumerable:!0,configurable:!0})}});var qg=Bt,$g=oe,tX=$e;L&&Yr({target:"Object",proto:!0,forced:Eg},{__defineSetter__:function(t,e){tX.f($g(this),t,{set:qg(e),enumerable:!0,configurable:!0})}});var eX=L,nX=D,iX=Mr,rX=dt,cX=nX(U.f),oX=nX([].push),aX=function(t){return function(e){for(var n,i=rX(e),r=iX(i),c=r.length,o=0,a=[];c>o;)n=r[o++],eX&&!cX(i,n)||oX(a,t?[n,i[n]]:i[n]);return a}},lX={entries:aX(!0),values:aX(!1)},uX=lX.entries;Yr({target:"Object",stat:!0},{entries:function(t){return uX(t)}});var dX=Yr,sX=Hp,mX=N,hX=ht,bX=Sp.exports.onFreeze,pX=Object.freeze;dX({target:"Object",stat:!0,forced:mX((function(){pX(1)})),sham:!sX},{freeze:function(t){return pX&&hX(t)?pX(bX(t)):t}});var ZX=dZ,IX=Zc;Yr({target:"Object",stat:!0},{fromEntries:function(t){var e={};return ZX(t,(function(t,n){IX(e,t,n)}),{AS_ENTRIES:!0}),e}});var yX=Yr,gX=N,XX=dt,GX=K.f,fX=L,VX=gX((function(){GX(1)}));yX({target:"Object",stat:!0,forced:!fX||VX,sham:!fX},{getOwnPropertyDescriptor:function(t,e){return GX(XX(t),e)}});var WX=or,vX=dt,CX=K,SX=Zc;Yr({target:"Object",stat:!0,sham:!L},{getOwnPropertyDescriptors:function(t){for(var e,n,i=vX(t),r=CX.f,c=WX(i),o={},a=0;c.length>a;)void 0!==(n=r(i,e=c[a++]))&&SX(o,e,n);return o}});var YX=Yr,RX=N,KX=mc.f;YX({target:"Object",stat:!0,forced:RX((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:KX});var NX=oe,LX=ls,JX=$d;Yr({target:"Object",stat:!0,forced:N((function(){LX(1)})),sham:!JX},{getPrototypeOf:function(t){return LX(NX(t))}});var xX=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};Yr({target:"Object",stat:!0},{is:xX});var HX=xp;Yr({target:"Object",stat:!0,forced:Object.isExtensible!==HX},{isExtensible:HX});var kX=Yr,UX=N,TX=ht,wX=$,FX=Yp,AX=Object.isFrozen;kX({target:"Object",stat:!0,forced:UX((function(){AX(1)}))||FX},{isFrozen:function(t){return!TX(t)||(!(!FX||"ArrayBuffer"!=wX(t))||!!AX&&AX(t))}});var BX=Yr,zX=N,jX=ht,MX=$,QX=Yp,PX=Object.isSealed;BX({target:"Object",stat:!0,forced:zX((function(){PX(1)}))||QX},{isSealed:function(t){return!jX(t)||(!(!QX||"ArrayBuffer"!=MX(t))||!!PX&&PX(t))}});var EX=oe,DX=Mr;Yr({target:"Object",stat:!0,forced:N((function(){DX(1)}))},{keys:function(t){return DX(EX(t))}});var OX=Yr,_X=L,qX=Eg,$X=oe,tG=Ue,eG=ls,nG=K.f;_X&&OX({target:"Object",proto:!0,forced:qX},{__lookupGetter__:function(t){var e,n=$X(this),i=tG(t);do{if(e=nG(n,i))return e.get}while(n=eG(n))}});var iG=Yr,rG=L,cG=Eg,oG=oe,aG=Ue,lG=ls,uG=K.f;rG&&iG({target:"Object",proto:!0,forced:cG},{__lookupSetter__:function(t){var e,n=oG(this),i=aG(t);do{if(e=uG(n,i))return e.set}while(n=lG(n))}});var dG=Yr,sG=ht,mG=Sp.exports.onFreeze,hG=Hp,bG=N,pG=Object.preventExtensions;dG({target:"Object",stat:!0,forced:bG((function(){pG(1)})),sham:!hG},{preventExtensions:function(t){return pG&&sG(t)?pG(mG(t)):t}});var ZG=Yr,IG=ht,yG=Sp.exports.onFreeze,gG=Hp,XG=N,GG=Object.seal;ZG({target:"Object",stat:!0,forced:XG((function(){GG(1)})),sham:!gG},{seal:function(t){return GG&&IG(t)?GG(yG(t)):t}});var fG=Tr,VG=Kr?{}.toString:function(){return"[object "+fG(this)+"]"};Kr||Wi(Object.prototype,"toString",VG,{unsafe:!0});var WG=lX.values;Yr({target:"Object",stat:!0},{values:function(t){return WG(t)}});var vG,CG,SG,YG,RG="process"==$(R.process),KG=uo,NG=Tt,LG=R.TypeError,JG=function(t){if(KG(t))return t;throw LG(NG(t)+" is not a constructor")},xG=on,HG=JG,kG=ve("species"),UG=function(t,e){var n,i=xG(t).constructor;return void 0===i||null==(n=xG(i)[kG])?e:HG(n)},TG=R.TypeError,wG=function(t,e){if(t<e)throw TG("Not enough arguments");return t},FG=/(?:ipad|iphone|ipod).*applewebkit/i.test(gt),AG=R,BG=qa,zG=Pc,jG=st,MG=ue,QG=N,PG=$r,EG=$a,DG=Ae,OG=wG,_G=FG,qG=RG,$G=AG.setImmediate,tf=AG.clearImmediate,ef=AG.process,nf=AG.Dispatch,rf=AG.Function,cf=AG.MessageChannel,of=AG.String,af=0,lf={},uf="onreadystatechange";try{vG=AG.location}catch(t){}var df=function(t){if(MG(lf,t)){var e=lf[t];delete lf[t],e()}},sf=function(t){return function(){df(t)}},mf=function(t){df(t.data)},hf=function(t){AG.postMessage(of(t),vG.protocol+"//"+vG.host)};$G&&tf||($G=function(t){OG(arguments.length,1);var e=jG(t)?t:rf(t),n=EG(arguments,1);return lf[++af]=function(){BG(e,void 0,n)},CG(af),af},tf=function(t){delete lf[t]},qG?CG=function(t){ef.nextTick(sf(t))}:nf&&nf.now?CG=function(t){nf.now(sf(t))}:cf&&!_G?(YG=(SG=new cf).port2,SG.port1.onmessage=mf,CG=zG(YG.postMessage,YG)):AG.addEventListener&&jG(AG.postMessage)&&!AG.importScripts&&vG&&"file:"!==vG.protocol&&!QG(hf)?(CG=hf,AG.addEventListener("message",mf,!1)):CG=uf in DG("script")?function(t){PG.appendChild(DG("script")).onreadystatechange=function(){PG.removeChild(this),df(t)}}:function(t){setTimeout(sf(t),0)});var bf,pf,Zf,If,yf,gf,Xf,Gf,ff={set:$G,clear:tf},Vf=R,Wf=/ipad|iphone|ipod/i.test(gt)&&void 0!==Vf.Pebble,vf=/web0s(?!.*chrome)/i.test(gt),Cf=R,Sf=Pc,Yf=K.f,Rf=ff.set,Kf=FG,Nf=Wf,Lf=vf,Jf=RG,xf=Cf.MutationObserver||Cf.WebKitMutationObserver,Hf=Cf.document,kf=Cf.process,Uf=Cf.Promise,Tf=Yf(Cf,"queueMicrotask"),wf=Tf&&Tf.value;wf||(bf=function(){var t,e;for(Jf&&(t=kf.domain)&&t.exit();pf;){e=pf.fn,pf=pf.next;try{e()}catch(t){throw pf?If():Zf=void 0,t}}Zf=void 0,t&&t.enter()},Kf||Jf||Lf||!xf||!Hf?!Nf&&Uf&&Uf.resolve?((Xf=Uf.resolve(void 0)).constructor=Uf,Gf=Sf(Xf.then,Xf),If=function(){Gf(bf)}):Jf?If=function(){kf.nextTick(bf)}:(Rf=Sf(Rf,Cf),If=function(){Rf(bf)}):(yf=!0,gf=Hf.createTextNode(""),new xf(bf).observe(gf,{characterData:!0}),If=function(){gf.data=yf=!yf}));var Ff=wf||function(t){var e={fn:t,next:void 0};Zf&&(Zf.next=e),pf||(pf=e,If()),Zf=e},Af=R,Bf=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},zf=function(){this.head=null,this.tail=null};zf.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}};var jf=zf,Mf=R.Promise,Qf="object"==("undefined"==typeof window?"undefined":a(window))&&"object"!=("undefined"==typeof Deno?"undefined":a(Deno)),Pf=R,Ef=Mf,Df=st,Of=Xr,_f=xn,qf=ve,$f=Qf,tV=Ct;Ef&&Ef.prototype;var eV=qf("species"),nV=!1,iV=Df(Pf.PromiseRejectionEvent),rV=Of("Promise",(function(){var t=_f(Ef),e=t!==String(Ef);if(!e&&66===tV)return!0;if(tV>=51&&/native code/.test(t))return!1;var n=new Ef((function(t){t(1)})),i=function(t){t((function(){}),(function(){}))};return(n.constructor={})[eV]=i,!(nV=n.then((function(){}))instanceof i)||!e&&$f&&!iV})),cV={CONSTRUCTOR:rV,REJECTION_EVENT:iV,SUBCLASSING:nV},oV={},aV=Bt,lV=function(t){var e,n;this.promise=new t((function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i})),this.resolve=aV(e),this.reject=aV(n)};oV.f=function(t){return new lV(t)};var uV,dV,sV,mV=Yr,hV=RG,bV=R,pV=k,ZV=Wi,IV=Ls,yV=zc,gV=Gh,XV=Bt,GV=st,fV=ht,VV=Ah,WV=UG,vV=ff.set,CV=Ff,SV=function(t,e){var n=Af.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))},YV=Bf,RV=jf,KV=ai,NV=Mf,LV=oV,JV="Promise",xV=cV.CONSTRUCTOR,HV=cV.REJECTION_EVENT,kV=cV.SUBCLASSING,UV=KV.getterFor(JV),TV=KV.set,wV=NV&&NV.prototype,FV=NV,AV=wV,BV=bV.TypeError,zV=bV.document,jV=bV.process,MV=LV.f,QV=MV,PV=!!(zV&&zV.createEvent&&bV.dispatchEvent),EV="unhandledrejection",DV=function(t){var e;return!(!fV(t)||!GV(e=t.then))&&e},OV=function(t,e){var n,i,r,c=e.value,o=1==e.state,a=o?t.ok:t.fail,l=t.resolve,u=t.reject,d=t.domain;try{a?(o||(2===e.rejection&&eW(e),e.rejection=1),!0===a?n=c:(d&&d.enter(),n=a(c),d&&(d.exit(),r=!0)),n===t.promise?u(BV("Promise-chain cycle")):(i=DV(n))?pV(i,n,l,u):l(n)):u(c)}catch(t){d&&!r&&d.exit(),u(t)}},_V=function(t,e){t.notified||(t.notified=!0,CV((function(){for(var n,i=t.reactions;n=i.get();)OV(n,t);t.notified=!1,e&&!t.rejection&&$V(t)})))},qV=function(t,e,n){var i,r;PV?((i=zV.createEvent("Event")).promise=e,i.reason=n,i.initEvent(t,!1,!0),bV.dispatchEvent(i)):i={promise:e,reason:n},!HV&&(r=bV["on"+t])?r(i):t===EV&&SV("Unhandled promise rejection",n)},$V=function(t){pV(vV,bV,(function(){var e,n=t.facade,i=t.value;if(tW(t)&&(e=YV((function(){hV?jV.emit("unhandledRejection",i,n):qV(EV,n,i)})),t.rejection=hV||tW(t)?2:1,e.error))throw e.value}))},tW=function(t){return 1!==t.rejection&&!t.parent},eW=function(t){pV(vV,bV,(function(){var e=t.facade;hV?jV.emit("rejectionHandled",e):qV("rejectionhandled",e,t.value)}))},nW=function(t,e,n){return function(i){t(e,i,n)}},iW=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,_V(t,!0))},rW=function t(e,n,i){if(!e.done){e.done=!0,i&&(e=i);try{if(e.facade===n)throw BV("Promise can't be resolved itself");var r=DV(n);r?CV((function(){var i={done:!1};try{pV(r,n,nW(t,i,e),nW(iW,i,e))}catch(t){iW(i,t,e)}})):(e.value=n,e.state=1,_V(e,!1))}catch(t){iW({done:!1},t,e)}}};if(xV&&(AV=(FV=function(t){VV(this,AV),XV(t),pV(uV,this);var e=UV(this);try{t(nW(rW,e),nW(iW,e))}catch(t){iW(e,t)}}).prototype,(uV=function(t){TV(this,{type:JV,done:!1,notified:!1,parent:!1,reactions:new RV,rejection:!1,state:0,value:void 0})}).prototype=ZV(AV,"then",(function(t,e){var n=UV(this),i=MV(WV(this,FV));return n.parent=!0,i.ok=!GV(t)||t,i.fail=GV(e)&&e,i.domain=hV?jV.domain:void 0,0==n.state?n.reactions.add(i):CV((function(){OV(i,n)})),i.promise})),dV=function(){var t=new uV,e=UV(t);this.promise=t,this.resolve=nW(rW,e),this.reject=nW(iW,e)},LV.f=MV=function(t){return t===FV||undefined===t?new dV(t):QV(t)},GV(NV)&&wV!==Object.prototype)){sV=wV.then,kV||ZV(wV,"then",(function(t,e){var n=this;return new FV((function(t,e){pV(sV,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete wV.constructor}catch(t){}IV&&IV(wV,AV)}mV({global:!0,constructor:!0,wrap:!0,forced:xV},{Promise:FV}),yV(FV,JV,!1),gV(JV);var cW=Mf,oW=cV.CONSTRUCTOR||!Qd((function(t){cW.all(t).then(void 0,(function(){}))})),aW=k,lW=Bt,uW=oV,dW=Bf,sW=dZ;Yr({target:"Promise",stat:!0,forced:oW},{all:function(t){var e=this,n=uW.f(e),i=n.resolve,r=n.reject,c=dW((function(){var n=lW(e.resolve),c=[],o=0,a=1;sW(t,(function(t){var l=o++,u=!1;a++,aW(n,e,t).then((function(t){u||(u=!0,c[l]=t,--a||i(c))}),r)})),--a||i(c)}));return c.error&&r(c.value),n.promise}});var mW=Yr,hW=cV.CONSTRUCTOR,bW=Mf,pW=It,ZW=st,IW=Wi,yW=bW&&bW.prototype;if(mW({target:"Promise",proto:!0,forced:hW,real:!0},{catch:function(t){return this.then(void 0,t)}}),ZW(bW)){var gW=pW("Promise").prototype.catch;yW.catch!==gW&&IW(yW,"catch",gW,{unsafe:!0})}var XW=k,GW=Bt,fW=oV,VW=Bf,WW=dZ;Yr({target:"Promise",stat:!0,forced:oW},{race:function(t){var e=this,n=fW.f(e),i=n.reject,r=VW((function(){var r=GW(e.resolve);WW(t,(function(t){XW(r,e,t).then(n.resolve,i)}))}));return r.error&&i(r.value),n.promise}});var vW=k,CW=oV;Yr({target:"Promise",stat:!0,forced:cV.CONSTRUCTOR},{reject:function(t){var e=CW.f(this);return vW(e.reject,void 0,t),e.promise}});var SW=on,YW=ht,RW=oV,KW=function(t,e){if(SW(t),YW(e)&&e.constructor===t)return e;var n=RW.f(t);return(0,n.resolve)(e),n.promise},NW=Yr,LW=cV.CONSTRUCTOR,JW=KW;It("Promise"),NW({target:"Promise",stat:!0,forced:LW},{resolve:function(t){return JW(this,t)}});var xW=k,HW=Bt,kW=oV,UW=Bf,TW=dZ;Yr({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=kW.f(e),i=n.resolve,r=n.reject,c=UW((function(){var n=HW(e.resolve),r=[],c=0,o=1;TW(t,(function(t){var a=c++,l=!1;o++,xW(n,e,t).then((function(t){l||(l=!0,r[a]={status:"fulfilled",value:t},--o||i(r))}),(function(t){l||(l=!0,r[a]={status:"rejected",reason:t},--o||i(r))}))})),--o||i(r)}));return c.error&&r(c.value),n.promise}});var wW=Yr,FW=Mf,AW=N,BW=It,zW=st,jW=UG,MW=KW,QW=Wi,PW=FW&&FW.prototype;if(wW({target:"Promise",proto:!0,real:!0,forced:!!FW&&AW((function(){PW.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=jW(this,BW("Promise")),n=zW(t);return this.then(n?function(n){return MW(e,t()).then((function(){return n}))}:t,n?function(n){return MW(e,t()).then((function(){throw n}))}:t)}}),zW(FW)){var EW=BW("Promise").prototype.finally;PW.finally!==EW&&QW(PW,"finally",EW,{unsafe:!0})}var DW=qa,OW=Bt,_W=on;Yr({target:"Reflect",stat:!0,forced:!N((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,n){return DW(OW(t),e,_W(n))}});var qW=D,$W=Bt,tv=ht,ev=ue,nv=$a,iv=J,rv=R.Function,cv=qW([].concat),ov=qW([].join),av={},lv=function(t,e,n){if(!ev(av,e)){for(var i=[],r=0;r<e;r++)i[r]="a["+r+"]";av[e]=rv("C,a","return new C("+ov(i,",")+")")}return av[e](t,n)},uv=iv?rv.bind:function(t){var e=$W(this),n=e.prototype,i=nv(arguments,1),r=function(){var n=cv(i,nv(arguments));return this instanceof r?lv(e,n.length,n):e.apply(t,n)};return tv(n)&&(r.prototype=n),r},dv=Yr,sv=qa,mv=uv,hv=JG,bv=on,pv=ht,Zv=sc,Iv=N,yv=It("Reflect","construct"),gv=Object.prototype,Xv=[].push,Gv=Iv((function(){function t(){}return!(yv((function(){}),[],t)instanceof t)})),fv=!Iv((function(){yv((function(){}))})),Vv=Gv||fv;dv({target:"Reflect",stat:!0,forced:Vv,sham:Vv},{construct:function(t,e){hv(t),bv(e);var n=arguments.length<3?t:hv(arguments[2]);if(fv&&!Gv)return yv(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var i=[null];return sv(Xv,i,e),new(sv(mv,t,i))}var r=n.prototype,c=Zv(pv(r)?r:gv),o=sv(t,c,e);return pv(o)?o:c}});var Wv=L,vv=on,Cv=Ue,Sv=$e;Yr({target:"Reflect",stat:!0,forced:N((function(){Reflect.defineProperty(Sv.f({},1,{value:1}),1,{value:2})})),sham:!Wv},{defineProperty:function(t,e,n){vv(t);var i=Cv(e);vv(n);try{return Sv.f(t,i,n),!0}catch(t){return!1}}});var Yv=Yr,Rv=on,Kv=K.f;Yv({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=Kv(Rv(t),e);return!(n&&!n.configurable)&&delete t[e]}});var Nv=ue,Lv=function(t){return void 0!==t&&(Nv(t,"value")||Nv(t,"writable"))},Jv=k,xv=ht,Hv=on,kv=Lv,Uv=K,Tv=ls;Yr({target:"Reflect",stat:!0},{get:function t(e,n){var i,r,c=arguments.length<3?e:arguments[2];return Hv(e)===c?e[n]:(i=Uv.f(e,n))?kv(i)?i.value:void 0===i.get?void 0:Jv(i.get,c):xv(r=Tv(e))?t(r,n,c):void 0}});var wv=on,Fv=K;Yr({target:"Reflect",stat:!0,sham:!L},{getOwnPropertyDescriptor:function(t,e){return Fv.f(wv(t),e)}});var Av=on,Bv=ls;Yr({target:"Reflect",stat:!0,sham:!$d},{getPrototypeOf:function(t){return Bv(Av(t))}}),Yr({target:"Reflect",stat:!0},{has:function(t,e){return e in t}});var zv=on,jv=xp;Yr({target:"Reflect",stat:!0},{isExtensible:function(t){return zv(t),jv(t)}}),Yr({target:"Reflect",stat:!0},{ownKeys:or});var Mv=It,Qv=on;Yr({target:"Reflect",stat:!0,sham:!Hp},{preventExtensions:function(t){Qv(t);try{var e=Mv("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}});var Pv=Yr,Ev=k,Dv=on,Ov=ht,_v=Lv,qv=$e,$v=K,tC=ls,eC=z;var nC=N((function(){var t=function(){},e=qv.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}));Pv({target:"Reflect",stat:!0,forced:nC},{set:function t(e,n,i){var r,c,o,a=arguments.length<4?e:arguments[3],l=$v.f(Dv(e),n);if(!l){if(Ov(c=tC(e)))return t(c,n,i,a);l=eC(0)}if(_v(l)){if(!1===l.writable||!Ov(a))return!1;if(r=$v.f(a,n)){if(r.get||r.set||!1===r.writable)return!1;r.value=i,qv.f(a,n,r)}else qv.f(a,n,eC(0,i))}else{if(void 0===(o=l.set))return!1;Ev(o,a,i)}return!0}});var iC=on,rC=Ys,cC=Ls;cC&&Yr({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){iC(t),rC(e);try{return cC(t,e),!0}catch(t){return!1}}});var oC=ht,aC=$,lC=ve("match"),uC=function(t){var e;return oC(t)&&(void 0!==(e=t[lC])?!!e:"RegExp"==aC(t))},dC=on,sC=function(){var t=dC(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e},mC=k,hC=ue,bC=yt,pC=sC,ZC=RegExp.prototype,IC=function(t){var e=t.flags;return void 0!==e||"flags"in ZC||hC(t,"flags")||!bC(ZC,t)?e:mC(pC,t)},yC=N,gC=R.RegExp,XC=yC((function(){var t=gC("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),GC=XC||yC((function(){return!gC("a","y").sticky})),fC=XC||yC((function(){var t=gC("^r","gy");return t.lastIndex=2,null!=t.exec("str")})),VC={BROKEN_CARET:fC,MISSED_STICKY:GC,UNSUPPORTED_Y:XC},WC=$e.f,vC=N,CC=R.RegExp,SC=vC((function(){var t=CC(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)})),YC=N,RC=R.RegExp,KC=YC((function(){var t=RC("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")})),NC=L,LC=R,JC=D,xC=Xr,HC=bZ,kC=Xn,UC=vi.f,TC=yt,wC=uC,FC=Ar,AC=IC,BC=VC,zC=function(t,e,n){n in t||WC(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})},jC=Wi,MC=N,QC=ue,PC=ai.enforce,EC=Gh,DC=SC,OC=KC,_C=ve("match"),qC=LC.RegExp,$C=qC.prototype,tS=LC.SyntaxError,eS=JC($C.exec),nS=JC("".charAt),iS=JC("".replace),rS=JC("".indexOf),cS=JC("".slice),oS=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,aS=/a/g,lS=/a/g,uS=new qC(aS)!==aS,dS=BC.MISSED_STICKY,sS=BC.UNSUPPORTED_Y,mS=NC&&(!uS||dS||DC||OC||MC((function(){return lS[_C]=!1,qC(aS)!=aS||qC(lS)==lS||"/a/i"!=qC(aS,"i")})));if(xC("RegExp",mS)){for(var hS=function(t,e){var n,i,r,c,o,a,l=TC($C,this),u=wC(t),d=void 0===e,s=[],m=t;if(!l&&u&&d&&t.constructor===hS)return t;if((u||TC($C,t))&&(t=t.source,d&&(e=AC(m))),t=void 0===t?"":FC(t),e=void 0===e?"":FC(e),m=t,DC&&"dotAll"in aS&&(i=!!e&&rS(e,"s")>-1)&&(e=iS(e,/s/g,"")),n=e,dS&&"sticky"in aS&&(r=!!e&&rS(e,"y")>-1)&&sS&&(e=iS(e,/y/g,"")),OC&&(c=function(t){for(var e,n=t.length,i=0,r="",c=[],o={},a=!1,l=!1,u=0,d="";i<=n;i++){if("\\"===(e=nS(t,i)))e+=nS(t,++i);else if("]"===e)a=!1;else if(!a)switch(!0){case"["===e:a=!0;break;case"("===e:eS(oS,cS(t,i+1))&&(i+=2,l=!0),r+=e,u++;continue;case">"===e&&l:if(""===d||QC(o,d))throw new tS("Invalid capture group name");o[d]=!0,c[c.length]=[d,u],l=!1,d="";continue}l?d+=e:r+=e}return[r,c]}(t),t=c[0],s=c[1]),o=HC(qC(t,e),l?this:$C,hS),(i||r||s.length)&&(a=PC(o),i&&(a.dotAll=!0,a.raw=hS(function(t){for(var e,n=t.length,i=0,r="",c=!1;i<=n;i++)"\\"!==(e=nS(t,i))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),r+=e):r+="[\\s\\S]":r+=e+nS(t,++i);return r}(t),n)),r&&(a.sticky=!0),s.length&&(a.groups=s)),t!==m)try{kC(o,"source",""===m?"(?:)":m)}catch(t){}return o},bS=UC(qC),pS=0;bS.length>pS;)zC(hS,qC,bS[pS++]);$C.constructor=hS,hS.prototype=$C,jC(LC,"RegExp",hS,{constructor:!0})}EC("RegExp");var ZS=k,IS=D,yS=Ar,gS=sC,XS=VC,GS=Ot.exports,fS=sc,VS=ai.get,WS=SC,vS=KC,CS=GS("native-string-replace",String.prototype.replace),SS=RegExp.prototype.exec,YS=SS,RS=IS("".charAt),KS=IS("".indexOf),NS=IS("".replace),LS=IS("".slice),JS=function(){var t=/a/,e=/b*/g;return ZS(SS,t,"a"),ZS(SS,e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),xS=XS.BROKEN_CARET,HS=void 0!==/()??/.exec("")[1];(JS||HS||xS||WS||vS)&&(YS=function(t){var e,n,i,r,c,o,a,l=this,u=VS(l),d=yS(t),s=u.raw;if(s)return s.lastIndex=l.lastIndex,e=ZS(YS,s,d),l.lastIndex=s.lastIndex,e;var m=u.groups,h=xS&&l.sticky,b=ZS(gS,l),p=l.source,Z=0,I=d;if(h&&(b=NS(b,"y",""),-1===KS(b,"g")&&(b+="g"),I=LS(d,l.lastIndex),l.lastIndex>0&&(!l.multiline||l.multiline&&"\n"!==RS(d,l.lastIndex-1))&&(p="(?: "+p+")",I=" "+I,Z++),n=new RegExp("^(?:"+p+")",b)),HS&&(n=new RegExp("^"+p+"$(?!\\s)",b)),JS&&(i=l.lastIndex),r=ZS(SS,h?n:l,I),h?r?(r.input=LS(r.input,Z),r[0]=LS(r[0],Z),r.index=l.lastIndex,l.lastIndex+=r[0].length):l.lastIndex=0:JS&&r&&(l.lastIndex=l.global?r.index+r[0].length:i),HS&&r&&r.length>1&&ZS(CS,r[0],n,(function(){for(c=1;c<arguments.length-2;c++)void 0===arguments[c]&&(r[c]=void 0)})),r&&m)for(r.groups=o=fS(null),c=0;c<m.length;c++)o[(a=m[c])[0]]=r[a[1]];return r});var kS=YS;Yr({target:"RegExp",proto:!0,forced:/./.exec!==kS},{exec:kS});var US=Gn.exports,TS=$e,wS=function(t,e,n){return n.get&&US(n.get,e,{getter:!0}),n.set&&US(n.set,e,{setter:!0}),TS.f(t,e,n)},FS=L,AS=wS,BS=sC,zS=N,jS=RegExp.prototype;FS&&zS((function(){return"sy"!==Object.getOwnPropertyDescriptor(jS,"flags").get.call({dotAll:!0,sticky:!0})}))&&AS(jS,"flags",{configurable:!0,get:BS});var MS=R,QS=L,PS=VC.MISSED_STICKY,ES=$,DS=wS,OS=ai.get,_S=RegExp.prototype,qS=MS.TypeError;QS&&PS&&DS(_S,"sticky",{configurable:!0,get:function(){if(this!==_S){if("RegExp"===ES(this))return!!OS(this).sticky;throw qS("Incompatible receiver, RegExp required")}}});var $S,tY,eY=Yr,nY=R,iY=k,rY=D,cY=st,oY=ht,aY=($S=!1,(tY=/[ac]/).exec=function(){return $S=!0,/./.exec.apply(this,arguments)},!0===tY.test("abc")&&$S),lY=nY.Error,uY=rY(/./.test);eY({target:"RegExp",proto:!0,forced:!aY},{test:function(t){var e=this.exec;if(!cY(e))return uY(this,t);var n=iY(e,this,t);if(null!==n&&!oY(n))throw new lY("RegExp exec method returned something other than an Object or null");return!!n}});var dY=Sn.PROPER,sY=Wi,mY=on,hY=Ar,bY=N,pY=IC,ZY="toString",IY=RegExp.prototype.toString,yY=bY((function(){return"/a/b"!=IY.call({source:"a",flags:"b"})})),gY=dY&&IY.name!=ZY;(yY||gY)&&sY(RegExp.prototype,ZY,(function(){var t=mY(this);return"/"+hY(t.source)+"/"+hY(pY(t))}),{unsafe:!0}),RZ("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),BZ);var XY=D,GY=Ki,fY=Ar,VY=at,WY=XY("".charAt),vY=XY("".charCodeAt),CY=XY("".slice),SY=function(t){return function(e,n){var i,r,c=fY(VY(e)),o=GY(n),a=c.length;return o<0||o>=a?t?"":void 0:(i=vY(c,o))<55296||i>56319||o+1===a||(r=vY(c,o+1))<56320||r>57343?t?WY(c,o):i:t?CY(c,o,o+2):r-56320+(i-55296<<10)+65536}},YY={codeAt:SY(!1),charAt:SY(!0)},RY=YY.codeAt;Yr({target:"String",proto:!0},{codePointAt:function(t){return RY(this,t)}});var KY,NY=uC,LY=R.TypeError,JY=function(t){if(NY(t))throw LY("The method doesn't accept regular expressions");return t},xY=ve("match"),HY=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[xY]=!1,"/./"[t](e)}catch(t){}}return!1},kY=Yr,UY=D,TY=K.f,wY=Ui,FY=Ar,AY=JY,BY=at,zY=HY,jY=UY("".endsWith),MY=UY("".slice),QY=Math.min,PY=zY("endsWith");kY({target:"String",proto:!0,forced:!!(PY||(KY=TY(String.prototype,"endsWith"),!KY||KY.writable))&&!PY},{endsWith:function(t){var e=FY(BY(this));AY(t);var n=arguments.length>1?arguments[1]:void 0,i=e.length,r=void 0===n?i:QY(wY(n),i),c=FY(t);return jY?jY(e,c,r):MY(e,r-c.length,r)===c}});var EY=Yr,DY=D,OY=xi,_Y=R.RangeError,qY=String.fromCharCode,$Y=String.fromCodePoint,tR=DY([].join);EY({target:"String",stat:!0,arity:1,forced:!!$Y&&1!=$Y.length},{fromCodePoint:function(t){for(var e,n=[],i=arguments.length,r=0;i>r;){if(e=+arguments[r++],OY(e,1114111)!==e)throw _Y(e+" is not a valid code point");n[r]=e<65536?qY(e):qY(55296+((e-=65536)>>10),e%1024+56320)}return tR(n,"")}});var eR=Yr,nR=JY,iR=at,rR=Ar,cR=HY,oR=D("".indexOf);eR({target:"String",proto:!0,forced:!cR("includes")},{includes:function(t){return!!~oR(rR(iR(this)),rR(nR(t)),arguments.length>1?arguments[1]:void 0)}});var aR=YY.charAt,lR=Ar,uR=ai,dR=qs,sR="String Iterator",mR=uR.set,hR=uR.getterFor(sR);dR(String,"String",(function(t){mR(this,{type:sR,string:lR(t),index:0})}),(function(){var t,e=hR(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=aR(n,i),e.index+=t.length,{value:t,done:!1})}));var bR=D,pR=Wi,ZR=kS,IR=N,yR=ve,gR=Xn,XR=yR("species"),GR=RegExp.prototype,fR=function(t,e,n,i){var r=yR(t),c=!IR((function(){var e={};return e[r]=function(){return 7},7!=""[t](e)})),o=c&&!IR((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[XR]=function(){return n},n.flags="",n[r]=/./[r]),n.exec=function(){return e=!0,null},n[r](""),!e}));if(!c||!o||n){var a=bR(/./[r]),l=e(r,""[t],(function(t,e,n,i,r){var o=bR(t),l=e.exec;return l===ZR||l===GR.exec?c&&!r?{done:!0,value:a(e,n,i)}:{done:!0,value:o(n,e,i)}:{done:!1}}));pR(String.prototype,t,l[0]),pR(GR,r,l[1])}i&&gR(GR[r],"sham",!0)},VR=YY.charAt,WR=function(t,e,n){return e+(n?VR(t,e).length:1)},vR=k,CR=on,SR=st,YR=$,RR=kS,KR=R.TypeError,NR=function(t,e){var n=t.exec;if(SR(n)){var i=vR(n,t,e);return null!==i&&CR(i),i}if("RegExp"===YR(t))return vR(RR,t,e);throw KR("RegExp#exec called on incompatible receiver")},LR=k,JR=on,xR=Ui,HR=Ar,kR=at,UR=jt,TR=WR,wR=NR;fR("match",(function(t,e,n){return[function(e){var n=kR(this),i=null==e?void 0:UR(e,t);return i?LR(i,e,n):new RegExp(e)[t](HR(n))},function(t){var i=JR(this),r=HR(t),c=n(e,i,r);if(c.done)return c.value;if(!i.global)return wR(i,r);var o=i.unicode;i.lastIndex=0;for(var a,l=[],u=0;null!==(a=wR(i,r));){var d=HR(a[0]);l[u]=d,""===d&&(i.lastIndex=TR(r,xR(i.lastIndex),o)),u++}return 0===u?null:l}]}));var FR=Yr,AR=R,BR=k,zR=D,jR=Vs,MR=at,QR=Ui,PR=Ar,ER=on,DR=uC,OR=IC,_R=jt,qR=Wi,$R=N,tK=UG,eK=WR,nK=NR,iK=ai,rK=ve("matchAll"),cK="RegExp String",oK="RegExp String Iterator",aK=iK.set,lK=iK.getterFor(oK),uK=RegExp.prototype,dK=AR.TypeError,sK=zR("".indexOf),mK=zR("".matchAll),hK=!!mK&&!$R((function(){mK("a",/./)})),bK=jR((function(t,e,n,i){aK(this,{type:oK,regexp:t,string:e,global:n,unicode:i,done:!1})}),cK,(function(){var t=lK(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,i=nK(e,n);return null===i?{value:void 0,done:t.done=!0}:t.global?(""===PR(i[0])&&(e.lastIndex=eK(n,QR(e.lastIndex),t.unicode)),{value:i,done:!1}):(t.done=!0,{value:i,done:!1})})),pK=function(t){var e,n,i,r=ER(this),c=PR(t),o=tK(r,RegExp),a=PR(OR(r));return e=new o(o===RegExp?r.source:r,a),n=!!~sK(a,"g"),i=!!~sK(a,"u"),e.lastIndex=QR(r.lastIndex),new bK(e,c,n,i)};FR({target:"String",proto:!0,forced:hK},{matchAll:function(t){var e,n,i,r=MR(this);if(null!=t){if(DR(t)&&(e=PR(MR(OR(t))),!~sK(e,"g")))throw dK("`.matchAll` does not allow non-global regexes");if(hK)return mK(r,t);if(i=_R(t,rK))return BR(i,t,r)}else if(hK)return mK(r,t);return n=PR(r),new RegExp(t,"g")[rK](n)}}),rK in uK||qR(uK,rK,pK);var ZK=D,IK=Ui,yK=Ar,gK=at,XK=ZK(bg),GK=ZK("".slice),fK=Math.ceil,VK=function(t){return function(e,n,i){var r,c,o=yK(gK(e)),a=IK(n),l=o.length,u=void 0===i?" ":yK(i);return a<=l||""==u?o:((c=XK(u,fK((r=a-l)/u.length))).length>r&&(c=GK(c,0,r)),t?o+c:c+o)}},WK={start:VK(!1),end:VK(!0)},vK=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(gt),CK=WK.end;Yr({target:"String",proto:!0,forced:vK},{padEnd:function(t){return CK(this,t,arguments.length>1?arguments[1]:void 0)}});var SK=WK.start;Yr({target:"String",proto:!0,forced:vK},{padStart:function(t){return SK(this,t,arguments.length>1?arguments[1]:void 0)}});var YK=Yr,RK=D,KK=dt,NK=oe,LK=Ar,JK=wi,xK=RK([].push),HK=RK([].join);YK({target:"String",stat:!0},{raw:function(t){for(var e=KK(NK(t).raw),n=JK(e),i=arguments.length,r=[],c=0;n>c;){if(xK(r,LK(e[c++])),c===n)return HK(r,"");c<i&&xK(r,LK(arguments[c]))}}}),Yr({target:"String",proto:!0},{repeat:bg});var kK=D,UK=oe,TK=Math.floor,wK=kK("".charAt),FK=kK("".replace),AK=kK("".slice),BK=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,zK=/\$([$&'`]|\d{1,2})/g,jK=qa,MK=k,QK=D,PK=fR,EK=N,DK=on,OK=st,_K=Ki,qK=Ui,$K=Ar,tN=at,eN=WR,nN=jt,iN=function(t,e,n,i,r,c){var o=n+t.length,a=i.length,l=zK;return void 0!==r&&(r=UK(r),l=BK),FK(c,l,(function(c,l){var u;switch(wK(l,0)){case"$":return"$";case"&":return t;case"`":return AK(e,0,n);case"'":return AK(e,o);case"<":u=r[AK(l,1,-1)];break;default:var d=+l;if(0===d)return c;if(d>a){var s=TK(d/10);return 0===s?c:s<=a?void 0===i[s-1]?wK(l,1):i[s-1]+wK(l,1):c}u=i[d-1]}return void 0===u?"":u}))},rN=NR,cN=ve("replace"),oN=Math.max,aN=Math.min,lN=QK([].concat),uN=QK([].push),dN=QK("".indexOf),sN=QK("".slice),mN="$0"==="a".replace(/./,"$0"),hN=!!/./[cN]&&""===/./[cN]("a","$0"),bN=!EK((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}));PK("replace",(function(t,e,n){var i=hN?"$":"$0";return[function(t,n){var i=tN(this),r=null==t?void 0:nN(t,cN);return r?MK(r,t,i,n):MK(e,$K(i),t,n)},function(t,r){var c=DK(this),o=$K(t);if("string"==typeof r&&-1===dN(r,i)&&-1===dN(r,"$<")){var a=n(e,c,o,r);if(a.done)return a.value}var l=OK(r);l||(r=$K(r));var u=c.global;if(u){var d=c.unicode;c.lastIndex=0}for(var s=[];;){var m=rN(c,o);if(null===m)break;if(uN(s,m),!u)break;""===$K(m[0])&&(c.lastIndex=eN(o,qK(c.lastIndex),d))}for(var h,b="",p=0,Z=0;Z<s.length;Z++){for(var I=$K((m=s[Z])[0]),y=oN(aN(_K(m.index),o.length),0),g=[],X=1;X<m.length;X++)uN(g,void 0===(h=m[X])?h:String(h));var G=m.groups;if(l){var f=lN([I],g,y,o);void 0!==G&&uN(f,G);var V=$K(jK(r,void 0,f))}else V=iN(I,o,y,g,G,r);y>=p&&(b+=sN(o,p,y)+V,p=y+I.length)}return b+sN(o,p)}]}),!bN||!mN||hN);var pN=k,ZN=on,IN=at,yN=xX,gN=Ar,XN=jt,GN=NR;fR("search",(function(t,e,n){return[function(e){var n=IN(this),i=null==e?void 0:XN(e,t);return i?pN(i,e,n):new RegExp(e)[t](gN(n))},function(t){var i=ZN(this),r=gN(t),c=n(e,i,r);if(c.done)return c.value;var o=i.lastIndex;yN(o,0)||(i.lastIndex=0);var a=GN(i,r);return yN(i.lastIndex,o)||(i.lastIndex=o),null===a?-1:a.index}]}));var fN=qa,VN=k,WN=D,vN=fR,CN=uC,SN=on,YN=at,RN=UG,KN=WR,NN=Ui,LN=Ar,JN=jt,xN=fc,HN=NR,kN=kS,UN=N,TN=VC.UNSUPPORTED_Y,wN=4294967295,FN=Math.min,AN=[].push,BN=WN(/./.exec),zN=WN(AN),jN=WN("".slice),MN=!UN((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));vN("split",(function(t,e,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var i=LN(YN(this)),r=void 0===n?wN:n>>>0;if(0===r)return[];if(void 0===t)return[i];if(!CN(t))return VN(e,i,t,r);for(var c,o,a,l=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),d=0,s=new RegExp(t.source,u+"g");(c=VN(kN,s,i))&&!((o=s.lastIndex)>d&&(zN(l,jN(i,d,c.index)),c.length>1&&c.index<i.length&&fN(AN,l,xN(c,1)),a=c[0].length,d=o,l.length>=r));)s.lastIndex===c.index&&s.lastIndex++;return d===i.length?!a&&BN(s,"")||zN(l,""):zN(l,jN(i,d)),l.length>r?xN(l,0,r):l}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:VN(e,this,t,n)}:e,[function(e,n){var r=YN(this),c=null==e?void 0:JN(e,t);return c?VN(c,e,r,n):VN(i,LN(r),e,n)},function(t,r){var c=SN(this),o=LN(t),a=n(i,c,o,r,i!==e);if(a.done)return a.value;var l=RN(c,RegExp),u=c.unicode,d=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(TN?"g":"y"),s=new l(TN?"^(?:"+c.source+")":c,d),m=void 0===r?wN:r>>>0;if(0===m)return[];if(0===o.length)return null===HN(s,o)?[o]:[];for(var h=0,b=0,p=[];b<o.length;){s.lastIndex=TN?0:b;var Z,I=HN(s,TN?jN(o,b):o);if(null===I||(Z=FN(NN(s.lastIndex+(TN?b:0)),o.length))===h)b=KN(o,b,u);else{if(zN(p,jN(o,h,b)),p.length===m)return p;for(var y=1;y<=I.length-1;y++)if(zN(p,I[y]),p.length===m)return p;b=h=Z}}return zN(p,jN(o,h)),p}]}),!MN,TN);var QN=Yr,PN=D,EN=K.f,DN=Ui,ON=Ar,_N=JY,qN=at,$N=HY,tL=PN("".startsWith),eL=PN("".slice),nL=Math.min,iL=$N("startsWith"),rL=!iL&&!!function(){var t=EN(String.prototype,"startsWith");return t&&!t.writable}();QN({target:"String",proto:!0,forced:!rL&&!iL},{startsWith:function(t){var e=ON(qN(this));_N(t);var n=DN(nL(arguments.length>1?arguments[1]:void 0,e.length)),i=ON(t);return tL?tL(e,i,n):eL(e,n,n+i.length)===i}});var cL=Sn.PROPER,oL=N,aL=qI,lL=function(t){return oL((function(){return!!aL[t]()||"​…᠎"!=="​…᠎"[t]()||cL&&aL[t].name!==t}))},uL=oy.trim;Yr({target:"String",proto:!0,forced:lL("trim")},{trim:function(){return uL(this)}});var dL=oy.end,sL=lL("trimEnd")?function(){return dL(this)}:"".trimEnd;Yr({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==sL},{trimRight:sL});Yr({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==sL},{trimEnd:sL});var mL=oy.start,hL=lL("trimStart")?function(){return mL(this)}:"".trimStart;Yr({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==hL},{trimLeft:hL});Yr({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==hL},{trimStart:hL});var bL=at,pL=Ar,ZL=/"/g,IL=D("".replace),yL=function(t,e,n,i){var r=pL(bL(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+IL(pL(i),ZL,"&quot;")+'"'),c+">"+r+"</"+e+">"},gL=N,XL=function(t){return gL((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))},GL=yL;Yr({target:"String",proto:!0,forced:XL("anchor")},{anchor:function(t){return GL(this,"a","name",t)}});var fL=yL;Yr({target:"String",proto:!0,forced:XL("big")},{big:function(){return fL(this,"big","","")}});var VL=yL;Yr({target:"String",proto:!0,forced:XL("blink")},{blink:function(){return VL(this,"blink","","")}});var WL=yL;Yr({target:"String",proto:!0,forced:XL("bold")},{bold:function(){return WL(this,"b","","")}});var vL=yL;Yr({target:"String",proto:!0,forced:XL("fixed")},{fixed:function(){return vL(this,"tt","","")}});var CL=yL;Yr({target:"String",proto:!0,forced:XL("fontcolor")},{fontcolor:function(t){return CL(this,"font","color",t)}});var SL=yL;Yr({target:"String",proto:!0,forced:XL("fontsize")},{fontsize:function(t){return SL(this,"font","size",t)}});var YL=yL;Yr({target:"String",proto:!0,forced:XL("italics")},{italics:function(){return YL(this,"i","","")}});var RL=yL;Yr({target:"String",proto:!0,forced:XL("link")},{link:function(t){return RL(this,"a","href",t)}});var KL=yL;Yr({target:"String",proto:!0,forced:XL("small")},{small:function(){return KL(this,"small","","")}});var NL=yL;Yr({target:"String",proto:!0,forced:XL("strike")},{strike:function(){return NL(this,"strike","","")}});var LL=yL;Yr({target:"String",proto:!0,forced:XL("sub")},{sub:function(){return LL(this,"sub","","")}});var JL=yL;Yr({target:"String",proto:!0,forced:XL("sup")},{sup:function(){return JL(this,"sup","","")}});var xL,HL,kL,UL={exports:{}},TL=kh,wL=L,FL=R,AL=st,BL=ht,zL=ue,jL=Tr,ML=Tt,QL=Xn,PL=Wi,EL=$e.f,DL=yt,OL=ls,_L=Ls,qL=ve,$L=be,tJ=FL.Int8Array,eJ=tJ&&tJ.prototype,nJ=FL.Uint8ClampedArray,iJ=nJ&&nJ.prototype,rJ=tJ&&OL(tJ),cJ=eJ&&OL(eJ),oJ=Object.prototype,aJ=FL.TypeError,lJ=qL("toStringTag"),uJ=$L("TYPED_ARRAY_TAG"),dJ=$L("TYPED_ARRAY_CONSTRUCTOR"),sJ=TL&&!!_L&&"Opera"!==jL(FL.opera),mJ=!1,hJ={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},bJ={BigInt64Array:8,BigUint64Array:8},pJ=function(t){if(!BL(t))return!1;var e=jL(t);return zL(hJ,e)||zL(bJ,e)};for(xL in hJ)(kL=(HL=FL[xL])&&HL.prototype)?QL(kL,dJ,HL):sJ=!1;for(xL in bJ)(kL=(HL=FL[xL])&&HL.prototype)&&QL(kL,dJ,HL);if((!sJ||!AL(rJ)||rJ===Function.prototype)&&(rJ=function(){throw aJ("Incorrect invocation")},sJ))for(xL in hJ)FL[xL]&&_L(FL[xL],rJ);if((!sJ||!cJ||cJ===oJ)&&(cJ=rJ.prototype,sJ))for(xL in hJ)FL[xL]&&_L(FL[xL].prototype,cJ);if(sJ&&OL(iJ)!==cJ&&_L(iJ,cJ),wL&&!zL(cJ,lJ))for(xL in mJ=!0,EL(cJ,lJ,{get:function(){return BL(this)?this[uJ]:void 0}}),hJ)FL[xL]&&QL(FL[xL],uJ,xL);var ZJ={NATIVE_ARRAY_BUFFER_VIEWS:sJ,TYPED_ARRAY_CONSTRUCTOR:dJ,TYPED_ARRAY_TAG:mJ&&uJ,aTypedArray:function(t){if(pJ(t))return t;throw aJ("Target is not a typed array")},aTypedArrayConstructor:function(t){if(AL(t)&&(!_L||DL(rJ,t)))return t;throw aJ(ML(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,i){if(wL){if(n)for(var r in hJ){var c=FL[r];if(c&&zL(c.prototype,t))try{delete c.prototype[t]}catch(n){try{c.prototype[t]=e}catch(t){}}}cJ[t]&&!n||PL(cJ,t,n?e:sJ&&eJ[t]||e,i)}},exportTypedArrayStaticMethod:function(t,e,n){var i,r;if(wL){if(_L){if(n)for(i in hJ)if((r=FL[i])&&zL(r,t))try{delete r[t]}catch(t){}if(rJ[t]&&!n)return;try{return PL(rJ,t,n?e:sJ&&rJ[t]||e)}catch(t){}}for(i in hJ)!(r=FL[i])||r[t]&&!n||PL(r,t,e)}},isView:function(t){if(!BL(t))return!1;var e=jL(t);return"DataView"===e||zL(hJ,e)||zL(bJ,e)},isTypedArray:pJ,TypedArray:rJ,TypedArrayPrototype:cJ},IJ=R,yJ=N,gJ=Qd,XJ=ZJ.NATIVE_ARRAY_BUFFER_VIEWS,GJ=IJ.ArrayBuffer,fJ=IJ.Int8Array,VJ=!XJ||!yJ((function(){fJ(1)}))||!yJ((function(){new fJ(-1)}))||!gJ((function(t){new fJ,new fJ(null),new fJ(1.5),new fJ(t)}),!0)||yJ((function(){return 1!==new fJ(new GJ(2),1,void 0).length})),WJ=Ki,vJ=R.RangeError,CJ=function(t){var e=WJ(t);if(e<0)throw vJ("The argument can't be less than 0");return e},SJ=R.RangeError,YJ=function(t,e){var n=CJ(t);if(n%e)throw SJ("Wrong offset");return n},RJ=Pc,KJ=k,NJ=JG,LJ=oe,JJ=wi,xJ=Rd,HJ=fd,kJ=Id,UJ=ZJ.aTypedArrayConstructor,TJ=function(t){var e,n,i,r,c,o,a=NJ(this),l=LJ(t),u=arguments.length,d=u>1?arguments[1]:void 0,s=void 0!==d,m=HJ(l);if(m&&!kJ(m))for(o=(c=xJ(l,m)).next,l=[];!(r=KJ(o,c)).done;)l.push(r.value);for(s&&u>2&&(d=RJ(d,arguments[2])),n=JJ(l),i=new(UJ(a))(n),e=0;n>e;e++)i[e]=s?d(l[e],e):l[e];return i},wJ=Yr,FJ=R,AJ=k,BJ=L,zJ=VJ,jJ=ZJ,MJ=$b,QJ=Ah,PJ=z,EJ=Xn,DJ=Ty,OJ=Ui,_J=Mh,qJ=YJ,$J=Ue,tx=ue,ex=Tr,nx=ht,ix=kt,rx=sc,cx=yt,ox=Ls,ax=vi.f,lx=TJ,ux=Co.forEach,dx=Gh,sx=$e,mx=K,hx=bZ,bx=ai.get,px=ai.set,Zx=sx.f,Ix=mx.f,yx=Math.round,gx=FJ.RangeError,Xx=MJ.ArrayBuffer,Gx=Xx.prototype,fx=MJ.DataView,Vx=jJ.NATIVE_ARRAY_BUFFER_VIEWS,Wx=jJ.TYPED_ARRAY_CONSTRUCTOR,vx=jJ.TYPED_ARRAY_TAG,Cx=jJ.TypedArray,Sx=jJ.TypedArrayPrototype,Yx=jJ.aTypedArrayConstructor,Rx=jJ.isTypedArray,Kx="BYTES_PER_ELEMENT",Nx="Wrong length",Lx=function(t,e){Yx(t);for(var n=0,i=e.length,r=new t(i);i>n;)r[n]=e[n++];return r},Jx=function(t,e){Zx(t,e,{get:function(){return bx(this)[e]}})},xx=function(t){var e;return cx(Gx,t)||"ArrayBuffer"==(e=ex(t))||"SharedArrayBuffer"==e},Hx=function(t,e){return Rx(t)&&!ix(e)&&e in t&&DJ(+e)&&e>=0},kx=function(t,e){return e=$J(e),Hx(t,e)?PJ(2,t[e]):Ix(t,e)},Ux=function(t,e,n){return e=$J(e),!(Hx(t,e)&&nx(n)&&tx(n,"value"))||tx(n,"get")||tx(n,"set")||n.configurable||tx(n,"writable")&&!n.writable||tx(n,"enumerable")&&!n.enumerable?Zx(t,e,n):(t[e]=n.value,t)};BJ?(Vx||(mx.f=kx,sx.f=Ux,Jx(Sx,"buffer"),Jx(Sx,"byteOffset"),Jx(Sx,"byteLength"),Jx(Sx,"length")),wJ({target:"Object",stat:!0,forced:!Vx},{getOwnPropertyDescriptor:kx,defineProperty:Ux}),UL.exports=function(t,e,n){var i=t.match(/\d+$/)[0]/8,r=t+(n?"Clamped":"")+"Array",c="get"+t,o="set"+t,a=FJ[r],l=a,u=l&&l.prototype,d={},s=function(t,e){Zx(t,e,{get:function(){return function(t,e){var n=bx(t);return n.view[c](e*i+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,r){var c=bx(t);n&&(r=(r=yx(r))<0?0:r>255?255:255&r),c.view[o](e*i+c.byteOffset,r,!0)}(this,e,t)},enumerable:!0})};Vx?zJ&&(l=e((function(t,e,n,r){return QJ(t,u),hx(nx(e)?xx(e)?void 0!==r?new a(e,qJ(n,i),r):void 0!==n?new a(e,qJ(n,i)):new a(e):Rx(e)?Lx(l,e):AJ(lx,l,e):new a(_J(e)),t,l)})),ox&&ox(l,Cx),ux(ax(a),(function(t){t in l||EJ(l,t,a[t])})),l.prototype=u):(l=e((function(t,e,n,r){QJ(t,u);var c,o,a,d=0,m=0;if(nx(e)){if(!xx(e))return Rx(e)?Lx(l,e):AJ(lx,l,e);c=e,m=qJ(n,i);var h=e.byteLength;if(void 0===r){if(h%i)throw gx(Nx);if((o=h-m)<0)throw gx(Nx)}else if((o=OJ(r)*i)+m>h)throw gx(Nx);a=o/i}else a=_J(e),c=new Xx(o=a*i);for(px(t,{buffer:c,byteOffset:m,byteLength:o,length:a,view:new fx(c)});d<a;)s(t,d++)})),ox&&ox(l,Cx),u=l.prototype=rx(Sx)),u.constructor!==l&&EJ(u,"constructor",l),EJ(u,Wx,l),vx&&EJ(u,vx,r);var m=l!=a;d[r]=l,wJ({global:!0,constructor:!0,forced:m,sham:!Vx},d),Kx in l||EJ(l,Kx,i),Kx in u||EJ(u,Kx,i),dx(r)}):UL.exports=function(){},(0,UL.exports)("Float32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Float64",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Int8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Int16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Int32",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Uint8",(function(t){return function(e,n,i){return t(this,e,n,i)}}),!0),(0,UL.exports)("Uint16",(function(t){return function(e,n,i){return t(this,e,n,i)}})),(0,UL.exports)("Uint32",(function(t){return function(e,n,i){return t(this,e,n,i)}}));var Tx=ZJ,wx=D(fu),Fx=Tx.aTypedArray;(0,Tx.exportTypedArrayMethod)("copyWithin",(function(t,e){return wx(Fx(this),t,e,arguments.length>2?arguments[2]:void 0)}));var Ax=Co.every,Bx=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("every",(function(t){return Ax(Bx(this),t,arguments.length>1?arguments[1]:void 0)}));var zx=k,jx=Ju,Mx=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("fill",(function(t){var e=arguments.length;return zx(jx,Mx(this),t,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}));var Qx=wi,Px=UG,Ex=ZJ.TYPED_ARRAY_CONSTRUCTOR,Dx=ZJ.aTypedArrayConstructor,Ox=function(t){return Dx(Px(t,t[Ex]))},_x=function(t,e){for(var n=0,i=Qx(e),r=new t(i);i>n;)r[n]=e[n++];return r},qx=Ox,$x=Co.filter,tH=function(t,e){return _x(qx(t),e)},eH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("filter",(function(t){var e=$x(eH(this),t,arguments.length>1?arguments[1]:void 0);return tH(this,e)}));var nH=Co.find,iH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("find",(function(t){return nH(iH(this),t,arguments.length>1?arguments[1]:void 0)}));var rH=Co.findIndex,cH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("findIndex",(function(t){return rH(cH(this),t,arguments.length>1?arguments[1]:void 0)}));var oH=Co.forEach,aH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("forEach",(function(t){oH(aH(this),t,arguments.length>1?arguments[1]:void 0)})),(0,ZJ.exportTypedArrayStaticMethod)("from",TJ,VJ);var lH=ji.includes,uH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("includes",(function(t){return lH(uH(this),t,arguments.length>1?arguments[1]:void 0)}));var dH=ji.indexOf,sH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("indexOf",(function(t){return dH(sH(this),t,arguments.length>1?arguments[1]:void 0)}));var mH=R,hH=N,bH=D,pH=ZJ,ZH=um,IH=ve("iterator"),yH=mH.Uint8Array,gH=bH(ZH.values),XH=bH(ZH.keys),GH=bH(ZH.entries),fH=pH.aTypedArray,VH=pH.exportTypedArrayMethod,WH=yH&&yH.prototype,vH=!hH((function(){WH[IH].call([1])})),CH=!!WH&&WH.values&&WH[IH]===WH.values&&"values"===WH.values.name,SH=function(){return gH(fH(this))};VH("entries",(function(){return GH(fH(this))}),vH),VH("keys",(function(){return XH(fH(this))}),vH),VH("values",SH,vH||!CH,{name:"values"}),VH(IH,SH,vH||!CH,{name:"values"});var YH=ZJ.aTypedArray,RH=ZJ.exportTypedArrayMethod,KH=D([].join);RH("join",(function(t){return KH(YH(this),t)}));var NH=qa,LH=dt,JH=Ki,xH=wi,HH=mm,kH=Math.min,UH=[].lastIndexOf,TH=!!UH&&1/[1].lastIndexOf(1,-0)<0,wH=HH("lastIndexOf"),FH=TH||!wH?function(t){if(TH)return NH(UH,this,arguments)||0;var e=LH(this),n=xH(e),i=n-1;for(arguments.length>1&&(i=kH(i,JH(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in e&&e[i]===t)return i||0;return-1}:UH,AH=qa,BH=FH,zH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return AH(BH,zH(this),e>1?[t,arguments[1]]:[t])}));var jH=Co.map,MH=Ox,QH=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("map",(function(t){return jH(QH(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(MH(t))(e)}))}));var PH=ZJ.aTypedArrayConstructor;(0,ZJ.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(PH(this))(e);e>t;)n[t]=arguments[t++];return n}),VJ);var EH=Bt,DH=oe,OH=ct,_H=wi,qH=R.TypeError,$H=function(t){return function(e,n,i,r){EH(n);var c=DH(e),o=OH(c),a=_H(c),l=t?a-1:0,u=t?-1:1;if(i<2)for(;;){if(l in o){r=o[l],l+=u;break}if(l+=u,t?l<0:a<=l)throw qH("Reduce of empty array with no initial value")}for(;t?l>=0:a>l;l+=u)l in o&&(r=n(r,o[l],l,c));return r}},tk={left:$H(!1),right:$H(!0)},ek=tk.left,nk=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return ek(nk(this),t,e,e>1?arguments[1]:void 0)}));var ik=tk.right,rk=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return ik(rk(this),t,e,e>1?arguments[1]:void 0)}));var ck=ZJ.aTypedArray,ok=ZJ.exportTypedArrayMethod,ak=Math.floor;ok("reverse",(function(){for(var t,e=this,n=ck(e).length,i=ak(n/2),r=0;r<i;)t=e[r],e[r++]=e[--n],e[n]=t;return e}));var lk=R,uk=k,dk=ZJ,sk=wi,mk=YJ,hk=oe,bk=N,pk=lk.RangeError,Zk=lk.Int8Array,Ik=Zk&&Zk.prototype,yk=Ik&&Ik.set,gk=dk.aTypedArray,Xk=dk.exportTypedArrayMethod,Gk=!bk((function(){var t=new Uint8ClampedArray(2);return uk(yk,t,{length:1,0:3},1),3!==t[1]})),fk=Gk&&dk.NATIVE_ARRAY_BUFFER_VIEWS&&bk((function(){var t=new Zk(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));Xk("set",(function(t){gk(this);var e=mk(arguments.length>1?arguments[1]:void 0,1),n=hk(t);if(Gk)return uk(yk,this,n,e);var i=this.length,r=sk(n),c=0;if(r+e>i)throw pk("Wrong length");for(;c<r;)this[e+c]=n[c++]}),!Gk||fk);var Vk=Ox,Wk=$a,vk=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("slice",(function(t,e){for(var n=Wk(vk(this),t,e),i=Vk(this),r=0,c=n.length,o=new i(c);c>r;)o[r]=n[r++];return o}),N((function(){new Int8Array(1).slice()})));var Ck=Co.some,Sk=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("some",(function(t){return Ck(Sk(this),t,arguments.length>1?arguments[1]:void 0)}));var Yk=D,Rk=N,Kk=Bt,Nk=Mm,Lk=Pm,Jk=Em,xk=Ct,Hk=Om,kk=ZJ.aTypedArray,Uk=ZJ.exportTypedArrayMethod,Tk=R.Uint16Array,wk=Tk&&Yk(Tk.prototype.sort),Fk=!(!wk||Rk((function(){wk(new Tk(2),null)}))&&Rk((function(){wk(new Tk(2),{})}))),Ak=!!wk&&!Rk((function(){if(xk)return xk<74;if(Lk)return Lk<67;if(Jk)return!0;if(Hk)return Hk<602;var t,e,n=new Tk(516),i=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,i[t]=t-2*e+3;for(wk(n,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==i[t])return!0}));Uk("sort",(function(t){return void 0!==t&&Kk(t),Ak?wk(this,t):Nk(kk(this),function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t))}),!Ak||Fk);var Bk=Ui,zk=xi,jk=Ox,Mk=ZJ.aTypedArray;(0,ZJ.exportTypedArrayMethod)("subarray",(function(t,e){var n=Mk(this),i=n.length,r=zk(t,i);return new(jk(n))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,Bk((void 0===e?i:zk(e,i))-r))}));var Qk=qa,Pk=ZJ,Ek=N,Dk=$a,Ok=R.Int8Array,_k=Pk.aTypedArray,qk=Pk.exportTypedArrayMethod,$k=[].toLocaleString,tU=!!Ok&&Ek((function(){$k.call(new Ok(1))}));qk("toLocaleString",(function(){return Qk($k,tU?Dk(_k(this)):_k(this),Dk(arguments))}),Ek((function(){return[1,2].toLocaleString()!=new Ok([1,2]).toLocaleString()}))||!Ek((function(){Ok.prototype.toLocaleString.call([1,2])})));var eU=ZJ.exportTypedArrayMethod,nU=N,iU=D,rU=R.Uint8Array,cU=rU&&rU.prototype||{},oU=[].toString,aU=iU([].join);nU((function(){oU.call({})}))&&(oU=function(){return aU(this)});var lU=cU.toString!=oU;eU("toString",oU,lU);var uU=D,dU=Th,sU=Sp.exports.getWeakData,mU=on,hU=ht,bU=Ah,pU=dZ,ZU=ue,IU=ai.set,yU=ai.getterFor,gU=Co.find,XU=Co.findIndex,GU=uU([].splice),fU=0,VU=function(t){return t.frozen||(t.frozen=new WU)},WU=function(){this.entries=[]},vU=function(t,e){return gU(t.entries,(function(t){return t[0]===e}))};WU.prototype={get:function(t){var e=vU(this,t);if(e)return e[1]},has:function(t){return!!vU(this,t)},set:function(t,e){var n=vU(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=XU(this.entries,(function(e){return e[0]===t}));return~e&&GU(this.entries,e,1),!!~e}};var CU,SU={getConstructor:function(t,e,n,i){var r=t((function(t,r){bU(t,c),IU(t,{type:e,id:fU++,frozen:void 0}),null!=r&&pU(r,t[i],{that:t,AS_ENTRIES:n})})),c=r.prototype,o=yU(e),a=function(t,e,n){var i=o(t),r=sU(mU(e),!0);return!0===r?VU(i).set(e,n):r[i.id]=n,t};return dU(c,{delete:function(t){var e=o(this);if(!hU(t))return!1;var n=sU(t);return!0===n?VU(e).delete(t):n&&ZU(n,e.id)&&delete n[e.id]},has:function(t){var e=o(this);if(!hU(t))return!1;var n=sU(t);return!0===n?VU(e).has(t):n&&ZU(n,e.id)}}),dU(c,n?{get:function(t){var e=o(this);if(hU(t)){var n=sU(t);return!0===n?VU(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return a(this,t,e)}}:{add:function(t){return a(this,t,!0)}}),r}},YU=R,RU=D,KU=Th,NU=Sp.exports,LU=RZ,JU=SU,xU=ht,HU=xp,kU=ai.enforce,UU=Tn,TU=!YU.ActiveXObject&&"ActiveXObject"in YU,wU=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},FU=LU("WeakMap",wU,JU);if(UU&&TU){CU=JU.getConstructor(wU,"WeakMap",!0),NU.enable();var AU=FU.prototype,BU=RU(AU.delete),zU=RU(AU.has),jU=RU(AU.get),MU=RU(AU.set);KU(AU,{delete:function(t){if(xU(t)&&!HU(t)){var e=kU(this);return e.frozen||(e.frozen=new CU),BU(this,t)||e.frozen.delete(t)}return BU(this,t)},has:function(t){if(xU(t)&&!HU(t)){var e=kU(this);return e.frozen||(e.frozen=new CU),zU(this,t)||e.frozen.has(t)}return zU(this,t)},get:function(t){if(xU(t)&&!HU(t)){var e=kU(this);return e.frozen||(e.frozen=new CU),zU(this,t)?jU(this,t):e.frozen.get(t)}return jU(this,t)},set:function(t,e){if(xU(t)&&!HU(t)){var n=kU(this);n.frozen||(n.frozen=new CU),zU(this,t)?MU(this,t,e):n.frozen.set(t,e)}else MU(this,t,e);return this}})}RZ("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),SU);var QU={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},PU=Ae("span").classList,EU=PU&&PU.constructor&&PU.constructor.prototype,DU=EU===Object.prototype?void 0:EU,OU=Co.forEach,_U=mm("forEach")?[].forEach:function(t){return OU(this,t,arguments.length>1?arguments[1]:void 0)},qU=R,$U=QU,tT=DU,eT=_U,nT=Xn,iT=function(t){if(t&&t.forEach!==eT)try{nT(t,"forEach",eT)}catch(e){t.forEach=eT}};for(var rT in $U)$U[rT]&&iT(qU[rT]&&qU[rT].prototype);iT(tT);var cT=R,oT=QU,aT=DU,lT=um,uT=Xn,dT=ve,sT=dT("iterator"),mT=dT("toStringTag"),hT=lT.values,bT=function(t,e){if(t){if(t[sT]!==hT)try{uT(t,sT,hT)}catch(e){t[sT]=hT}if(t[mT]||uT(t,mT,e),oT[e])for(var n in lT)if(t[n]!==lT[n])try{uT(t,n,lT[n])}catch(e){t[n]=lT[n]}}};for(var pT in oT)bT(cT[pT]&&cT[pT].prototype,pT);bT(aT,"DOMTokenList");var ZT=ff.clear;Yr({global:!0,bind:!0,enumerable:!0,forced:R.clearImmediate!==ZT},{clearImmediate:ZT});var IT=ff.set;Yr({global:!0,bind:!0,enumerable:!0,forced:R.setImmediate!==IT},{setImmediate:IT});var yT=Yr,gT=Ff,XT=Bt,GT=wG,fT=RG,VT=R.process;yT({global:!0,enumerable:!0,dontCallGetSet:!0},{queueMicrotask:function(t){GT(arguments.length,1),XT(t);var e=fT&&VT.domain;gT(e?e.bind(t):t)}});var WT=N,vT=ve("iterator"),CT=!WT((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,i){e.delete("b"),n+=i+t})),!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[vT]||"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})),ST=D,YT=2147483647,RT=/[^\0-\u007E]/,KT=/[.\u3002\uFF0E\uFF61]/g,NT="Overflow: input needs wider integers to process",LT=R.RangeError,JT=ST(KT.exec),xT=Math.floor,HT=String.fromCharCode,kT=ST("".charCodeAt),UT=ST([].join),TT=ST([].push),wT=ST("".replace),FT=ST("".split),AT=ST("".toLowerCase),BT=function(t){return t+22+75*(t<26)},zT=function(t,e,n){var i=0;for(t=n?xT(t/700):t>>1,t+=xT(t/e);t>455;)t=xT(t/35),i+=36;return xT(i+36*t/(t+38))},jT=function(t){var e=[];t=function(t){for(var e=[],n=0,i=t.length;n<i;){var r=kT(t,n++);if(r>=55296&&r<=56319&&n<i){var c=kT(t,n++);56320==(64512&c)?TT(e,((1023&r)<<10)+(1023&c)+65536):(TT(e,r),n--)}else TT(e,r)}return e}(t);var n,i,r=t.length,c=128,o=0,a=72;for(n=0;n<t.length;n++)(i=t[n])<128&&TT(e,HT(i));var l=e.length,u=l;for(l&&TT(e,"-");u<r;){var d=YT;for(n=0;n<t.length;n++)(i=t[n])>=c&&i<d&&(d=i);var s=u+1;if(d-c>xT((YT-o)/s))throw LT(NT);for(o+=(d-c)*s,c=d,n=0;n<t.length;n++){if((i=t[n])<c&&++o>YT)throw LT(NT);if(i==c){for(var m=o,h=36;;){var b=h<=a?1:h>=a+26?26:h-a;if(m<b)break;var p=m-b,Z=36-b;TT(e,HT(BT(b+p%Z))),m=xT(p/Z),h+=36}TT(e,HT(BT(m))),a=zT(o,s,u==l),o=0,u++}}o++,c++}return UT(e,"")},MT=Yr,QT=R,PT=k,ET=D,DT=L,OT=CT,_T=Wi,qT=Th,$T=zc,tw=Vs,ew=ai,nw=Ah,iw=st,rw=ue,cw=Pc,ow=Tr,aw=on,lw=ht,uw=Ar,dw=sc,sw=z,mw=Rd,hw=fd,bw=wG,pw=Mm,Zw=ve("iterator"),Iw="URLSearchParams",yw="URLSearchParamsIterator",gw=ew.set,Xw=ew.getterFor(Iw),Gw=ew.getterFor(yw),fw=Object.getOwnPropertyDescriptor,Vw=function(t){if(!DT)return QT[t];var e=fw(QT,t);return e&&e.value},Ww=Vw("fetch"),vw=Vw("Request"),Cw=Vw("Headers"),Sw=vw&&vw.prototype,Yw=Cw&&Cw.prototype,Rw=QT.RegExp,Kw=QT.TypeError,Nw=QT.decodeURIComponent,Lw=QT.encodeURIComponent,Jw=ET("".charAt),xw=ET([].join),Hw=ET([].push),kw=ET("".replace),Uw=ET([].shift),Tw=ET([].splice),ww=ET("".split),Fw=ET("".slice),Aw=/\+/g,Bw=Array(4),zw=function(t){return Bw[t-1]||(Bw[t-1]=Rw("((?:%[\\da-f]{2}){"+t+"})","gi"))},jw=function(t){try{return Nw(t)}catch(e){return t}},Mw=function(t){var e=kw(t,Aw," "),n=4;try{return Nw(e)}catch(t){for(;n;)e=kw(e,zw(n--),jw);return e}},Qw=/[!'()~]|%20/g,Pw={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Ew=function(t){return Pw[t]},Dw=function(t){return kw(Lw(t),Qw,Ew)},Ow=tw((function(t,e){gw(this,{type:yw,iterator:mw(Xw(t).entries),kind:e})}),"Iterator",(function(){var t=Gw(this),e=t.kind,n=t.iterator.next(),i=n.value;return n.done||(n.value="keys"===e?i.key:"values"===e?i.value:[i.key,i.value]),n}),!0),_w=function(t){this.entries=[],this.url=null,void 0!==t&&(lw(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===Jw(t,0)?Fw(t,1):t:uw(t)))};_w.prototype={type:Iw,bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,i,r,c,o,a,l=hw(t);if(l)for(n=(e=mw(t,l)).next;!(i=PT(n,e)).done;){if(c=(r=mw(aw(i.value))).next,(o=PT(c,r)).done||(a=PT(c,r)).done||!PT(c,r).done)throw Kw("Expected sequence with length 2");Hw(this.entries,{key:uw(o.value),value:uw(a.value)})}else for(var u in t)rw(t,u)&&Hw(this.entries,{key:u,value:uw(t[u])})},parseQuery:function(t){if(t)for(var e,n,i=ww(t,"&"),r=0;r<i.length;)(e=i[r++]).length&&(n=ww(e,"="),Hw(this.entries,{key:Mw(Uw(n)),value:Mw(xw(n,"="))}))},serialize:function(){for(var t,e=this.entries,n=[],i=0;i<e.length;)t=e[i++],Hw(n,Dw(t.key)+"="+Dw(t.value));return xw(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var qw=function(){nw(this,$w);var t=arguments.length>0?arguments[0]:void 0;gw(this,new _w(t))},$w=qw.prototype;if(qT($w,{append:function(t,e){bw(arguments.length,2);var n=Xw(this);Hw(n.entries,{key:uw(t),value:uw(e)}),n.updateURL()},delete:function(t){bw(arguments.length,1);for(var e=Xw(this),n=e.entries,i=uw(t),r=0;r<n.length;)n[r].key===i?Tw(n,r,1):r++;e.updateURL()},get:function(t){bw(arguments.length,1);for(var e=Xw(this).entries,n=uw(t),i=0;i<e.length;i++)if(e[i].key===n)return e[i].value;return null},getAll:function(t){bw(arguments.length,1);for(var e=Xw(this).entries,n=uw(t),i=[],r=0;r<e.length;r++)e[r].key===n&&Hw(i,e[r].value);return i},has:function(t){bw(arguments.length,1);for(var e=Xw(this).entries,n=uw(t),i=0;i<e.length;)if(e[i++].key===n)return!0;return!1},set:function(t,e){bw(arguments.length,1);for(var n,i=Xw(this),r=i.entries,c=!1,o=uw(t),a=uw(e),l=0;l<r.length;l++)(n=r[l]).key===o&&(c?Tw(r,l--,1):(c=!0,n.value=a));c||Hw(r,{key:o,value:a}),i.updateURL()},sort:function(){var t=Xw(this);pw(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=Xw(this).entries,i=cw(t,arguments.length>1?arguments[1]:void 0),r=0;r<n.length;)i((e=n[r++]).value,e.key,this)},keys:function(){return new Ow(this,"keys")},values:function(){return new Ow(this,"values")},entries:function(){return new Ow(this,"entries")}},{enumerable:!0}),_T($w,Zw,$w.entries,{name:"entries"}),_T($w,"toString",(function(){return Xw(this).serialize()}),{enumerable:!0}),$T(qw,Iw),MT({global:!0,constructor:!0,forced:!OT},{URLSearchParams:qw}),!OT&&iw(Cw)){var tF=ET(Yw.has),eF=ET(Yw.set),nF=function(t){if(lw(t)){var e,n=t.body;if(ow(n)===Iw)return e=t.headers?new Cw(t.headers):new Cw,tF(e,"content-type")||eF(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),dw(t,{body:sw(0,uw(n)),headers:sw(0,e)})}return t};if(iw(Ww)&&MT({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(t){return Ww(t,arguments.length>1?nF(arguments[1]):{})}}),iw(vw)){var iF=function(t){return nw(this,Sw),new vw(t,arguments.length>1?nF(arguments[1]):{})};Sw.constructor=iF,iF.prototype=Sw,MT({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:iF})}}var rF,cF=Yr,oF=L,aF=CT,lF=R,uF=Pc,dF=D,sF=Wi,mF=wS,hF=Ah,bF=ue,pF=jg,ZF=Ad,IF=fc,yF=YY.codeAt,gF=function(t){var e,n,i=[],r=FT(wT(AT(t),KT,"."),".");for(e=0;e<r.length;e++)n=r[e],TT(i,JT(RT,n)?"xn--"+jT(n):n);return UT(i,".")},XF=Ar,GF=zc,fF=wG,VF={URLSearchParams:qw,getState:Xw},WF=ai,vF=WF.set,CF=WF.getterFor("URL"),SF=VF.URLSearchParams,YF=VF.getState,RF=lF.URL,KF=lF.TypeError,NF=lF.parseInt,LF=Math.floor,JF=Math.pow,xF=dF("".charAt),HF=dF(/./.exec),kF=dF([].join),UF=dF(1..toString),TF=dF([].pop),wF=dF([].push),FF=dF("".replace),AF=dF([].shift),BF=dF("".split),zF=dF("".slice),jF=dF("".toLowerCase),MF=dF([].unshift),QF="Invalid scheme",PF="Invalid host",EF="Invalid port",DF=/[a-z]/i,OF=/[\d+-.a-z]/i,_F=/\d/,qF=/^0x/i,$F=/^[0-7]+$/,tA=/^\d+$/,eA=/^[\da-f]+$/i,nA=/[\0\t\n\r #%/:<>?@[\\\]^|]/,iA=/[\0\t\n\r #/:<>?@[\\\]^|]/,rA=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,cA=/[\t\n\r]/g,oA=function(t){var e,n,i,r;if("number"==typeof t){for(e=[],n=0;n<4;n++)MF(e,t%256),t=LF(t/256);return kF(e,".")}if("object"==a(t)){for(e="",i=function(t){for(var e=null,n=1,i=null,r=0,c=0;c<8;c++)0!==t[c]?(r>n&&(e=i,n=r),i=null,r=0):(null===i&&(i=c),++r);return r>n&&(e=i,n=r),e}(t),n=0;n<8;n++)r&&0===t[n]||(r&&(r=!1),i===n?(e+=n?":":"::",r=!0):(e+=UF(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},aA={},lA=pF({},aA,{" ":1,'"':1,"<":1,">":1,"`":1}),uA=pF({},lA,{"#":1,"?":1,"{":1,"}":1}),dA=pF({},uA,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),sA=function(t,e){var n=yF(t,0);return n>32&&n<127&&!bF(e,t)?t:encodeURIComponent(t)},mA={ftp:21,file:null,http:80,https:443,ws:80,wss:443},hA=function(t,e){var n;return 2==t.length&&HF(DF,xF(t,0))&&(":"==(n=xF(t,1))||!e&&"|"==n)},bA=function(t){var e;return t.length>1&&hA(zF(t,0,2))&&(2==t.length||"/"===(e=xF(t,2))||"\\"===e||"?"===e||"#"===e)},pA=function(t){return"."===t||"%2e"===jF(t)},ZA={},IA={},yA={},gA={},XA={},GA={},fA={},VA={},WA={},vA={},CA={},SA={},YA={},RA={},KA={},NA={},LA={},JA={},xA={},HA={},kA={},UA=function t(e,n,i){var r,c,o,a=XF(e);if(n){if(c=this.parse(a))throw KF(c);this.searchParams=null}else{if(void 0!==i&&(r=new t(i,!0)),c=this.parse(a,null,r))throw KF(c);(o=YF(new SF)).bindURL(this),this.searchParams=o}};UA.prototype={type:"URL",parse:function(t,e,n){var i,r,c,o,a,l=this,u=e||ZA,d=0,s="",m=!1,h=!1,b=!1;for(t=XF(t),e||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,t=FF(t,rA,"")),t=FF(t,cA,""),i=ZF(t);d<=i.length;){switch(r=i[d],u){case ZA:if(!r||!HF(DF,r)){if(e)return QF;u=yA;continue}s+=jF(r),u=IA;break;case IA:if(r&&(HF(OF,r)||"+"==r||"-"==r||"."==r))s+=jF(r);else{if(":"!=r){if(e)return QF;s="",u=yA,d=0;continue}if(e&&(l.isSpecial()!=bF(mA,s)||"file"==s&&(l.includesCredentials()||null!==l.port)||"file"==l.scheme&&!l.host))return;if(l.scheme=s,e)return void(l.isSpecial()&&mA[l.scheme]==l.port&&(l.port=null));s="","file"==l.scheme?u=RA:l.isSpecial()&&n&&n.scheme==l.scheme?u=gA:l.isSpecial()?u=VA:"/"==i[d+1]?(u=XA,d++):(l.cannotBeABaseURL=!0,wF(l.path,""),u=xA)}break;case yA:if(!n||n.cannotBeABaseURL&&"#"!=r)return QF;if(n.cannotBeABaseURL&&"#"==r){l.scheme=n.scheme,l.path=IF(n.path),l.query=n.query,l.fragment="",l.cannotBeABaseURL=!0,u=kA;break}u="file"==n.scheme?RA:GA;continue;case gA:if("/"!=r||"/"!=i[d+1]){u=GA;continue}u=WA,d++;break;case XA:if("/"==r){u=vA;break}u=JA;continue;case GA:if(l.scheme=n.scheme,r==rF)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=IF(n.path),l.query=n.query;else if("/"==r||"\\"==r&&l.isSpecial())u=fA;else if("?"==r)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=IF(n.path),l.query="",u=HA;else{if("#"!=r){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=IF(n.path),l.path.length--,u=JA;continue}l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=IF(n.path),l.query=n.query,l.fragment="",u=kA}break;case fA:if(!l.isSpecial()||"/"!=r&&"\\"!=r){if("/"!=r){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,u=JA;continue}u=vA}else u=WA;break;case VA:if(u=WA,"/"!=r||"/"!=xF(s,d+1))continue;d++;break;case WA:if("/"!=r&&"\\"!=r){u=vA;continue}break;case vA:if("@"==r){m&&(s="%40"+s),m=!0,c=ZF(s);for(var p=0;p<c.length;p++){var Z=c[p];if(":"!=Z||b){var I=sA(Z,dA);b?l.password+=I:l.username+=I}else b=!0}s=""}else if(r==rF||"/"==r||"?"==r||"#"==r||"\\"==r&&l.isSpecial()){if(m&&""==s)return"Invalid authority";d-=ZF(s).length+1,s="",u=CA}else s+=r;break;case CA:case SA:if(e&&"file"==l.scheme){u=NA;continue}if(":"!=r||h){if(r==rF||"/"==r||"?"==r||"#"==r||"\\"==r&&l.isSpecial()){if(l.isSpecial()&&""==s)return PF;if(e&&""==s&&(l.includesCredentials()||null!==l.port))return;if(o=l.parseHost(s))return o;if(s="",u=LA,e)return;continue}"["==r?h=!0:"]"==r&&(h=!1),s+=r}else{if(""==s)return PF;if(o=l.parseHost(s))return o;if(s="",u=YA,e==SA)return}break;case YA:if(!HF(_F,r)){if(r==rF||"/"==r||"?"==r||"#"==r||"\\"==r&&l.isSpecial()||e){if(""!=s){var y=NF(s,10);if(y>65535)return EF;l.port=l.isSpecial()&&y===mA[l.scheme]?null:y,s=""}if(e)return;u=LA;continue}return EF}s+=r;break;case RA:if(l.scheme="file","/"==r||"\\"==r)u=KA;else{if(!n||"file"!=n.scheme){u=JA;continue}if(r==rF)l.host=n.host,l.path=IF(n.path),l.query=n.query;else if("?"==r)l.host=n.host,l.path=IF(n.path),l.query="",u=HA;else{if("#"!=r){bA(kF(IF(i,d),""))||(l.host=n.host,l.path=IF(n.path),l.shortenPath()),u=JA;continue}l.host=n.host,l.path=IF(n.path),l.query=n.query,l.fragment="",u=kA}}break;case KA:if("/"==r||"\\"==r){u=NA;break}n&&"file"==n.scheme&&!bA(kF(IF(i,d),""))&&(hA(n.path[0],!0)?wF(l.path,n.path[0]):l.host=n.host),u=JA;continue;case NA:if(r==rF||"/"==r||"\\"==r||"?"==r||"#"==r){if(!e&&hA(s))u=JA;else if(""==s){if(l.host="",e)return;u=LA}else{if(o=l.parseHost(s))return o;if("localhost"==l.host&&(l.host=""),e)return;s="",u=LA}continue}s+=r;break;case LA:if(l.isSpecial()){if(u=JA,"/"!=r&&"\\"!=r)continue}else if(e||"?"!=r)if(e||"#"!=r){if(r!=rF&&(u=JA,"/"!=r))continue}else l.fragment="",u=kA;else l.query="",u=HA;break;case JA:if(r==rF||"/"==r||"\\"==r&&l.isSpecial()||!e&&("?"==r||"#"==r)){if(".."===(a=jF(a=s))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(l.shortenPath(),"/"==r||"\\"==r&&l.isSpecial()||wF(l.path,"")):pA(s)?"/"==r||"\\"==r&&l.isSpecial()||wF(l.path,""):("file"==l.scheme&&!l.path.length&&hA(s)&&(l.host&&(l.host=""),s=xF(s,0)+":"),wF(l.path,s)),s="","file"==l.scheme&&(r==rF||"?"==r||"#"==r))for(;l.path.length>1&&""===l.path[0];)AF(l.path);"?"==r?(l.query="",u=HA):"#"==r&&(l.fragment="",u=kA)}else s+=sA(r,uA);break;case xA:"?"==r?(l.query="",u=HA):"#"==r?(l.fragment="",u=kA):r!=rF&&(l.path[0]+=sA(r,aA));break;case HA:e||"#"!=r?r!=rF&&("'"==r&&l.isSpecial()?l.query+="%27":l.query+="#"==r?"%23":sA(r,aA)):(l.fragment="",u=kA);break;case kA:r!=rF&&(l.fragment+=sA(r,lA))}d++}},parseHost:function(t){var e,n,i;if("["==xF(t,0)){if("]"!=xF(t,t.length-1))return PF;if(e=function(t){var e,n,i,r,c,o,a,l=[0,0,0,0,0,0,0,0],u=0,d=null,s=0,m=function(){return xF(t,s)};if(":"==m()){if(":"!=xF(t,1))return;s+=2,d=++u}for(;m();){if(8==u)return;if(":"!=m()){for(e=n=0;n<4&&HF(eA,m());)e=16*e+NF(m(),16),s++,n++;if("."==m()){if(0==n)return;if(s-=n,u>6)return;for(i=0;m();){if(r=null,i>0){if(!("."==m()&&i<4))return;s++}if(!HF(_F,m()))return;for(;HF(_F,m());){if(c=NF(m(),10),null===r)r=c;else{if(0==r)return;r=10*r+c}if(r>255)return;s++}l[u]=256*l[u]+r,2!=++i&&4!=i||u++}if(4!=i)return;break}if(":"==m()){if(s++,!m())return}else if(m())return;l[u++]=e}else{if(null!==d)return;s++,d=++u}}if(null!==d)for(o=u-d,u=7;0!=u&&o>0;)a=l[u],l[u--]=l[d+o-1],l[d+--o]=a;else if(8!=u)return;return l}(zF(t,1,-1)),!e)return PF;this.host=e}else if(this.isSpecial()){if(t=gF(t),HF(nA,t))return PF;if(e=function(t){var e,n,i,r,c,o,a,l=BF(t,".");if(l.length&&""==l[l.length-1]&&l.length--,(e=l.length)>4)return t;for(n=[],i=0;i<e;i++){if(""==(r=l[i]))return t;if(c=10,r.length>1&&"0"==xF(r,0)&&(c=HF(qF,r)?16:8,r=zF(r,8==c?1:2)),""===r)o=0;else{if(!HF(10==c?tA:8==c?$F:eA,r))return t;o=NF(r,c)}wF(n,o)}for(i=0;i<e;i++)if(o=n[i],i==e-1){if(o>=JF(256,5-e))return null}else if(o>255)return null;for(a=TF(n),i=0;i<n.length;i++)a+=n[i]*JF(256,3-i);return a}(t),null===e)return PF;this.host=e}else{if(HF(iA,t))return PF;for(e="",n=ZF(t),i=0;i<n.length;i++)e+=sA(n[i],aA);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return bF(mA,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&hA(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,n=t.username,i=t.password,r=t.host,c=t.port,o=t.path,a=t.query,l=t.fragment,u=e+":";return null!==r?(u+="//",t.includesCredentials()&&(u+=n+(i?":"+i:"")+"@"),u+=oA(r),null!==c&&(u+=":"+c)):"file"==e&&(u+="//"),u+=t.cannotBeABaseURL?o[0]:o.length?"/"+kF(o,"/"):"",null!==a&&(u+="?"+a),null!==l&&(u+="#"+l),u},setHref:function(t){var e=this.parse(t);if(e)throw KF(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new TA(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+oA(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(XF(t)+":",ZA)},getUsername:function(){return this.username},setUsername:function(t){var e=ZF(XF(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<e.length;n++)this.username+=sA(e[n],dA)}},getPassword:function(){return this.password},setPassword:function(t){var e=ZF(XF(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<e.length;n++)this.password+=sA(e[n],dA)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?oA(t):oA(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,CA)},getHostname:function(){var t=this.host;return null===t?"":oA(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,SA)},getPort:function(){var t=this.port;return null===t?"":XF(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=XF(t))?this.port=null:this.parse(t,YA))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+kF(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,LA))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=XF(t))?this.query=null:("?"==xF(t,0)&&(t=zF(t,1)),this.query="",this.parse(t,HA)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=XF(t))?("#"==xF(t,0)&&(t=zF(t,1)),this.fragment="",this.parse(t,kA)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var TA=function(t){var e=hF(this,wA),n=fF(arguments.length,1)>1?arguments[1]:void 0,i=vF(e,new UA(t,!1,n));oF||(e.href=i.serialize(),e.origin=i.getOrigin(),e.protocol=i.getProtocol(),e.username=i.getUsername(),e.password=i.getPassword(),e.host=i.getHost(),e.hostname=i.getHostname(),e.port=i.getPort(),e.pathname=i.getPathname(),e.search=i.getSearch(),e.searchParams=i.getSearchParams(),e.hash=i.getHash())},wA=TA.prototype,FA=function(t,e){return{get:function(){return CF(this)[t]()},set:e&&function(t){return CF(this)[e](t)},configurable:!0,enumerable:!0}};if(oF&&(mF(wA,"href",FA("serialize","setHref")),mF(wA,"origin",FA("getOrigin")),mF(wA,"protocol",FA("getProtocol","setProtocol")),mF(wA,"username",FA("getUsername","setUsername")),mF(wA,"password",FA("getPassword","setPassword")),mF(wA,"host",FA("getHost","setHost")),mF(wA,"hostname",FA("getHostname","setHostname")),mF(wA,"port",FA("getPort","setPort")),mF(wA,"pathname",FA("getPathname","setPathname")),mF(wA,"search",FA("getSearch","setSearch")),mF(wA,"searchParams",FA("getSearchParams")),mF(wA,"hash",FA("getHash","setHash"))),sF(wA,"toJSON",(function(){return CF(this).serialize()}),{enumerable:!0}),sF(wA,"toString",(function(){return CF(this).serialize()}),{enumerable:!0}),RF){var AA=RF.createObjectURL,BA=RF.revokeObjectURL;AA&&sF(TA,"createObjectURL",uF(AA,RF)),BA&&sF(TA,"revokeObjectURL",uF(BA,RF))}GF(TA,"URL"),cF({global:!0,constructor:!0,forced:!aF,sham:!oF},{URL:TA});var zA=k;function jA(t,e,n,i){return new(n||(n=Promise))((function(r,c){function o(t){try{l(i.next(t))}catch(t){c(t)}}function a(t){try{l(i.throw(t))}catch(t){c(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}l((i=i.apply(t,e||[])).next())}))}
2
4
  /*! *****************************************************************************
3
5
  Copyright (c) Microsoft Corporation.
4
6
 
@@ -12,7 +14,7 @@
12
14
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
15
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
16
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */function jT(e,t,n,r){return new(n||(n=Promise))((function(i,c){function o(e){try{l(r.next(e))}catch(e){c(e)}}function a(e){try{l(r.throw(e))}catch(e){c(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))}Ci({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return BT(URL.prototype.toString,this)}}),e.ResponseMode=void 0,function(e){e.formPost="form_post",e.query="query"}(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={}));var MT,QT="refresh_token_timer",PT=["RS256","RS512","RS384","PS256"],ET="code",DT="session_state",OT="sign_out_url",_T="sign_out_success",qT="state";!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(MT||(MT={}));var $T=s((function e(t,n,r){u(this,e),this.message=r,this.name=n,this.code=t,Object.setPrototypeOf(this,(this instanceof e?this.constructor:void 0).prototype)})),eB=function(){function e(){u(this,e)}return s(e,null,[{key:"filterClaimsFromIDTokenPayload",value:function(e){var 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;var n={};return Object.entries(t).forEach((function(e){var t=G(e,2),r=t[0],i=t[1],c=r.split("_").map((function(e,t){return 0===t?e:[e[0].toUpperCase()].concat(V(e.slice(1))).join("")})).join("");n[c]=i})),n}},{key:"getTokenRequestHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}},{key:"generateStateParamForRequestCorrelation",value:function(e,t){var n=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(n):"request_".concat(n)}},{key:"extractPKCEKeyFromStateParam",value:function(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}]),e}();eB.getTenantDomainFromIdTokenPayload=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=e.sub.split(t);return n.length>2?n[n.length-1]:""};var tB,nB,rB=function(){function e(t,n){var r=this;u(this,e),this._dataLayer=t,this._config=function(){return jT(r,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getConfigData();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))},this._oidcProviderMetaData=function(){return jT(r,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))},this._cryptoHelper=n}return s(e,[{key:"resolveEndpoints",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n={},t.next=3,this._config();case 3:return r=t.sent,t.abrupt("return",(r.endpoints&&Object.keys(r.endpoints).forEach((function(e){var t=e.replace(/[A-Z]/g,(function(e){return"_".concat(e.toLowerCase())}));n[t]=(null==r?void 0:r.endpoints)?r.endpoints[e]:""})),Object.assign(Object.assign({},e),n)));case 5:case"end":return t.stop()}}),t,this)})))}},{key:"resolveEndpointsExplicitly",value:function(){return jT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={},e.next=3,this._config();case 3:if(n=e.sent,r=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"],n.endpoints&&Object.keys(null==n?void 0:n.endpoints).every((function(e){var t=e.replace(/[A-Z]/g,(function(e){return"_".concat(e.toLowerCase())}));return r.includes(t)}))){e.next=7;break}throw new $T("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");case 7:return e.abrupt("return",(n.endpoints&&Object.keys(n.endpoints).forEach((function(e){var r=e.replace(/[A-Z]/g,(function(e){return"_".concat(e.toLowerCase())}));t[r]=(null==n?void 0:n.endpoints)?n.endpoints[e]:""})),Object.assign({},t)));case 8:case"end":return e.stop()}}),e,this)})))}},{key:"resolveEndpointsByBaseURL",value:function(){return jT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={},e.next=3,this._config();case 3:if(n=e.sent,r=n.baseUrl){e.next=7;break}throw new $T("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");case 7:return n.endpoints&&Object.keys(n.endpoints).forEach((function(e){var r=e.replace(/[A-Z]/g,(function(e){return"_".concat(e.toLowerCase())}));t[r]=(null==n?void 0:n.endpoints)?n.endpoints[e]:""})),i={authorization_endpoint:"".concat(r).concat("/oauth2/authorize"),end_session_endpoint:"".concat(r).concat("/oidc/logout"),issuer:"".concat(r).concat("/oauth2/token"),jwks_uri:"".concat(r).concat("/oauth2/jwks"),check_session_iframe:"".concat(r).concat("/oidc/checksession"),revocation_endpoint:"".concat(r).concat("/oauth2/revoke"),token_endpoint:"".concat(r).concat("/oauth2/token"),userinfo_endpoint:"".concat(r).concat("/oauth2/userinfo")},e.abrupt("return",Object.assign(Object.assign({},i),t));case 10:case"end":return e.stop()}}),e,this)})))}},{key:"validateIdToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,o,a,l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return n=t.sent.jwks_uri,t.next=5,this._config();case 5:if(r=t.sent,n&&0!==n.trim().length){t.next=8;break}throw new $T("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.");case 8:return t.prev=8,t.next=11,fetch(n,{credentials:r.sendCookiesInRequests?MT.Include:MT.SameOrigin});case 11:i=t.sent,t.next=17;break;case 14:throw t.prev=14,t.t0=t.catch(8),new $T("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=t.t0?t.t0:"The request sent to get the jwks from the server failed.");case 17:if(200===i.status&&i.ok){t.next=24;break}return t.t1=$T,t.t2="Invalid response status received for jwks request (".concat(i.statusText,")."),t.next=22,i.json();case 22:throw t.t3=t.sent,new t.t1("JS-AUTH_HELPER-VIT-HE03",t.t2,t.t3);case 24:return t.next=26,this._oidcProviderMetaData();case 26:return c=t.sent.issuer,t.next=29,i.json();case 29:return o=t.sent,a=o.keys,t.next=33,this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],a);case 33:return l=t.sent,t.t4=this._cryptoHelper,t.t5=e,t.t6=l,t.next=39,this._config();case 39:return t.t7=t.sent.clientID,t.t8=null!=c?c:"",t.t9=this._cryptoHelper.decodeIDToken(e).sub,t.next=44,this._config();case 44:return t.t10=t.sent.clockTolerance,t.abrupt("return",t.t4.isValidIdToken.call(t.t4,t.t5,t.t6,t.t7,t.t8,t.t9,t.t10));case 46:case"end":return t.stop()}}),t,this,[[8,14]])})))}},{key:"getAuthenticatedUserInfo",value:function(e){var t,n,r,i,c=this._cryptoHelper.decodeIDToken(e),o=eB.getTenantDomainFromIdTokenPayload(c),a=null!==(t=null==c?void 0:c.username)&&void 0!==t?t:"",l=null!==(n=c.given_name)&&void 0!==n?n:"",u=null!==(r=c.family_name)&&void 0!==r?r:"",d=l&&u?"".concat(l," ").concat(u):l||u||"",s=null!==(i=c.preferred_username)&&void 0!==i?i:d;return Object.assign({displayName:s,tenantDomain:o,username:a},eB.filterClaimsFromIDTokenPayload(c))}},{key:"replaceCustomGrantTemplateTags",value:function(e,t){var n;return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return i="openid",r.next=3,this._config();case 3:return c=r.sent,r.next=6,this._dataLayer.getSessionData(t);case 6:return o=r.sent,r.abrupt("return",(c.scope&&c.scope.length>0&&(c.scope.includes("openid")||c.scope.push("openid"),i=c.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",i).replace("{{clientID}}",c.clientID).replace("{{clientSecret}}",null!==(n=c.clientSecret)&&void 0!==n?n:"")));case 8:case"end":return r.stop()}}),r,this)})))}},{key:"clearUserSessionData",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.removeTemporaryData(e);case 2:return t.next=4,this._dataLayer.removeSessionData(e);case 4:case"end":return t.stop()}}),t,this)})))}},{key:"handleTokenResponse",value:function(e,t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c=this;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(200===e.status&&e.ok){n.next=7;break}return n.t0=$T,n.t1="Invalid response status received for token request (".concat(e.statusText,")."),n.next=5,e.json();case 5:throw n.t2=n.sent,new n.t0("JS-AUTH_HELPER-HTR-NE01",n.t1,n.t2);case 7:return n.next=9,e.json();case 9:return(r=n.sent).created_at=(new Date).getTime(),n.next=13,this._config();case 13:if(!n.sent.validateIDToken){n.next=15;break}return n.abrupt("return",this.validateIdToken(r.id_token).then((function(){return jT(c,void 0,void 0,regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setSessionData(r,t);case 2:return n={accessToken:r.access_token,createdAt:r.created_at,expiresIn:r.expires_in,idToken:r.id_token,refreshToken:r.refresh_token,scope:r.scope,tokenType:r.token_type},e.abrupt("return",Promise.resolve(n));case 4:case"end":return e.stop()}}),e,this)})))})));case 15:return i={accessToken:r.access_token,createdAt:r.created_at,expiresIn:r.expires_in,idToken:r.id_token,refreshToken:r.refresh_token,scope:r.scope,tokenType:r.token_type},n.next=18,this._dataLayer.setSessionData(r,t);case 18:return n.abrupt("return",Promise.resolve(i));case 19:case"end":return n.stop()}}),n,this)})))}},{key:"generatePKCEKey",value:function(e){var t;return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryData(e);case 2:return r=n.sent,i=[],Object.keys(r).forEach((function(e){e.startsWith("pkce_code_verifier")&&i.push(e)})),c=i.sort().pop(),n.abrupt("return","pkce_code_verifier#".concat(parseInt(null!==(t=null==c?void 0:c.split("#")[1])&&void 0!==t?t:"-1")+1));case 7:case"end":return n.stop()}}),n,this)})))}}]),e}(),iB=function(){function e(t){u(this,e),this._cryptoUtils=t}return s(e,[{key:"getCodeVerifier",value:function(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}},{key:"getCodeChallenge",value:function(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}},{key:"getJWKForTheIdToken",value:function(e,t){var n,r=JSON.parse(this._cryptoUtils.base64URLDecode(e)),i=v(t);try{for(i.s();!(n=i.n()).done;){var c=n.value;if(r.kid===c.kid)return c}}catch(e){i.e(e)}finally{i.f()}throw new $T("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+r.kid+", Expected values: "+t.map((function(e){return e.kid})).join(", "))}},{key:"isValidIdToken",value:function(e,t,n,r,i,c){return this._cryptoUtils.verifyJwt(e,t,PT,n,r,i,c).then((function(e){return e?Promise.resolve(!0):Promise.reject(new $T("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))})).catch((function(e){return"ERR_JWT_CLAIM_VALIDATION_FAILED"===(null==e?void 0:e.code)&&"nbf"===(null==e?void 0:e.claim)?Promise.reject(new $T("JS-CRYPTO_UTILS-IVIT-IV02","JWT NBF CLAIM VALIDATION FAILED","JWT NBF claim validation has been failed")):Promise.reject(new $T("JS-CRYPTO_UTILS-IVIT-IV03","JWT VALIDATION FAILED","JWT validation has been failed"))}))}},{key:"decodeIDToken",value:function(e){try{var t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new $T("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}]),e}(),cB=function(){function e(t,n){var r=this;u(this,e),this._cryptoUtils=n,this._cryptoHelper=new iB(n),this._authenticationHelper=new rB(t,this._cryptoHelper),this._dataLayer=t,this._config=function(){return jT(r,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getConfigData();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))},this._oidcProviderMetaData=function(){return jT(r,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))}}return s(e,[{key:"getAuthorizationURL",value:function(e,t){var n,r,i;return jT(this,void 0,void 0,regeneratorRuntime.mark((function c(){var o,a,l,u,d,s,m,Z,h,b,p,I,g,y,X,f,V,W,C,R;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");case 2:return o=c.sent,c.next=5,this._config();case 5:if(a=c.sent,o&&0!==o.trim().length){c.next=8;break}throw new $T("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.");case 8:return l=new URL(o),(u=new Map).set("response_type","code"),u.set("client_id",a.clientID),d="openid",a.scope&&a.scope.length>0&&(a.scope.includes("openid")||a.scope.push("openid"),d=a.scope.join(" ")),u.set("scope",d),u.set("redirect_uri",a.signInRedirectURL),a.responseMode&&u.set("response_mode",a.responseMode),c.next=14,this._authenticationHelper.generatePKCEKey(t);case 14:if(s=c.sent,!a.enablePKCE){c.next=21;break}return m=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),Z=null===(r=this._cryptoHelper)||void 0===r?void 0:r.getCodeChallenge(m),c.next=19,this._dataLayer.setTemporaryDataParameter(s,m,t);case 19:u.set("code_challenge_method","S256"),u.set("code_challenge",Z);case 21:if(a.prompt&&u.set("prompt",a.prompt),h=e)for(b=0,p=Object.entries(h);b<p.length;b++)I=G(p[b],2),g=I[0],y=I[1],""!=g&&""!=y&&"state"!==g&&(X=g.replace(/[A-Z]/g,(function(e){return"_".concat(e.toLowerCase())})),u.set(X,y.toString()));u.set("state",eB.generateStateParamForRequestCorrelation(s,h?null===(i=h.state)||void 0===i?void 0:i.toString():"")),f=v(u.entries());try{for(f.s();!(V=f.n()).done;)W=G(V.value,2),C=W[0],R=W[1],l.searchParams.append(C,R)}catch(e){f.e(e)}finally{f.f()}return c.abrupt("return",l.toString());case 28:case"end":return c.stop()}}),c,this)})))}},{key:"requestAccessToken",value:function(e,t,n,r){return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){var c,o,a,l,u;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._oidcProviderMetaData();case 2:return c=i.sent.token_endpoint,i.next=5,this._config();case 5:if(o=i.sent,c&&0!==c.trim().length){i.next=8;break}throw new $T("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.");case 8:if(i.t0=t,!i.t0){i.next=12;break}return i.next=12,this._dataLayer.setSessionDataParameter("session_state",t,r);case 12:if((a=[]).push("client_id=".concat(o.clientID)),o.clientSecret&&o.clientSecret.trim().length>0&&a.push("client_secret=".concat(o.clientSecret)),l=e,a.push("code=".concat(l)),a.push("grant_type=authorization_code"),a.push("redirect_uri=".concat(o.signInRedirectURL)),i.t1=o.enablePKCE,!i.t1){i.next=29;break}return i.t2=a,i.t3="code_verifier=",i.next=24,this._dataLayer.getTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(n),r);case 24:return i.t4=i.sent,i.t5=i.t3.concat.call(i.t3,i.t4),i.t2.push.call(i.t2,i.t5),i.next=29,this._dataLayer.removeTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(n),r);case 29:return i.prev=29,i.next=32,fetch(c,{body:a.join("&"),credentials:o.sendCookiesInRequests?MT.Include:MT.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 32:u=i.sent,i.next=38;break;case 35:throw i.prev=35,i.t6=i.catch(29),new $T("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=i.t6?i.t6:"The request to get the access token from the server failed.");case 38:if(u.ok){i.next=45;break}return i.t7=$T,i.t8="Requesting access token failed with ".concat(u.statusText),i.next=43,u.json();case 43:throw i.t9=i.sent,new i.t7("JS-AUTH_CORE-RAT1-HE03",i.t8,i.t9);case 45:return i.next=47,this._authenticationHelper.handleTokenResponse(u,r);case 47:return i.abrupt("return",i.sent);case 48:case"end":return i.stop()}}),i,this,[[29,35]])})))}},{key:"refreshAccessToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return n=t.sent.token_endpoint,t.next=5,this._config();case 5:return r=t.sent,t.next=8,this._dataLayer.getSessionData(e);case 8:if((i=t.sent).refresh_token){t.next=11;break}throw new $T("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.");case 11:if(n&&0!==n.trim().length){t.next=13;break}throw new $T("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.");case 13:return(c=[]).push("client_id=".concat(r.clientID)),c.push("refresh_token=".concat(i.refresh_token)),c.push("grant_type=refresh_token"),r.clientSecret&&r.clientSecret.trim().length>0&&c.push("client_secret=".concat(r.clientSecret)),t.prev=15,t.next=18,fetch(n,{body:c.join("&"),credentials:r.sendCookiesInRequests?MT.Include:MT.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 18:o=t.sent,t.next=24;break;case 21:throw t.prev=21,t.t0=t.catch(15),new $T("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t.t0?t.t0:"The request to refresh the access token failed.");case 24:if(o.ok){t.next=31;break}return t.t1=$T,t.t2="Refreshing access token failed with ".concat(o.statusText),t.next=29,o.json();case 29:throw t.t3=t.sent,new t.t1("JS-AUTH_CORE-RAT2-HE04",t.t2,t.t3);case 31:return t.abrupt("return",this._authenticationHelper.handleTokenResponse(o,e));case 32:case"end":return t.stop()}}),t,this,[[15,21]])})))}},{key:"revokeAccessToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._oidcProviderMetaData();case 2:return n=t.sent.revocation_endpoint,t.next=5,this._config();case 5:if(r=t.sent,n&&0!==n.trim().length){t.next=8;break}throw new $T("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.");case 8:return(i=[]).push("client_id=".concat(r.clientID)),t.t0=i,t.t1="token=",t.next=14,this._dataLayer.getSessionData(e);case 14:return t.t2=t.sent.access_token,t.t3=t.t1.concat.call(t.t1,t.t2),t.t0.push.call(t.t0,t.t3),i.push("token_type_hint=access_token"),t.prev=18,t.next=21,fetch(n,{body:i.join("&"),credentials:r.sendCookiesInRequests?MT.Include:MT.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 21:c=t.sent,t.next=27;break;case 24:throw t.prev=24,t.t4=t.catch(18),new $T("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t.t4?t.t4:"The request sent to revoke the access token failed.");case 27:if(200===c.status&&c.ok){t.next=34;break}return t.t5=$T,t.t6="Invalid response status received for revoke access token request (".concat(c.statusText,")."),t.next=32,c.json();case 32:throw t.t7=t.sent,new t.t5("JS-AUTH_CORE-RAT3-HE03",t.t6,t.t7);case 34:return t.abrupt("return",(this._authenticationHelper.clearUserSessionData(e),Promise.resolve(c)));case 35:case"end":return t.stop()}}),t,this,[[18,24]])})))}},{key:"requestCustomGrant",value:function(e,t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c,o,a,l,u,d=this;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._oidcProviderMetaData();case 2:return r=n.sent,n.next=5,this._config();case 5:if(i=n.sent,(c=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:r.token_endpoint)&&0!==c.trim().length){n.next=8;break}throw new $T("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.");case 8:return n.next=10,Promise.all(Object.entries(e.data).map((function(e){var n=G(e,2),r=n[0],i=n[1];return jT(d,void 0,void 0,regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationHelper.replaceCustomGrantTemplateTags(i,t);case 2:return n=e.sent,e.abrupt("return","".concat(r,"=").concat(n));case 4:case"end":return e.stop()}}),e,this)})))})));case 10:if(o=n.sent,a=Object.assign({},eB.getTokenRequestHeaders()),n.t0=e.attachToken,!n.t0){n.next=23;break}return n.t1=Object,n.t2=Object.assign({},a),n.t3="Bearer ",n.next=19,this._dataLayer.getSessionData(t);case 19:n.t4=n.sent.access_token,n.t5=n.t3.concat.call(n.t3,n.t4),n.t6={Authorization:n.t5},a=n.t1.assign.call(n.t1,n.t2,n.t6);case 23:return l={body:o.join("&"),credentials:i.sendCookiesInRequests?MT.Include:MT.SameOrigin,headers:new Headers(a),method:"POST"},n.prev=24,n.next=27,fetch(c,l);case 27:u=n.sent,n.next=33;break;case 30:throw n.prev=30,n.t7=n.catch(24),new $T("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=n.t7?n.t7:"The request sent to get the custom grant failed.");case 33:if(200===u.status&&u.ok){n.next=40;break}return n.t8=$T,n.t9="Invalid response status received for the custom grant request. (".concat(u.statusText,")"),n.next=38,u.json();case 38:throw n.t10=n.sent,new n.t8("JS-AUTH_CORE-RCG-HE03",n.t9,n.t10);case 40:if(!e.returnsSession){n.next=44;break}n.t11=this._authenticationHelper.handleTokenResponse(u,t),n.next=49;break;case 44:return n.t12=Promise,n.next=47,u.json();case 47:n.t13=n.sent,n.t11=n.t12.resolve.call(n.t12,n.t13);case 49:return n.abrupt("return",n.t11);case 50:case"end":return n.stop()}}),n,this,[[24,30]])})))}},{key:"getBasicUserInfo",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData(e);case 2:return n=t.sent,r=this._authenticationHelper.getAuthenticatedUserInfo(null==n?void 0:n.id_token),i={allowedScopes:n.scope,sessionState:n.session_state},t.abrupt("return",(Object.keys(r).forEach((function(e){void 0!==r[e]&&""!==r[e]&&null!==r[e]||delete r[e]})),i=Object.assign(Object.assign({},i),r)));case 6:case"end":return t.stop()}}),t,this)})))}},{key:"getDecodedIDToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData(e);case 2:return n=t.sent.id_token,t.abrupt("return",this._cryptoHelper.decodeIDToken(n));case 4:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData(e);case 2:return t.abrupt("return",t.sent.id_token);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"getOIDCProviderMetaData",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._config();case 2:if(n=t.sent,t.t0=!e,!t.t0){t.next=8;break}return t.next=7,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 7:t.t0=t.sent;case 8:if(!t.t0){t.next=10;break}return t.abrupt("return",Promise.resolve());case 10:if(!(r=n.wellKnownEndpoint)){t.next=36;break}return t.prev=12,t.next=15,fetch(r);case 15:if(200===(i=t.sent).status&&i.ok){t.next=18;break}throw new Error;case 18:t.next=23;break;case 20:throw t.prev=20,t.t1=t.catch(12),new $T("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.");case 23:return t.t2=this._dataLayer,t.t3=this._authenticationHelper,t.next=27,i.json();case 27:return t.t4=t.sent,t.next=30,t.t3.resolveEndpoints.call(t.t3,t.t4);case 30:return t.t5=t.sent,t.next=33,t.t2.setOIDCProviderMetaData.call(t.t2,t.t5);case 33:return t.next=35,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 35:return t.abrupt("return",Promise.resolve());case 36:if(!n.baseUrl){t.next=52;break}return t.prev=37,t.t6=this._dataLayer,t.next=41,this._authenticationHelper.resolveEndpointsByBaseURL();case 41:return t.t7=t.sent,t.next=44,t.t6.setOIDCProviderMetaData.call(t.t6,t.t7);case 44:t.next=49;break;case 46:throw t.prev=46,t.t8=t.catch(37),new $T("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t.t8?t.t8:"Resolving endpoints by base url failed.");case 49:return t.next=51,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 51:return t.abrupt("return",Promise.resolve());case 52:return t.prev=52,t.t9=this._dataLayer,t.next=56,this._authenticationHelper.resolveEndpointsExplicitly();case 56:return t.t10=t.sent,t.next=59,t.t9.setOIDCProviderMetaData.call(t.t9,t.t10);case 59:t.next=64;break;case 61:throw t.prev=61,t.t11=t.catch(52),new $T("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=t.t11?t.t11:"Resolving endpoints by explicitly failed.");case 64:return t.next=66,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 66:return t.abrupt("return",Promise.resolve());case 67:case"end":return t.stop()}}),t,this,[[12,20],[37,46],[52,61]])})))}},{key:"getOIDCServiceEndpoints",value:function(){var e,t,n,r,i,c,o,a,l,u;return jT(this,void 0,void 0,regeneratorRuntime.mark((function d(){var s;return regeneratorRuntime.wrap((function(d){for(;;)switch(d.prev=d.next){case 0:return d.next=2,this._oidcProviderMetaData();case 2:return s=d.sent,d.abrupt("return",{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(n=s.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(r=s.introspection_endpoint)&&void 0!==r?r:"",issuer:null!==(i=s.issuer)&&void 0!==i?i:"",jwksUri:null!==(c=s.jwks_uri)&&void 0!==c?c:"",registrationEndpoint:null!==(o=s.registration_endpoint)&&void 0!==o?o:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(l=s.token_endpoint)&&void 0!==l?l:"",userinfoEndpoint:null!==(u=s.userinfo_endpoint)&&void 0!==u?u:""});case 4:case"end":return d.stop()}}),d,this)})))}},{key:"getSignOutURL",value:function(e){var t,n,r;return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){var c,o,a,l;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._oidcProviderMetaData();case 2:if(i.t1=t=i.sent,i.t0=null===i.t1,i.t0){i.next=6;break}i.t0=void 0===t;case 6:if(!i.t0){i.next=10;break}i.t2=void 0,i.next=11;break;case 10:i.t2=t.end_session_endpoint;case 11:return c=i.t2,i.next=14,this._config();case 14:if(o=i.sent,c&&0!==c.trim().length){i.next=17;break}throw new $T("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.");case 17:return i.next=19,this._dataLayer.getSessionData(e);case 19:if(i.t4=n=i.sent,i.t3=null===i.t4,i.t3){i.next=23;break}i.t3=void 0===n;case 23:if(!i.t3){i.next=27;break}i.t5=void 0,i.next=28;break;case 27:i.t5=n.id_token;case 28:if((a=i.t5)&&0!==a.trim().length){i.next=31;break}throw new $T("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.");case 31:if((l=null!==(r=null==o?void 0:o.signOutRedirectURL)&&void 0!==r?r:null==o?void 0:o.signInRedirectURL)&&0!==l.trim().length){i.next=34;break}throw new $T("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. ");case 34:return i.abrupt("return","".concat(c,"?id_token_hint=").concat(a,"&post_logout_redirect_uri=").concat(l,"&state=sign_out_success"));case 35:case"end":return i.stop()}}),i,this)})))}},{key:"signOut",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getSignOutURL(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}},{key:"clearUserSessionData",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationHelper.clearUserSessionData(e);case 2:case"end":return t.stop()}}),t,this)})))}},{key:"getAccessToken",value:function(e){var t;return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getSessionData(e);case 2:if(n.t1=t=n.sent,n.t0=null===n.t1,n.t0){n.next=6;break}n.t0=void 0===t;case 6:if(!n.t0){n.next=10;break}n.t2=void 0,n.next=11;break;case 10:n.t2=t.access_token;case 11:return n.abrupt("return",n.t2);case 12:case"end":return n.stop()}}),n,this)})))}},{key:"isAuthenticated",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=Boolean,t.next=3,this.getAccessToken(e);case 3:return t.t1=t.sent,t.abrupt("return",(0,t.t0)(t.t1));case 5:case"end":return t.stop()}}),t,this)})))}},{key:"getPKCECode",value:function(e,t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(e),t);case 2:return n.abrupt("return",n.sent);case 3:case"end":return n.stop()}}),n,this)})))}},{key:"setPKCECode",value:function(e,t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._dataLayer.setTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(t),e,n);case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}}),r,this)})))}},{key:"updateConfig",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.setConfigData(e);case 2:return t.next=4,this.getOIDCProviderMetaData(!0);case 4:case"end":return t.stop()}}),t,this)})))}}]),e}(),oB=function(){function t(e,n){u(this,t),this._id=e,this._store=n}return s(t,[{key:"setDataInBulk",value:function(e,t){var n;return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o,a;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(e);case 2:if(r.t1=n=r.sent,r.t0=null!==r.t1,!r.t0){r.next=6;break}r.t0=void 0!==n;case 6:if(!r.t0){r.next=10;break}r.t2=n,r.next=11;break;case 10:r.t2=null;case 11:return i=r.t2,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),t),a=JSON.stringify(o),r.next=17,this._store.setData(e,a);case 17:case"end":return r.stop()}}),r,this)})))}},{key:"setValue",value:function(e,t,n){var r;return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){var c,o,a,l;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(e);case 2:if(i.t1=r=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==r;case 6:if(!i.t0){i.next=10;break}i.t2=r,i.next=11;break;case 10:i.t2=null;case 11:return c=i.t2,o=c&&JSON.parse(c),a=Object.assign(Object.assign({},o),m({},t,n)),l=JSON.stringify(a),i.next=17,this._store.setData(e,l);case 17:case"end":return i.stop()}}),i,this)})))}},{key:"removeValue",value:function(e,t){var n;return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o,a;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(e);case 2:if(r.t1=n=r.sent,r.t0=null!==r.t1,!r.t0){r.next=6;break}r.t0=void 0!==n;case 6:if(!r.t0){r.next=10;break}r.t2=n,r.next=11;break;case 10:r.t2=null;case 11:return i=r.t2,c=i&&JSON.parse(i),delete(o=Object.assign({},c))[t],a=JSON.stringify(o),r.next=18,this._store.setData(e,a);case 18:case"end":return r.stop()}}),r,this)})))}},{key:"_resolveKey",value:function(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}},{key:"setConfigData",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"setOIDCProviderMetaData",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setTemporaryData",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,n),t);case 1:case"end":return r.stop()}}),r,this)})))}},{key:"setSessionData",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:this.setDataInBulk(this._resolveKey(e.Stores.SessionData,n),t);case 1:case"end":return r.stop()}}),r,this)})))}},{key:"getConfigData",value:function(){var t;return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(e.Stores.ConfigData));case 3:if(n.t2=t=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==t;case 7:if(!n.t1){n.next=11;break}n.t3=t,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaData",value:function(){var t;return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));case 3:if(n.t2=t=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==t;case 7:if(!n.t1){n.next=11;break}n.t3=t,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryData",value:function(t){var n;return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.t0=JSON,r.next=3,this._store.getData(this._resolveKey(e.Stores.TemporaryData,t));case 3:if(r.t2=n=r.sent,r.t1=null!==r.t2,!r.t1){r.next=7;break}r.t1=void 0!==n;case 7:if(!r.t1){r.next=11;break}r.t3=n,r.next=12;break;case 11:r.t3=null;case 12:return r.t4=r.t3,r.abrupt("return",r.t0.parse.call(r.t0,r.t4));case 14:case"end":return r.stop()}}),r,this)})))}},{key:"getSessionData",value:function(t){var n;return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.t0=JSON,r.next=3,this._store.getData(this._resolveKey(e.Stores.SessionData,t));case 3:if(r.t2=n=r.sent,r.t1=null!==r.t2,!r.t1){r.next=7;break}r.t1=void 0!==n;case 7:if(!r.t1){r.next=11;break}r.t3=n,r.next=12;break;case 11:r.t3=null;case 12:return r.t4=r.t3,r.abrupt("return",r.t0.parse.call(r.t0,r.t4));case 14:case"end":return r.stop()}}),r,this)})))}},{key:"removeConfigData",value:function(){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._store.removeData(this._resolveKey(e.Stores.ConfigData));case 2:case"end":return t.stop()}}),t,this)})))}},{key:"removeOIDCProviderMetaData",value:function(){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData));case 2:case"end":return t.stop()}}),t,this)})))}},{key:"removeTemporaryData",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t));case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeSessionData",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.removeData(this._resolveKey(e.Stores.SessionData,t));case 2:case"end":return n.stop()}}),n,this)})))}},{key:"getConfigDataParameter",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(e.Stores.ConfigData));case 2:return r=n.sent,n.abrupt("return",r&&JSON.parse(r)[t]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaDataParameter",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));case 2:return r=n.sent,n.abrupt("return",r&&JSON.parse(r)[t]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(this._resolveKey(e.Stores.TemporaryData,n));case 2:return i=r.sent,r.abrupt("return",i&&JSON.parse(i)[t]);case 4:case"end":return r.stop()}}),r,this)})))}},{key:"getSessionDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(this._resolveKey(e.Stores.SessionData,n));case 2:return i=r.sent,r.abrupt("return",i&&JSON.parse(i)[t]);case 4:case"end":return r.stop()}}),r,this)})))}},{key:"setConfigDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(e.Stores.ConfigData),t,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"setOIDCProviderMetaDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"setTemporaryDataParameter",value:function(t,n,r){return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(e.Stores.TemporaryData,r),t,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setSessionDataParameter",value:function(t,n,r){return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(e.Stores.SessionData,r),t,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"removeConfigDataParameter",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(e.Stores.ConfigData),t);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeOIDCProviderMetaDataParameter",value:function(t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeTemporaryDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.removeValue(this._resolveKey(e.Stores.TemporaryData,n),t);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"removeSessionDataParameter",value:function(t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.removeValue(this._resolveKey(e.Stores.SessionData,n),t);case 2:case"end":return r.stop()}}),r,this)})))}}]),t}(),aB={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0},lB=function(){
17
+ ***************************************************************************** */function MA(t,e,n,i){return new(n||(n=Promise))((function(r,c){function o(t){try{l(i.next(t))}catch(t){c(t)}}function a(t){try{l(i.throw(t))}catch(t){c(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}l((i=i.apply(t,e||[])).next())}))}Yr({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return zA(URL.prototype.toString,this)}}),t.ResponseMode=void 0,function(t){t.formPost="form_post",t.query="query"}(t.ResponseMode||(t.ResponseMode={}));t.Stores=void 0,function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(t.Stores||(t.Stores={}));var QA,PA="refresh_token_timer",EA=["RS256","RS512","RS384","PS256"],DA="code",OA="session_state",_A="sign_out_url",qA="sign_out_success",$A="state";!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(QA||(QA={}));var tB=m((function t(e,n,i){d(this,t),this.message=i,this.name=n,this.code=e,Object.setPrototypeOf(this,(this instanceof t?this.constructor:void 0).prototype)})),eB=function(){function t(){d(this,t)}return m(t,null,[{key:"filterClaimsFromIDTokenPayload",value:function(t){var e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;var n={};return Object.entries(e).forEach((function(t){var e=V(t,2),i=e[0],r=e[1],c=i.split("_").map((function(t,e){return 0===e?t:[t[0].toUpperCase()].concat(W(t.slice(1))).join("")})).join("");n[c]=r})),n}},{key:"getTokenRequestHeaders",value:function(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}},{key:"generateStateParamForRequestCorrelation",value:function(t,e){var n=parseInt(t.split("#")[1]);return e?"".concat(e,"_request_").concat(n):"request_".concat(n)}},{key:"extractPKCEKeyFromStateParam",value:function(t){return"pkce_code_verifier#".concat(parseInt(t.split("request_")[1]))}}]),t}();eB.getTenantDomainFromIdTokenPayload=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@",n=t.sub.split(e);return n.length>2?n[n.length-1]:""};var nB=function(){function t(e,n){var i=this;d(this,t),this._dataLayer=e,this._config=function(){return MA(i,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return MA(i,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._cryptoHelper=n}return m(t,[{key:"resolveEndpoints",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.next=3,this._config();case 3:return i=e.sent,e.abrupt("return",(i.endpoints&&Object.keys(i.endpoints).forEach((function(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));n[e]=(null==i?void 0:i.endpoints)?i.endpoints[t]:""})),Object.assign(Object.assign({},t),n)));case 5:case"end":return e.stop()}}),e,this)})))}},{key:"resolveEndpointsExplicitly",value:function(){return MA(this,void 0,void 0,o().mark((function t(){var e,n,i;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:if(n=t.sent,i=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"],n.endpoints&&Object.keys(null==n?void 0:n.endpoints).every((function(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));return i.includes(e)}))){t.next=7;break}throw new tB("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");case 7:return t.abrupt("return",(n.endpoints&&Object.keys(n.endpoints).forEach((function(t){var i=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[i]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""})),Object.assign({},e)));case 8:case"end":return t.stop()}}),t,this)})))}},{key:"resolveEndpointsByBaseURL",value:function(){return MA(this,void 0,void 0,o().mark((function t(){var e,n,i,r;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:if(n=t.sent,i=n.baseUrl){t.next=7;break}throw new tB("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");case 7:return n.endpoints&&Object.keys(n.endpoints).forEach((function(t){var i=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[i]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""})),r={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")},t.abrupt("return",Object.assign(Object.assign({},r),e));case 10:case"end":return t.stop()}}),t,this)})))}},{key:"validateIdToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i,r,c,a,l,u;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return n=e.sent.jwks_uri,e.next=5,this._config();case 5:if(i=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new tB("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.");case 8:return e.prev=8,e.next=11,fetch(n,{credentials:i.sendCookiesInRequests?QA.Include:QA.SameOrigin});case 11:r=e.sent,e.next=17;break;case 14:throw e.prev=14,e.t0=e.catch(8),new tB("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=e.t0?e.t0:"The request sent to get the jwks from the server failed.");case 17:if(200===r.status&&r.ok){e.next=24;break}return e.t1=tB,e.t2="Invalid response status received for jwks request (".concat(r.statusText,")."),e.next=22,r.json();case 22:throw e.t3=e.sent,new e.t1("JS-AUTH_HELPER-VIT-HE03",e.t2,e.t3);case 24:return e.next=26,this._oidcProviderMetaData();case 26:return c=e.sent.issuer,e.next=29,r.json();case 29:return a=e.sent,l=a.keys,e.next=33,this._cryptoHelper.getJWKForTheIdToken(t.split(".")[0],l);case 33:return u=e.sent,e.t4=this._cryptoHelper,e.t5=t,e.t6=u,e.next=39,this._config();case 39:return e.t7=e.sent.clientID,e.t8=null!=c?c:"",e.t9=this._cryptoHelper.decodeIDToken(t).sub,e.next=44,this._config();case 44:return e.t10=e.sent.clockTolerance,e.abrupt("return",e.t4.isValidIdToken.call(e.t4,e.t5,e.t6,e.t7,e.t8,e.t9,e.t10));case 46:case"end":return e.stop()}}),e,this,[[8,14]])})))}},{key:"getAuthenticatedUserInfo",value:function(t){var e,n,i,r,c=this._cryptoHelper.decodeIDToken(t),o=eB.getTenantDomainFromIdTokenPayload(c),a=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",l=null!==(n=c.given_name)&&void 0!==n?n:"",u=null!==(i=c.family_name)&&void 0!==i?i:"",d=l&&u?"".concat(l," ").concat(u):l||u||"",s=null!==(r=c.preferred_username)&&void 0!==r?r:d;return Object.assign({displayName:s,tenantDomain:o,username:a},eB.filterClaimsFromIDTokenPayload(c))}},{key:"replaceCustomGrantTemplateTags",value:function(t,e){var n;return MA(this,void 0,void 0,o().mark((function i(){var r,c,a;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return r="openid",i.next=3,this._config();case 3:return c=i.sent,i.next=6,this._dataLayer.getSessionData(e);case 6:return a=i.sent,i.abrupt("return",(c.scope&&c.scope.length>0&&(c.scope.includes("openid")||c.scope.push("openid"),r=c.scope.join(" ")),t.replace("{{token}}",a.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(a.id_token).username).replace("{{scope}}",r).replace("{{clientID}}",c.clientID).replace("{{clientSecret}}",null!==(n=c.clientSecret)&&void 0!==n?n:"")));case 8:case"end":return i.stop()}}),i,this)})))}},{key:"clearUserSessionData",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.removeTemporaryData(t);case 2:return e.next=4,this._dataLayer.removeSessionData(t);case 4:case"end":return e.stop()}}),e,this)})))}},{key:"handleTokenResponse",value:function(t,e){return MA(this,void 0,void 0,o().mark((function n(){var i,r,c=this;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(200===t.status&&t.ok){n.next=7;break}return n.t0=tB,n.t1="Invalid response status received for token request (".concat(t.statusText,")."),n.next=5,t.json();case 5:throw n.t2=n.sent,new n.t0("JS-AUTH_HELPER-HTR-NE01",n.t1,n.t2);case 7:return n.next=9,t.json();case 9:return(i=n.sent).created_at=(new Date).getTime(),n.next=13,this._config();case 13:if(!n.sent.validateIDToken){n.next=15;break}return n.abrupt("return",this.validateIdToken(i.id_token).then((function(){return MA(c,void 0,void 0,o().mark((function t(){var n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.setSessionData(i,e);case 2:return n={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},t.abrupt("return",Promise.resolve(n));case 4:case"end":return t.stop()}}),t,this)})))})));case 15:return r={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},n.next=18,this._dataLayer.setSessionData(i,e);case 18:return n.abrupt("return",Promise.resolve(r));case 19:case"end":return n.stop()}}),n,this)})))}},{key:"generatePKCEKey",value:function(t){var e;return MA(this,void 0,void 0,o().mark((function n(){var i,r,c;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryData(t);case 2:return i=n.sent,r=[],Object.keys(i).forEach((function(t){t.startsWith("pkce_code_verifier")&&r.push(t)})),c=r.sort().pop(),n.abrupt("return","pkce_code_verifier#".concat(parseInt(null!==(e=null==c?void 0:c.split("#")[1])&&void 0!==e?e:"-1")+1));case 7:case"end":return n.stop()}}),n,this)})))}}]),t}(),iB=function(){function t(e){d(this,t),this._cryptoUtils=e}return m(t,[{key:"getCodeVerifier",value:function(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}},{key:"getCodeChallenge",value:function(t){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(t))}},{key:"getJWKForTheIdToken",value:function(t,e){var n,i=JSON.parse(this._cryptoUtils.base64URLDecode(t)),r=S(e);try{for(r.s();!(n=r.n()).done;){var c=n.value;if(i.kid===c.kid)return c}}catch(t){r.e(t)}finally{r.f()}throw new tB("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: "+e.map((function(t){return t.kid})).join(", "))}},{key:"isValidIdToken",value:function(t,e,n,i,r,c){return this._cryptoUtils.verifyJwt(t,e,EA,n,i,r,c).then((function(t){return t?Promise.resolve(!0):Promise.reject(new tB("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))})).catch((function(t){return"ERR_JWT_CLAIM_VALIDATION_FAILED"===(null==t?void 0:t.code)&&"nbf"===(null==t?void 0:t.claim)?Promise.reject(new tB("JS-CRYPTO_UTILS-IVIT-IV02","JWT NBF CLAIM VALIDATION FAILED","JWT NBF claim validation has been failed")):Promise.reject(new tB("JS-CRYPTO_UTILS-IVIT-IV03","JWT VALIDATION FAILED","JWT validation has been failed"))}))}},{key:"decodeIDToken",value:function(t){try{var e=this._cryptoUtils.base64URLDecode(t.split(".")[1]);return JSON.parse(e)}catch(t){throw new tB("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}]),t}(),rB=function(){function t(e,n){var i=this;d(this,t),this._cryptoUtils=n,this._cryptoHelper=new iB(n),this._authenticationHelper=new nB(e,this._cryptoHelper),this._dataLayer=e,this._config=function(){return MA(i,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getConfigData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))},this._oidcProviderMetaData=function(){return MA(i,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getOIDCProviderMetaData();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))}}return m(t,[{key:"getAuthorizationURL",value:function(t,e){var n,i,r;return MA(this,void 0,void 0,o().mark((function c(){var a,l,u,d,s,m,h,b,p,Z,I,y,g,X,G,f,W,v,C,Y;return o().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint");case 2:return a=c.sent,c.next=5,this._config();case 5:if(l=c.sent,a&&0!==a.trim().length){c.next=8;break}throw new tB("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.");case 8:return u=new URL(a),(d=new Map).set("response_type","code"),d.set("client_id",l.clientID),s="openid",l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),s=l.scope.join(" ")),d.set("scope",s),d.set("redirect_uri",l.signInRedirectURL),l.responseMode&&d.set("response_mode",l.responseMode),c.next=14,this._authenticationHelper.generatePKCEKey(e);case 14:if(m=c.sent,!l.enablePKCE){c.next=21;break}return h=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),b=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeChallenge(h),c.next=19,this._dataLayer.setTemporaryDataParameter(m,h,e);case 19:d.set("code_challenge_method","S256"),d.set("code_challenge",b);case 21:if(l.prompt&&d.set("prompt",l.prompt),p=t)for(Z=0,I=Object.entries(p);Z<I.length;Z++)y=V(I[Z],2),g=y[0],X=y[1],""!=g&&""!=X&&"state"!==g&&(G=g.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())})),d.set(G,X.toString()));d.set("state",eB.generateStateParamForRequestCorrelation(m,p?null===(r=p.state)||void 0===r?void 0:r.toString():"")),f=S(d.entries());try{for(f.s();!(W=f.n()).done;)v=V(W.value,2),C=v[0],Y=v[1],u.searchParams.append(C,Y)}catch(t){f.e(t)}finally{f.f()}return c.abrupt("return",u.toString());case 28:case"end":return c.stop()}}),c,this)})))}},{key:"requestAccessToken",value:function(t,e,n,i){return MA(this,void 0,void 0,o().mark((function r(){var c,a,l,u,d;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._oidcProviderMetaData();case 2:return c=r.sent.token_endpoint,r.next=5,this._config();case 5:if(a=r.sent,c&&0!==c.trim().length){r.next=8;break}throw new tB("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.");case 8:if(r.t0=e,!r.t0){r.next=12;break}return r.next=12,this._dataLayer.setSessionDataParameter("session_state",e,i);case 12:if((l=[]).push("client_id=".concat(a.clientID)),a.clientSecret&&a.clientSecret.trim().length>0&&l.push("client_secret=".concat(a.clientSecret)),u=t,l.push("code=".concat(u)),l.push("grant_type=authorization_code"),l.push("redirect_uri=".concat(a.signInRedirectURL)),r.t1=a.enablePKCE,!r.t1){r.next=29;break}return r.t2=l,r.t3="code_verifier=",r.next=24,this._dataLayer.getTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(n),i);case 24:return r.t4=r.sent,r.t5=r.t3.concat.call(r.t3,r.t4),r.t2.push.call(r.t2,r.t5),r.next=29,this._dataLayer.removeTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(n),i);case 29:return r.prev=29,r.next=32,fetch(c,{body:l.join("&"),credentials:a.sendCookiesInRequests?QA.Include:QA.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 32:d=r.sent,r.next=38;break;case 35:throw r.prev=35,r.t6=r.catch(29),new tB("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=r.t6?r.t6:"The request to get the access token from the server failed.");case 38:if(d.ok){r.next=45;break}return r.t7=tB,r.t8="Requesting access token failed with ".concat(d.statusText),r.next=43,d.json();case 43:throw r.t9=r.sent,new r.t7("JS-AUTH_CORE-RAT1-HE03",r.t8,r.t9);case 45:return r.next=47,this._authenticationHelper.handleTokenResponse(d,i);case 47:return r.abrupt("return",r.sent);case 48:case"end":return r.stop()}}),r,this,[[29,35]])})))}},{key:"refreshAccessToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i,r,c,a;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._oidcProviderMetaData();case 2:return n=e.sent.token_endpoint,e.next=5,this._config();case 5:return i=e.sent,e.next=8,this._dataLayer.getSessionData(t);case 8:if((r=e.sent).refresh_token){e.next=11;break}throw new tB("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.");case 11:if(n&&0!==n.trim().length){e.next=13;break}throw new tB("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.");case 13:return(c=[]).push("client_id=".concat(i.clientID)),c.push("refresh_token=".concat(r.refresh_token)),c.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&c.push("client_secret=".concat(i.clientSecret)),e.prev=15,e.next=18,fetch(n,{body:c.join("&"),credentials:i.sendCookiesInRequests?QA.Include:QA.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 18:a=e.sent,e.next=24;break;case 21:throw e.prev=21,e.t0=e.catch(15),new tB("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=e.t0?e.t0:"The request to refresh the access token failed.");case 24:if(a.ok){e.next=31;break}return e.t1=tB,e.t2="Refreshing access token failed with ".concat(a.statusText),e.next=29,a.json();case 29:throw e.t3=e.sent,new e.t1("JS-AUTH_CORE-RAT2-HE04",e.t2,e.t3);case 31:return e.abrupt("return",this._authenticationHelper.handleTokenResponse(a,t));case 32:case"end":return e.stop()}}),e,this,[[15,21]])})))}},{key:"revokeAccessToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i,r,c;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._oidcProviderMetaData();case 2:return n=e.sent.revocation_endpoint,e.next=5,this._config();case 5:if(i=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new tB("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.");case 8:return(r=[]).push("client_id=".concat(i.clientID)),e.t0=r,e.t1="token=",e.next=14,this._dataLayer.getSessionData(t);case 14:return e.t2=e.sent.access_token,e.t3=e.t1.concat.call(e.t1,e.t2),e.t0.push.call(e.t0,e.t3),r.push("token_type_hint=access_token"),e.prev=18,e.next=21,fetch(n,{body:r.join("&"),credentials:i.sendCookiesInRequests?QA.Include:QA.SameOrigin,headers:new Headers(eB.getTokenRequestHeaders()),method:"POST"});case 21:c=e.sent,e.next=27;break;case 24:throw e.prev=24,e.t4=e.catch(18),new tB("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=e.t4?e.t4:"The request sent to revoke the access token failed.");case 27:if(200===c.status&&c.ok){e.next=34;break}return e.t5=tB,e.t6="Invalid response status received for revoke access token request (".concat(c.statusText,")."),e.next=32,c.json();case 32:throw e.t7=e.sent,new e.t5("JS-AUTH_CORE-RAT3-HE03",e.t6,e.t7);case 34:return e.abrupt("return",(this._authenticationHelper.clearUserSessionData(t),Promise.resolve(c)));case 35:case"end":return e.stop()}}),e,this,[[18,24]])})))}},{key:"requestCustomGrant",value:function(t,e){return MA(this,void 0,void 0,o().mark((function n(){var i,r,c,a,l,u,d,s=this;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._oidcProviderMetaData();case 2:return i=n.sent,n.next=5,this._config();case 5:if(r=n.sent,(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:i.token_endpoint)&&0!==c.trim().length){n.next=8;break}throw new tB("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.");case 8:return n.next=10,Promise.all(Object.entries(t.data).map((function(t){var n=V(t,2),i=n[0],r=n[1];return MA(s,void 0,void 0,o().mark((function t(){var n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationHelper.replaceCustomGrantTemplateTags(r,e);case 2:return n=t.sent,t.abrupt("return","".concat(i,"=").concat(n));case 4:case"end":return t.stop()}}),t,this)})))})));case 10:if(a=n.sent,l=Object.assign({},eB.getTokenRequestHeaders()),n.t0=t.attachToken,!n.t0){n.next=23;break}return n.t1=Object,n.t2=Object.assign({},l),n.t3="Bearer ",n.next=19,this._dataLayer.getSessionData(e);case 19:n.t4=n.sent.access_token,n.t5=n.t3.concat.call(n.t3,n.t4),n.t6={Authorization:n.t5},l=n.t1.assign.call(n.t1,n.t2,n.t6);case 23:return u={body:a.join("&"),credentials:r.sendCookiesInRequests?QA.Include:QA.SameOrigin,headers:new Headers(l),method:"POST"},n.prev=24,n.next=27,fetch(c,u);case 27:d=n.sent,n.next=33;break;case 30:throw n.prev=30,n.t7=n.catch(24),new tB("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=n.t7?n.t7:"The request sent to get the custom grant failed.");case 33:if(200===d.status&&d.ok){n.next=40;break}return n.t8=tB,n.t9="Invalid response status received for the custom grant request. (".concat(d.statusText,")"),n.next=38,d.json();case 38:throw n.t10=n.sent,new n.t8("JS-AUTH_CORE-RCG-HE03",n.t9,n.t10);case 40:if(!t.returnsSession){n.next=44;break}n.t11=this._authenticationHelper.handleTokenResponse(d,e),n.next=49;break;case 44:return n.t12=Promise,n.next=47,d.json();case 47:n.t13=n.sent,n.t11=n.t12.resolve.call(n.t12,n.t13);case 49:return n.abrupt("return",n.t11);case 50:case"end":return n.stop()}}),n,this,[[24,30]])})))}},{key:"getBasicUserInfo",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i,r;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData(t);case 2:return n=e.sent,i=this._authenticationHelper.getAuthenticatedUserInfo(null==n?void 0:n.id_token),r={allowedScopes:n.scope,sessionState:n.session_state},e.abrupt("return",(Object.keys(i).forEach((function(t){void 0!==i[t]&&""!==i[t]&&null!==i[t]||delete i[t]})),r=Object.assign(Object.assign({},r),i)));case 6:case"end":return e.stop()}}),e,this)})))}},{key:"getDecodedIDToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData(t);case 2:return n=e.sent.id_token,e.abrupt("return",this._cryptoHelper.decodeIDToken(n));case 4:case"end":return e.stop()}}),e,this)})))}},{key:"getIDToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData(t);case 2:return e.abrupt("return",e.sent.id_token);case 3:case"end":return e.stop()}}),e,this)})))}},{key:"getOIDCProviderMetaData",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){var n,i,r;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._config();case 2:if(n=e.sent,e.t0=!t,!e.t0){e.next=8;break}return e.next=7,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 7:e.t0=e.sent;case 8:if(!e.t0){e.next=10;break}return e.abrupt("return",Promise.resolve());case 10:if(!(i=n.wellKnownEndpoint)){e.next=36;break}return e.prev=12,e.next=15,fetch(i);case 15:if(200===(r=e.sent).status&&r.ok){e.next=18;break}throw new Error;case 18:e.next=23;break;case 20:throw e.prev=20,e.t1=e.catch(12),new tB("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.");case 23:return e.t2=this._dataLayer,e.t3=this._authenticationHelper,e.next=27,r.json();case 27:return e.t4=e.sent,e.next=30,e.t3.resolveEndpoints.call(e.t3,e.t4);case 30:return e.t5=e.sent,e.next=33,e.t2.setOIDCProviderMetaData.call(e.t2,e.t5);case 33:return e.next=35,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 35:return e.abrupt("return",Promise.resolve());case 36:if(!n.baseUrl){e.next=52;break}return e.prev=37,e.t6=this._dataLayer,e.next=41,this._authenticationHelper.resolveEndpointsByBaseURL();case 41:return e.t7=e.sent,e.next=44,e.t6.setOIDCProviderMetaData.call(e.t6,e.t7);case 44:e.next=49;break;case 46:throw e.prev=46,e.t8=e.catch(37),new tB("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=e.t8?e.t8:"Resolving endpoints by base url failed.");case 49:return e.next=51,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 51:return e.abrupt("return",Promise.resolve());case 52:return e.prev=52,e.t9=this._dataLayer,e.next=56,this._authenticationHelper.resolveEndpointsExplicitly();case 56:return e.t10=e.sent,e.next=59,e.t9.setOIDCProviderMetaData.call(e.t9,e.t10);case 59:e.next=64;break;case 61:throw e.prev=61,e.t11=e.catch(52),new tB("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=e.t11?e.t11:"Resolving endpoints by explicitly failed.");case 64:return e.next=66,this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0);case 66:return e.abrupt("return",Promise.resolve());case 67:case"end":return e.stop()}}),e,this,[[12,20],[37,46],[52,61]])})))}},{key:"getOIDCServiceEndpoints",value:function(){var t,e,n,i,r,c,a,l,u,d;return MA(this,void 0,void 0,o().mark((function s(){var m;return o().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,this._oidcProviderMetaData();case 2:return m=o.sent,o.abrupt("return",{authorizationEndpoint:null!==(t=m.authorization_endpoint)&&void 0!==t?t:"",checkSessionIframe:null!==(e=m.check_session_iframe)&&void 0!==e?e:"",endSessionEndpoint:null!==(n=m.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(i=m.introspection_endpoint)&&void 0!==i?i:"",issuer:null!==(r=m.issuer)&&void 0!==r?r:"",jwksUri:null!==(c=m.jwks_uri)&&void 0!==c?c:"",registrationEndpoint:null!==(a=m.registration_endpoint)&&void 0!==a?a:"",revocationEndpoint:null!==(l=m.revocation_endpoint)&&void 0!==l?l:"",tokenEndpoint:null!==(u=m.token_endpoint)&&void 0!==u?u:"",userinfoEndpoint:null!==(d=m.userinfo_endpoint)&&void 0!==d?d:""});case 4:case"end":return o.stop()}}),s,this)})))}},{key:"getSignOutURL",value:function(t){var e,n,i;return MA(this,void 0,void 0,o().mark((function r(){var c,a,l,u;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._oidcProviderMetaData();case 2:if(r.t1=e=r.sent,r.t0=null===r.t1,r.t0){r.next=6;break}r.t0=void 0===e;case 6:if(!r.t0){r.next=10;break}r.t2=void 0,r.next=11;break;case 10:r.t2=e.end_session_endpoint;case 11:return c=r.t2,r.next=14,this._config();case 14:if(a=r.sent,c&&0!==c.trim().length){r.next=17;break}throw new tB("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.");case 17:return r.next=19,this._dataLayer.getSessionData(t);case 19:if(r.t4=n=r.sent,r.t3=null===r.t4,r.t3){r.next=23;break}r.t3=void 0===n;case 23:if(!r.t3){r.next=27;break}r.t5=void 0,r.next=28;break;case 27:r.t5=n.id_token;case 28:if((l=r.t5)&&0!==l.trim().length){r.next=31;break}throw new tB("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.");case 31:if((u=null!==(i=null==a?void 0:a.signOutRedirectURL)&&void 0!==i?i:null==a?void 0:a.signInRedirectURL)&&0!==u.trim().length){r.next=34;break}throw new tB("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. ");case 34:return r.abrupt("return","".concat(c,"?id_token_hint=").concat(l,"&post_logout_redirect_uri=").concat(u,"&state=sign_out_success"));case 35:case"end":return r.stop()}}),r,this)})))}},{key:"signOut",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getSignOutURL(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))}},{key:"clearUserSessionData",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationHelper.clearUserSessionData(t);case 2:case"end":return e.stop()}}),e,this)})))}},{key:"getAccessToken",value:function(t){var e;return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getSessionData(t);case 2:if(n.t1=e=n.sent,n.t0=null===n.t1,n.t0){n.next=6;break}n.t0=void 0===e;case 6:if(!n.t0){n.next=10;break}n.t2=void 0,n.next=11;break;case 10:n.t2=e.access_token;case 11:return n.abrupt("return",n.t2);case 12:case"end":return n.stop()}}),n,this)})))}},{key:"isAuthenticated",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Boolean,e.next=3,this.getAccessToken(t);case 3:return e.t1=e.sent,e.abrupt("return",(0,e.t0)(e.t1));case 5:case"end":return e.stop()}}),e,this)})))}},{key:"getPKCECode",value:function(t,e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(t),e);case 2:return n.abrupt("return",n.sent);case 3:case"end":return n.stop()}}),n,this)})))}},{key:"setPKCECode",value:function(t,e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._dataLayer.setTemporaryDataParameter(eB.extractPKCEKeyFromStateParam(e),t,n);case 2:return i.abrupt("return",i.sent);case 3:case"end":return i.stop()}}),i,this)})))}},{key:"updateConfig",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.setConfigData(t);case 2:return e.next=4,this.getOIDCProviderMetaData(!0);case 4:case"end":return e.stop()}}),e,this)})))}}]),t}(),cB=function(){function e(t,n){d(this,e),this._id=t,this._store=n}return m(e,[{key:"setDataInBulk",value:function(t,e){var n;return MA(this,void 0,void 0,o().mark((function i(){var r,c,a,l;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),a=Object.assign(Object.assign({},c),e),l=JSON.stringify(a),i.next=17,this._store.setData(t,l);case 17:case"end":return i.stop()}}),i,this)})))}},{key:"setValue",value:function(t,e,n){var i;return MA(this,void 0,void 0,o().mark((function r(){var c,a,l,u;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(t);case 2:if(r.t1=i=r.sent,r.t0=null!==r.t1,!r.t0){r.next=6;break}r.t0=void 0!==i;case 6:if(!r.t0){r.next=10;break}r.t2=i,r.next=11;break;case 10:r.t2=null;case 11:return c=r.t2,a=c&&JSON.parse(c),l=Object.assign(Object.assign({},a),h({},e,n)),u=JSON.stringify(l),r.next=17,this._store.setData(t,u);case 17:case"end":return r.stop()}}),r,this)})))}},{key:"removeValue",value:function(t,e){var n;return MA(this,void 0,void 0,o().mark((function i(){var r,c,a,l;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);case 2:if(i.t1=n=i.sent,i.t0=null!==i.t1,!i.t0){i.next=6;break}i.t0=void 0!==n;case 6:if(!i.t0){i.next=10;break}i.t2=n,i.next=11;break;case 10:i.t2=null;case 11:return r=i.t2,c=r&&JSON.parse(r),delete(a=Object.assign({},c))[e],l=JSON.stringify(a),i.next=18,this._store.setData(t,l);case 18:case"end":return i.stop()}}),i,this)})))}},{key:"_resolveKey",value:function(t,e){return e?"".concat(t,"-").concat(this._id,"-").concat(e):"".concat(t,"-").concat(this._id)}},{key:"setConfigData",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.setDataInBulk(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"setOIDCProviderMetaData",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"setTemporaryData",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.TemporaryData,n),e);case 1:case"end":return i.stop()}}),i,this)})))}},{key:"setSessionData",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.SessionData,n),e);case 1:case"end":return i.stop()}}),i,this)})))}},{key:"getConfigData",value:function(){var e;return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaData",value:function(){var e;return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.t0=JSON,n.next=3,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 3:if(n.t2=e=n.sent,n.t1=null!==n.t2,!n.t1){n.next=7;break}n.t1=void 0!==e;case 7:if(!n.t1){n.next=11;break}n.t3=e,n.next=12;break;case 11:n.t3=null;case 12:return n.t4=n.t3,n.abrupt("return",n.t0.parse.call(n.t0,n.t4));case 14:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryData",value:function(e){var n;return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.t0=JSON,i.next=3,this._store.getData(this._resolveKey(t.Stores.TemporaryData,e));case 3:if(i.t2=n=i.sent,i.t1=null!==i.t2,!i.t1){i.next=7;break}i.t1=void 0!==n;case 7:if(!i.t1){i.next=11;break}i.t3=n,i.next=12;break;case 11:i.t3=null;case 12:return i.t4=i.t3,i.abrupt("return",i.t0.parse.call(i.t0,i.t4));case 14:case"end":return i.stop()}}),i,this)})))}},{key:"getSessionData",value:function(e){var n;return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.t0=JSON,i.next=3,this._store.getData(this._resolveKey(t.Stores.SessionData,e));case 3:if(i.t2=n=i.sent,i.t1=null!==i.t2,!i.t1){i.next=7;break}i.t1=void 0!==n;case 7:if(!i.t1){i.next=11;break}i.t3=n,i.next=12;break;case 11:i.t3=null;case 12:return i.t4=i.t3,i.abrupt("return",i.t0.parse.call(i.t0,i.t4));case 14:case"end":return i.stop()}}),i,this)})))}},{key:"removeConfigData",value:function(){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.ConfigData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeOIDCProviderMetaData",value:function(){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._store.removeData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:case"end":return e.stop()}}),e,this)})))}},{key:"removeTemporaryData",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.removeData(this._resolveKey(t.Stores.TemporaryData,e));case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeSessionData",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.removeData(this._resolveKey(t.Stores.SessionData,e));case 2:case"end":return n.stop()}}),n,this)})))}},{key:"getConfigDataParameter",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){var i;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.ConfigData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaDataParameter",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){var i;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._store.getData(this._resolveKey(t.Stores.OIDCProviderMetaData));case 2:return i=n.sent,n.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){var r;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(this._resolveKey(t.Stores.TemporaryData,n));case 2:return r=i.sent,i.abrupt("return",r&&JSON.parse(r)[e]);case 4:case"end":return i.stop()}}),i,this)})))}},{key:"getSessionDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){var r;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(this._resolveKey(t.Stores.SessionData,n));case 2:return r=i.sent,i.abrupt("return",r&&JSON.parse(r)[e]);case 4:case"end":return i.stop()}}),i,this)})))}},{key:"setConfigDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.ConfigData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setOIDCProviderMetaDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setTemporaryDataParameter",value:function(e,n,i){return MA(this,void 0,void 0,o().mark((function r(){return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(t.Stores.TemporaryData,i),e,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"setSessionDataParameter",value:function(e,n,i){return MA(this,void 0,void 0,o().mark((function r(){return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(t.Stores.SessionData,i),e,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"removeConfigDataParameter",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.ConfigData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeOIDCProviderMetaDataParameter",value:function(e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this.removeValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e);case 2:case"end":return n.stop()}}),n,this)})))}},{key:"removeTemporaryDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.removeValue(this._resolveKey(t.Stores.TemporaryData,n),e);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"removeSessionDataParameter",value:function(e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.removeValue(this._resolveKey(t.Stores.SessionData,n),e);case 2:case"end":return i.stop()}}),i,this)})))}}]),e}(),oB={clockTolerance:300,enablePKCE:!0,responseMode:t.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0},aB=function(){
16
18
  /**
17
19
  * This is the constructor method that returns an instance of the .
18
20
  *
@@ -27,7 +29,7 @@
27
29
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
28
30
  * @preserve
29
31
  */
30
- function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._dataLayer=new oB("instance_".concat(e._instanceID),t),this._authenticationCore=new cB(this._dataLayer,n),e._authenticationCore=new cB(this._dataLayer,n)}
32
+ function t(e,n){d(this,t),t._instanceID?t._instanceID+=1:t._instanceID=0,this._dataLayer=new cB("instance_".concat(t._instanceID),e),this._authenticationCore=new rB(this._dataLayer,n),t._authenticationCore=new rB(this._dataLayer,n)}
31
33
  /**
32
34
  *
33
35
  * This method initializes the SDK with the config data.
@@ -46,7 +48,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
46
48
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
47
49
  *
48
50
  * @preserve
49
- */return s(e,[{key:"initialize",value:function(e){var t,n,r;return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},aB),e),{scope:[].concat(V(null!==(t=aB.scope)&&void 0!==t?t:[]),V(null!==(r=null===(n=e.scope)||void 0===n?void 0:n.filter((function(e){var t;return!(null===(t=null==aB?void 0:aB.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==r?r:[]))}));case 2:case"end":return i.stop()}}),i,this)})))}
51
+ */return m(t,[{key:"initialize",value:function(t){var e,n,i;return MA(this,void 0,void 0,o().mark((function r(){return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},oB),t),{scope:[].concat(W(null!==(e=oB.scope)&&void 0!==e?e:[]),W(null!==(i=null===(n=t.scope)||void 0===n?void 0:n.filter((function(t){var e;return!(null===(e=null==oB?void 0:oB.scope)||void 0===e?void 0:e.includes(t))})))&&void 0!==i?i:[]))}));case 2:case"end":return r.stop()}}),r,this)})))}
50
52
  /**
51
53
  * This method returns the `DataLayer` object that allows you to access authentication data.
52
54
  *
@@ -87,7 +89,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
87
89
  * @memberof AsgardeoAuthClient
88
90
  *
89
91
  * @preserve
90
- */},{key:"getAuthorizationURL",value:function(e,t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i=this;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return null==(r=Object.assign({},e))||delete r.forceInit,n.next=4,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 4:if(!n.sent){n.next=8;break}n.t0=this._authenticationCore.getAuthorizationURL(r,t),n.next=9;break;case 8:n.t0=this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((function(){return i._authenticationCore.getAuthorizationURL(r,t)}));case 9:return n.abrupt("return",n.t0);case 10:case"end":return n.stop()}}),n,this)})))}
92
+ */},{key:"getAuthorizationURL",value:function(t,e){return MA(this,void 0,void 0,o().mark((function n(){var i,r=this;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return null==(i=Object.assign({},t))||delete i.forceInit,n.next=4,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 4:if(!n.sent){n.next=8;break}n.t0=this._authenticationCore.getAuthorizationURL(i,e),n.next=9;break;case 8:n.t0=this._authenticationCore.getOIDCProviderMetaData(null==t?void 0:t.forceInit).then((function(){return r._authenticationCore.getAuthorizationURL(i,e)}));case 9:return n.abrupt("return",n.t0);case 10:case"end":return n.stop()}}),n,this)})))}
91
93
  /**
92
94
  * This is an async method that sends a request to obtain the access token and returns a Promise
93
95
  * that resolves with the token and other relevant data.
@@ -113,7 +115,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
113
115
  * @memberof AsgardeoAuthClient
114
116
  *
115
117
  * @preserve
116
- */},{key:"requestAccessToken",value:function(e,t,n,r){return jT(this,void 0,void 0,regeneratorRuntime.mark((function i(){var c=this;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 2:if(!i.sent){i.next=6;break}i.t0=this._authenticationCore.requestAccessToken(e,t,n,r),i.next=7;break;case 6:i.t0=this._authenticationCore.getOIDCProviderMetaData(!1).then((function(){return c._authenticationCore.requestAccessToken(e,t,n,r)}));case 7:return i.abrupt("return",i.t0);case 8:case"end":return i.stop()}}),i,this)})))}
118
+ */},{key:"requestAccessToken",value:function(t,e,n,i){return MA(this,void 0,void 0,o().mark((function r(){var c=this;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._dataLayer.getTemporaryDataParameter("op_config_initiated");case 2:if(!r.sent){r.next=6;break}r.t0=this._authenticationCore.requestAccessToken(t,e,n,i),r.next=7;break;case 6:r.t0=this._authenticationCore.getOIDCProviderMetaData(!1).then((function(){return c._authenticationCore.requestAccessToken(t,e,n,i)}));case 7:return r.abrupt("return",r.t0);case 8:case"end":return r.stop()}}),r,this)})))}
117
119
  /**
118
120
  * This method clears all authentication data and returns the sign-out URL.
119
121
  *
@@ -132,7 +134,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
132
134
  * @memberof AsgardeoAuthClient
133
135
  *
134
136
  * @preserve
135
- */},{key:"signOut",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.signOut(e));case 1:case"end":return t.stop()}}),t,this)})))}
137
+ */},{key:"signOut",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.signOut(t));case 1:case"end":return e.stop()}}),e,this)})))}
136
138
  /**
137
139
  * This method returns the sign-out URL.
138
140
  *
@@ -153,7 +155,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
153
155
  * @memberof AsgardeoAuthClient
154
156
  *
155
157
  * @preserve
156
- */},{key:"getSignOutURL",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getSignOutURL(e));case 1:case"end":return t.stop()}}),t,this)})))}
158
+ */},{key:"getSignOutURL",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getSignOutURL(t));case 1:case"end":return e.stop()}}),e,this)})))}
157
159
  /**
158
160
  * This method returns OIDC service endpoints that are fetched from the `.well-known` endpoint.
159
161
  *
@@ -169,7 +171,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
169
171
  * @memberof AsgardeoAuthClient
170
172
  *
171
173
  * @preserve
172
- */},{key:"getOIDCServiceEndpoints",value:function(){return jT(this,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getOIDCServiceEndpoints());case 1:case"end":return e.stop()}}),e,this)})))}
174
+ */},{key:"getOIDCServiceEndpoints",value:function(){return MA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)})))}
173
175
  /**
174
176
  * This method decodes the payload of the ID token and returns it.
175
177
  *
@@ -188,7 +190,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
188
190
  * @memberof AsgardeoAuthClient
189
191
  *
190
192
  * @preserve
191
- */},{key:"getDecodedIDToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getDecodedIDToken(e));case 1:case"end":return t.stop()}}),t,this)})))}
193
+ */},{key:"getDecodedIDToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getDecodedIDToken(t));case 1:case"end":return e.stop()}}),e,this)})))}
192
194
  /**
193
195
  * This method returns the ID token.
194
196
  *
@@ -207,7 +209,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
207
209
  * @memberof AsgardeoAuthClient
208
210
  *
209
211
  * @preserve
210
- */},{key:"getIDToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getIDToken(e));case 1:case"end":return t.stop()}}),t,this)})))}
212
+ */},{key:"getIDToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getIDToken(t));case 1:case"end":return e.stop()}}),e,this)})))}
211
213
  /**
212
214
  * This method returns the basic user information obtained from the ID token.
213
215
  *
@@ -226,7 +228,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
226
228
  * @memberof AsgardeoAuthClient
227
229
  *
228
230
  * @preserve
229
- */},{key:"getBasicUserInfo",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getBasicUserInfo(e));case 1:case"end":return t.stop()}}),t,this)})))}
231
+ */},{key:"getBasicUserInfo",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getBasicUserInfo(t));case 1:case"end":return e.stop()}}),e,this)})))}
230
232
  /**
231
233
  * This method revokes the access token.
232
234
  *
@@ -251,7 +253,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
251
253
  * @memberof AsgardeoAuthClient
252
254
  *
253
255
  * @preserve
254
- */},{key:"revokeAccessToken",value:function(e){return this._authenticationCore.revokeAccessToken(e)}
256
+ */},{key:"revokeAccessToken",value:function(t){return this._authenticationCore.revokeAccessToken(t)}
255
257
  /**
256
258
  * This method refreshes the access token and returns a Promise that resolves with the new access
257
259
  * token and other relevant data.
@@ -275,7 +277,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
275
277
  * @memberof AsgardeoAuthClient
276
278
  *
277
279
  * @preserve
278
- */},{key:"refreshAccessToken",value:function(e){return this._authenticationCore.refreshAccessToken(e)}
280
+ */},{key:"refreshAccessToken",value:function(t){return this._authenticationCore.refreshAccessToken(t)}
279
281
  /**
280
282
  * This method returns the access token.
281
283
  *
@@ -294,7 +296,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
294
296
  * @memberof AsgardeoAuthClient
295
297
  *
296
298
  * @preserve
297
- */},{key:"getAccessToken",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getAccessToken(e));case 1:case"end":return t.stop()}}),t,this)})))}
299
+ */},{key:"getAccessToken",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.getAccessToken(t));case 1:case"end":return e.stop()}}),e,this)})))}
298
300
  /**
299
301
  * This method sends a custom-grant request and returns a Promise that resolves with the response
300
302
  * depending on the config passed.
@@ -334,7 +336,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
334
336
  * @memberof AsgardeoAuthClient
335
337
  *
336
338
  * @preserve
337
- */},{key:"requestCustomGrant",value:function(e,t){return this._authenticationCore.requestCustomGrant(e,t)}
339
+ */},{key:"requestCustomGrant",value:function(t,e){return this._authenticationCore.requestCustomGrant(t,e)}
338
340
  /**
339
341
  * This method returns if the user is authenticated or not.
340
342
  *
@@ -353,7 +355,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
353
355
  * @memberof AsgardeoAuthClient
354
356
  *
355
357
  * @preserve
356
- */},{key:"isAuthenticated",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.isAuthenticated(e));case 1:case"end":return t.stop()}}),t,this)})))}
358
+ */},{key:"isAuthenticated",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._authenticationCore.isAuthenticated(t));case 1:case"end":return e.stop()}}),e,this)})))}
357
359
  /**
358
360
  * This method returns the PKCE code generated during the generation of the authentication URL.
359
361
  *
@@ -373,7 +375,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
373
375
  * @memberof AsgardeoAuthClient
374
376
  *
375
377
  * @preserve
376
- */},{key:"getPKCECode",value:function(e,t){return jT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",this._authenticationCore.getPKCECode(e,t));case 1:case"end":return n.stop()}}),n,this)})))}
378
+ */},{key:"getPKCECode",value:function(t,e){return MA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",this._authenticationCore.getPKCECode(t,e));case 1:case"end":return n.stop()}}),n,this)})))}
377
379
  /**
378
380
  * This method sets the PKCE code to the data store.
379
381
  *
@@ -392,7 +394,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
392
394
  * @memberof AsgardeoAuthClient
393
395
  *
394
396
  * @preserve
395
- */},{key:"setPKCECode",value:function(e,t,n){return jT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._authenticationCore.setPKCECode(e,t,n);case 2:case"end":return r.stop()}}),r,this)})))}
397
+ */},{key:"setPKCECode",value:function(t,e,n){return MA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._authenticationCore.setPKCECode(t,e,n);case 2:case"end":return i.stop()}}),i,this)})))}
396
398
  /**
397
399
  * This method returns if the sign-out is successful or not.
398
400
  *
@@ -430,7 +432,7 @@ function e(t,n){u(this,e),e._instanceID?e._instanceID+=1:e._instanceID=0,this._d
430
432
  *
431
433
  * @preserve
432
434
  */
433
- function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationCore.updateConfig(e);case 2:case"end":return t.stop()}}),t,this)})))}}],[{key:"isSignOutSuccessful",value:function(e){var t=new URL(e),n=t.searchParams.get("state"),r=Boolean(t.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!r}
435
+ function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationCore.updateConfig(t);case 2:case"end":return e.stop()}}),e,this)})))}}],[{key:"isSignOutSuccessful",value:function(t){var e=new URL(t),n=e.searchParams.get("state"),i=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!i}
434
436
  /**
435
437
  * This method returns if the sign-out has failed or not.
436
438
  *
@@ -446,9 +448,9 @@ function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){r
446
448
  * @memberof AsgardeoAuthClient
447
449
  *
448
450
  * @preserve
449
- */},{key:"didSignOutFail",value:function(e){var t=new URL(e),n=t.searchParams.get("state"),r=Boolean(t.searchParams.get("error"));return!!n&&"sign_out_success"===n&&r}},{key:"clearUserSessionData",value:function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationCore.clearUserSessionData(e);case 2:case"end":return t.stop()}}),t,this)})))}}]),e}(),uB="sign-out",dB="get_auth_url",sB="check_session_signed_in",mB="check_session_signed_out",ZB="set_session_state_from_iframe";e.Storage=void 0,(tB=e.Storage||(e.Storage={})).LocalStorage="localStorage",tB.SessionStorage="sessionStorage",tB.WebWorker="webWorker",tB.BrowserMemory="browserMemory",e.Hooks=void 0,(nB=e.Hooks||(e.Hooks={})).SignIn="sign-in",nB.SignOut="sign-out",nB.Initialize="initialize",nB.HttpRequestStart="http-request-start",nB.HttpRequestFinish="http-request-finish",nB.HttpRequestError="http-request-error",nB.HttpRequestSuccess="http-request-success",nB.RevokeAccessToken="revoke-access-token",nB.CustomGrant="custom-grant",nB.SignOutFailed="sign-out-failed";var hB,bB,pB,IB,gB,yB,XB,fB,GB,VB,WB,CB,vB,RB,SB,YB,JB,KB="rpIFrame",NB="promptNoneIFrame",LB="Y2hlY2tTZXNzaW9u",HB="sign-in-silently",xB="initialized-silent-sign-in",kB="promptNoneRequestSent",UB="error",AB="error_description",wB="custom_grant_config",FB="state",TB="Access token is invalid",BB=function(){function e(t){u(this,e),this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}return s(e,[{key:"refreshAccessTokenAutomatically",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData();case 2:if(!(t=e.sent).refresh_token){e.next=9;break}return n=parseInt(t.expires_in),r=setTimeout((function(){return zT(i,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationClient.refreshAccessToken();case 2:case"end":return e.stop()}}),e,this)})))}),1e3*(n<=10?n:n-10)),e.next=9,this._dataLayer.setTemporaryDataParameter(QT,JSON.stringify(r));case 9:case"end":return e.stop()}}),e,this)})))}},{key:"clearRefreshTokenTimeout",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getTemporaryDataParameter(QT);case 2:if(!e.sent){e.next=9;break}return e.t0=JSON,e.next=6,this._dataLayer.getTemporaryDataParameter(QT);case 6:e.t1=e.sent,t=e.t0.parse.call(e.t0,e.t1),clearTimeout(t);case 9:case"end":return e.stop()}}),e,this)})))}}]),e}(),zB=function(){function e(){u(this,e)}return s(e,null,[{key:"removeAuthorizationCode",value:function(){var e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}},{key:"getPKCE",value:function(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}},{key:"setPKCE",value:function(e,t){sessionStorage.setItem(e,t)}},{key:"setSignOutURL",value:function(e){sessionStorage.setItem(OT,e)}},{key:"getSignOutURL",value:function(){var e;return null!==(e=sessionStorage.getItem(OT))&&void 0!==e?e:""}},{key:"removePKCE",value:function(e){sessionStorage.removeItem(e)}},{key:"canContinueSignIn",value:function(t,n){return!(t&&!e.hasErrorInURL()&&!e.hasAuthSearchParamsInURL()&&!n)}},{key:"isInitializedSilentSignIn",value:function(){return e.isSilentStatePresentInURL()}},{key:"wasSignInCalled",value:function(){return!(!e.hasErrorInURL()&&!e.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}},{key:"wasSilentSignInCalled",value:function(){var e=sessionStorage.getItem(xB),t=e?JSON.parse(e):null;return Boolean(t)}},{key:"isSignOutSuccessful",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!lB.isSignOutSuccessful(window.location.href)){e.next=6;break}return t=window.location.href.split("?")[0],history.pushState({},document.title,t),e.next=5,lB.clearUserSessionData();case 5:return e.abrupt("return",!0);case 6:return e.abrupt("return",!1);case 7:case"end":return e.stop()}}),e)})))}},{key:"didSignOutFail",value:function(){if(lB.didSignOutFail(window.location.href)){var e=new URL(window.location.href),t=e.searchParams.get(UB),n=e.searchParams.get(AB),r=window.location.href.split("?")[0];return history.pushState({},document.title,r),{description:null!=n?n:"",error:null!=t?t:""}}return!1}},{key:"isSilentStatePresentInURL",value:function(){var e,t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(HB))&&void 0!==e&&e}},{key:"hasAuthSearchParamsInURL",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search,t=/[?&]code=[^&]+/;return t.test(e)}},{key:"hasErrorInURL",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href,t=new URL(e);return!!t.searchParams.get(UB)&&t.searchParams.get(FB)!==_T}},{key:"canSendPromptNoneRequest",value:function(){var e=sessionStorage.getItem(kB);return!(e?JSON.parse(e):null)}},{key:"setPromptNoneRequestSent",value:function(e){sessionStorage.setItem(kB,JSON.stringify(e))}},{key:"waitTillPageRedirect",value:function(e){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=null!=e?e:3e3,t.next=3,new Promise((function(e){return setTimeout(e,1e3*n)}));case 3:case"end":return t.stop()}}),t)})))}}]),e}(),jB=(CB=function(e,t,n,r,i,c,o){hB=e,bB=t,pB=n,gB=c,yB=i,WB=o,(IB=r)>-1&&vB(),yB>-1&&(i=setInterval((function(){YB()}),1e3*yB))},vB=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var r,i,c,o,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,pB();case 2:r=t.sent,Boolean(hB)&&Boolean(r)&&(i="".concat(hB," ").concat(r),c=document.getElementById(KB),o=null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(n),null==(a=o.contentWindow)||a.postMessage(i,bB));case 4:case"end":return t.stop()}}),t)})))},bB&&hB&&gB){e.next=3;break}return e.abrupt("return");case 3:return n="opIFrame",i=document.getElementById(KB),(null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(n)).src=bB+"?client_id="+hB+"&redirect_uri="+gB,e.next=9,r();case 9:fB=setInterval(r,1e3*IB),SB();case 11:case"end":return e.stop()}}),e)})))},RB=function(){clearInterval(fB),clearInterval(void 0)},SB=function(){null===window||void 0===window||window.addEventListener("message",(function(e){var t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if((r=bB)&&!((null==r?void 0:r.indexOf(e.origin))<0)&&(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)!==ZB){n.next=3;break}return n.abrupt("return");case 3:if("unchanged"!==e.data){n.next=6;break}n.next=13;break;case 6:if("error"!==e.data){n.next=12;break}return n.next=9,XB();case 9:window.location.href=n.sent,n.next=13;break;case 12:"changed"===e.data&&YB();case 13:case"end":return n.stop()}}),n)})))}),!1)},YB=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=document.getElementById(KB),i=null===(n=null==r?void 0:r.contentDocument)||void 0===n?void 0:n.getElementById(NB),!zB.canSendPromptNoneRequest()){t.next=10;break}return zB.setPromptNoneRequestSent(!0),c=function e(t){var n,r,i;(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)===ZB&&(VB(null!==(i=null===(r=null==t?void 0:t.data)||void 0===r?void 0:r.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",e))},GB!==e.Storage.BrowserMemory&&GB!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",c),t.next=8,WB({prompt:"none",responseMode:"query",state:LB});case 8:o=t.sent,i.src=o;case 10:case"end":return t.stop()}}),t)})))},JB=function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c,o,a,l,u,d,s,m;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(c=new URL(window.location.href).searchParams.get(FB),o=new URL(window.location.href).searchParams.get(DT),a=window.parent.parent,null===c||!c.includes(LB)&&!c.includes(HB)){n.next=48;break}if(null===(l=new URL(window.location.href).searchParams.get("code"))||0===l.length){n.next=32;break}if(!c.includes(HB)){n.next=15;break}return u={data:{code:l,sessionState:null!=o?o:"",state:c},type:sB},sessionStorage.setItem(xB,"false"),a.postMessage(u,a.origin),zB.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=14,zB.waitTillPageRedirect();case 14:return n.abrupt("return",!0);case 15:if(d=new URL(window.location.href).searchParams.get("session_state"),GB!==e.Storage.LocalStorage&&GB!==e.Storage.SessionStorage){n.next=23;break}if(n.t0=t,!n.t0){n.next=21;break}return n.next=21,t(d);case 21:n.next=25;break;case 23:s={data:null!=d?d:"",type:ZB},null===(i=null===(r=null===window||void 0===window?void 0:window.parent)||void 0===r?void 0:r.parent)||void 0===i||i.postMessage(s);case 25:return zB.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=29,zB.waitTillPageRedirect();case 29:return n.abrupt("return",!0);case 32:if(!c.includes(HB)){n.next=40;break}return m={type:mB},window.parent.parent.postMessage(m,a.origin),zB.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=39,zB.waitTillPageRedirect();case 39:return n.abrupt("return",!0);case 40:return zB.setPromptNoneRequestSent(!1),n.next=43,XB();case 43:return a.location.href=n.sent,window.location.href="about:blank",n.next=47,zB.waitTillPageRedirect();case 47:return n.abrupt("return",!0);case 48:return n.abrupt("return",!1);case 49:case"end":return n.stop()}}),n)})))},function(e,t,n){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o,a;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:(c=document.createElement("iframe")).setAttribute("id",KB),c.style.display="none",o=!1,c.onload=function(){var e,t,n,r,i=null==(c=document.getElementById(KB))?void 0:c.contentDocument,a=null==i?void 0:i.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");var l=null==i?void 0:i.createElement("iframe");l&&(l.setAttribute("id",NB),l.style.display="none"),a&&(null===(t=null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),l&&(null===(r=null===(n=null==c?void 0:c.contentDocument)||void 0===n?void 0:n.body)||void 0===r||r.appendChild(l)),o=!0},null===(i=null===document||void 0===document?void 0:document.body)||void 0===i||i.appendChild(c),XB=e,GB=t,VB=n,a=function(){return new Promise((function(e){return setTimeout(e,1)}))};case 10:if(!1!==o){r.next=15;break}return r.next=13,a();case 13:r.next=10;break;case 15:return r.abrupt("return",{initialize:CB,receivePromptNoneResponse:JB,reset:RB});case 16:case"end":return r.stop()}}),r)})))}),MB={exports:{}},QB=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}},PB=QB,EB=Object.prototype.toString;function DB(e){return Array.isArray(e)}function OB(e){return void 0===e}function _B(e){return"[object ArrayBuffer]"===EB.call(e)}function qB(e){return null!==e&&"object"===o(e)}function $B(e){if("[object Object]"!==EB.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function ez(e){return"[object Function]"===EB.call(e)}function tz(e,t){if(null!=e)if("object"!==o(e)&&(e=[e]),DB(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}var nz={isArray:DB,isArrayBuffer:_B,isBuffer:function(e){return null!==e&&!OB(e)&&null!==e.constructor&&!OB(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===EB.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&_B(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:qB,isPlainObject:$B,isUndefined:OB,isDate:function(e){return"[object Date]"===EB.call(e)},isFile:function(e){return"[object File]"===EB.call(e)},isBlob:function(e){return"[object Blob]"===EB.call(e)},isFunction:ez,isStream:function(e){return qB(e)&&ez(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===EB.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:tz,merge:function e(){var t={};function n(n,r){$B(t[r])&&$B(n)?t[r]=e(t[r],n):$B(n)?t[r]=e({},n):DB(n)?t[r]=n.slice():t[r]=n}for(var r=0,i=arguments.length;r<i;r++)tz(arguments[r],n);return t},extend:function(e,t,n){return tz(t,(function(t,r){e[r]=n&&"function"==typeof t?PB(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},rz=nz;function iz(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var cz=function(e,t,n){if(!t)return e;var r;if(n)r=n(t);else if(rz.isURLSearchParams(t))r=t.toString();else{var i=[];rz.forEach(t,(function(e,t){null!=e&&(rz.isArray(e)?t+="[]":e=[e],rz.forEach(e,(function(e){rz.isDate(e)?e=e.toISOString():rz.isObject(e)&&(e=JSON.stringify(e)),i.push(iz(t)+"="+iz(e))})))})),r=i.join("&")}if(r){var c=e.indexOf("#");-1!==c&&(e=e.slice(0,c)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e},oz=nz;function az(){this.handlers=[]}az.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},az.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},az.prototype.forEach=function(e){oz.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var lz=az,uz="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function dz(){throw new Error("setTimeout has not been defined")}function sz(){throw new Error("clearTimeout has not been defined")}var mz=dz,Zz=sz;function hz(e){if(mz===setTimeout)return setTimeout(e,0);if((mz===dz||!mz)&&setTimeout)return mz=setTimeout,setTimeout(e,0);try{return mz(e,0)}catch(t){try{return mz.call(null,e,0)}catch(t){return mz.call(this,e,0)}}}"function"==typeof uz.setTimeout&&(mz=setTimeout),"function"==typeof uz.clearTimeout&&(Zz=clearTimeout);var bz,pz=[],Iz=!1,gz=-1;function yz(){Iz&&bz&&(Iz=!1,bz.length?pz=bz.concat(pz):gz=-1,pz.length&&Xz())}function Xz(){if(!Iz){var e=hz(yz);Iz=!0;for(var t=pz.length;t;){for(bz=pz,pz=[];++gz<t;)bz&&bz[gz].run();gz=-1,t=pz.length}bz=null,Iz=!1,function(e){if(Zz===clearTimeout)return clearTimeout(e);if((Zz===sz||!Zz)&&clearTimeout)return Zz=clearTimeout,clearTimeout(e);try{Zz(e)}catch(t){try{return Zz.call(null,e)}catch(t){return Zz.call(this,e)}}}(e)}}function fz(e,t){this.fun=e,this.array=t}fz.prototype.run=function(){this.fun.apply(null,this.array)};function Gz(){}var Vz=Gz,Wz=Gz,Cz=Gz,vz=Gz,Rz=Gz,Sz=Gz,Yz=Gz;var Jz=uz.performance||{},Kz=Jz.now||Jz.mozNow||Jz.msNow||Jz.oNow||Jz.webkitNow||function(){return(new Date).getTime()};var Nz=new Date;var Lz={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];pz.push(new fz(e,t)),1!==pz.length||Iz||hz(Xz)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:Vz,addListener:Wz,once:Cz,off:vz,removeListener:Rz,removeAllListeners:Sz,emit:Yz,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*Kz.call(Jz),n=Math.floor(t),r=Math.floor(t%1*1e9);return e&&(n-=e[0],(r-=e[1])<0&&(n--,r+=1e9)),[n,r]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-Nz)/1e3}},Hz=Lz,xz=nz,kz=function(e,t,n,r,i){return e.config=t,n&&(e.code=n),e.request=r,e.response=i,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e},Uz={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Az=kz,wz=function(e,t,n,r,i){var c=new Error(e);return Az(c,t,n,r,i)},Fz=wz,Tz=nz,Bz=Tz.isStandardBrowserEnv()?{write:function(e,t,n,r,i,c){var o=[];o.push(e+"="+encodeURIComponent(t)),Tz.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),Tz.isString(r)&&o.push("path="+r),Tz.isString(i)&&o.push("domain="+i),!0===c&&o.push("secure"),document.cookie=o.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(){}},zz=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},jz=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},Mz=nz,Qz=["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"],Pz=nz,Ez=Pz.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=Pz.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0};function Dz(e){this.message=e}Dz.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Dz.prototype.__CANCEL__=!0;var Oz=Dz,_z=nz,qz=function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(Fz("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)},$z=Bz,ej=cz,tj=function(e,t){return e&&!zz(t)?jz(e,t):t},nj=function(e){var t,n,r,i={};return e?(Mz.forEach(e.split("\n"),(function(e){if(r=e.indexOf(":"),t=Mz.trim(e.substr(0,r)).toLowerCase(),n=Mz.trim(e.substr(r+1)),t){if(i[t]&&Qz.indexOf(t)>=0)return;i[t]="set-cookie"===t?(i[t]?i[t]:[]).concat([n]):i[t]?i[t]+", "+n:n}})),i):i},rj=Ez,ij=wz,cj=Uz,oj=Oz,aj=function(e){return new Promise((function(t,n){var r,i=e.data,c=e.headers,o=e.responseType;function a(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener("abort",r)}_z.isFormData(i)&&delete c["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var u=e.auth.username||"",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";c.Authorization="Basic "+btoa(u+":"+d)}var s=tj(e.baseURL,e.url);function m(){if(l){var r="getAllResponseHeaders"in l?nj(l.getAllResponseHeaders()):null,i={data:o&&"text"!==o&&"json"!==o?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};qz((function(e){t(e),a()}),(function(e){n(e),a()}),i),l=null}}if(l.open(e.method.toUpperCase(),ej(s,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,"onloadend"in l?l.onloadend=m:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(m)},l.onabort=function(){l&&(n(ij("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(ij("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||cj;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(ij(t,e,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},_z.isStandardBrowserEnv()){var Z=(e.withCredentials||rj(s))&&e.xsrfCookieName?$z.read(e.xsrfCookieName):void 0;Z&&(c[e.xsrfHeaderName]=Z)}"setRequestHeader"in l&&_z.forEach(c,(function(e,t){void 0===i&&"content-type"===t.toLowerCase()?delete c[t]:l.setRequestHeader(t,e)})),_z.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),o&&"json"!==o&&(l.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(r=function(e){l&&(n(!e||e&&e.type?new oj("canceled"):e),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener("abort",r))),i||(i=null),l.send(i)}))},lj=nz,uj=function(e,t){xz.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))},dj=kz,sj={"Content-Type":"application/x-www-form-urlencoded"};function mj(e,t){!lj.isUndefined(e)&&lj.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var Zj,hj={transitional:Uz,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Hz&&"[object process]"===Object.prototype.toString.call(Hz))&&(Zj=aj),Zj),transformRequest:[function(e,t){return uj(t,"Accept"),uj(t,"Content-Type"),lj.isFormData(e)||lj.isArrayBuffer(e)||lj.isBuffer(e)||lj.isStream(e)||lj.isFile(e)||lj.isBlob(e)?e:lj.isArrayBufferView(e)?e.buffer:lj.isURLSearchParams(e)?(mj(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):lj.isObject(e)||t&&"application/json"===t["Content-Type"]?(mj(t,"application/json"),function(e,t,n){if(lj.isString(e))try{return(t||JSON.parse)(e),lj.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||hj.transitional,n=t&&t.silentJSONParsing,r=t&&t.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||r&&lj.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(i){if("SyntaxError"===e.name)throw dj(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};lj.forEach(["delete","get","head"],(function(e){hj.headers[e]={}})),lj.forEach(["post","put","patch"],(function(e){hj.headers[e]=lj.merge(sj)}));var bj=hj,pj=nz,Ij=bj,gj=function(e){return!(!e||!e.__CANCEL__)},yj=nz,Xj=function(e,t,n){var r=this||Ij;return pj.forEach(n,(function(n){e=n.call(r,e,t)})),e},fj=gj,Gj=bj,Vj=Oz;function Wj(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Vj("canceled")}var Cj=nz,vj=function(e,t){t=t||{};var n={};function r(e,t){return Cj.isPlainObject(e)&&Cj.isPlainObject(t)?Cj.merge(e,t):Cj.isPlainObject(t)?Cj.merge({},t):Cj.isArray(t)?t.slice():t}function i(n){return Cj.isUndefined(t[n])?Cj.isUndefined(e[n])?void 0:r(void 0,e[n]):r(e[n],t[n])}function c(e){if(!Cj.isUndefined(t[e]))return r(void 0,t[e])}function o(n){return Cj.isUndefined(t[n])?Cj.isUndefined(e[n])?void 0:r(void 0,e[n]):r(void 0,t[n])}function a(n){return n in t?r(e[n],t[n]):n in e?r(void 0,e[n]):void 0}var l={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:a};return Cj.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=l[e]||i,r=t(e);Cj.isUndefined(r)&&t!==a||(n[e]=r)})),n},Rj="0.26.1",Sj=Rj,Yj={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){Yj[e]=function(n){return o(n)===e||"a"+(t<1?"n ":" ")+e}}));var Jj={};Yj.transitional=function(e,t,n){function r(e,t){return"[Axios v"+Sj+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,i,c){if(!1===e)throw new Error(r(i," has been removed"+(t?" in "+t:"")));return t&&!Jj[i]&&(Jj[i]=!0,console.warn(r(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,i,c)}};var Kj={assertOptions:function(e,t,n){if("object"!==o(e))throw new TypeError("options must be an object");for(var r=Object.keys(e),i=r.length;i-- >0;){var c=r[i],a=t[c];if(a){var l=e[c],u=void 0===l||a(l,c,e);if(!0!==u)throw new TypeError("option "+c+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:Yj},Nj=nz,Lj=cz,Hj=lz,xj=function(e){return Wj(e),e.headers=e.headers||{},e.data=Xj.call(e,e.data,e.headers,e.transformRequest),e.headers=yj.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),yj.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||Gj.adapter)(e).then((function(t){return Wj(e),t.data=Xj.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return fj(t)||(Wj(e),t&&t.response&&(t.response.data=Xj.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},kj=vj,Uj=Kj,Aj=Uj.validators;function wj(e){this.defaults=e,this.interceptors={request:new Hj,response:new Hj}}wj.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=kj(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var n=t.transitional;void 0!==n&&Uj.assertOptions(n,{silentJSONParsing:Aj.transitional(Aj.boolean),forcedJSONParsing:Aj.transitional(Aj.boolean),clarifyTimeoutError:Aj.transitional(Aj.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(i=i&&e.synchronous,r.unshift(e.fulfilled,e.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(e){o.push(e.fulfilled,e.rejected)})),!i){var a=[xj,void 0];for(Array.prototype.unshift.apply(a,r),a=a.concat(o),c=Promise.resolve(t);a.length;)c=c.then(a.shift(),a.shift());return c}for(var l=t;r.length;){var u=r.shift(),d=r.shift();try{l=u(l)}catch(e){d(e);break}}try{c=xj(l)}catch(e){return Promise.reject(e)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},wj.prototype.getUri=function(e){return e=kj(this.defaults,e),Lj(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},Nj.forEach(["delete","get","head","options"],(function(e){wj.prototype[e]=function(t,n){return this.request(kj(n||{},{method:e,url:t,data:(n||{}).data}))}})),Nj.forEach(["post","put","patch"],(function(e){wj.prototype[e]=function(t,n,r){return this.request(kj(r||{},{method:e,url:t,data:n}))}}));var Fj=wj,Tj=Oz;function Bj(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t<r;t++)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e){n.reason||(n.reason=new Tj(e),t(n.reason))}))}Bj.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Bj.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},Bj.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},Bj.source=function(){var e,t=new Bj((function(t){e=t}));return{token:t,cancel:e}};var zj=Bj,jj=nz,Mj=nz,Qj=QB,Pj=Fj,Ej=vj;var Dj=function e(t){var n=new Pj(t),r=Qj(Pj.prototype.request,n);return Mj.extend(r,Pj.prototype,n),Mj.extend(r,n),r.create=function(n){return e(Ej(t,n))},r}(bj);Dj.Axios=Pj,Dj.Cancel=Oz,Dj.CancelToken=zj,Dj.isCancel=gj,Dj.VERSION=Rj,Dj.all=function(e){return Promise.all(e)},Dj.spread=function(e){return function(t){return e.apply(null,t)}},Dj.isAxiosError=function(e){return jj.isObject(e)&&!0===e.isAxiosError},MB.exports=Dj,MB.exports.default=Dj;var Oj,_j=MB.exports;var qj=Oj=function(){function e(){u(this,e),this.attachToken=function(){return Promise.resolve()},this.requestStartCallback=function(){return null},this.requestSuccessCallback=function(){return null},this.requestErrorCallback=function(){return null},this.requestFinishCallback=function(){return 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)}return s(e,[{key:"requestHandler",value:function(e){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.attachToken(e);case 2:return(null==e?void 0:e.shouldEncodeToFormData)&&(n=null==e?void 0:e.data,r=new FormData,Object.keys(n).forEach((function(e){r.append(e,n[e])})),e.data=r),Oj.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),t.abrupt("return",e);case 5:case"end":return t.stop()}}),t,this)})))}},{key:"errorHandler",value:function(e){throw Oj.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}},{key:"successHandler",value:function(e){return Oj.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}},{key:"init",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:Oj.isHandlerEnabled=e,this.attachToken=t;case 2:case"end":return n.stop()}}),n,this)})))}},{key:"enableHandler",value:function(){Oj.isHandlerEnabled=!0}},{key:"disableHandler",value:function(){Oj.isHandlerEnabled=!1}},{key:"disableHandlerWithTimeout",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Oj.DEFAULT_HANDLER_DISABLE_TIMEOUT;Oj.isHandlerEnabled=!1,setTimeout((function(){Oj.isHandlerEnabled=!0}),e)}},{key:"setHttpRequestStartCallback",value:function(e){this.requestStartCallback=e}},{key:"setHttpRequestSuccessCallback",value:function(e){this.requestSuccessCallback=e}},{key:"setHttpRequestErrorCallback",value:function(e){this.requestErrorCallback=e}},{key:"setHttpRequestFinishCallback",value:function(e){this.requestFinishCallback=e}}],[{key:"getInstance",value:function(){var e=this;return this.axiosInstance||(this.axiosInstance=_j.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Oj),this.axiosInstance.interceptors.request.use((function(t){return zT(e,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.clientInstance.requestHandler(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})))})),this.axiosInstance.interceptors.response.use((function(t){return e.clientInstance.successHandler(t)}),(function(t){return e.clientInstance.errorHandler(t)})),this.axiosInstance.all=_j.all,this.axiosInstance.spread=_j.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}}]),e}();qj.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,qj=Oj=function(e,t,n,r){var i,c=arguments.length,a=c<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"===("undefined"==typeof Reflect?"undefined":o(Reflect))&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(i=e[l])&&(a=(c<3?i(a):c>3?i(t,n,a):i(t,n))||a);return c>3&&a&&Object.defineProperty(t,n,a),a}([function(e){}],qj);var $j=function(){function e(){u(this,e)}return s(e,[{key:"setData",value:function(e,t){return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:localStorage.setItem(e,t);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(e){var t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(e){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:localStorage.removeItem(e);case 1:case"end":return t.stop()}}),t)})))}}]),e}(),eM=function(){function e(){u(this,e),this._data=new Map}return s(e,[{key:"setData",value:function(e,t){return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this._data.set(e,t);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getData",value:function(e){var t,n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",null!==(n=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==n?n:"{}");case 1:case"end":return r.stop()}}),r,this)})))}},{key:"removeData",value:function(e){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:this._data.delete(e);case 1:case"end":return t.stop()}}),t,this)})))}}]),e}(),tM=function(){function e(){u(this,e)}return s(e,[{key:"setData",value:function(e,t){return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:sessionStorage.setItem(e,t);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(e){var t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(e){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:sessionStorage.removeItem(e);case 1:case"end":return t.stop()}}),t)})))}}]),e}(),nM=[],rM=[],iM="undefined"!=typeof Uint8Array?Uint8Array:Array,cM=!1;function oM(){cM=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=e.length;t<n;++t)nM[t]=e[t],rM[e.charCodeAt(t)]=t;rM["-".charCodeAt(0)]=62,rM["_".charCodeAt(0)]=63}function aM(e,t,n){for(var r,i,c=[],o=t;o<n;o+=3)r=(e[o]<<16)+(e[o+1]<<8)+e[o+2],c.push(nM[(i=r)>>18&63]+nM[i>>12&63]+nM[i>>6&63]+nM[63&i]);return c.join("")}function lM(e){var t;cM||oM();for(var n=e.length,r=n%3,i="",c=[],o=16383,a=0,l=n-r;a<l;a+=o)c.push(aM(e,a,a+o>l?l:a+o));return 1===r?(t=e[n-1],i+=nM[t>>2],i+=nM[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=nM[t>>10],i+=nM[t>>4&63],i+=nM[t<<2&63],i+="="),c.push(i),c.join("")}function uM(e,t,n,r,i){var c,o,a=8*i-r-1,l=(1<<a)-1,u=l>>1,d=-7,s=n?i-1:0,m=n?-1:1,Z=e[t+s];for(s+=m,c=Z&(1<<-d)-1,Z>>=-d,d+=a;d>0;c=256*c+e[t+s],s+=m,d-=8);for(o=c&(1<<-d)-1,c>>=-d,d+=r;d>0;o=256*o+e[t+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===l)return o?NaN:1/0*(Z?-1:1);o+=Math.pow(2,r),c-=u}return(Z?-1:1)*o*Math.pow(2,c-r)}function dM(e,t,n,r,i,c){var o,a,l,u=8*c-i-1,d=(1<<u)-1,s=d>>1,m=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,Z=r?0:c-1,h=r?1:-1,b=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=d):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+s>=1?m/l:m*Math.pow(2,1-s))*l>=2&&(o++,l/=2),o+s>=d?(a=0,o=d):o+s>=1?(a=(t*l-1)*Math.pow(2,i),o+=s):(a=t*Math.pow(2,s-1)*Math.pow(2,i),o=0));i>=8;e[n+Z]=255&a,Z+=h,a/=256,i-=8);for(o=o<<i|a,u+=i;u>0;e[n+Z]=255&o,Z+=h,o/=256,u-=8);e[n+Z-h]|=128*b}var sM={}.toString,mM=Array.isArray||function(e){return"[object Array]"==sM.call(e)};pM.TYPED_ARRAY_SUPPORT=void 0===uz.TYPED_ARRAY_SUPPORT||uz.TYPED_ARRAY_SUPPORT;var ZM=hM();function hM(){return pM.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function bM(e,t){if(hM()<t)throw new RangeError("Invalid typed array length");return pM.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=pM.prototype:(null===e&&(e=new pM(t)),e.length=t),e}function pM(e,t,n){if(!(pM.TYPED_ARRAY_SUPPORT||this instanceof pM))return new pM(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 yM(this,e)}return IM(this,e,t,n)}function IM(e,t,n,r){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,r){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");t=void 0===n&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r);pM.TYPED_ARRAY_SUPPORT?(e=t).__proto__=pM.prototype:e=XM(e,t);return e}(e,t,n,r):"string"==typeof t?function(e,t,n){"string"==typeof n&&""!==n||(n="utf8");if(!pM.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|VM(t,n),i=(e=bM(e,r)).write(t,n);i!==r&&(e=e.slice(0,i));return e}(e,t,n):function(e,t){if(GM(t)){var n=0|fM(t.length);return 0===(e=bM(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||(r=t.length)!=r?bM(e,0):XM(e,t);if("Buffer"===t.type&&mM(t.data))return XM(e,t.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function gM(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 yM(e,t){if(gM(t),e=bM(e,t<0?0:0|fM(t)),!pM.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function XM(e,t){var n=t.length<0?0:0|fM(t.length);e=bM(e,n);for(var r=0;r<n;r+=1)e[r]=255&t[r];return e}function fM(e){if(e>=hM())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+hM().toString(16)+" bytes");return 0|e}function GM(e){return!(null==e||!e._isBuffer)}function VM(e,t){if(GM(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 r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return OM(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return _M(e).length;default:if(r)return OM(e).length;t=(""+t).toLowerCase(),r=!0}}function WM(e,t,n){var r=!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 wM(this,t,n);case"utf8":case"utf-8":return xM(this,t,n);case"ascii":return UM(this,t,n);case"latin1":case"binary":return AM(this,t,n);case"base64":return HM(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return FM(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function CM(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function vM(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=pM.from(t,r)),GM(t))return 0===t.length?-1:RM(e,t,n,r,i);if("number"==typeof t)return t&=255,pM.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):RM(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function RM(e,t,n,r,i){var c,o=1,a=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,n/=2}function u(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var d=-1;for(c=n;c<a;c++)if(u(e,c)===u(t,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===l)return d*o}else-1!==d&&(c-=c-d),d=-1}else for(n+l>a&&(n=a-l),c=n;c>=0;c--){for(var s=!0,m=0;m<l;m++)if(u(e,c+m)!==u(t,m)){s=!1;break}if(s)return c}return-1}function SM(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;var c=t.length;if(c%2!=0)throw new TypeError("Invalid hex string");r>c/2&&(r=c/2);for(var o=0;o<r;++o){var a=parseInt(t.substr(2*o,2),16);if(isNaN(a))return o;e[n+o]=a}return o}function YM(e,t,n,r){return qM(OM(t,e.length-n),e,n,r)}function JM(e,t,n,r){return qM(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function KM(e,t,n,r){return JM(e,t,n,r)}function NM(e,t,n,r){return qM(_M(t),e,n,r)}function LM(e,t,n,r){return qM(function(e,t){for(var n,r,i,c=[],o=0;o<e.length&&!((t-=2)<0);++o)r=(n=e.charCodeAt(o))>>8,i=n%256,c.push(i),c.push(r);return c}(t,e.length-n),e,n,r)}function HM(e,t,n){return 0===t&&n===e.length?lM(e):lM(e.slice(t,n))}function xM(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i<n;){var c,o,a,l,u=e[i],d=null,s=u>239?4:u>223?3:u>191?2:1;if(i+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=e[i+1]))&&(l=(31&u)<<6|63&c)>127&&(d=l);break;case 3:c=e[i+1],o=e[i+2],128==(192&c)&&128==(192&o)&&(l=(15&u)<<12|(63&c)<<6|63&o)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:c=e[i+1],o=e[i+2],a=e[i+3],128==(192&c)&&128==(192&o)&&128==(192&a)&&(l=(15&u)<<18|(63&c)<<12|(63&o)<<6|63&a)>65535&&l<1114112&&(d=l)}null===d?(d=65533,s=1):d>65535&&(d-=65536,r.push(d>>>10&1023|55296),d=56320|1023&d),r.push(d),i+=s}return function(e){var t=e.length;if(t<=kM)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=kM));return n}(r)}pM.poolSize=8192,pM._augment=function(e){return e.__proto__=pM.prototype,e},pM.from=function(e,t,n){return IM(null,e,t,n)},pM.TYPED_ARRAY_SUPPORT&&(pM.prototype.__proto__=Uint8Array.prototype,pM.__proto__=Uint8Array),pM.alloc=function(e,t,n){return function(e,t,n,r){return gM(t),t<=0?bM(e,t):void 0!==n?"string"==typeof r?bM(e,t).fill(n,r):bM(e,t).fill(n):bM(e,t)}(null,e,t,n)},pM.allocUnsafe=function(e){return yM(null,e)},pM.allocUnsafeSlow=function(e){return yM(null,e)},pM.isBuffer=$M,pM.compare=function(e,t){if(!GM(e)||!GM(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,c=Math.min(n,r);i<c;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return n<r?-1:r<n?1:0},pM.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}},pM.concat=function(e,t){if(!mM(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return pM.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=pM.allocUnsafe(t),i=0;for(n=0;n<e.length;++n){var c=e[n];if(!GM(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(r,i),i+=c.length}return r},pM.byteLength=VM,pM.prototype._isBuffer=!0,pM.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)CM(this,t,t+1);return this},pM.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)CM(this,t,t+3),CM(this,t+1,t+2);return this},pM.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)CM(this,t,t+7),CM(this,t+1,t+6),CM(this,t+2,t+5),CM(this,t+3,t+4);return this},pM.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?xM(this,0,e):WM.apply(this,arguments)},pM.prototype.equals=function(e){if(!GM(e))throw new TypeError("Argument must be a Buffer");return this===e||0===pM.compare(this,e)},pM.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+">"},pM.prototype.compare=function(e,t,n,r,i){if(!GM(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===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var c=(i>>>=0)-(r>>>=0),o=(n>>>=0)-(t>>>=0),a=Math.min(c,o),l=this.slice(r,i),u=e.slice(t,n),d=0;d<a;++d)if(l[d]!==u[d]){c=l[d],o=u[d];break}return c<o?-1:o<c?1:0},pM.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},pM.prototype.indexOf=function(e,t,n){return vM(this,e,t,n,!0)},pM.prototype.lastIndexOf=function(e,t,n){return vM(this,e,t,n,!1)},pM.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=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===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var c=!1;;)switch(r){case"hex":return SM(this,e,t,n);case"utf8":case"utf-8":return YM(this,e,t,n);case"ascii":return JM(this,e,t,n);case"latin1":case"binary":return KM(this,e,t,n);case"base64":return NM(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return LM(this,e,t,n);default:if(c)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),c=!0}},pM.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var kM=4096;function UM(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function AM(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function wM(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var i="",c=t;c<n;++c)i+=DM(e[c]);return i}function FM(e,t,n){for(var r=e.slice(t,n),i="",c=0;c<r.length;c+=2)i+=String.fromCharCode(r[c]+256*r[c+1]);return i}function TM(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 BM(e,t,n,r,i,c){if(!GM(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<c)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function zM(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,c=Math.min(e.length-n,2);i<c;++i)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function jM(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,c=Math.min(e.length-n,4);i<c;++i)e[n+i]=t>>>8*(r?i:3-i)&255}function MM(e,t,n,r,i,c){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function QM(e,t,n,r,i){return i||MM(e,0,n,4),dM(e,t,n,r,23,4),n+4}function PM(e,t,n,r,i){return i||MM(e,0,n,8),dM(e,t,n,r,52,8),n+8}pM.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e),pM.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=pM.prototype;else{var i=t-e;n=new pM(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+e]}return n},pM.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||TM(e,t,this.length);for(var r=this[e],i=1,c=0;++c<t&&(i*=256);)r+=this[e+c]*i;return r},pM.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||TM(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},pM.prototype.readUInt8=function(e,t){return t||TM(e,1,this.length),this[e]},pM.prototype.readUInt16LE=function(e,t){return t||TM(e,2,this.length),this[e]|this[e+1]<<8},pM.prototype.readUInt16BE=function(e,t){return t||TM(e,2,this.length),this[e]<<8|this[e+1]},pM.prototype.readUInt32LE=function(e,t){return t||TM(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},pM.prototype.readUInt32BE=function(e,t){return t||TM(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},pM.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||TM(e,t,this.length);for(var r=this[e],i=1,c=0;++c<t&&(i*=256);)r+=this[e+c]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*t)),r},pM.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||TM(e,t,this.length);for(var r=t,i=1,c=this[e+--r];r>0&&(i*=256);)c+=this[e+--r]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*t)),c},pM.prototype.readInt8=function(e,t){return t||TM(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},pM.prototype.readInt16LE=function(e,t){t||TM(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},pM.prototype.readInt16BE=function(e,t){t||TM(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},pM.prototype.readInt32LE=function(e,t){return t||TM(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},pM.prototype.readInt32BE=function(e,t){return t||TM(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},pM.prototype.readFloatLE=function(e,t){return t||TM(e,4,this.length),uM(this,e,!0,23,4)},pM.prototype.readFloatBE=function(e,t){return t||TM(e,4,this.length),uM(this,e,!1,23,4)},pM.prototype.readDoubleLE=function(e,t){return t||TM(e,8,this.length),uM(this,e,!0,52,8)},pM.prototype.readDoubleBE=function(e,t){return t||TM(e,8,this.length),uM(this,e,!1,52,8)},pM.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||BM(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,c=0;for(this[t]=255&e;++c<n&&(i*=256);)this[t+c]=e/i&255;return t+n},pM.prototype.writeUIntBE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||BM(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,c=1;for(this[t+i]=255&e;--i>=0&&(c*=256);)this[t+i]=e/c&255;return t+n},pM.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,1,255,0),pM.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},pM.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,2,65535,0),pM.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):zM(this,e,t,!0),t+2},pM.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,2,65535,0),pM.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):zM(this,e,t,!1),t+2},pM.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,4,4294967295,0),pM.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):jM(this,e,t,!0),t+4},pM.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,4,4294967295,0),pM.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):jM(this,e,t,!1),t+4},pM.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);BM(this,e,t,n,i-1,-i)}var c=0,o=1,a=0;for(this[t]=255&e;++c<n&&(o*=256);)e<0&&0===a&&0!==this[t+c-1]&&(a=1),this[t+c]=(e/o>>0)-a&255;return t+n},pM.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);BM(this,e,t,n,i-1,-i)}var c=n-1,o=1,a=0;for(this[t+c]=255&e;--c>=0&&(o*=256);)e<0&&0===a&&0!==this[t+c+1]&&(a=1),this[t+c]=(e/o>>0)-a&255;return t+n},pM.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,1,127,-128),pM.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},pM.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,2,32767,-32768),pM.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):zM(this,e,t,!0),t+2},pM.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,2,32767,-32768),pM.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):zM(this,e,t,!1),t+2},pM.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,4,2147483647,-2147483648),pM.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):jM(this,e,t,!0),t+4},pM.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||BM(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),pM.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):jM(this,e,t,!1),t+4},pM.prototype.writeFloatLE=function(e,t,n){return QM(this,e,t,!0,n)},pM.prototype.writeFloatBE=function(e,t,n){return QM(this,e,t,!1,n)},pM.prototype.writeDoubleLE=function(e,t,n){return PM(this,e,t,!0,n)},pM.prototype.writeDoubleBE=function(e,t,n){return PM(this,e,t,!1,n)},pM.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===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(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var i,c=r-n;if(this===e&&n<t&&t<r)for(i=c-1;i>=0;--i)e[i+t]=this[i+n];else if(c<1e3||!pM.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)e[i+t]=this[i+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+c),t);return c},pM.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!pM.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}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 c;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(c=t;c<n;++c)this[c]=e;else{var o=GM(e)?e:OM(new pM(e,r).toString()),a=o.length;for(c=0;c<n-t;++c)this[c+t]=o[c%a]}return this};var EM=/[^+\/0-9A-Za-z-_]/g;function DM(e){return e<16?"0"+e.toString(16):e.toString(16)}function OM(e,t){var n;t=t||1/0;for(var r=e.length,i=null,c=[],o=0;o<r;++o){if((n=e.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&c.push(239,191,189);continue}if(o+1===r){(t-=3)>-1&&c.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&c.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&c.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;c.push(n)}else if(n<2048){if((t-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;c.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;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function _M(e){return function(e){var t,n,r,i,c,o;cM||oM();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===e[a-2]?2:"="===e[a-1]?1:0,o=new iM(3*a/4-c),r=c>0?a-4:a;var l=0;for(t=0,n=0;t<r;t+=4,n+=3)i=rM[e.charCodeAt(t)]<<18|rM[e.charCodeAt(t+1)]<<12|rM[e.charCodeAt(t+2)]<<6|rM[e.charCodeAt(t+3)],o[l++]=i>>16&255,o[l++]=i>>8&255,o[l++]=255&i;return 2===c?(i=rM[e.charCodeAt(t)]<<2|rM[e.charCodeAt(t+1)]>>4,o[l++]=255&i):1===c&&(i=rM[e.charCodeAt(t)]<<10|rM[e.charCodeAt(t+1)]<<4|rM[e.charCodeAt(t+2)]>>2,o[l++]=i>>8&255,o[l++]=255&i),o}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(EM,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function qM(e,t,n,r){for(var i=0;i<r&&!(i+n>=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function $M(e){return null!=e&&(!!e._isBuffer||eQ(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&eQ(e.slice(0,0))}(e))}function eQ(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var tQ=Object.freeze({__proto__:null,Buffer:pM,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),pM.alloc(+e)},isBuffer:$M,kMaxLength:ZM}),nQ={exports:{}},rQ={},iQ={};Object.defineProperty(iQ,"__esModule",{value:!0}),iQ.default=function(e){var t=e.length,n=t%4;if(!n)return e;var r=t,i=4-n,c=t+i,o=pM.alloc(c);for(o.write(e);i--;)o.write("=",r++);return o.toString()},Object.defineProperty(rQ,"__esModule",{value:!0});var cQ=iQ;function oQ(e,t){return void 0===t&&(t="utf8"),pM.isBuffer(e)?lQ(e.toString("base64")):lQ(pM.from(e,t).toString("base64"))}function aQ(e){return e=e.toString(),cQ.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function lQ(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var uQ=oQ;uQ.encode=oQ,uQ.decode=function(e,t){return void 0===t&&(t="utf8"),pM.from(aQ(e),"base64").toString(t)},uQ.toBase64=aQ,uQ.fromBase64=lQ,uQ.toBuffer=function(e){return pM.from(aQ(e),"base64")},rQ.default=uQ,function(e){e.exports=rQ.default,e.exports.default=e.exports}(nQ);var dQ=nQ.exports,sQ={exports:{}};!function(e){!function(t,n){var r={};!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,r,i,c){for(var o,a,l,u,d,s,m,Z,h,b,p,I,g;c>=64;){for(o=n[0],a=n[1],l=n[2],u=n[3],d=n[4],s=n[5],m=n[6],Z=n[7],b=0;b<16;b++)p=i+4*b,e[b]=(255&r[p])<<24|(255&r[p+1])<<16|(255&r[p+2])<<8|255&r[p+3];for(b=16;b<64;b++)I=((h=e[b-2])>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,g=((h=e[b-15])>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,e[b]=(I+e[b-7]|0)+(g+e[b-16]|0);for(b=0;b<64;b++)I=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&s^~d&m)|0)+(Z+(t[b]+e[b]|0)|0)|0,g=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,Z=m,m=s,s=d,d=u+I|0,u=l,l=a,a=o,o=I+g|0;n[0]+=o,n[1]+=a,n[2]+=l,n[3]+=u,n[4]+=d,n[5]+=s,n[6]+=m,n[7]+=Z,i+=64,c-=64}return i}var r=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 r=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[r++],t--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(r=n(this.temp,this.state,e,r,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[r++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,r=this.bufferLength,i=t/536870912|0,c=t<<3,o=t%64<56?64:128;this.buffer[r]=128;for(var a=r+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,o),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=r;var i=function(){function e(e){this.inner=new r,this.outer=new r,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new r).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 c(e){var t=(new r).update(e),n=t.digest();return t.clean(),n}function o(e,t){var n=new i(e).update(t),r=n.digest();return n.clean(),r}function a(e,t,n,r){var i=r[0];if(0===i)throw new Error("hkdf: cannot expand more");t.reset(),i>1&&t.update(e),n&&t.update(n),t.update(r),t.finish(e),r[0]++}e.HMAC=i,e.hash=c,e.default=c,e.hmac=o;var l=new Uint8Array(e.digestLength);function u(e,t,n,r){void 0===t&&(t=l),void 0===r&&(r=32);for(var c=new Uint8Array([1]),u=o(t,e),d=new i(u),s=new Uint8Array(d.digestLength),m=s.length,Z=new Uint8Array(r),h=0;h<r;h++)m===s.length&&(a(s,d,n,c),m=0),Z[h]=s[m++];return d.clean(),s.fill(0),c.fill(0),Z}function d(e,t,n,r){for(var c=new i(e),o=c.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),u=new Uint8Array(o),d=new Uint8Array(r),s=0;s*o<r;s++){var m=s+1;a[0]=m>>>24&255,a[1]=m>>>16&255,a[2]=m>>>8&255,a[3]=m>>>0&255,c.reset(),c.update(t),c.update(a),c.finish(u);for(var Z=0;Z<o;Z++)l[Z]=u[Z];for(Z=2;Z<=n;Z++){c.reset(),c.update(u).finish(u);for(var h=0;h<o;h++)l[h]^=u[h]}for(Z=0;Z<o&&s*o+Z<r;Z++)d[s*o+Z]=l[Z]}for(s=0;s<o;s++)l[s]=u[s]=0;for(s=0;s<4;s++)a[s]=0;return c.clean(),d}e.hkdf=u,e.pbkdf2=d}(r);var i=r.default;for(var c in r)i[c]=r[c];e.exports=i}()}(sQ);var mQ=n(sQ.exports),ZQ=crypto,hQ=function(e){return e instanceof CryptoKey},bQ=new TextEncoder,pQ=new TextDecoder;function IQ(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.reduce((function(e,t){return e+t.length}),0),i=new Uint8Array(r),c=0;return t.forEach((function(e){i.set(e,c),c+=e.length})),i}var gQ=function(e){var t=e;t instanceof Uint8Array&&(t=pQ.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return function(e){for(var t=atob(e),n=new Uint8Array(t.length),r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}},yQ=function(e){Z(n,e);var t=f(n);function n(e){var r,i;return u(this,n),(r=t.call(this,e)).code="ERR_JOSE_GENERIC",r.name=r.constructor.name,null===(i=Error.captureStackTrace)||void 0===i||i.call(Error,y(r),r.constructor),r}return s(n,null,[{key:"code",get:function(){return"ERR_JOSE_GENERIC"}}]),n}(g(Error)),XQ=function(e){Z(n,e);var t=f(n);function n(e){var r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return u(this,n),(r=t.call(this,e)).code="ERR_JWT_CLAIM_VALIDATION_FAILED",r.claim=i,r.reason=c,r}return s(n,null,[{key:"code",get:function(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}]),n}(yQ),fQ=function(e){Z(n,e);var t=f(n);function n(e){var r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return u(this,n),(r=t.call(this,e)).code="ERR_JWT_EXPIRED",r.claim=i,r.reason=c,r}return s(n,null,[{key:"code",get:function(){return"ERR_JWT_EXPIRED"}}]),n}(yQ),GQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JOSE_ALG_NOT_ALLOWED",e}return s(n,null,[{key:"code",get:function(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}]),n}(yQ),VQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JOSE_NOT_SUPPORTED",e}return s(n,null,[{key:"code",get:function(){return"ERR_JOSE_NOT_SUPPORTED"}}]),n}(yQ),WQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWS_INVALID",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWS_INVALID"}}]),n}(yQ),CQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWT_INVALID",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWT_INVALID"}}]),n}(yQ),vQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWKS_INVALID",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWKS_INVALID"}}]),n}(yQ),RQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWKS_NO_MATCHING_KEY",e.message="no applicable key found in the JSON Web Key Set",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWKS_NO_MATCHING_KEY"}}]),n}(yQ),SQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",e.message="multiple matching keys found in the JSON Web Key Set",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}]),n}(yQ),YQ=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",e.message="signature verification failed",e}return s(n,null,[{key:"code",get:function(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}]),n}(yQ);function JQ(){return"function"==typeof WebSocketPair}function KQ(){try{return void 0!==Hz.versions.node}catch(e){return!1}}function NQ(e){var 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 LQ(e,t){return e.name===t}function HQ(e){return parseInt(e.name.slice(4),10)}function xQ(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function kQ(e,t){if(t.length&&!t.some((function(t){return e.usages.includes(t)}))){var n="CryptoKey does not support this operation, its usages must include ";if(t.length>2){var r=t.pop();n+="one of ".concat(t.join(", "),", or ").concat(r,".")}else 2===t.length?n+="one of ".concat(t[0]," or ").concat(t[1],"."):n+="".concat(t[0],".");throw new TypeError(n)}}var UQ=function(e){for(var t="Key must be ",n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];if(r.length>2){var c=r.pop();t+="one of type ".concat(r.join(", "),", or ").concat(c,".")}else 2===r.length?t+="one of type ".concat(r[0]," or ").concat(r[1],"."):t+="of type ".concat(r[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"===o(e)&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},AQ=function(e){return hQ(e)},wQ=["CryptoKey"],FQ=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,i=t.filter(Boolean);if(0===i.length||1===i.length)return!0;var c,o=v(i);try{for(o.s();!(c=o.n()).done;){var a=c.value,l=Object.keys(a);if(r&&0!==r.size)for(var u=0,d=l;u<d.length;u++){var s=d[u];if(r.has(s))return!1;r.add(s)}else r=new Set(l)}}catch(e){o.e(e)}finally{o.f()}return!0};function TQ(e){if("object"!==o(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;for(var n=e;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(e)===n}var BQ=function(e,t){if(e.startsWith("RS")||e.startsWith("PS")){var n=t.algorithm.modulusLength;if("number"!=typeof n||n<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}};function zQ(e){var 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 VQ("".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 VQ('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 VQ('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 VQ('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(JQ()||KQ())&&"OKP":if("EdDSA"!==e.alg)throw new VQ('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(e.crv){case"Ed25519":t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=e.d?["sign"]:["verify"];break;case KQ()&&"Ed448":t={name:"NODE-ED448",namedCurve:"NODE-ED448"},n=e.d?["sign"]:["verify"];break;default:throw new VQ('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new VQ('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:n}}var jQ=function(){var e=l(regeneratorRuntime.mark((function e(t){var n,r,i,o,a,l,u,d,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=zQ(t),a=o.algorithm,l=o.keyUsages,u=[a,null!==(r=t.ext)&&void 0!==r&&r,null!==(i=t.key_ops)&&void 0!==i?i:l],"PBKDF2"!==a.name){e.next=4;break}return e.abrupt("return",(d=ZQ.subtle).importKey.apply(d,["raw",gQ(t.k)].concat(u)));case 4:return delete(s=c({},t)).alg,e.abrupt("return",(n=ZQ.subtle).importKey.apply(n,["jwk",s].concat(u)));case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();function MQ(e,t,n){return QQ.apply(this,arguments)}function QQ(){return(QQ=l(regeneratorRuntime.mark((function e(t,n,r){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(TQ(t)){e.next=2;break}throw new TypeError("JWK must be an object");case 2:if(n||(n=t.alg),"string"==typeof n&&n){e.next=5;break}throw new TypeError('"alg" argument is required when "jwk.alg" is not present');case 5:e.t0=t.kty,e.next="oct"===e.t0?8:"RSA"===e.t0?14:"EC"===e.t0||"OKP"===e.t0?16:17;break;case 8:if("string"==typeof t.k&&t.k){e.next=10;break}throw new TypeError('missing "k" (Key Value) Parameter value');case 10:if(null!=r||(r=!0!==t.ext),!r){e.next=13;break}return e.abrupt("return",jQ(c(c({},t),{},{alg:n,ext:!1})));case 13:return e.abrupt("return",gQ(t.k));case 14:if(void 0===t.oth){e.next=16;break}throw new VQ('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case 16:return e.abrupt("return",jQ(c(c({},t),{},{alg:n})));case 17:throw new VQ('Unsupported "kty" (Key Type) Parameter value');case 18:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var PQ=function(e,t,n){e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?function(e){if(!(e instanceof Uint8Array)){if(!AQ(e))throw new TypeError(UQ.apply(void 0,[e].concat(V(wQ),["Uint8Array"])));if("secret"!==e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}}(t):function(e,t){if(!AQ(e))throw new TypeError(UQ.apply(void 0,[e].concat(V(wQ))));if("secret"===e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(wQ.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))}(t,n)};function EQ(e,t,n,r,i){if(void 0!==i.crit&&void 0===r.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!r||void 0===r.crit)return new Set;if(!Array.isArray(r.crit)||0===r.crit.length||r.crit.some((function(e){return"string"!=typeof e||0===e.length})))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');var c;c=void 0!==n?new Map([].concat(V(Object.entries(n)),V(t.entries()))):t;var o,a=v(r.crit);try{for(a.s();!(o=a.n()).done;){var l=o.value;if(!c.has(l))throw new VQ('Extension Header Parameter "'.concat(l,'" is not recognized'));if(void 0===i[l])throw new e('Extension Header Parameter "'.concat(l,'" is missing'));if(c.get(l)&&void 0===r[l])throw new e('Extension Header Parameter "'.concat(l,'" MUST be integrity protected'))}}catch(e){a.e(e)}finally{a.f()}return new Set(r.crit)}var DQ=function(e,t){if(void 0!==t&&(!Array.isArray(t)||t.some((function(e){return"string"!=typeof e}))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)};function OQ(e,t){var 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(JQ()||KQ())&&"EdDSA":var r=t.namedCurve;return{name:r,namedCurve:r};default:throw new VQ("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}function _Q(e,t,n){if(hQ(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":if(!LQ(e.algorithm,"HMAC"))throw NQ("HMAC");var n=parseInt(t.slice(2),10);if(HQ(e.algorithm.hash)!==n)throw NQ("SHA-".concat(n),"algorithm.hash");break;case"RS256":case"RS384":case"RS512":if(!LQ(e.algorithm,"RSASSA-PKCS1-v1_5"))throw NQ("RSASSA-PKCS1-v1_5");var r=parseInt(t.slice(2),10);if(HQ(e.algorithm.hash)!==r)throw NQ("SHA-".concat(r),"algorithm.hash");break;case"PS256":case"PS384":case"PS512":if(!LQ(e.algorithm,"RSA-PSS"))throw NQ("RSA-PSS");var i=parseInt(t.slice(2),10);if(HQ(e.algorithm.hash)!==i)throw NQ("SHA-".concat(i),"algorithm.hash");break;case KQ()&&"EdDSA":if("NODE-ED25519"!==e.algorithm.name&&"NODE-ED448"!==e.algorithm.name)throw NQ("NODE-ED25519 or NODE-ED448");break;case JQ()&&"EdDSA":if(!LQ(e.algorithm,"NODE-ED25519"))throw NQ("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":if(!LQ(e.algorithm,"ECDSA"))throw NQ("ECDSA");var c=xQ(t);if(e.algorithm.namedCurve!==c)throw NQ(c,"algorithm.namedCurve");break;default:throw new TypeError("CryptoKey does not support this operation")}for(var o=arguments.length,a=new Array(o>2?o-2:0),l=2;l<o;l++)a[l-2]=arguments[l];kQ(e,a)}(t,e,n),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(UQ.apply(void 0,[t].concat(V(wQ))));return ZQ.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[n])}throw new TypeError(UQ.apply(void 0,[t].concat(V(wQ),["Uint8Array"])))}var qQ=function(){var e=l(regeneratorRuntime.mark((function e(t,n,r,i){var c,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,_Q(t,n,"verify");case 2:return c=e.sent,BQ(t,c),o=OQ(t,c.algorithm),e.prev=5,e.next=8,ZQ.subtle.verify(o,c,r,i);case 8:return e.abrupt("return",e.sent);case 11:return e.prev=11,e.t0=e.catch(5),e.abrupt("return",!1);case 14:case"end":return e.stop()}}),e,null,[[5,11]])})));return function(t,n,r,i){return e.apply(this,arguments)}}();function $Q(e,t,n){return eP.apply(this,arguments)}function eP(){return eP=l(regeneratorRuntime.mark((function e(t,n,r){var i,o,a,l,u,d,s,m,Z,h,b,p,I;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(TQ(t)){e.next=2;break}throw new WQ("Flattened JWS must be an object");case 2:if(void 0!==t.protected||void 0!==t.header){e.next=4;break}throw new WQ('Flattened JWS must have either of the "protected" or "header" members');case 4:if(void 0===t.protected||"string"==typeof t.protected){e.next=6;break}throw new WQ("JWS Protected Header incorrect type");case 6:if(void 0!==t.payload){e.next=8;break}throw new WQ("JWS Payload missing");case 8:if("string"==typeof t.signature){e.next=10;break}throw new WQ("JWS Signature missing or incorrect type");case 10:if(void 0===t.header||TQ(t.header)){e.next=12;break}throw new WQ("JWS Unprotected Header incorrect type");case 12:if(o={},!t.protected){e.next=22;break}a=gQ(t.protected),e.prev=15,o=JSON.parse(pQ.decode(a)),e.next=22;break;case 19:throw e.prev=19,e.t0=e.catch(15),new WQ("JWS Protected Header is invalid");case 22:if(FQ(o,t.header)){e.next=24;break}throw new WQ("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");case 24:if(l=c(c({},o),t.header),u=EQ(WQ,new Map([["b64",!0]]),null==r?void 0:r.crit,o,l),d=!0,!u.has("b64")){e.next=31;break}if("boolean"==typeof(d=o.b64)){e.next=31;break}throw new WQ('The "b64" (base64url-encode payload) Header Parameter must be a boolean');case 31:if("string"==typeof(s=l.alg)&&s){e.next=34;break}throw new WQ('JWS "alg" (Algorithm) Header Parameter missing or invalid');case 34:if(!(m=r&&DQ("algorithms",r.algorithms))||m.has(s)){e.next=37;break}throw new GQ('"alg" (Algorithm) Header Parameter not allowed');case 37:if(!d){e.next=42;break}if("string"==typeof t.payload){e.next=40;break}throw new WQ("JWS Payload must be a string");case 40:e.next=44;break;case 42:if("string"==typeof t.payload||t.payload instanceof Uint8Array){e.next=44;break}throw new WQ("JWS Payload must be a string or an Uint8Array instance");case 44:if(Z=!1,"function"!=typeof n){e.next=50;break}return e.next=48,n(o,t);case 48:n=e.sent,Z=!0;case 50:return PQ(s,n,"verify"),h=IQ(bQ.encode(null!==(i=t.protected)&&void 0!==i?i:""),bQ.encode("."),"string"==typeof t.payload?bQ.encode(t.payload):t.payload),b=gQ(t.signature),e.next=55,qQ(s,n,b,h);case 55:if(e.sent){e.next=58;break}throw new YQ;case 58:if(p=d?gQ(t.payload):"string"==typeof t.payload?bQ.encode(t.payload):t.payload,I={payload:p},void 0!==t.protected&&(I.protectedHeader=o),void 0!==t.header&&(I.unprotectedHeader=t.header),!Z){e.next=64;break}return e.abrupt("return",c(c({},I),{},{key:n}));case 64:return e.abrupt("return",I);case 65:case"end":return e.stop()}}),e,null,[[15,19]])}))),eP.apply(this,arguments)}function tP(e,t,n){return nP.apply(this,arguments)}function nP(){return nP=l(regeneratorRuntime.mark((function e(t,n,r){var i,o,a,l,u,d;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t instanceof Uint8Array&&(t=pQ.decode(t)),"string"==typeof t){e.next=3;break}throw new WQ("Compact JWS must be a string or Uint8Array");case 3:if(i=t.split("."),o=i[0],a=i[1],l=i[2],3===i.length){e.next=6;break}throw new WQ("Invalid Compact JWS");case 6:return e.next=8,$Q({payload:a,protected:o,signature:l},n,r);case 8:if(u=e.sent,d={payload:u.payload,protectedHeader:u.protectedHeader},"function"!=typeof n){e.next=12;break}return e.abrupt("return",c(c({},d),{},{key:u.key}));case 12:return e.abrupt("return",d);case 13:case"end":return e.stop()}}),e)}))),nP.apply(this,arguments)}var rP=function(e){return Math.floor(e.getTime()/1e3)},iP=86400,cP=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i,oP=function(e){var t=cP.exec(e);if(!t)throw new TypeError("Invalid time period format");var 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*iP);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}},aP=function(e){return e.toLowerCase().replace(/^application\//,"")},lP=function(e,t){return"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)))},uP=function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=r.typ;if(i&&("string"!=typeof e.typ||aP(e.typ)!==aP(i)))throw new XQ('unexpected "typ" JWT header value',"typ","check_failed");try{n=JSON.parse(pQ.decode(t))}catch(e){}if(!TQ(n))throw new CQ("JWT Claims Set must be a top-level JSON object");var c=r.issuer;if(c&&!(Array.isArray(c)?c:[c]).includes(n.iss))throw new XQ('unexpected "iss" claim value',"iss","check_failed");var a=r.subject;if(a&&n.sub!==a)throw new XQ('unexpected "sub" claim value',"sub","check_failed");var l,u=r.audience;if(u&&!lP(n.aud,"string"==typeof u?[u]:u))throw new XQ('unexpected "aud" claim value',"aud","check_failed");switch(o(r.clockTolerance)){case"string":l=oP(r.clockTolerance);break;case"number":l=r.clockTolerance;break;case"undefined":l=0;break;default:throw new TypeError("Invalid clockTolerance option type")}var d=r.currentDate,s=rP(d||new Date);if((void 0!==n.iat||r.maxTokenAge)&&"number"!=typeof n.iat)throw new XQ('"iat" claim must be a number',"iat","invalid");if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new XQ('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>s+l)throw new XQ('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new XQ('"exp" claim must be a number',"exp","invalid");if(n.exp<=s-l)throw new fQ('"exp" claim timestamp check failed',"exp","check_failed")}if(r.maxTokenAge){var m=s-n.iat,Z="number"==typeof r.maxTokenAge?r.maxTokenAge:oP(r.maxTokenAge);if(m-l>Z)throw new fQ('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(m<0-l)throw new XQ('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};function dP(){return dP=l(regeneratorRuntime.mark((function e(t,n,r){var i,o,a,l;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,tP(t,n,r);case 2:if(o=e.sent,!(null===(i=o.protectedHeader.crit)||void 0===i?void 0:i.includes("b64"))||!1!==o.protectedHeader.b64){e.next=5;break}throw new CQ("JWTs MUST NOT use unencoded payload");case 5:if(a=uP(o.protectedHeader,o.payload,r),l={payload:a,protectedHeader:o.protectedHeader},"function"!=typeof n){e.next=9;break}return e.abrupt("return",c(c({},l),{},{key:o.key}));case 9:return e.abrupt("return",l);case 10:case"end":return e.stop()}}),e)}))),dP.apply(this,arguments)}function sP(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 VQ('Unsupported "alg" value for a JSON Web Key Set')}}function mP(e){return TQ(e)}var ZP=function(){function e(t){if(u(this,e),this._cached=new WeakMap,!function(e){return e&&"object"===o(e)&&Array.isArray(e.keys)&&e.keys.every(mP)}(t))throw new vQ("JSON Web Key Set malformed");var n;this._jwks=(n=t,"function"==typeof structuredClone?structuredClone(n):JSON.parse(JSON.stringify(n)))}var t;return s(e,[{key:"getKey",value:(t=l(regeneratorRuntime.mark((function e(t,n){var r,i,o,a,l,u,d,s,m;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=c(c({},t),n.header),i=r.alg,o=r.kid,a=sP(i),l=this._jwks.keys.filter((function(e){var t=a===e.kty;if(t&&"string"==typeof o&&(t=o===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})),u=l[0],0!==(d=l.length)){e.next=8;break}throw new RQ;case 8:if(1===d){e.next=10;break}throw new SQ;case 10:if(void 0!==(s=this._cached.get(u)||this._cached.set(u,{}).get(u))[i]){e.next=18;break}return e.next=14,MQ(c(c({},u),{},{ext:!0}),i);case 14:if(!((m=e.sent)instanceof Uint8Array||"public"!==m.type)){e.next=17;break}throw new vQ("JSON Web Key Set members must be public keys");case 17:s[i]=m;case 18:return e.abrupt("return",s[i]);case 19:case"end":return e.stop()}}),e,this)}))),function(e,n){return t.apply(this,arguments)})}]),e}();var hP={exports:{}},bP={exports:{}},pP=r(tQ);
451
+ */},{key:"didSignOutFail",value:function(t){var e=new URL(t),n=e.searchParams.get("state"),i=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&i}},{key:"clearUserSessionData",value:function(t){return MA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._authenticationCore.clearUserSessionData(t);case 2:case"end":return e.stop()}}),e,this)})))}}]),t}();function lB(t,e,n){var i=void 0===e?null:e,r=function(t,e){var n=atob(t);if(e){for(var i=new Uint8Array(n.length),r=0,c=n.length;r<c;++r)i[r]=n.charCodeAt(r);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return n}(t,void 0!==n&&n),c=r.indexOf("\n",10)+1,o=r.substring(c)+(i?"//# sourceMappingURL="+i:""),a=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(a)}var uB,dB,sB,mB,hB,bB,pB=(uB="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gdCh0KXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbcl0/YXJndW1lbnRzW3JdOnt9O3IlMj9lKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yyh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiByKCl7Ci8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi8Kcj1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUsbj10Lmhhc093blByb3BlcnR5LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7dSh7fSwiIil9Y2F0Y2goZSl7dT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gYyhlLHQscixuKXt2YXIgYT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLGk9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbz1uZXcgUyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybiBUKCl9Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPWsobyxyKTtpZihzKXtpZihzPT09bCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciB1PWYoZSx0LHIpO2lmKCJub3JtYWwiPT09dS50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLHUuYXJnPT09bCljb250aW51ZTtyZXR1cm57dmFsdWU6dS5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT11LnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9dS5hcmcpfX19KGUscixvKSxpfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgbD17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZCgpe312YXIgdj17fTt1KHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT1nJiZnKGcoRShbXSkpKTt5JiZ5IT09dCYmbi5jYWxsKHksaSkmJih2PXkpO3ZhciBtPWQucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gYihlLHQpe2Z1bmN0aW9uIHIoYSxpLG8scyl7dmFyIHU9ZihlW2FdLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsbD1jLnZhbHVlO3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGwmJm4uY2FsbChsLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGwuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxvKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxvLHMpfSkpfXModS5hcmcpfXZhciBhO3RoaXMuX2ludm9rZT1mdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsYSl7cihlLG4sdCxhKX0pKX1yZXR1cm4gYT1hP2EudGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gayhlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLGsoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBsO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBsfXZhciBuPWYocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxsO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGwpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsbCl9ZnVuY3Rpb24geChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBfKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBTKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goeCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIHI9LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK3I8ZS5sZW5ndGg7KWlmKG4uY2FsbChlLHIpKXJldHVybiB0LnZhbHVlPWVbcl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1kLHUobSwiY29uc3RydWN0b3IiLGQpLHUoZCwiY29uc3RydWN0b3IiLHApLHAuZGlzcGxheU5hbWU9dShkLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxkKTooZS5fX3Byb3RvX189ZCx1KGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGIucHJvdG90eXBlKSx1KGIucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWIsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBiKGModCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhtKSx1KG0scywiR2VuZXJhdG9yIiksdShtLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdShtLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LGUudmFsdWVzPUUsUy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChfKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gcigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9bi5jYWxsKGksImNhdGNoTG9jIiksdT1uLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJnUpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW3JdO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJm4uY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxsKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGx9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksXyhyKSxsfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO18ocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxsfX0sZX1mdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksdT1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixhKX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2EobyxuLGkscyx1LCJuZXh0IixlKX1mdW5jdGlvbiB1KGUpe2EobyxuLGkscyx1LCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZzKGUucHJvdG90eXBlLHQpLHImJnMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGYoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sbChlKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGgoZSx0KX1mdW5jdGlvbiBwKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gZD1wKCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtudWxsXTtuLnB1c2guYXBwbHkobix0KTt2YXIgYT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLG4pKTtyZXR1cm4gciYmaChhLHIucHJvdG90eXBlKSxhfSxkLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiB2KGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIHY9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fChyPWUsLTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKHIpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSkpcmV0dXJuIGU7dmFyIHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT10KXtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7dC5zZXQoZSxuKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGQoZSxhcmd1bWVudHMsbCh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGgobixlKX0sdihlKX1mdW5jdGlvbiBnKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB5KGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZyhlKX1mdW5jdGlvbiBtKGUpe3ZhciB0PXAoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWwoZSk7aWYodCl7dmFyIGE9bCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4geSh0aGlzLHIpfX1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbD09cilyZXR1cm47dmFyIG4sYSxpPVtdLG89ITAscz0hMTt0cnl7Zm9yKHI9ci5jYWxsKGUpOyEobz0obj1yLm5leHQoKSkuZG9uZSkmJihpLnB1c2gobi52YWx1ZSksIXR8fGkubGVuZ3RoIT09dCk7bz0hMCk7fWNhdGNoKGUpe3M9ITAsYT1lfWZpbmFsbHl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX1yZXR1cm4gaX0oZSx0KXx8ayhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGsoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gayhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4geChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBfKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1rKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihhLGkpe2Z1bmN0aW9uIG8oZSl7dHJ5e3Uobi5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KG4udGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP2EoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKG8scyl9dSgobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfQovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gRShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oYSxpKXtmdW5jdGlvbiBvKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9hKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihvLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgVDshZnVuY3Rpb24oZSl7ZS5mb3JtUG9zdD0iZm9ybV9wb3N0IixlLnF1ZXJ5PSJxdWVyeSJ9KFR8fChUPXt9KSk7dmFyIEE7IWZ1bmN0aW9uKGUpe2UuQ29uZmlnRGF0YT0iY29uZmlnX2RhdGEiLGUuT0lEQ1Byb3ZpZGVyTWV0YURhdGE9Im9pZGNfcHJvdmlkZXJfbWV0YV9kYXRhIixlLlNlc3Npb25EYXRhPSJzZXNzaW9uX2RhdGEiLGUuVGVtcG9yYXJ5RGF0YT0idGVtcG9yYXJ5X2RhdGEifShBfHwoQT17fSkpO3ZhciBSLEM9InJlZnJlc2hfdG9rZW5fdGltZXIiLFA9WyJSUzI1NiIsIlJTNTEyIiwiUlMzODQiLCJQUzI1NiJdLEQ9InNpZ25fb3V0X3VybCIsTz0ic2lnbl9vdXRfc3VjY2VzcyI7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oUnx8KFI9e30pKTt2YXIgST11KChmdW5jdGlvbiBlKHQscixuKXtvKHRoaXMsZSksdGhpcy5tZXNzYWdlPW4sdGhpcy5uYW1lPXIsdGhpcy5jb2RlPXQsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsKHRoaXMgaW5zdGFuY2VvZiBlP3RoaXMuY29uc3RydWN0b3I6dm9pZCAwKS5wcm90b3R5cGUpfSkpLEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiB1KGUsbnVsbCxbe2tleToiZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5hdWQsbnVsbD09dHx8ZGVsZXRlIHQuZXhwLG51bGw9PXR8fGRlbGV0ZSB0LmlhdCxudWxsPT10fHxkZWxldGUgdC5hY3IsbnVsbD09dHx8ZGVsZXRlIHQuYW1yLG51bGw9PXR8fGRlbGV0ZSB0LmF6cCxudWxsPT10fHxkZWxldGUgdC5hdXRoX3RpbWUsbnVsbD09dHx8ZGVsZXRlIHQubm9uY2UsbnVsbD09dHx8ZGVsZXRlIHQuY19oYXNoLG51bGw9PXR8fGRlbGV0ZSB0LmF0X2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQubmJmLG51bGw9PXR8fGRlbGV0ZSB0LmlzayxudWxsPT10fHxkZWxldGUgdC5zaWQ7dmFyIHI9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXcoZSwyKSxuPXRbMF0sYT10WzFdLGk9bi5zcGxpdCgiXyIpLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpXS5jb25jYXQoYihlLnNsaWNlKDEpKSkuam9pbigiIil9KSkuam9pbigiIik7cltpXT1hfSkpLHJ9fSx7a2V5OiJnZXRUb2tlblJlcXVlc3RIZWFkZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX19LHtrZXk6ImdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0PyIiLmNvbmNhdCh0LCJfcmVxdWVzdF8iKS5jb25jYXQocik6InJlcXVlc3RfIi5jb25jYXQocil9fSx7a2V5OiJleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19XSksZX0oKTtMLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkAiLHI9ZS5zdWIuc3BsaXQodCk7cmV0dXJuIHIubGVuZ3RoPjI/cltyLmxlbmd0aC0xXToiIn07dmFyIFUsSCxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3ZhciBhPXRoaXM7byh0aGlzLGUpLHRoaXMuX2RhdGFMYXllcj10LHRoaXMuX2NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBFKGEsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT1mdW5jdGlvbigpe3JldHVybiBFKGEsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fY3J5cHRvSGVscGVyPW59cmV0dXJuIHUoZSxbe2tleToicmVzb2x2ZUVuZHBvaW50cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBuPXt9LHQubmV4dD0zLHRoaXMuX2NvbmZpZygpO2Nhc2UgMzpyZXR1cm4gYT10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsKGEuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhhLmVuZHBvaW50cykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7blt0XT0obnVsbD09YT92b2lkIDA6YS5lbmRwb2ludHMpP2EuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSxuKSkpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9e30sZS5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOmlmKG49ZS5zZW50LGE9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXSxuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpLmV2ZXJ5KChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoL1tBLVpdL2csKGZ1bmN0aW9uKGUpe3JldHVybiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKX0pKTtyZXR1cm4gYS5pbmNsdWRlcyh0KX0pKSl7ZS5uZXh0PTc7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO2Nhc2UgNzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsKG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sdCkpKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhLGk7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD17fSxlLm5leHQ9Myx0aGlzLl9jb25maWcoKTtjYXNlIDM6aWYobj1lLnNlbnQsYT1uLmJhc2VVcmwpe2UubmV4dD03O2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTtjYXNlIDc6cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLGk9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29hdXRoMi9hdXRob3JpemUiKSxlbmRfc2Vzc2lvbl9lbmRwb2ludDoiIi5jb25jYXQoYSkuY29uY2F0KCIvb2lkYy9sb2dvdXQiKSxpc3N1ZXI6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLGp3a3NfdXJpOiIiLmNvbmNhdChhKS5jb25jYXQoIi9vYXV0aDIvandrcyIpLGNoZWNrX3Nlc3Npb25faWZyYW1lOiIiLmNvbmNhdChhKS5jb25jYXQoIi9vaWRjL2NoZWNrc2Vzc2lvbiIpLHJldm9jYXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29hdXRoMi9yZXZva2UiKSx0b2tlbl9lbmRwb2ludDoiIi5jb25jYXQoYSkuY29uY2F0KCIvb2F1dGgyL3Rva2VuIiksdXNlcmluZm9fZW5kcG9pbnQ6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29hdXRoMi91c2VyaW5mbyIpfSxlLmFicnVwdCgicmV0dXJuIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksdCkpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InZhbGlkYXRlSWRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYSxpLG8scyx1LGM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBuPXQuc2VudC5qd2tzX3VyaSx0Lm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYoYT10LnNlbnQsbiYmMCE9PW4udHJpbSgpLmxlbmd0aCl7dC5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEkoIkpTX0FVVEhfSEVMUEVSLVZJVC1ORjAxIiwiSldLUyBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gSldLUyBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBKV0tTIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgODpyZXR1cm4gdC5wcmV2PTgsdC5uZXh0PTExLGZldGNoKG4se2NyZWRlbnRpYWxzOmEuc2VuZENvb2tpZXNJblJlcXVlc3RzP1IuSW5jbHVkZTpSLlNhbWVPcmlnaW59KTtjYXNlIDExOmk9dC5zZW50LHQubmV4dD0xNzticmVhaztjYXNlIDE0OnRocm93IHQucHJldj0xNCx0LnQwPXQuY2F0Y2goOCksbmV3IEkoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQudDA/dC50MDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKTtjYXNlIDE3OmlmKDIwMD09PWkuc3RhdHVzJiZpLm9rKXt0Lm5leHQ9MjQ7YnJlYWt9cmV0dXJuIHQudDE9SSx0LnQyPSJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0ICgiLmNvbmNhdChpLnN0YXR1c1RleHQsIikuIiksdC5uZXh0PTIyLGkuanNvbigpO2Nhc2UgMjI6dGhyb3cgdC50Mz10LnNlbnQsbmV3IHQudDEoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIix0LnQyLHQudDMpO2Nhc2UgMjQ6cmV0dXJuIHQubmV4dD0yNix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjY6cmV0dXJuIG89dC5zZW50Lmlzc3Vlcix0Lm5leHQ9MjksaS5qc29uKCk7Y2FzZSAyOTpyZXR1cm4gcz10LnNlbnQsdT1zLmtleXMsdC5uZXh0PTMzLHRoaXMuX2NyeXB0b0hlbHBlci5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSx1KTtjYXNlIDMzOnJldHVybiBjPXQuc2VudCx0LnQ0PXRoaXMuX2NyeXB0b0hlbHBlcix0LnQ1PWUsdC50Nj1jLHQubmV4dD0zOSx0aGlzLl9jb25maWcoKTtjYXNlIDM5OnJldHVybiB0LnQ3PXQuc2VudC5jbGllbnRJRCx0LnQ4PW51bGwhPW8/bzoiIix0LnQ5PXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1Yix0Lm5leHQ9NDQsdGhpcy5fY29uZmlnKCk7Y2FzZSA0NDpyZXR1cm4gdC50MTA9dC5zZW50LmNsb2NrVG9sZXJhbmNlLHQuYWJydXB0KCJyZXR1cm4iLHQudDQuaXNWYWxpZElkVG9rZW4uY2FsbCh0LnQ0LHQudDUsdC50Nix0LnQ3LHQudDgsdC50OSx0LnQxMCkpO2Nhc2UgNDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1s4LDE0XV0pfSkpKX19LHtrZXk6ImdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaT10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxvPUwuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKGkpLHM9bnVsbCE9PSh0PW51bGw9PWk/dm9pZCAwOmkudXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsdT1udWxsIT09KHI9aS5naXZlbl9uYW1lKSYmdm9pZCAwIT09cj9yOiIiLGM9bnVsbCE9PShuPWkuZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1uP246IiIsZj11JiZjPyIiLmNvbmNhdCh1LCIgIikuY29uY2F0KGMpOnV8fGN8fCIiLGw9bnVsbCE9PShhPWkucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09YT9hOmY7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmwsdGVuYW50RG9tYWluOm8sdXNlcm5hbWU6c30sTC5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoaSkpfX0se2tleToicmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiBpPSJvcGVuaWQiLHIubmV4dD0zLHRoaXMuX2NvbmZpZygpO2Nhc2UgMzpyZXR1cm4gbz1yLnNlbnQsci5uZXh0PTYsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKHQpO2Nhc2UgNjpyZXR1cm4gcz1yLnNlbnQsci5hYnJ1cHQoInJldHVybiIsKG8uc2NvcGUmJm8uc2NvcGUubGVuZ3RoPjAmJihvLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8by5zY29wZS5wdXNoKCJvcGVuaWQiKSxpPW8uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIscy5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsdGhpcy5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8ocy5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIsaSkucmVwbGFjZSgie3tjbGllbnRJRH19IixvLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KG49by5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT1uP246IiIpKSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJjbGVhclVzZXJTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoZSk7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJoYW5kbGVUb2tlblJlc3BvbnNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhLGksbz10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6aWYoMjAwPT09ZS5zdGF0dXMmJmUub2spe24ubmV4dD03O2JyZWFrfXJldHVybiBuLnQwPUksbi50MT0iSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSxuLm5leHQ9NSxlLmpzb24oKTtjYXNlIDU6dGhyb3cgbi50Mj1uLnNlbnQsbmV3IG4udDAoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIixuLnQxLG4udDIpO2Nhc2UgNzpyZXR1cm4gbi5uZXh0PTksZS5qc29uKCk7Y2FzZSA5OnJldHVybihhPW4uc2VudCkuY3JlYXRlZF9hdD0obmV3IERhdGUpLmdldFRpbWUoKSxuLm5leHQ9MTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAxMzppZighbi5zZW50LnZhbGlkYXRlSURUb2tlbil7bi5uZXh0PTE1O2JyZWFrfXJldHVybiBuLmFicnVwdCgicmV0dXJuIix0aGlzLnZhbGlkYXRlSWRUb2tlbihhLmlkX3Rva2VuKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBFKG8sdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciBuO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShhLHQpO2Nhc2UgMjpyZXR1cm4gbj17YWNjZXNzVG9rZW46YS5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OmEuY3JlYXRlZF9hdCxleHBpcmVzSW46YS5leHBpcmVzX2luLGlkVG9rZW46YS5pZF90b2tlbixyZWZyZXNoVG9rZW46YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmEuc2NvcGUsdG9rZW5UeXBlOmEudG9rZW5fdHlwZX0sZS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKG4pKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSk7Y2FzZSAxNTpyZXR1cm4gaT17YWNjZXNzVG9rZW46YS5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OmEuY3JlYXRlZF9hdCxleHBpcmVzSW46YS5leHBpcmVzX2luLGlkVG9rZW46YS5pZF90b2tlbixyZWZyZXNoVG9rZW46YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmEuc2NvcGUsdG9rZW5UeXBlOmEudG9rZW5fdHlwZX0sbi5uZXh0PTE4LHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShhLHQpO2Nhc2UgMTg6cmV0dXJuIG4uYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVzb2x2ZShpKSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiZ2VuZXJhdGVQS0NFS2V5Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgYSxpLG87cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGEoZSk7Y2FzZSAyOnJldHVybiBhPXIuc2VudCxpPVtdLE9iamVjdC5rZXlzKGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJmkucHVzaChlKX0pKSxvPWkuc29ydCgpLnBvcCgpLHIuYWJydXB0KCJyZXR1cm4iLCJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8uc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PXQ/dDoiLTEiKSsxKSk7Y2FzZSA3OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fV0pLGV9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7byh0aGlzLGUpLHRoaXMuX2NyeXB0b1V0aWxzPXR9cmV0dXJuIHUoZSxbe2tleToiZ2V0Q29kZVZlcmlmaWVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfX0se2tleToiZ2V0Q29kZUNoYWxsZW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX19LHtrZXk6ImdldEpXS0ZvclRoZUlkVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSksYT1fKHQpO3RyeXtmb3IoYS5zKCk7IShyPWEubigpKS5kb25lOyl7dmFyIGk9ci52YWx1ZTtpZihuLmtpZD09PWkua2lkKXJldHVybiBpfX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX10aHJvdyBuZXcgSSgiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtpZH0pKS5qb2luKCIsICIpKX19LHtrZXk6ImlzVmFsaWRJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsUCxyLG4sYSxpKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBJKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiPT09KG51bGw9PWU/dm9pZCAwOmUuY29kZSkmJiJuYmYiPT09KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pP1Byb21pc2UucmVqZWN0KG5ldyBJKCJKUy1DUllQVE9fVVRJTFMtSVZJVC1JVjAyIiwiSldUIE5CRiBDTEFJTSBWQUxJREFUSU9OIEZBSUxFRCIsIkpXVCBOQkYgY2xhaW0gdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSk6UHJvbWlzZS5yZWplY3QobmV3IEkoIkpTLUNSWVBUT19VVElMUy1JVklULUlWMDMiLCJKV1QgVkFMSURBVElPTiBGQUlMRUQiLCJKV1QgdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSl9KSl9fSx7a2V5OiJkZWNvZGVJRFRva2VuIix2YWx1ZTpmdW5jdGlvbihlKXt0cnl7dmFyIHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IEkoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1dKSxlfSgpLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dmFyIGE9dGhpcztvKHRoaXMsZSksdGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGoobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IE0odCx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj10LHRoaXMuX2NvbmZpZz1mdW5jdGlvbigpe3JldHVybiBFKGEsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT1mdW5jdGlvbigpe3JldHVybiBFKGEsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19cmV0dXJuIHUoZSxbe2tleToiZ2V0QXV0aG9yaXphdGlvblVSTCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbixhLGk7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBvKCl7dmFyIHMsdSxjLGYsbCxoLHAsZCx2LGcseSxtLGIsayx4LFMsRSxULEEsUjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKTtjYXNlIDI6cmV0dXJuIHM9ci5zZW50LHIubmV4dD01LHRoaXMuX2NvbmZpZygpO2Nhc2UgNTppZih1PXIuc2VudCxzJiYwIT09cy50cmltKCkubGVuZ3RoKXtyLm5leHQ9ODticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuIGM9bmV3IFVSTChzKSwoZj1uZXcgTWFwKS5zZXQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksZi5zZXQoImNsaWVudF9pZCIsdS5jbGllbnRJRCksbD0ib3BlbmlkIix1LnNjb3BlJiZ1LnNjb3BlLmxlbmd0aD4wJiYodS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHUuc2NvcGUucHVzaCgib3BlbmlkIiksbD11LnNjb3BlLmpvaW4oIiAiKSksZi5zZXQoInNjb3BlIixsKSxmLnNldCgicmVkaXJlY3RfdXJpIix1LnNpZ25JblJlZGlyZWN0VVJMKSx1LnJlc3BvbnNlTW9kZSYmZi5zZXQoInJlc3BvbnNlX21vZGUiLHUucmVzcG9uc2VNb2RlKSxyLm5leHQ9MTQsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KHQpO2Nhc2UgMTQ6aWYoaD1yLnNlbnQsIXUuZW5hYmxlUEtDRSl7ci5uZXh0PTIxO2JyZWFrfXJldHVybiBwPW51bGw9PT0obj10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldENvZGVWZXJpZmllcigpLGQ9bnVsbD09PShhPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuZ2V0Q29kZUNoYWxsZW5nZShwKSxyLm5leHQ9MTksdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxwLHQpO2Nhc2UgMTk6Zi5zZXQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSxmLnNldCgiY29kZV9jaGFsbGVuZ2UiLGQpO2Nhc2UgMjE6aWYodS5wcm9tcHQmJmYuc2V0KCJwcm9tcHQiLHUucHJvbXB0KSx2PWUpZm9yKGc9MCx5PU9iamVjdC5lbnRyaWVzKHYpO2c8eS5sZW5ndGg7ZysrKW09dyh5W2ddLDIpLGI9bVswXSxrPW1bMV0sIiIhPWImJiIiIT1rJiYic3RhdGUiIT09YiYmKHg9Yi5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSksZi5zZXQoeCxrLnRvU3RyaW5nKCkpKTtmLnNldCgic3RhdGUiLEwuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsdj9udWxsPT09KGk9di5zdGF0ZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkudG9TdHJpbmcoKToiIikpLFM9XyhmLmVudHJpZXMoKSk7dHJ5e2ZvcihTLnMoKTshKEU9Uy5uKCkpLmRvbmU7KVQ9dyhFLnZhbHVlLDIpLEE9VFswXSxSPVRbMV0sYy5zZWFyY2hQYXJhbXMuYXBwZW5kKEEsUil9Y2F0Y2goZSl7Uy5lKGUpfWZpbmFsbHl7Uy5mKCl9cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLGMudG9TdHJpbmcoKSk7Y2FzZSAyODpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG8sdGhpcyl9KSkpfX0se2tleToicmVxdWVzdEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXt2YXIgbyxzLHUsYyxmO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBvPXIuc2VudC50b2tlbl9lbmRwb2ludCxyLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYocz1yLnNlbnQsbyYmMCE9PW8udHJpbSgpLmxlbmd0aCl7ci5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1SQVQxLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSA4OmlmKHIudDA9dCwhci50MCl7ci5uZXh0PTEyO2JyZWFrfXJldHVybiByLm5leHQ9MTIsdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0LGEpO2Nhc2UgMTI6aWYoKHU9W10pLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChzLmNsaWVudElEKSkscy5jbGllbnRTZWNyZXQmJnMuY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmdS5wdXNoKCJjbGllbnRfc2VjcmV0PSIuY29uY2F0KHMuY2xpZW50U2VjcmV0KSksYz1lLHUucHVzaCgiY29kZT0iLmNvbmNhdChjKSksdS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLHUucHVzaCgicmVkaXJlY3RfdXJpPSIuY29uY2F0KHMuc2lnbkluUmVkaXJlY3RVUkwpKSxyLnQxPXMuZW5hYmxlUEtDRSwhci50MSl7ci5uZXh0PTI5O2JyZWFrfXJldHVybiByLnQyPXUsci50Mz0iY29kZV92ZXJpZmllcj0iLHIubmV4dD0yNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihMLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksYSk7Y2FzZSAyNDpyZXR1cm4gci50ND1yLnNlbnQsci50NT1yLnQzLmNvbmNhdC5jYWxsKHIudDMsci50NCksci50Mi5wdXNoLmNhbGwoci50MixyLnQ1KSxyLm5leHQ9MjksdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGEpO2Nhc2UgMjk6cmV0dXJuIHIucHJldj0yOSxyLm5leHQ9MzIsZmV0Y2gobyx7Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczpzLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9SLkluY2x1ZGU6Ui5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMoTC5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDMyOmY9ci5zZW50LHIubmV4dD0zODticmVhaztjYXNlIDM1OnRocm93IHIucHJldj0zNSxyLnQ2PXIuY2F0Y2goMjkpLG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT1yLnQ2P3IudDY6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIik7Y2FzZSAzODppZihmLm9rKXtyLm5leHQ9NDU7YnJlYWt9cmV0dXJuIHIudDc9SSxyLnQ4PSJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChmLnN0YXR1c1RleHQpLHIubmV4dD00MyxmLmpzb24oKTtjYXNlIDQzOnRocm93IHIudDk9ci5zZW50LG5ldyByLnQ3KCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIixyLnQ4LHIudDkpO2Nhc2UgNDU6cmV0dXJuIHIubmV4dD00Nyx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGYsYSk7Y2FzZSA0NzpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci5zZW50KTtjYXNlIDQ4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksaSx0aGlzLFtbMjksMzVdXSl9KSkpfX0se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbixhLGksbyxzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBuPXQuc2VudC50b2tlbl9lbmRwb2ludCx0Lm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6cmV0dXJuIGE9dC5zZW50LHQubmV4dD04LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDg6aWYoKGk9dC5zZW50KS5yZWZyZXNoX3Rva2VuKXt0Lm5leHQ9MTE7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7Y2FzZSAxMTppZihuJiYwIT09bi50cmltKCkubGVuZ3RoKXt0Lm5leHQ9MTM7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDEzOnJldHVybihvPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoYS5jbGllbnRJRCkpLG8ucHVzaCgicmVmcmVzaF90b2tlbj0iLmNvbmNhdChpLnJlZnJlc2hfdG9rZW4pKSxvLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLGEuY2xpZW50U2VjcmV0JiZhLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm8ucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChhLmNsaWVudFNlY3JldCkpLHQucHJldj0xNSx0Lm5leHQ9MTgsZmV0Y2gobix7Ym9keTpvLmpvaW4oIiYiKSxjcmVkZW50aWFsczphLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9SLkluY2x1ZGU6Ui5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMoTC5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDE4OnM9dC5zZW50LHQubmV4dD0yNDticmVhaztjYXNlIDIxOnRocm93IHQucHJldj0yMSx0LnQwPXQuY2F0Y2goMTUpLG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10LnQwP3QudDA6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIik7Y2FzZSAyNDppZihzLm9rKXt0Lm5leHQ9MzE7YnJlYWt9cmV0dXJuIHQudDE9SSx0LnQyPSJSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChzLnN0YXR1c1RleHQpLHQubmV4dD0yOSxzLmpzb24oKTtjYXNlIDI5OnRocm93IHQudDM9dC5zZW50LG5ldyB0LnQxKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0Iix0LnQyLHQudDMpO2Nhc2UgMzE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UocyxlKSk7Y2FzZSAzMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzE1LDIxXV0pfSkpKX19LHtrZXk6InJldm9rZUFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbixhLGksbztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQucmV2b2NhdGlvbl9lbmRwb2ludCx0Lm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYoYT10LnNlbnQsbiYmMCE9PW4udHJpbSgpLmxlbmd0aCl7dC5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuKGk9W10pLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChhLmNsaWVudElEKSksdC50MD1pLHQudDE9InRva2VuPSIsdC5uZXh0PTE0LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDE0OnJldHVybiB0LnQyPXQuc2VudC5hY2Nlc3NfdG9rZW4sdC50Mz10LnQxLmNvbmNhdC5jYWxsKHQudDEsdC50MiksdC50MC5wdXNoLmNhbGwodC50MCx0LnQzKSxpLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKSx0LnByZXY9MTgsdC5uZXh0PTIxLGZldGNoKG4se2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6YS5zZW5kQ29va2llc0luUmVxdWVzdHM/Ui5JbmNsdWRlOlIuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKEwuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSk7Y2FzZSAyMTpvPXQuc2VudCx0Lm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNDp0aHJvdyB0LnByZXY9MjQsdC50ND10LmNhdGNoKDE4KSxuZXcgSSgiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dC50ND90LnQ0OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKTtjYXNlIDI3OmlmKDIwMD09PW8uc3RhdHVzJiZvLm9rKXt0Lm5leHQ9MzQ7YnJlYWt9cmV0dXJuIHQudDU9SSx0LnQ2PSJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgiLmNvbmNhdChvLnN0YXR1c1RleHQsIikuIiksdC5uZXh0PTMyLG8uanNvbigpO2Nhc2UgMzI6dGhyb3cgdC50Nz10LnNlbnQsbmV3IHQudDUoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLHQudDYsdC50Nyk7Y2FzZSAzNDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsKHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShvKSkpO2Nhc2UgMzU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxOCwyNF1dKX0pKSl9fSx7a2V5OiJyZXF1ZXN0Q3VzdG9tR3JhbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGEsaSxvLHMsdSxjLGYsbD10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBhPW4uc2VudCxuLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYoaT1uLnNlbnQsKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OmEudG9rZW5fZW5kcG9pbnQpJiYwIT09by50cmltKCkubGVuZ3RoKXtuLm5leHQ9ODticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgODpyZXR1cm4gbi5uZXh0PTEwLFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKChmdW5jdGlvbihlKXt2YXIgbj13KGUsMiksYT1uWzBdLGk9blsxXTtyZXR1cm4gRShsLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgbjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoaSx0KTtjYXNlIDI6cmV0dXJuIG49ZS5zZW50LGUuYWJydXB0KCJyZXR1cm4iLCIiLmNvbmNhdChhLCI9IikuY29uY2F0KG4pKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSk7Y2FzZSAxMDppZihzPW4uc2VudCx1PU9iamVjdC5hc3NpZ24oe30sTC5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG4udDA9ZS5hdHRhY2hUb2tlbiwhbi50MCl7bi5uZXh0PTIzO2JyZWFrfXJldHVybiBuLnQxPU9iamVjdCxuLnQyPU9iamVjdC5hc3NpZ24oe30sdSksbi50Mz0iQmVhcmVyICIsbi5uZXh0PTE5LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSh0KTtjYXNlIDE5Om4udDQ9bi5zZW50LmFjY2Vzc190b2tlbixuLnQ1PW4udDMuY29uY2F0LmNhbGwobi50MyxuLnQ0KSxuLnQ2PXtBdXRob3JpemF0aW9uOm4udDV9LHU9bi50MS5hc3NpZ24uY2FsbChuLnQxLG4udDIsbi50Nik7Y2FzZSAyMzpyZXR1cm4gYz17Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9SLkluY2x1ZGU6Ui5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModSksbWV0aG9kOiJQT1NUIn0sbi5wcmV2PTI0LG4ubmV4dD0yNyxmZXRjaChvLGMpO2Nhc2UgMjc6Zj1uLnNlbnQsbi5uZXh0PTMzO2JyZWFrO2Nhc2UgMzA6dGhyb3cgbi5wcmV2PTMwLG4udDc9bi5jYXRjaCgyNCksbmV3IEkoIkpTLUFVVEhfQ09SRS1SQ0ctTkUwMiIsIlRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdCBmYWlsZWQuIixudWxsIT1uLnQ3P24udDc6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBjdXN0b20gZ3JhbnQgZmFpbGVkLiIpO2Nhc2UgMzM6aWYoMjAwPT09Zi5zdGF0dXMmJmYub2spe24ubmV4dD00MDticmVha31yZXR1cm4gbi50OD1JLG4udDk9IkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgiLmNvbmNhdChmLnN0YXR1c1RleHQsIikiKSxuLm5leHQ9MzgsZi5qc29uKCk7Y2FzZSAzODp0aHJvdyBuLnQxMD1uLnNlbnQsbmV3IG4udDgoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsbi50OSxuLnQxMCk7Y2FzZSA0MDppZighZS5yZXR1cm5zU2Vzc2lvbil7bi5uZXh0PTQ0O2JyZWFrfW4udDExPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZix0KSxuLm5leHQ9NDk7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gbi50MTI9UHJvbWlzZSxuLm5leHQ9NDcsZi5qc29uKCk7Y2FzZSA0NzpuLnQxMz1uLnNlbnQsbi50MTE9bi50MTIucmVzb2x2ZS5jYWxsKG4udDEyLG4udDEzKTtjYXNlIDQ5OnJldHVybiBuLmFicnVwdCgicmV0dXJuIixuLnQxMSk7Y2FzZSA1MDpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyxbWzI0LDMwXV0pfSkpKX19LHtrZXk6ImdldEJhc2ljVXNlckluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuLGEsaTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSAyOnJldHVybiBuPXQuc2VudCxhPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1uP3ZvaWQgMDpuLmlkX3Rva2VuKSxpPXthbGxvd2VkU2NvcGVzOm4uc2NvcGUsc2Vzc2lvblN0YXRlOm4uc2Vzc2lvbl9zdGF0ZX0sdC5hYnJ1cHQoInJldHVybiIsKE9iamVjdC5rZXlzKGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWFbZV0mJiIiIT09YVtlXSYmbnVsbCE9PWFbZV18fGRlbGV0ZSBhW2VdfSkpLGk9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLGEpKSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXREZWNvZGVkSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG47cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQuaWRfdG9rZW4sdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4obikpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0SURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50LmlkX3Rva2VuKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbixhLGk7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fY29uZmlnKCk7Y2FzZSAyOmlmKG49dC5zZW50LHQudDA9IWUsIXQudDApe3QubmV4dD04O2JyZWFrfXJldHVybiB0Lm5leHQ9Nyx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpO2Nhc2UgNzp0LnQwPXQuc2VudDtjYXNlIDg6aWYoIXQudDApe3QubmV4dD0xMDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgMTA6aWYoIShhPW4ud2VsbEtub3duRW5kcG9pbnQpKXt0Lm5leHQ9MzY7YnJlYWt9cmV0dXJuIHQucHJldj0xMix0Lm5leHQ9MTUsZmV0Y2goYSk7Y2FzZSAxNTppZigyMDA9PT0oaT10LnNlbnQpLnN0YXR1cyYmaS5vayl7dC5uZXh0PTE4O2JyZWFrfXRocm93IG5ldyBFcnJvcjtjYXNlIDE4OnQubmV4dD0yMzticmVhaztjYXNlIDIwOnRocm93IHQucHJldj0yMCx0LnQxPXQuY2F0Y2goMTIpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSEUwMSIsIkludmFsaWQgd2VsbC1rbm93biByZXNwb25zZSIsIlRoZSB3ZWxsIGtub3duIGVuZHBvaW50IHJlc3BvbnNlIGhhcyBiZWVuIGZhaWxlZCB3aXRoIGFuIGVycm9yLiIpO2Nhc2UgMjM6cmV0dXJuIHQudDI9dGhpcy5fZGF0YUxheWVyLHQudDM9dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIsdC5uZXh0PTI3LGkuanNvbigpO2Nhc2UgMjc6cmV0dXJuIHQudDQ9dC5zZW50LHQubmV4dD0zMCx0LnQzLnJlc29sdmVFbmRwb2ludHMuY2FsbCh0LnQzLHQudDQpO2Nhc2UgMzA6cmV0dXJuIHQudDU9dC5zZW50LHQubmV4dD0zMyx0LnQyLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50Mix0LnQ1KTtjYXNlIDMzOnJldHVybiB0Lm5leHQ9MzUsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDM1OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoKSk7Y2FzZSAzNjppZighbi5iYXNlVXJsKXt0Lm5leHQ9NTI7YnJlYWt9cmV0dXJuIHQucHJldj0zNyx0LnQ2PXRoaXMuX2RhdGFMYXllcix0Lm5leHQ9NDEsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpO2Nhc2UgNDE6cmV0dXJuIHQudDc9dC5zZW50LHQubmV4dD00NCx0LnQ2LnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50Nix0LnQ3KTtjYXNlIDQ0OnQubmV4dD00OTticmVhaztjYXNlIDQ2OnRocm93IHQucHJldj00Nix0LnQ4PXQuY2F0Y2goMzcpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMiIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dC50OD90LnQ4OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGJhc2UgdXJsIGZhaWxlZC4iKTtjYXNlIDQ5OnJldHVybiB0Lm5leHQ9NTEsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDUxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoKSk7Y2FzZSA1MjpyZXR1cm4gdC5wcmV2PTUyLHQudDk9dGhpcy5fZGF0YUxheWVyLHQubmV4dD01Nix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpO2Nhc2UgNTY6cmV0dXJuIHQudDEwPXQuc2VudCx0Lm5leHQ9NTksdC50OS5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDksdC50MTApO2Nhc2UgNTk6dC5uZXh0PTY0O2JyZWFrO2Nhc2UgNjE6dGhyb3cgdC5wcmV2PTYxLHQudDExPXQuY2F0Y2goNTIpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMyIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dC50MTE/dC50MTE6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIik7Y2FzZSA2NDpyZXR1cm4gdC5uZXh0PTY2LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSA2NjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgNjc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxMiwyMF0sWzM3LDQ2XSxbNTIsNjFdXSl9KSkpfX0se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLGEsaSxvLHMsdSxjLGY7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBsKCl7dmFyIGg7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGg9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLHthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPWguYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PSh0PWguY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT10P3Q6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj1oLmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGE9aC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLGlzc3VlcjpudWxsIT09KGk9aC5pc3N1ZXIpJiZ2b2lkIDAhPT1pP2k6IiIsandrc1VyaTpudWxsIT09KG89aC5qd2tzX3VyaSkmJnZvaWQgMCE9PW8/bzoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KHM9aC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1zP3M6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0odT1oLnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KGM9aC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0oZj1oLnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09Zj9mOiIifSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTaWduT3V0VVJMIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBpKCl7dmFyIG8scyx1LGM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6aWYoci50MT10PXIuc2VudCxyLnQwPW51bGw9PT1yLnQxLHIudDApe3IubmV4dD02O2JyZWFrfXIudDA9dm9pZCAwPT09dDtjYXNlIDY6aWYoIXIudDApe3IubmV4dD0xMDticmVha31yLnQyPXZvaWQgMCxyLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpyLnQyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQ7Y2FzZSAxMTpyZXR1cm4gbz1yLnQyLHIubmV4dD0xNCx0aGlzLl9jb25maWcoKTtjYXNlIDE0OmlmKHM9ci5zZW50LG8mJjAhPT1vLnRyaW0oKS5sZW5ndGgpe3IubmV4dD0xNzticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDE3OnJldHVybiByLm5leHQ9MTksdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMTk6aWYoci50ND1uPXIuc2VudCxyLnQzPW51bGw9PT1yLnQ0LHIudDMpe3IubmV4dD0yMzticmVha31yLnQzPXZvaWQgMD09PW47Y2FzZSAyMzppZighci50Myl7ci5uZXh0PTI3O2JyZWFrfXIudDU9dm9pZCAwLHIubmV4dD0yODticmVhaztjYXNlIDI3OnIudDU9bi5pZF90b2tlbjtjYXNlIDI4OmlmKCh1PXIudDUpJiYwIT09dS50cmltKCkubGVuZ3RoKXtyLm5leHQ9MzE7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y2FzZSAzMTppZigoYz1udWxsIT09KGE9bnVsbD09cz92b2lkIDA6cy5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1hP2E6bnVsbD09cz92b2lkIDA6cy5zaWduSW5SZWRpcmVjdFVSTCkmJjAhPT1jLnRyaW0oKS5sZW5ndGgpe3IubmV4dD0zNDticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO2Nhc2UgMzQ6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLCIiLmNvbmNhdChvLCI/aWRfdG9rZW5faGludD0iKS5jb25jYXQodSwiJnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0iKS5jb25jYXQoYywiJnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3MiKSk7Y2FzZSAzNTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyl9KSkpfX0se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5nZXRTaWduT3V0VVJMKGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyVXNlclNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSAyOmlmKHIudDE9dD1yLnNlbnQsci50MD1udWxsPT09ci50MSxyLnQwKXtyLm5leHQ9NjticmVha31yLnQwPXZvaWQgMD09PXQ7Y2FzZSA2OmlmKCFyLnQwKXtyLm5leHQ9MTA7YnJlYWt9ci50Mj12b2lkIDAsci5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6ci50Mj10LmFjY2Vzc190b2tlbjtjYXNlIDExOnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnQyKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9Qm9vbGVhbix0Lm5leHQ9Myx0aGlzLmdldEFjY2Vzc1Rva2VuKGUpO2Nhc2UgMzpyZXR1cm4gdC50MT10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsKDAsdC50MCkodC50MSkpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0UEtDRUNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLHQpO2Nhc2UgMjpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKHQpLGUsbik7Y2FzZSAyOnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToidXBkYXRlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX1dKSxlfSgpLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7byh0aGlzLGUpLHRoaXMuX2lkPXQsdGhpcy5fc3RvcmU9cn1yZXR1cm4gdShlLFt7a2V5OiJzZXREYXRhSW5CdWxrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scyx1O3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEoZSk7Y2FzZSAyOmlmKHIudDE9bj1yLnNlbnQsci50MD1udWxsIT09ci50MSwhci50MCl7ci5uZXh0PTY7YnJlYWt9ci50MD12b2lkIDAhPT1uO2Nhc2UgNjppZighci50MCl7ci5uZXh0PTEwO2JyZWFrfXIudDI9bixyLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpyLnQyPW51bGw7Y2FzZSAxMTpyZXR1cm4gaT1yLnQyLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx0KSx1PUpTT04uc3RyaW5naWZ5KHMpLHIubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsdSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgYTtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXt2YXIgbyxzLHUsZjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKGUpO2Nhc2UgMjppZihyLnQxPWE9ci5zZW50LHIudDA9bnVsbCE9PXIudDEsIXIudDApe3IubmV4dD02O2JyZWFrfXIudDA9dm9pZCAwIT09YTtjYXNlIDY6aWYoIXIudDApe3IubmV4dD0xMDticmVha31yLnQyPWEsci5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6ci50Mj1udWxsO2Nhc2UgMTE6cmV0dXJuIG89ci50MixzPW8mJkpTT04ucGFyc2UobyksdT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scyksYyh7fSx0LG4pKSxmPUpTT04uc3RyaW5naWZ5KHUpLHIubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsZik7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyl9KSkpfX0se2tleToicmVtb3ZlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIGksbyxzLHU7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YShlKTtjYXNlIDI6aWYoci50MT1uPXIuc2VudCxyLnQwPW51bGwhPT1yLnQxLCFyLnQwKXtyLm5leHQ9NjticmVha31yLnQwPXZvaWQgMCE9PW47Y2FzZSA2OmlmKCFyLnQwKXtyLm5leHQ9MTA7YnJlYWt9ci50Mj1uLHIubmV4dD0xMTticmVhaztjYXNlIDEwOnIudDI9bnVsbDtjYXNlIDExOnJldHVybiBpPXIudDIsbz1pJiZKU09OLnBhcnNlKGkpLGRlbGV0ZShzPU9iamVjdC5hc3NpZ24oe30sbykpW3RdLHU9SlNPTi5zdHJpbmdpZnkocyksci5uZXh0PTE4LHRoaXMuX3N0b3JlLnNldERhdGEoZSx1KTtjYXNlIDE4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJfcmVzb2x2ZUtleSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9fSx7a2V5OiJzZXRDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoQS5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoQS5UZW1wb3JhcnlEYXRhLHQpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDp0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLHQpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiZ2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUpTT04sdC5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KEEuQ29uZmlnRGF0YSkpO2Nhc2UgMzppZih0LnQyPWU9dC5zZW50LHQudDE9bnVsbCE9PXQudDIsIXQudDEpe3QubmV4dD03O2JyZWFrfXQudDE9dm9pZCAwIT09ZTtjYXNlIDc6aWYoIXQudDEpe3QubmV4dD0xMTticmVha310LnQzPWUsdC5uZXh0PTEyO2JyZWFrO2Nhc2UgMTE6dC50Mz1udWxsO2Nhc2UgMTI6cmV0dXJuIHQudDQ9dC50Myx0LmFicnVwdCgicmV0dXJuIix0LnQwLnBhcnNlLmNhbGwodC50MCx0LnQ0KSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC50MD1KU09OLHQubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLk9JRENQcm92aWRlck1ldGFEYXRhKSk7Y2FzZSAzOmlmKHQudDI9ZT10LnNlbnQsdC50MT1udWxsIT09dC50MiwhdC50MSl7dC5uZXh0PTc7YnJlYWt9dC50MT12b2lkIDAhPT1lO2Nhc2UgNzppZighdC50MSl7dC5uZXh0PTExO2JyZWFrfXQudDM9ZSx0Lm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTp0LnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gdC50ND10LnQzLHQuYWJydXB0KCJyZXR1cm4iLHQudDAucGFyc2UuY2FsbCh0LnQwLHQudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLnQwPUpTT04sci5uZXh0PTMsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KEEuVGVtcG9yYXJ5RGF0YSxlKSk7Y2FzZSAzOmlmKHIudDI9dD1yLnNlbnQsci50MT1udWxsIT09ci50Miwhci50MSl7ci5uZXh0PTc7YnJlYWt9ci50MT12b2lkIDAhPT10O2Nhc2UgNzppZighci50MSl7ci5uZXh0PTExO2JyZWFrfXIudDM9dCxyLm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTpyLnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gci50ND1yLnQzLHIuYWJydXB0KCJyZXR1cm4iLHIudDAucGFyc2UuY2FsbChyLnQwLHIudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci50MD1KU09OLHIubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLGUpKTtjYXNlIDM6aWYoci50Mj10PXIuc2VudCxyLnQxPW51bGwhPT1yLnQyLCFyLnQxKXtyLm5leHQ9NzticmVha31yLnQxPXZvaWQgMCE9PXQ7Y2FzZSA3OmlmKCFyLnQxKXtyLm5leHQ9MTE7YnJlYWt9ci50Mz10LHIubmV4dD0xMjticmVhaztjYXNlIDExOnIudDM9bnVsbDtjYXNlIDEyOnJldHVybiByLnQ0PXIudDMsci5hYnJ1cHQoInJldHVybiIsci50MC5wYXJzZS5jYWxsKHIudDAsci50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZUNvbmZpZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KEEuQ29uZmlnRGF0YSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KEEuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVRlbXBvcmFyeURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShBLlRlbXBvcmFyeURhdGEsZSkpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlU2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLGUpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldENvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpKTtjYXNlIDI6cmV0dXJuIG49dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLG4mJkpTT04ucGFyc2UobilbZV0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLk9JRENQcm92aWRlck1ldGFEYXRhKSk7Y2FzZSAyOnJldHVybiBuPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIixuJiZKU09OLnBhcnNlKG4pW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGE7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KEEuVGVtcG9yYXJ5RGF0YSx0KSk7Y2FzZSAyOnJldHVybiBhPXIuc2VudCxyLmFicnVwdCgicmV0dXJuIixhJiZKU09OLnBhcnNlKGEpW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6ImdldFNlc3Npb25EYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLHQpKTtjYXNlIDI6cmV0dXJuIGE9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLGEmJkpTT04ucGFyc2UoYSlbZV0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0Q29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoQS5Db25maWdEYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsdCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuVGVtcG9yYXJ5RGF0YSxuKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoQS5TZXNzaW9uRGF0YSxuKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlQ29uZmlnRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuQ29uZmlnRGF0YSksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoQS5UZW1wb3JhcnlEYXRhLHQpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToicmVtb3ZlU2Vzc2lvbkRhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuU2Vzc2lvbkRhdGEsdCksZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fV0pLGV9KCksSz17Y2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOlQucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfSxKPWZ1bmN0aW9uKCl7Ci8qKgogICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RvcmV9IHN0b3JlIC0gVGhlIHN0b3JlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgKiBjb25zdCBhdXRoID0gbmV3IEFzZ2FyZGVvQXV0aENsaWVudDxDdXN0b21DbGllbnRDb25maWc+KF9zdG9yZSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjY29uc3RydWN0b3IKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi8KZnVuY3Rpb24gZSh0LHIpe28odGhpcyxlKSxlLl9pbnN0YW5jZUlEP2UuX2luc3RhbmNlSUQrPTE6ZS5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgcSgiaW5zdGFuY2VfIi5jb25jYXQoZS5faW5zdGFuY2VJRCksdCksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBOKHRoaXMuX2RhdGFMYXllcixyKSxlLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IE4odGhpcy5fZGF0YUxheWVyLHIpfQovKioKICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0F1dGhDbGllbnRDb25maWc8VD59IGNvbmZpZyAtIFRoZSBjb25maWcgb2JqZWN0IHRvIGluaXRpYWxpemUgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBiYXNlVXJsOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpbml0aWFsaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXR1cm4gdShlLFt7a2V5OiJpbml0aWFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBpKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksZSkse3Njb3BlOltdLmNvbmNhdChiKG51bGwhPT0odD1LLnNjb3BlKSYmdm9pZCAwIT09dD90OltdKSxiKG51bGwhPT0oYT1udWxsPT09KG49ZS5zY29wZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1LP3ZvaWQgMDpLLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1hP2E6W10pKX0pKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxpLHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge0RhdGFMYXllcn0gLSBUaGUgYERhdGFMYXllcmAgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0RGF0YUxheWVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9Ci8qKgogICAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7R2V0QXV0aFVSTENvbmZpZ30gY29uZmlnIC0gKE9wdGlvbmFsKSBBIGNvbmZpZyBvYmplY3QgdG8gZm9yY2UgaW5pdGlhbGl6YXRpb24gYW5kIHBhc3MKICAgICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLmdldEF1dGhvcml6YXRpb25VUkwoKS50aGVuKCh1cmwpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGEsaT10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIG51bGw9PShhPU9iamVjdC5hc3NpZ24oe30sZSkpfHxkZWxldGUgYS5mb3JjZUluaXQsci5uZXh0PTQsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKTtjYXNlIDQ6aWYoIXIuc2VudCl7ci5uZXh0PTg7YnJlYWt9ci50MD10aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTChhLHQpLHIubmV4dD05O2JyZWFrO2Nhc2UgODpyLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gaS5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwoYSx0KX0pKTtjYXNlIDk6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHIudDApO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBpKCl7dmFyIG89dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpO2Nhc2UgMjppZighci5zZW50KXtyLm5leHQ9NjticmVha31yLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSx0LG4sYSksci5uZXh0PTc7YnJlYWs7Y2FzZSA2OnIudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCxuLGEpfSkpO2Nhc2UgNzpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci50MCk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksaSx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFsbCBhdXRoZW50aWNhdGlvbiBkYXRhIGFuZCByZXR1cm5zIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLnNpZ25PdXQoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzaWduT3V0CiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJzaWduT3V0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dChlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRTaWduT3V0VVJMIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBPSURDIHNlcnZpY2UgZW5kcG9pbnRzIHRoYXQgYXJlIGZldGNoZWQgZnJvbSB0aGUgYC53ZWxsLWtub3duYCBlbmRwb2ludC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgYXV0aC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRPSURDU2VydmljZUVuZHBvaW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSUQgdG9rZW4gYW5kIHJldHVybnMgaXQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERlY29kZWRJRFRva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXREZWNvZGVkSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0SURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm8+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRCYXNpY1VzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InJldm9rZUFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgICAqIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToicmVmcmVzaEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlZnJlc2hBY2Nlc3NUb2tlbihlKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgYXV0aC5nZXRBY2Nlc3NUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEFjY2Vzc1Rva2VuKGUpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBwYXNzZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgRmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGVwZW5kaW5nCiAgICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgYXR0YWNoVG9rZW46IGZhbHNlLAogICAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAgICogICAgICAgZ3JhbnRfdHlwZTogImFjY291bnRfc3dpdGNoIiwKICAgICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgICAqICAgfSwKICAgICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAgICogICByZXR1cm5zU2Vzc2lvbjogdHJ1ZSwKICAgICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgICAqIH0KICAgICAgICAgICAqCiAgICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImlzQXV0aGVudGljYXRlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFBLQ0VDb2RlCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRQS0NFQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSx0KSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUsdCxuKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToidXBkYXRlQ29uZmlnIix2YWx1ZToKLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqLwpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUudXBkYXRlQ29uZmlnKGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX1dLFt7a2V5OiJpc1NpZ25PdXRTdWNjZXNzZnVsIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJkaWRTaWduT3V0RmFpbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJm59fSx7a2V5OiJjbGVhclVzZXJTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX1dKSxlfSgpLEI9ImluaXQiOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oVXx8KFU9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KEh8fChIPXt9KSk7dmFyIEY9InByb21wdE5vbmVSZXF1ZXN0U2VudCIsVz0iZXJyb3IiLHo9ImVycm9yX2Rlc2NyaXB0aW9uIixZPSJjdXN0b21fZ3JhbnRfY29uZmlnIixHPSJzdGF0ZSIsVj0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiLFg9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiAkKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gWihlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBRPXtleHBvcnRzOnt9fSxlZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbj0wO248ci5sZW5ndGg7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiBlLmFwcGx5KHQscil9fSx0ZT1lZSxyZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIG5lKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGFlKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGllKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1yZS5jYWxsKGUpfWZ1bmN0aW9uIG9lKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PT1uKGUpfWZ1bmN0aW9uIHNlKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09cmUuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09cmUuY2FsbChlKX1mdW5jdGlvbiBjZShlLHQpe2lmKG51bGwhPWUpaWYoIm9iamVjdCIhPT1uKGUpJiYoZT1bZV0pLG5lKGUpKWZvcih2YXIgcj0wLGE9ZS5sZW5ndGg7cjxhO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBmZT17aXNBcnJheTpuZSxpc0FycmF5QnVmZmVyOmllLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIWFlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIWFlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09cmUuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmaWUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6b2UsaXNQbGFpbk9iamVjdDpzZSxpc1VuZGVmaW5lZDphZSxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09cmUuY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PXJlLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1yZS5jYWxsKGUpfSxpc0Z1bmN0aW9uOnVlLGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlKSYmdWUoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1yZS5jYWxsKGUpfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOmNlLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7c2UodFtuXSkmJnNlKHIpP3Rbbl09ZSh0W25dLHIpOnNlKHIpP3Rbbl09ZSh7fSxyKTpuZShyKT90W25dPXIuc2xpY2UoKTp0W25dPXJ9Zm9yKHZhciBuPTAsYT1hcmd1bWVudHMubGVuZ3RoO248YTtuKyspY2UoYXJndW1lbnRzW25dLHIpO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjZSh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGUodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0sbGU9ZmU7ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIHBlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGxlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGE9W107bGUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihsZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sbGUuZm9yRWFjaChlLChmdW5jdGlvbihlKXtsZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6bGUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxhLnB1c2goaGUodCkrIj0iK2hlKGUpKX0pKSl9KSksbj1hLmpvaW4oIiYiKX1pZihuKXt2YXIgaT1lLmluZGV4T2YoIiMiKTstMSE9PWkmJihlPWUuc2xpY2UoMCxpKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX0sZGU9ZmU7ZnVuY3Rpb24gdmUoKXt0aGlzLmhhbmRsZXJzPVtdfXZlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LHZlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sdmUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7ZGUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGdlPXZlLHllPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24gbWUoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiB3ZSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIGJlPW1lLGtlPXdlO2Z1bmN0aW9uIHhlKGUpe2lmKGJlPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChiZT09PW1lfHwhYmUpJiZzZXRUaW1lb3V0KXJldHVybiBiZT1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIGJlKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBiZS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gYmUuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgeWUuc2V0VGltZW91dCYmKGJlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB5ZS5jbGVhclRpbWVvdXQmJihrZT1jbGVhclRpbWVvdXQpO3ZhciBfZSxTZT1bXSxFZT0hMSxUZT0tMTtmdW5jdGlvbiBBZSgpe0VlJiZfZSYmKEVlPSExLF9lLmxlbmd0aD9TZT1fZS5jb25jYXQoU2UpOlRlPS0xLFNlLmxlbmd0aCYmUmUoKSl9ZnVuY3Rpb24gUmUoKXtpZighRWUpe3ZhciBlPXhlKEFlKTtFZT0hMDtmb3IodmFyIHQ9U2UubGVuZ3RoO3Q7KXtmb3IoX2U9U2UsU2U9W107KytUZTx0OylfZSYmX2VbVGVdLnJ1bigpO1RlPS0xLHQ9U2UubGVuZ3RofV9lPW51bGwsRWU9ITEsZnVuY3Rpb24oZSl7aWYoa2U9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoa2U9PT13ZXx8IWtlKSYmY2xlYXJUaW1lb3V0KXJldHVybiBrZT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtrZShlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIGtlLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4ga2UuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBDZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fUNlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBQZSgpe312YXIgRGU9UGUsT2U9UGUsSWU9UGUsTGU9UGUsVWU9UGUsSGU9UGUsTWU9UGU7dmFyIGplPXllLnBlcmZvcm1hbmNlfHx7fSxOZT1qZS5ub3d8fGplLm1vek5vd3x8amUubXNOb3d8fGplLm9Ob3d8fGplLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIHFlPW5ldyBEYXRlO3ZhciBLZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTtTZS5wdXNoKG5ldyBDZShlLHQpKSwxIT09U2UubGVuZ3RofHxFZXx8eGUoUmUpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOkRlLGFkZExpc3RlbmVyOk9lLG9uY2U6SWUsb2ZmOkxlLHJlbW92ZUxpc3RlbmVyOlVlLHJlbW92ZUFsbExpc3RlbmVyczpIZSxlbWl0Ok1lLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKk5lLmNhbGwoamUpLHI9TWF0aC5mbG9vcih0KSxuPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihyLT1lWzBdLChuLT1lWzFdKTwwJiYoci0tLG4rPTFlOSkpLFtyLG5dfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLXFlKS8xZTN9fSxKZT1LZSxCZT1mZSxGZT1mdW5jdGlvbihlLHQscixuLGEpe3JldHVybiBlLmNvbmZpZz10LHImJihlLmNvZGU9ciksZS5yZXF1ZXN0PW4sZS5yZXNwb25zZT1hLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sV2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LHplPUZlLFllPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9bmV3IEVycm9yKGUpO3JldHVybiB6ZShpLHQscixuLGEpfSxHZT1ZZSxWZT1mZSxYZT1WZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG89W107by5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksVmUuaXNOdW1iZXIocikmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLFZlLmlzU3RyaW5nKG4pJiZvLnB1c2goInBhdGg9IituKSxWZS5pc1N0cmluZyhhKSYmby5wdXNoKCJkb21haW49IithKSwhMD09PWkmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LCRlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LFFlPWZlLGV0PVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sdHQ9ZmUscnQ9dHQuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBuKGUpe3ZhciBuPWU7cmV0dXJuIHQmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6Ii8iPT09ci5wYXRobmFtZS5jaGFyQXQoMCk/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIGU9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIHI9dHQuaXNTdHJpbmcodCk/bih0KTp0O3JldHVybiByLnByb3RvY29sPT09ZS5wcm90b2NvbCYmci5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBudChlKXt0aGlzLm1lc3NhZ2U9ZX1udC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sbnQucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIGF0PW50LGl0PWZlLG90PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QoR2UoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sc3Q9WGUsdXQ9cGUsY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmISRlKHQpP1plKGUsdCk6dH0sZnQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9e307cmV0dXJuIGU/KFFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PVFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPVFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoYVt0XSYmZXQuaW5kZXhPZih0KT49MClyZXR1cm47YVt0XT0ic2V0LWNvb2tpZSI9PT10PyhhW3RdP2FbdF06W10pLmNvbmNhdChbcl0pOmFbdF0/YVt0XSsiLCAiK3I6cn19KSksYSk6YX0sbHQ9cnQsaHQ9WWUscHQ9V2UsZHQ9YXQsdnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuLGE9ZS5kYXRhLGk9ZS5oZWFkZXJzLG89ZS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gcygpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1pdC5pc0Zvcm1EYXRhKGEpJiZkZWxldGUgaVsiQ29udGVudC1UeXBlIl07dmFyIHU9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIGM9ZS5hdXRoLnVzZXJuYW1lfHwiIixmPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoYysiOiIrZil9dmFyIGw9Y3QoZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYodSl7dmFyIG49ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB1P2Z0KHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsYT17ZGF0YTpvJiYidGV4dCIhPT1vJiYianNvbiIhPT1vP3UucmVzcG9uc2U6dS5yZXNwb25zZVRleHQsc3RhdHVzOnUuc3RhdHVzLHN0YXR1c1RleHQ6dS5zdGF0dXNUZXh0LGhlYWRlcnM6bixjb25maWc6ZSxyZXF1ZXN0OnV9O290KChmdW5jdGlvbihlKXt0KGUpLHMoKX0pLChmdW5jdGlvbihlKXtyKGUpLHMoKX0pLGEpLHU9bnVsbH19aWYodS5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksdXQobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSx1LnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gdT91Lm9ubG9hZGVuZD1oOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSYmND09PXUucmVhZHlTdGF0ZSYmKDAhPT11LnN0YXR1c3x8dS5yZXNwb25zZVVSTCYmMD09PXUucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoaCl9LHUub25hYm9ydD1mdW5jdGlvbigpe3UmJihyKGh0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsdSkpLHU9bnVsbCl9LHUub25lcnJvcj1mdW5jdGlvbigpe3IoaHQoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCx1KSksdT1udWxsfSx1Lm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixuPWUudHJhbnNpdGlvbmFsfHxwdDtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih0PWUudGltZW91dEVycm9yTWVzc2FnZSkscihodCh0LGUsbi5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHUpKSx1PW51bGx9LGl0LmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBwPShlLndpdGhDcmVkZW50aWFsc3x8bHQobCkpJiZlLnhzcmZDb29raWVOYW1lP3N0LnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO3AmJihpW2UueHNyZkhlYWRlck5hbWVdPXApfSJzZXRSZXF1ZXN0SGVhZGVyImluIHUmJml0LmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1hJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTp1LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxpdC5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fCh1LndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYodS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmdS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnUudXBsb2FkJiZ1LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYobj1mdW5jdGlvbihlKXt1JiYocighZXx8ZSYmZS50eXBlP25ldyBkdCgiY2FuY2VsZWQiKTplKSx1LmFib3J0KCksdT1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP24oKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKSxhfHwoYT1udWxsKSx1LnNlbmQoYSl9KSl9LGd0PWZlLHl0PWZ1bmN0aW9uKGUsdCl7QmUuZm9yRWFjaChlLChmdW5jdGlvbihyLG4pe24hPT10JiZuLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPXIsZGVsZXRlIGVbbl0pfSkpfSxtdD1GZSx3dD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIGJ0KGUsdCl7IWd0LmlzVW5kZWZpbmVkKGUpJiZndC5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIga3QseHQ9e3RyYW5zaXRpb25hbDpXZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09SmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChKZSkpJiYoa3Q9dnQpLGt0KSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiB5dCh0LCJBY2NlcHQiKSx5dCh0LCJDb250ZW50LVR5cGUiKSxndC5pc0Zvcm1EYXRhKGUpfHxndC5pc0FycmF5QnVmZmVyKGUpfHxndC5pc0J1ZmZlcihlKXx8Z3QuaXNTdHJlYW0oZSl8fGd0LmlzRmlsZShlKXx8Z3QuaXNCbG9iKGUpP2U6Z3QuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6Z3QuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KGJ0KHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpndC5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KGJ0KHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQscil7aWYoZ3QuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxndC50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4ocnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8eHQudHJhbnNpdGlvbmFsLHI9dCYmdC5zaWxlbnRKU09OUGFyc2luZyxuPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsYT0hciYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoYXx8biYmZ3QuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihhKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93IG10KGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07Z3QuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7eHQuaGVhZGVyc1tlXT17fX0pKSxndC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe3h0LmhlYWRlcnNbZV09Z3QubWVyZ2Uod3QpfSkpO3ZhciBfdD14dCxTdD1mZSxFdD1fdCxUdD1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sQXQ9ZmUsUnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXN8fEV0O3JldHVybiBTdC5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9ci5jYWxsKG4sZSx0KX0pKSxlfSxDdD1UdCxQdD1fdCxEdD1hdDtmdW5jdGlvbiBPdChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgRHQoImNhbmNlbGVkIil9dmFyIEl0PWZlLEx0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIEl0LmlzUGxhaW5PYmplY3QoZSkmJkl0LmlzUGxhaW5PYmplY3QodCk/SXQubWVyZ2UoZSx0KTpJdC5pc1BsYWluT2JqZWN0KHQpP0l0Lm1lcmdlKHt9LHQpOkl0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gYShyKXtyZXR1cm4gSXQuaXNVbmRlZmluZWQodFtyXSk/SXQuaXNVbmRlZmluZWQoZVtyXSk/dm9pZCAwOm4odm9pZCAwLGVbcl0pOm4oZVtyXSx0W3JdKX1mdW5jdGlvbiBpKGUpe2lmKCFJdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gbih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gbyhyKXtyZXR1cm4gSXQuaXNVbmRlZmluZWQodFtyXSk/SXQuaXNVbmRlZmluZWQoZVtyXSk/dm9pZCAwOm4odm9pZCAwLGVbcl0pOm4odm9pZCAwLHRbcl0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIHIgaW4gdD9uKGVbcl0sdFtyXSk6ciBpbiBlP24odm9pZCAwLGVbcl0pOnZvaWQgMH12YXIgdT17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpzfTtyZXR1cm4gSXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD11W2VdfHxhLG49dChlKTtJdC5pc1VuZGVmaW5lZChuKSYmdCE9PXN8fChyW2VdPW4pfSkpLHJ9LFV0PSIwLjI2LjEiLEh0PVV0LE10PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtNdFtlXT1mdW5jdGlvbihyKXtyZXR1cm4gbihyKT09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIganQ9e307TXQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIltBeGlvcyB2IitIdCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixhLGkpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IobihhLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSk7cmV0dXJuIHQmJiFqdFthXSYmKGp0W2FdPSEwLGNvbnNvbGUud2FybihuKGEsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixhLGkpfX07dmFyIE50PXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxyKXtpZigib2JqZWN0IiE9PW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgYT1PYmplY3Qua2V5cyhlKSxpPWEubGVuZ3RoO2ktLSA+MDspe3ZhciBvPWFbaV0scz10W29dO2lmKHMpe3ZhciB1PWVbb10sYz12b2lkIDA9PT11fHxzKHUsbyxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6TXR9LHF0PWZlLEt0PXBlLEp0PWdlLEJ0PWZ1bmN0aW9uKGUpe3JldHVybiBPdChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9UnQuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9QXQubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxBdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fFB0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBPdChlKSx0LmRhdGE9UnQuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gQ3QodCl8fChPdChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPVJ0LmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LEZ0PUx0LFd0PU50LHp0PVd0LnZhbGlkYXRvcnM7ZnVuY3Rpb24gWXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBKdCxyZXNwb25zZTpuZXcgSnR9fVl0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PUZ0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIHI9dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09ciYmV3QuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp6dC50cmFuc2l0aW9uYWwoenQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6enQudHJhbnNpdGlvbmFsKHp0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6enQudHJhbnNpdGlvbmFsKHp0LmJvb2xlYW4pfSwhMSk7dmFyIG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoYT1hJiZlLnN5bmNocm9ub3VzLG4udW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIGksbz1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWEpe3ZhciBzPVtCdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShzLG4pLHM9cy5jb25jYXQobyksaT1Qcm9taXNlLnJlc29sdmUodCk7cy5sZW5ndGg7KWk9aS50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBpfWZvcih2YXIgdT10O24ubGVuZ3RoOyl7dmFyIGM9bi5zaGlmdCgpLGY9bi5zaGlmdCgpO3RyeXt1PWModSl9Y2F0Y2goZSl7ZihlKTticmVha319dHJ5e2k9QnQodSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7by5sZW5ndGg7KWk9aS50aGVuKG8uc2hpZnQoKSxvLnNoaWZ0KCkpO3JldHVybiBpfSxZdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPUZ0KHRoaXMuZGVmYXVsdHMsZSksS3QoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0scXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe1l0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoRnQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxxdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe1l0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChGdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgR3Q9WXQsVnQ9YXQ7ZnVuY3Rpb24gWHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHIuX2xpc3RlbmVycyl7dmFyIHQsbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxuO3QrKylyLl9saXN0ZW5lcnNbdF0oZSk7ci5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Iuc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUodCl9LG59LGUoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IFZ0KGUpLHQoci5yZWFzb24pKX0pKX1YdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxYdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxYdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LFh0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IFh0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgJHQ9WHQsWnQ9ZmUsUXQ9ZmUsZXI9ZWUsdHI9R3QscnI9THQ7dmFyIG5yPWZ1bmN0aW9uIGUodCl7dmFyIHI9bmV3IHRyKHQpLG49ZXIodHIucHJvdG90eXBlLnJlcXVlc3Qscik7cmV0dXJuIFF0LmV4dGVuZChuLHRyLnByb3RvdHlwZSxyKSxRdC5leHRlbmQobixyKSxuLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gZShycih0LHIpKX0sbn0oX3QpO25yLkF4aW9zPXRyLG5yLkNhbmNlbD1hdCxuci5DYW5jZWxUb2tlbj0kdCxuci5pc0NhbmNlbD1UdCxuci5WRVJTSU9OPVV0LG5yLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LG5yLnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LG5yLmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gWnQuaXNPYmplY3QoZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9LFEuZXhwb3J0cz1ucixRLmV4cG9ydHMuZGVmYXVsdD1ucjt2YXIgYXIsaXI9US5leHBvcnRzO3ZhciBvcj1hcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSksdGhpcy5hdHRhY2hUb2tlbj1mdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1yZXR1cm4gdShlLFt7a2V5OiJyZXF1ZXN0SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLmF0dGFjaFRva2VuKGUpO2Nhc2UgMjpyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKSYmKG49bnVsbD09ZT92b2lkIDA6ZS5kYXRhLGE9bmV3IEZvcm1EYXRhLE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe2EuYXBwZW5kKGUsbltlXSl9KSksZS5kYXRhPWEpLGFyLmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKGUpLHQuYWJydXB0KCJyZXR1cm4iLGUpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZXJyb3JIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXt0aHJvdyBhci5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX19LHtrZXk6InN1Y2Nlc3NIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXIuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9fSx7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sdD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmFyLmlzSGFuZGxlckVuYWJsZWQ9ZSx0aGlzLmF0dGFjaFRva2VuPXQ7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJlbmFibGVIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbigpe2FyLmlzSGFuZGxlckVuYWJsZWQ9ITB9fSx7a2V5OiJkaXNhYmxlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXthci5pc0hhbmRsZXJFbmFibGVkPSExfX0se2tleToiZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YXIuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVDthci5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YXIuaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfX0se2tleToic2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX19LHtrZXk6InNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fV0sW3trZXk6ImdldEluc3RhbmNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT1pci5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBhciksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIFMoZSx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKHQpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcih0KX0pKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPWlyLmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPWlyLnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9fV0pLGV9KCk7b3IuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsb3I9YXI9ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PWE/YT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6YTtpZigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3Q/InVuZGVmaW5lZCI6bihSZWZsZWN0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQscixhKTtlbHNlIGZvcih2YXIgdT1lLmxlbmd0aC0xO3U+PTA7dS0tKShpPWVbdV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxyLHMpOmkodCxyKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIscyksc30oW2Z1bmN0aW9uKGUpe31dLG9yKTt2YXIgc3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpLHRoaXMuX2RhdGE9bmV3IE1hcH1yZXR1cm4gdShlLFt7a2V5OiJzZXREYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dGhpcy5fZGF0YS5zZXQoZSx0KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6ImdldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsbnVsbCE9PShuPW51bGw9PT0odD10aGlzLl9kYXRhKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXQoZSkpJiZ2b2lkIDAhPT1uP246Int9Iik7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnRoaXMuX2RhdGEuZGVsZXRlKGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX1dKSxlfSgpLHVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKX1yZXR1cm4gdShlLG51bGwsW3trZXk6ImdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX19LHtrZXk6ImdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19XSksZX0oKSxjcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJyZW1vdmVBdXRob3JpemF0aW9uQ29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1sb2NhdGlvbi5ocmVmO2hpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLGUucmVwbGFjZSgvXD9jb2RlPS4qJC8sIiIpKX19LHtrZXk6ImdldFBLQ0UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShlKSkmJnZvaWQgMCE9PXQ/dDoiIn19LHtrZXk6InNldFBLQ0UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfX0se2tleToic2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oZSl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShELGUpfX0se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oRCkpJiZ2b2lkIDAhPT1lP2U6IiJ9fSx7a2V5OiJyZW1vdmVQS0NFIix2YWx1ZTpmdW5jdGlvbihlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfX0se2tleToiY2FuQ29udGludWVTaWduSW4iLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuISh0JiYhZS5oYXNFcnJvckluVVJMKCkmJiFlLmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhcil9fSx7a2V5OiJpc0luaXRpYWxpemVkU2lsZW50U2lnbkluIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKX19LHtrZXk6Indhc1NpZ25JbkNhbGxlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hKCFlLmhhc0Vycm9ySW5VUkwoKSYmIWUuaGFzQXV0aFNlYXJjaFBhcmFtc0luVVJMKCl8fHRoaXMuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpKX19LHtrZXk6Indhc1NpbGVudFNpZ25JbkNhbGxlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJpbml0aWFsaXplZC1zaWxlbnQtc2lnbi1pbiIpLHQ9ZT9KU09OLnBhcnNlKGUpOm51bGw7cmV0dXJuIEJvb2xlYW4odCl9fSx7a2V5OiJpc1NpZ25PdXRTdWNjZXNzZnVsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0O3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIUouaXNTaWduT3V0U3VjY2Vzc2Z1bCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2UubmV4dD02O2JyZWFrfXJldHVybiB0PXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCI/IilbMF0saGlzdG9yeS5wdXNoU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsdCksZS5uZXh0PTUsSi5jbGVhclVzZXJTZXNzaW9uRGF0YSgpO2Nhc2UgNTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITApO2Nhc2UgNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsITEpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX19LHtrZXk6ImRpZFNpZ25PdXRGYWlsIix2YWx1ZTpmdW5jdGlvbigpe2lmKEouZGlkU2lnbk91dEZhaWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXt2YXIgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSx0PWUuc2VhcmNoUGFyYW1zLmdldChXKSxyPWUuc2VhcmNoUGFyYW1zLmdldCh6KSxuPXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCI/IilbMF07cmV0dXJuIGhpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLG4pLHtkZXNjcmlwdGlvbjpudWxsIT1yP3I6IiIsZXJyb3I6bnVsbCE9dD90OiIifX1yZXR1cm4hMX19LHtrZXk6ImlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpO3JldHVybiBudWxsIT09KGU9bnVsbD09dD92b2lkIDA6dC5pbmNsdWRlcygic2lnbi1pbi1zaWxlbnRseSIpKSYmdm9pZCAwIT09ZSYmZX19LHtrZXk6Imhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaCx0PS9bPyZdY29kZT1bXiZdKy87cmV0dXJuIHQudGVzdChlKX19LHtrZXk6Imhhc0Vycm9ySW5VUkwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5ocmVmLHQ9bmV3IFVSTChlKTtyZXR1cm4hIXQuc2VhcmNoUGFyYW1zLmdldChXKSYmdC5zZWFyY2hQYXJhbXMuZ2V0KEcpIT09T319LHtrZXk6ImNhblNlbmRQcm9tcHROb25lUmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEYpO3JldHVybiEoZT9KU09OLnBhcnNlKGUpOm51bGwpfX0se2tleToic2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKEYsSlNPTi5zdHJpbmdpZnkoZSkpfX0se2tleToid2FpdFRpbGxQYWdlUmVkaXJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG49bnVsbCE9ZT9lOjNlMyx0Lm5leHQ9MyxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwxZTMqbil9KSk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfX1dKSxlfSgpLGZyPVtdLGxyPVtdLGhyPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LHByPSExO2Z1bmN0aW9uIGRyKCl7cHI9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KWZyW3RdPWVbdF0sbHJbZS5jaGFyQ29kZUF0KHQpXT10O2xyWyItIi5jaGFyQ29kZUF0KDApXT02MixsclsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gdnIoZSx0LHIpe2Zvcih2YXIgbixhLGk9W10sbz10O288cjtvKz0zKW49KGVbb108PDE2KSsoZVtvKzFdPDw4KStlW28rMl0saS5wdXNoKGZyWyhhPW4pPj4xOCY2M10rZnJbYT4+MTImNjNdK2ZyW2E+PjYmNjNdK2ZyWzYzJmFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBncihlKXt2YXIgdDtwcnx8ZHIoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsYT0iIixpPVtdLG89MTYzODMscz0wLHU9ci1uO3M8dTtzKz1vKWkucHVzaCh2cihlLHMscytvPnU/dTpzK28pKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGErPWZyW3Q+PjJdLGErPWZyW3Q8PDQmNjNdLGErPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0sYSs9ZnJbdD4+MTBdLGErPWZyW3Q+PjQmNjNdLGErPWZyW3Q8PDImNjNdLGErPSI9IiksaS5wdXNoKGEpLGkuam9pbigiIil9ZnVuY3Rpb24geXIoZSx0LHIsbixhKXt2YXIgaSxvLHM9OCphLW4tMSx1PSgxPDxzKS0xLGM9dT4+MSxmPS03LGw9cj9hLTE6MCxoPXI/LTE6MSxwPWVbdCtsXTtmb3IobCs9aCxpPXAmKDE8PC1mKS0xLHA+Pj0tZixmKz1zO2Y+MDtpPTI1NippK2VbdCtsXSxsKz1oLGYtPTgpO2ZvcihvPWkmKDE8PC1mKS0xLGk+Pj0tZixmKz1uO2Y+MDtvPTI1NipvK2VbdCtsXSxsKz1oLGYtPTgpO2lmKDA9PT1pKWk9MS1jO2Vsc2V7aWYoaT09PXUpcmV0dXJuIG8/TmFOOjEvMCoocD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGktPWN9cmV0dXJuKHA/LTE6MSkqbypNYXRoLnBvdygyLGktbil9ZnVuY3Rpb24gbXIoZSx0LHIsbixhLGkpe3ZhciBvLHMsdSxjPTgqaS1hLTEsZj0oMTw8YyktMSxsPWY+PjEsaD0yMz09PWE/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLHA9bj8wOmktMSxkPW4/MTotMSx2PXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsbz1mKToobz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLW8pKTwxJiYoby0tLHUqPTIpLCh0Kz1vK2w+PTE/aC91OmgqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYobysrLHUvPTIpLG8rbD49Zj8ocz0wLG89Zik6bytsPj0xPyhzPSh0KnUtMSkqTWF0aC5wb3coMixhKSxvKz1sKToocz10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGEpLG89MCkpO2E+PTg7ZVtyK3BdPTI1NSZzLHArPWQscy89MjU2LGEtPTgpO2ZvcihvPW88PGF8cyxjKz1hO2M+MDtlW3IrcF09MjU1Jm8scCs9ZCxvLz0yNTYsYy09OCk7ZVtyK3AtZF18PTEyOCp2fXZhciB3cj17fS50b1N0cmluZyxicj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT13ci5jYWxsKGUpfTtTci5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PXllLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHllLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIGtyPXhyKCk7ZnVuY3Rpb24geHIoKXtyZXR1cm4gU3IuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gX3IoZSx0KXtpZih4cigpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1Tci5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgU3IodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gU3IoZSx0LHIpe2lmKCEoU3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIFNyKSlyZXR1cm4gbmV3IFNyKGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIEFyKHRoaXMsZSl9cmV0dXJuIEVyKHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEVyKGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7U3IuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189U3IucHJvdG90eXBlOmU9UnIoZSx0KTtyZXR1cm4gZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKTtpZighU3IuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfERyKHQsciksYT0oZT1fcihlLG4pKS53cml0ZSh0LHIpO2EhPT1uJiYoZT1lLnNsaWNlKDAsYSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihQcih0KSl7dmFyIHI9MHxDcih0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1fcihlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/X3IoZSwwKTpScihlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZicih0LmRhdGEpKXJldHVybiBScihlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFRyKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gQXIoZSx0KXtpZihUcih0KSxlPV9yKGUsdDwwPzA6MHxDcih0KSksIVNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gUnIoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxDcih0Lmxlbmd0aCk7ZT1fcihlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gQ3IoZSl7aWYoZT49eHIoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIreHIoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gUHIoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIERyKGUsdCl7aWYoUHIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIGFuKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gb24oZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gYW4oZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gT3IoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gWXIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEJyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gV3IodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHpyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIEpyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEdyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIElyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gTHIoZSx0LHIsbixhKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1hPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoYSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFhKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PVNyLmZyb20odCxuKSksUHIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpVcihlLHQscixuLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2E/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpVcihlLFt0XSxyLG4sYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gVXIoZSx0LHIsbixhKXt2YXIgaSxvPTEscz1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7bz0yLHMvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PW8/ZVt0XTplLnJlYWRVSW50MTZCRSh0Km8pfWlmKGEpe3ZhciBmPS0xO2ZvcihpPXI7aTxzO2krKylpZihjKGUsaSk9PT1jKHQsLTE9PT1mPzA6aS1mKSl7aWYoLTE9PT1mJiYoZj1pKSxpLWYrMT09PXUpcmV0dXJuIGYqb31lbHNlLTEhPT1mJiYoaS09aS1mKSxmPS0xfWVsc2UgZm9yKHIrdT5zJiYocj1zLXUpLGk9cjtpPj0wO2ktLSl7Zm9yKHZhciBsPSEwLGg9MDtoPHU7aCsrKWlmKGMoZSxpK2gpIT09Yyh0LGgpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIGl9cmV0dXJuLTF9ZnVuY3Rpb24gSHIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGE9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+YSYmKG49YSk6bj1hO3ZhciBpPXQubGVuZ3RoO2lmKGklMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmkvMiYmKG49aS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKm8sMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBvO2VbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIE1yKGUsdCxyLG4pe3JldHVybiBzbihhbih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBqcihlLHQscixuKXtyZXR1cm4gc24oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBOcihlLHQscixuKXtyZXR1cm4ganIoZSx0LHIsbil9ZnVuY3Rpb24gcXIoZSx0LHIsbil7cmV0dXJuIHNuKG9uKHQpLGUscixuKX1mdW5jdGlvbiBLcihlLHQscixuKXtyZXR1cm4gc24oZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhLGk9W10sbz0wO288ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrbyluPShyPWUuY2hhckNvZGVBdChvKSk+PjgsYT1yJTI1NixpLnB1c2goYSksaS5wdXNoKG4pO3JldHVybiBpfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBKcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/Z3IoZSk6Z3IoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBCcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sYT10O2E8cjspe3ZhciBpLG8scyx1LGM9ZVthXSxmPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGErbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoZj1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbYSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6aT1lW2ErMV0sbz1lW2ErMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJih1PSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJm8pPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGY9dSk7YnJlYWs7Y2FzZSA0Omk9ZVthKzFdLG89ZVthKzJdLHM9ZVthKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJnU8MTExNDExMiYmKGY9dSl9bnVsbD09PWY/KGY9NjU1MzMsbD0xKTpmPjY1NTM1JiYoZi09NjU1MzYsbi5wdXNoKGY+Pj4xMCYxMDIzfDU1Mjk2KSxmPTU2MzIwfDEwMjMmZiksbi5wdXNoKGYpLGErPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PUZyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1GcikpO3JldHVybiByfShuKX1Tci5wb29sU2l6ZT04MTkyLFNyLl9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz1Tci5wcm90b3R5cGUsZX0sU3IuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKG51bGwsZSx0LHIpfSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoU3IucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxTci5fX3Byb3RvX189VWludDhBcnJheSksU3IuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gVHIodCksdDw9MD9fcihlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuP19yKGUsdCkuZmlsbChyLG4pOl9yKGUsdCkuZmlsbChyKTpfcihlLHQpfShudWxsLGUsdCxyKX0sU3IuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKG51bGwsZSl9LFNyLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gQXIobnVsbCxlKX0sU3IuaXNCdWZmZXI9dW4sU3IuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFQcihlKXx8IVByKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxhPTAsaT1NYXRoLm1pbihyLG4pO2E8aTsrK2EpaWYoZVthXSE9PXRbYV0pe3I9ZVthXSxuPXRbYV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxTci5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxTci5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighYnIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gU3IuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1Tci5hbGxvY1Vuc2FmZSh0KSxhPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGk9ZVtyXTtpZighUHIoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2kuY29weShuLGEpLGErPWkubGVuZ3RofXJldHVybiBufSxTci5ieXRlTGVuZ3RoPURyLFNyLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsU3IucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilJcih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sU3IucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClJcih0aGlzLHQsdCszKSxJcih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxTci5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KUlyKHRoaXMsdCx0KzcpLElyKHRoaXMsdCsxLHQrNiksSXIodGhpcyx0KzIsdCs1KSxJcih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxTci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9Ccih0aGlzLDAsZSk6T3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxTci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFQcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09U3IuY29tcGFyZSh0aGlzLGUpfSxTci5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxTci5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQscixuLGEpe2lmKCFQcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1hJiYoYT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWEmJnQ+PXIpcmV0dXJuIDA7aWYobj49YSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgaT0oYT4+Pj0wKS0obj4+Pj0wKSxvPShyPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4oaSxvKSx1PXRoaXMuc2xpY2UobixhKSxjPWUuc2xpY2UodCxyKSxmPTA7ZjxzOysrZilpZih1W2ZdIT09Y1tmXSl7aT11W2ZdLG89Y1tmXTticmVha31yZXR1cm4gaTxvPy0xOm88aT8xOjB9LFNyLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSxTci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIExyKHRoaXMsZSx0LHIsITApfSxTci5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBMcih0aGlzLGUsdCxyLCExKX0sU3IucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBhPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+YSkmJihyPWEpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGk9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBIcih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNcih0aGlzLGUsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4ganIodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gTnIodGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBxcih0aGlzLGUsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEtyKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksaT0hMH19LFNyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBGcj00MDk2O2Z1bmN0aW9uIFdyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgYT10O2E8cjsrK2Epbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVthXSk7cmV0dXJuIG59ZnVuY3Rpb24genIoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBhPXQ7YTxyOysrYSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbYV0pO3JldHVybiBufWZ1bmN0aW9uIFlyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGE9IiIsaT10O2k8cjsrK2kpYSs9bm4oZVtpXSk7cmV0dXJuIGF9ZnVuY3Rpb24gR3IoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksYT0iIixpPTA7aTxuLmxlbmd0aDtpKz0yKWErPVN0cmluZy5mcm9tQ2hhckNvZGUobltpXSsyNTYqbltpKzFdKTtyZXR1cm4gYX1mdW5jdGlvbiBWcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gWHIoZSx0LHIsbixhLGkpe2lmKCFQcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5hfHx0PGkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gJHIoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgYT0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciwyKTthPGk7KythKWVbcithXT0odCYyNTU8PDgqKG4/YToxLWEpKT4+PjgqKG4/YToxLWEpfWZ1bmN0aW9uIFpyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgYT0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciw0KTthPGk7KythKWVbcithXT10Pj4+OCoobj9hOjMtYSkmMjU1fWZ1bmN0aW9uIFFyKGUsdCxyLG4sYSxpKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZW4oZSx0LHIsbixhKXtyZXR1cm4gYXx8UXIoZSwwLHIsNCksbXIoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gdG4oZSx0LHIsbixhKXtyZXR1cm4gYXx8UXIoZSwwLHIsOCksbXIoZSx0LHIsbiw1Miw4KSxyKzh9U3IucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189U3IucHJvdG90eXBlO2Vsc2V7dmFyIGE9dC1lO3I9bmV3IFNyKGEsdm9pZCAwKTtmb3IodmFyIGk9MDtpPGE7KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxTci5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sYT0xLGk9MDsrK2k8dCYmKGEqPTI1Nik7KW4rPXRoaXNbZStpXSphO3JldHVybiBufSxTci5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGE9MTt0PjAmJihhKj0yNTYpOyluKz10aGlzW2UrLS10XSphO3JldHVybiBufSxTci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sU3IucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxTci5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LFNyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxTci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sU3IucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0sYT0xLGk9MDsrK2k8dCYmKGEqPTI1Nik7KW4rPXRoaXNbZStpXSphO3JldHVybiBuPj0oYSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sU3IucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsYT0xLGk9dGhpc1tlKy0tbl07bj4wJiYoYSo9MjU2KTspaSs9dGhpc1tlKy0tbl0qYTtyZXR1cm4gaT49KGEqPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LFNyLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxTci5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxWcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxTci5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxWcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxTci5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LFNyLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sU3IucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsNCx0aGlzLmxlbmd0aCkseXIodGhpcyxlLCEwLDIzLDQpfSxTci5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw0LHRoaXMubGVuZ3RoKSx5cih0aGlzLGUsITEsMjMsNCl9LFNyLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw4LHRoaXMubGVuZ3RoKSx5cih0aGlzLGUsITAsNTIsOCl9LFNyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw4LHRoaXMubGVuZ3RoKSx5cih0aGlzLGUsITEsNTIsOCl9LFNyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fFhyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGE9MSxpPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytpPHImJihhKj0yNTYpOyl0aGlzW3QraV09ZS9hJjI1NTtyZXR1cm4gdCtyfSxTci5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxYcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBhPXItMSxpPTE7Zm9yKHRoaXNbdCthXT0yNTUmZTstLWE+PTAmJihpKj0yNTYpOyl0aGlzW3QrYV09ZS9pJjI1NTtyZXR1cm4gdCtyfSxTci5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxYcih0aGlzLGUsdCwxLDI1NSwwKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sU3IucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsMiw2NTUzNSwwKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6JHIodGhpcyxlLHQsITApLHQrMn0sU3IucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsMiw2NTUzNSwwKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6JHIodGhpcyxlLHQsITEpLHQrMn0sU3IucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6WnIodGhpcyxlLHQsITApLHQrNH0sU3IucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6WnIodGhpcyxlLHQsITEpLHQrNH0sU3IucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgYT1NYXRoLnBvdygyLDgqci0xKTtYcih0aGlzLGUsdCxyLGEtMSwtYSl9dmFyIGk9MCxvPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpLTFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sU3IucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgYT1NYXRoLnBvdygyLDgqci0xKTtYcih0aGlzLGUsdCxyLGEtMSwtYSl9dmFyIGk9ci0xLG89MSxzPTA7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K2krMV0mJihzPTEpLHRoaXNbdCtpXT0oZS9vPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxTci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDEsMTI3LC0xMjgpLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LFNyLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTokcih0aGlzLGUsdCwhMCksdCsyfSxTci5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6JHIodGhpcyxlLHQsITEpLHQrMn0sU3IucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxYcih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6WnIodGhpcyxlLHQsITApLHQrNH0sU3IucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxYcih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6WnIodGhpcyxlLHQsITEpLHQrNH0sU3IucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVuKHRoaXMsZSx0LCEwLHIpfSxTci5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZW4odGhpcyxlLHQsITEscil9LFNyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdG4odGhpcyxlLHQsITAscil9LFNyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdG4odGhpcyxlLHQsITEscil9LFNyLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGEsaT1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihhPWktMTthPj0wOy0tYSllW2ErdF09dGhpc1thK3JdO2Vsc2UgaWYoaTwxZTN8fCFTci5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihhPTA7YTxpOysrYSllW2ErdF09dGhpc1thK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KHIscitpKSx0KTtyZXR1cm4gaX0sU3IucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGE9ZS5jaGFyQ29kZUF0KDApO2E8MjU2JiYoZT1hKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIVNyLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIGk7aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPHI7KytpKXRoaXNbaV09ZTtlbHNle3ZhciBvPVByKGUpP2U6YW4obmV3IFNyKGUsbikudG9TdHJpbmcoKSkscz1vLmxlbmd0aDtmb3IoaT0wO2k8ci10OysraSl0aGlzW2krdF09b1tpJXNdfXJldHVybiB0aGlzfTt2YXIgcm49L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGFuKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGE9bnVsbCxpPVtdLG89MDtvPG47KytvKXtpZigocj1lLmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighYSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1hPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpLGE9cjtjb250aW51ZX1yPTY1NTM2KyhhLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGEmJih0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtpZihhPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO2kucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7aS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO2kucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaSxvO3ByfHxkcigpO3ZhciBzPWUubGVuZ3RoO2lmKHMlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO2k9Ij0iPT09ZVtzLTJdPzI6Ij0iPT09ZVtzLTFdPzE6MCxvPW5ldyBocigzKnMvNC1pKSxuPWk+MD9zLTQ6czt2YXIgdT0wO2Zvcih0PTAscj0wO3Q8bjt0Kz00LHIrPTMpYT1scltlLmNoYXJDb2RlQXQodCldPDwxOHxscltlLmNoYXJDb2RlQXQodCsxKV08PDEyfGxyW2UuY2hhckNvZGVBdCh0KzIpXTw8NnxscltlLmNoYXJDb2RlQXQodCszKV0sb1t1KytdPWE+PjE2JjI1NSxvW3UrK109YT4+OCYyNTUsb1t1KytdPTI1NSZhO3JldHVybiAyPT09aT8oYT1scltlLmNoYXJDb2RlQXQodCldPDwyfGxyW2UuY2hhckNvZGVBdCh0KzEpXT4+NCxvW3UrK109MjU1JmEpOjE9PT1pJiYoYT1scltlLmNoYXJDb2RlQXQodCldPDwxMHxscltlLmNoYXJDb2RlQXQodCsxKV08PDR8bHJbZS5jaGFyQ29kZUF0KHQrMildPj4yLG9bdSsrXT1hPj44JjI1NSxvW3UrK109MjU1JmEpLG99KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2Uocm4sIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIHNuKGUsdCxyLG4pe2Zvcih2YXIgYT0wO2E8biYmIShhK3I+PXQubGVuZ3RofHxhPj1lLmxlbmd0aCk7KythKXRbYStyXT1lW2FdO3JldHVybiBhfWZ1bmN0aW9uIHVuKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8Y24oZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmY24oZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIGNuKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIGZuPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjpTcixJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSxTci5hbGxvYygrZSl9LGlzQnVmZmVyOnVuLGtNYXhMZW5ndGg6a3J9KSxsbj17ZXhwb3J0czp7fX0saG49e30scG49e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHBuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxwbi5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dCU0O2lmKCFyKXJldHVybiBlO3ZhciBuPXQsYT00LXIsaT10K2Esbz1Tci5hbGxvYyhpKTtmb3Ioby53cml0ZShlKTthLS07KW8ud3JpdGUoIj0iLG4rKyk7cmV0dXJuIG8udG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGhuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZG49cG47ZnVuY3Rpb24gdm4oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxTci5pc0J1ZmZlcihlKT95bihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6eW4oU3IuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24gZ24oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLGRuLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIHluKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgbW4sd249dm47d24uZW5jb2RlPXZuLHduLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFNyLmZyb20oZ24oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSx3bi50b0Jhc2U2ND1nbix3bi5mcm9tQmFzZTY0PXluLHduLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBTci5mcm9tKGduKGUpLCJiYXNlNjQiKX0saG4uZGVmYXVsdD13biwobW49bG4pLmV4cG9ydHM9aG4uZGVmYXVsdCxtbi5leHBvcnRzLmRlZmF1bHQ9bW4uZXhwb3J0czt2YXIgYm49bG4uZXhwb3J0cyxrbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGEsaSl7Zm9yKHZhciBvLHMsdSxjLGYsbCxoLHAsZCx2LGcseSxtO2k+PTY0Oyl7Zm9yKG89clswXSxzPXJbMV0sdT1yWzJdLGM9clszXSxmPXJbNF0sbD1yWzVdLGg9cls2XSxwPXJbN10sdj0wO3Y8MTY7disrKWc9YSs0KnYsZVt2XT0oMjU1Jm5bZ10pPDwyNHwoMjU1Jm5bZysxXSk8PDE2fCgyNTUmbltnKzJdKTw8OHwyNTUmbltnKzNdO2Zvcih2PTE2O3Y8NjQ7disrKXk9KChkPWVbdi0yXSk+Pj4xN3xkPDwxNSleKGQ+Pj4xOXxkPDwxMyleZD4+PjEwLG09KChkPWVbdi0xNV0pPj4+N3xkPDwyNSleKGQ+Pj4xOHxkPDwxNCleZD4+PjMsZVt2XT0oeStlW3YtN118MCkrKG0rZVt2LTE2XXwwKTtmb3Iodj0wO3Y8NjQ7disrKXk9KCgoZj4+PjZ8Zjw8MjYpXihmPj4+MTF8Zjw8MjEpXihmPj4+MjV8Zjw8NykpKyhmJmxefmYmaCl8MCkrKHArKHRbdl0rZVt2XXwwKXwwKXwwLG09KChvPj4+MnxvPDwzMCleKG8+Pj4xM3xvPDwxOSleKG8+Pj4yMnxvPDwxMCkpKyhvJnNebyZ1XnMmdSl8MCxwPWgsaD1sLGw9ZixmPWMreXwwLGM9dSx1PXMscz1vLG89eSttfDA7clswXSs9byxyWzFdKz1zLHJbMl0rPXUsclszXSs9YyxyWzRdKz1mLHJbNV0rPWwscls2XSs9aCxyWzddKz1wLGErPTY0LGktPTY0fXJldHVybiBhfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsYT10LzUzNjg3MDkxMnwwLGk9dDw8MyxvPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIHM9bisxO3M8by04O3MrKyl0aGlzLmJ1ZmZlcltzXT0wO3RoaXMuYnVmZmVyW28tOF09YT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltvLTddPWE+Pj4xNiYyNTUsdGhpcy5idWZmZXJbby02XT1hPj4+OCYyNTUsdGhpcy5idWZmZXJbby01XT1hPj4+MCYyNTUsdGhpcy5idWZmZXJbby00XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW28tM109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltvLTJdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlcltvLTFdPWk+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsbyksdGhpcy5maW5pc2hlZD0hMH1mb3Iocz0wO3M8ODtzKyspZVs0KnMrMF09dGhpcy5zdGF0ZVtzXT4+PjI0JjI1NSxlWzQqcysxXT10aGlzLnN0YXRlW3NdPj4+MTYmMjU1LGVbNCpzKzJdPXRoaXMuc3RhdGVbc10+Pj44JjI1NSxlWzQqcyszXT10aGlzLnN0YXRlW3NdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gaShlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1uZXcgYShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBzKGUsdCxyLG4pe3ZhciBhPW5bMF07aWYoMD09PWEpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksYT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWEsZS5oYXNoPWksZS5kZWZhdWx0PWksZS5obWFjPW87dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIGMoZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9dSksdm9pZCAwPT09biYmKG49MzIpO2Zvcih2YXIgaT1uZXcgVWludDhBcnJheShbMV0pLGM9byh0LGUpLGY9bmV3IGEoYyksbD1uZXcgVWludDhBcnJheShmLmRpZ2VzdExlbmd0aCksaD1sLmxlbmd0aCxwPW5ldyBVaW50OEFycmF5KG4pLGQ9MDtkPG47ZCsrKWg9PT1sLmxlbmd0aCYmKHMobCxmLHIsaSksaD0wKSxwW2RdPWxbaCsrXTtyZXR1cm4gZi5jbGVhbigpLGwuZmlsbCgwKSxpLmZpbGwoMCkscH1mdW5jdGlvbiBmKGUsdCxyLG4pe2Zvcih2YXIgaT1uZXcgYShlKSxvPWkuZGlnZXN0TGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkoNCksdT1uZXcgVWludDhBcnJheShvKSxjPW5ldyBVaW50OEFycmF5KG8pLGY9bmV3IFVpbnQ4QXJyYXkobiksbD0wO2wqbzxuO2wrKyl7dmFyIGg9bCsxO3NbMF09aD4+PjI0JjI1NSxzWzFdPWg+Pj4xNiYyNTUsc1syXT1oPj4+OCYyNTUsc1szXT1oPj4+MCYyNTUsaS5yZXNldCgpLGkudXBkYXRlKHQpLGkudXBkYXRlKHMpLGkuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8bztwKyspdVtwXT1jW3BdO2ZvcihwPTI7cDw9cjtwKyspe2kucmVzZXQoKSxpLnVwZGF0ZShjKS5maW5pc2goYyk7Zm9yKHZhciBkPTA7ZDxvO2QrKyl1W2RdXj1jW2RdfWZvcihwPTA7cDxvJiZsKm8rcDxuO3ArKylmW2wqbytwXT11W3BdfWZvcihsPTA7bDxvO2wrKyl1W2xdPWNbbF09MDtmb3IobD0wO2w8NDtsKyspc1tsXT0wO3JldHVybiBpLmNsZWFuKCksZn1lLmhrZGY9YyxlLnBia2RmMj1mfShuKTt2YXIgYT1uLmRlZmF1bHQ7Zm9yKHZhciBpIGluIG4pYVtpXT1uW2ldO2UuZXhwb3J0cz1hfSgpfShrbik7dmFyIHhuPSQoa24uZXhwb3J0cyksX249Y3J5cHRvLFNuPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ3J5cHRvS2V5fSxFbj1uZXcgVGV4dEVuY29kZXIsVG49bmV3IFRleHREZWNvZGVyO2Z1bmN0aW9uIEFuKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG49dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5sZW5ndGh9KSwwKSxhPW5ldyBVaW50OEFycmF5KG4pLGk9MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChlLGkpLGkrPWUubGVuZ3RofSkpLGF9dmFyIFJuPWZ1bmN0aW9uKGUpe3ZhciB0PWU7dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih0PVRuLmRlY29kZSh0KSksdD10LnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLnJlcGxhY2UoL1xzL2csIiIpO3RyeXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWF0b2IoZSkscj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09dC5jaGFyQ29kZUF0KG4pO3JldHVybiByfSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fSxDbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKGUpe3ZhciBuLGE7cmV0dXJuIG8odGhpcyxyKSwobj10LmNhbGwodGhpcyxlKSkuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsbi5uYW1lPW4uY29uc3RydWN0b3IubmFtZSxudWxsPT09KGE9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT1hfHxhLmNhbGwoRXJyb3IsZyhuKSxuLmNvbnN0cnVjdG9yKSxufXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1dKSxyfSh2KEVycm9yKSksUG49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcihlKXt2YXIgbixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7cmV0dXJuIG8odGhpcyxyKSwobj10LmNhbGwodGhpcyxlKSkuY29kZT0iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCIsbi5jbGFpbT1hLG4ucmVhc29uPWksbn1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19XSkscn0oQ24pLERuPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsbi5jbGFpbT1hLG4ucmVhc29uPWksbn1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldUX0VYUElSRUQifX1dKSxyfShDbiksT249ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCIsZX1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1dKSxyfShDbiksSW49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fV0pLHJ9KENuKSxMbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXU19JTlZBTElEIixlfXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV1NfSU5WQUxJRCJ9fV0pLHJ9KENuKSxVbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXVF9JTlZBTElEIixlfXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fV0pLHJ9KENuKSxIbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCIsZX1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19XSkscn0oQ24pLE1uPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLGUubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIn19XSkscn0oQ24pLGpuPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIixlLm1lc3NhZ2U9Im11bHRpcGxlIG1hdGNoaW5nIGtleXMgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fV0pLHJ9KENuKSxObj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsZS5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCIsZX1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19XSkscn0oQ24pO2Z1bmN0aW9uIHFuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFdlYlNvY2tldFBhaXJ9ZnVuY3Rpb24gS24oKXt0cnl7cmV0dXJuIHZvaWQgMCE9PUplLnZlcnNpb25zLm5vZGV9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIEpuKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYWxnb3JpdGhtLm5hbWUiO3JldHVybiBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICIuY29uY2F0KHQsIiBtdXN0IGJlICIpLmNvbmNhdChlKSl9ZnVuY3Rpb24gQm4oZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiBGbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBXbihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fWZ1bmN0aW9uIHpuKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnVzYWdlcy5pbmNsdWRlcyh0KX0pKSl7dmFyIHI9IkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgdXNhZ2VzIG11c3QgaW5jbHVkZSAiO2lmKHQubGVuZ3RoPjIpe3ZhciBuPXQucG9wKCk7cis9Im9uZSBvZiAiLmNvbmNhdCh0LmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG4sIi4iKX1lbHNlIDI9PT10Lmxlbmd0aD9yKz0ib25lIG9mICIuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSwiLiIpOnIrPSIiLmNvbmNhdCh0WzBdLCIuIik7dGhyb3cgbmV3IFR5cGVFcnJvcihyKX19dmFyIFluPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iS2V5IG11c3QgYmUgIixyPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkocj4xP3ItMTowKSxpPTE7aTxyO2krKylhW2ktMV09YXJndW1lbnRzW2ldO2lmKGEubGVuZ3RoPjIpe3ZhciBvPWEucG9wKCk7dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KGEuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQobywiLiIpfWVsc2UgMj09PWEubGVuZ3RoP3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChhWzBdLCIgb3IgIikuY29uY2F0KGFbMV0sIi4iKTp0Kz0ib2YgdHlwZSAiLmNvbmNhdChhWzBdLCIuIik7cmV0dXJuIG51bGw9PWU/dCs9IiBSZWNlaXZlZCAiLmNvbmNhdChlKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3QrPSIgUmVjZWl2ZWQgZnVuY3Rpb24gIi5jb25jYXQoZS5uYW1lKToib2JqZWN0Ij09PW4oZSkmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHQrPSIgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgIi5jb25jYXQoZS5jb25zdHJ1Y3Rvci5uYW1lKSksdH0sR249ZnVuY3Rpb24oZSl7cmV0dXJuIFNuKGUpfSxWbj1bIkNyeXB0b0tleSJdLFhuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07dmFyIG4sYT10LmZpbHRlcihCb29sZWFuKTtpZigwPT09YS5sZW5ndGh8fDE9PT1hLmxlbmd0aClyZXR1cm4hMDt2YXIgaSxvPV8oYSk7dHJ5e2ZvcihvLnMoKTshKGk9by5uKCkpLmRvbmU7KXt2YXIgcz1pLnZhbHVlLHU9T2JqZWN0LmtleXMocyk7aWYobiYmMCE9PW4uc2l6ZSlmb3IodmFyIGM9MCxmPXU7YzxmLmxlbmd0aDtjKyspe3ZhciBsPWZbY107aWYobi5oYXMobCkpcmV0dXJuITE7bi5hZGQobCl9ZWxzZSBuPW5ldyBTZXQodSl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfXJldHVybiEwfTtmdW5jdGlvbiAkbihlKXtpZigib2JqZWN0IiE9PW4odD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7Zm9yKHZhciByPWU7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihyKTspcj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXJ9dmFyIFpuPWZ1bmN0aW9uKGUsdCl7aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe3ZhciByPXQuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoZSwiIHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXIiKSl9fTtmdW5jdGlvbiBRbihlKXt2YXIgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IEluKCIiLmNvbmNhdChlLmFsZywiIGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXMiKSk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtIi5jb25jYXQocGFyc2VJbnQoZS5hbGcuc2xpY2UoLTMpLDEwKXx8MSl9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEluKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlKHFuKCl8fEtuKCkpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IEluKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtzd2l0Y2goZS5jcnYpe2Nhc2UiRWQyNTUxOSI6dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UgS24oKSYmIkVkNDQ4Ijp0PXtuYW1lOiJOT0RFLUVENDQ4IixuYW1lZEN1cnZlOiJOT0RFLUVENDQ4In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEluKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6cn19dmFyIGVhPWZ1bmN0aW9uKCl7dmFyIGU9aShyKCkubWFyaygoZnVuY3Rpb24gZShuKXt2YXIgYSxpLG8scyx1LGMsZixsLGg7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihzPVFuKG4pLHU9cy5hbGdvcml0aG0sYz1zLmtleVVzYWdlcyxmPVt1LG51bGwhPT0oaT1uLmV4dCkmJnZvaWQgMCE9PWkmJmksbnVsbCE9PShvPW4ua2V5X29wcykmJnZvaWQgMCE9PW8/bzpjXSwiUEJLREYyIiE9PXUubmFtZSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChsPV9uLnN1YnRsZSkuaW1wb3J0S2V5LmFwcGx5KGwsWyJyYXciLFJuKG4uayldLmNvbmNhdChmKSkpO2Nhc2UgNDpyZXR1cm4gZGVsZXRlKGg9dCh7fSxuKSkuYWxnLGUuYWJydXB0KCJyZXR1cm4iLChhPV9uLnN1YnRsZSkuaW1wb3J0S2V5LmFwcGx5KGEsWyJqd2siLGhdLmNvbmNhdChmKSkpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtmdW5jdGlvbiB0YShlLHQscil7cmV0dXJuIHJhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByYSgpe3JldHVybihyYT1pKHIoKS5tYXJrKChmdW5jdGlvbiBlKG4sYSxpKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCRuKG4pKXtlLm5leHQ9MjticmVha310aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtjYXNlIDI6aWYoYXx8KGE9bi5hbGcpLCJzdHJpbmciPT10eXBlb2YgYSYmYSl7ZS5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcignImFsZyIgYXJndW1lbnQgaXMgcmVxdWlyZWQgd2hlbiAiandrLmFsZyIgaXMgbm90IHByZXNlbnQnKTtjYXNlIDU6ZS50MD1uLmt0eSxlLm5leHQ9Im9jdCI9PT1lLnQwPzg6IlJTQSI9PT1lLnQwPzE0OiJFQyI9PT1lLnQwfHwiT0tQIj09PWUudDA/MTY6MTc7YnJlYWs7Y2FzZSA4OmlmKCJzdHJpbmciPT10eXBlb2Ygbi5rJiZuLmspe2UubmV4dD0xMDticmVha310aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nICJrIiAoS2V5IFZhbHVlKSBQYXJhbWV0ZXIgdmFsdWUnKTtjYXNlIDEwOmlmKG51bGwhPWl8fChpPSEwIT09bi5leHQpLCFpKXtlLm5leHQ9MTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGVhKHQodCh7fSxuKSx7fSx7YWxnOmEsZXh0OiExfSkpKTtjYXNlIDEzOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixSbihuLmspKTtjYXNlIDE0OmlmKHZvaWQgMD09PW4ub3RoKXtlLm5leHQ9MTY7YnJlYWt9dGhyb3cgbmV3IEluKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIDE2OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlYSh0KHQoe30sbikse30se2FsZzphfSkpKTtjYXNlIDE3OnRocm93IG5ldyBJbignVW5zdXBwb3J0ZWQgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKTtjYXNlIDE4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIG5hPWZ1bmN0aW9uKGUsdCxyKXtlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpP2Z1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXtpZighR24oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihZbi5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChiKFZuKSxbIlVpbnQ4QXJyYXkiXSkpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChWbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKX19KHQpOmZ1bmN0aW9uKGUsdCl7aWYoIUduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoWW4uYXBwbHkodm9pZCAwLFtlXS5jb25jYXQoYihWbikpKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChWbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChWbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKX0odCxyKX07ZnVuY3Rpb24gYWEoZSx0LHIsbixhKXtpZih2b2lkIDAhPT1hLmNyaXQmJnZvaWQgMD09PW4uY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighbnx8dm9pZCAwPT09bi5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KG4uY3JpdCl8fDA9PT1uLmNyaXQubGVuZ3RofHxuLmNyaXQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGh9KSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTt2YXIgaTtpPXZvaWQgMCE9PXI/bmV3IE1hcChbXS5jb25jYXQoYihPYmplY3QuZW50cmllcyhyKSksYih0LmVudHJpZXMoKSkpKTp0O3ZhciBvLHM9XyhuLmNyaXQpO3RyeXtmb3Iocy5zKCk7IShvPXMubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtpZighaS5oYXModSkpdGhyb3cgbmV3IEluKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodSwnIiBpcyBub3QgcmVjb2duaXplZCcpKTtpZih2b2lkIDA9PT1hW3VdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodSwnIiBpcyBtaXNzaW5nJykpO2lmKGkuZ2V0KHUpJiZ2b2lkIDA9PT1uW3VdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodSwnIiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKSl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVybiBuZXcgU2V0KG4uY3JpdCl9dmFyIGlhPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dCYmKCFBcnJheS5pc0FycmF5KHQpfHx0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZX0pKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignIicuY29uY2F0KGUsJyIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfTtmdW5jdGlvbiBvYShlLHQpe3ZhciByPSJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZShxbigpfHxLbigpKSYmIkVkRFNBIjp2YXIgbj10Lm5hbWVkQ3VydmU7cmV0dXJue25hbWU6bixuYW1lZEN1cnZlOm59O2RlZmF1bHQ6dGhyb3cgbmV3IEluKCJhbGcgIi5jb25jYXQoZSwiIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWUiKSl9fWZ1bmN0aW9uIHNhKGUsdCxyKXtpZihTbih0KSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6aWYoIUJuKGUuYWxnb3JpdGhtLCJITUFDIikpdGhyb3cgSm4oIkhNQUMiKTt2YXIgcj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihGbihlLmFsZ29yaXRobS5oYXNoKSE9PXIpdGhyb3cgSm4oIlNIQS0iLmNvbmNhdChyKSwiYWxnb3JpdGhtLmhhc2giKTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjppZighQm4oZS5hbGdvcml0aG0sIlJTQVNTQS1QS0NTMS12MV81IikpdGhyb3cgSm4oIlJTQVNTQS1QS0NTMS12MV81Iik7dmFyIG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoRm4oZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IEpuKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWs7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6aWYoIUJuKGUuYWxnb3JpdGhtLCJSU0EtUFNTIikpdGhyb3cgSm4oIlJTQS1QU1MiKTt2YXIgYT1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihGbihlLmFsZ29yaXRobS5oYXNoKSE9PWEpdGhyb3cgSm4oIlNIQS0iLmNvbmNhdChhKSwiYWxnb3JpdGhtLmhhc2giKTticmVhaztjYXNlIEtuKCkmJiJFZERTQSI6aWYoIk5PREUtRUQyNTUxOSIhPT1lLmFsZ29yaXRobS5uYW1lJiYiTk9ERS1FRDQ0OCIhPT1lLmFsZ29yaXRobS5uYW1lKXRocm93IEpuKCJOT0RFLUVEMjU1MTkgb3IgTk9ERS1FRDQ0OCIpO2JyZWFrO2Nhc2UgcW4oKSYmIkVkRFNBIjppZighQm4oZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IEpuKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjppZighQm4oZS5hbGdvcml0aG0sIkVDRFNBIikpdGhyb3cgSm4oIkVDRFNBIik7dmFyIGk9V24odCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PWkpdGhyb3cgSm4oaSwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgscz1uZXcgQXJyYXkobz4yP28tMjowKSx1PTI7dTxvO3UrKylzW3UtMl09YXJndW1lbnRzW3VdO3puKGUscyl9KHQsZSxyKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3IoWW4uYXBwbHkodm9pZCAwLFt0XS5jb25jYXQoYihWbikpKSk7cmV0dXJuIF9uLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDoiU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKSxuYW1lOiJITUFDIn0sITEsW3JdKX10aHJvdyBuZXcgVHlwZUVycm9yKFluLmFwcGx5KHZvaWQgMCxbdF0uY29uY2F0KGIoVm4pLFsiVWludDhBcnJheSJdKSkpfXZhciB1YT1mdW5jdGlvbigpe3ZhciBlPWkocigpLm1hcmsoKGZ1bmN0aW9uIGUodCxuLGEsaSl7dmFyIG8scztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixzYSh0LG4sInZlcmlmeSIpO2Nhc2UgMjpyZXR1cm4gbz1lLnNlbnQsWm4odCxvKSxzPW9hKHQsby5hbGdvcml0aG0pLGUucHJldj01LGUubmV4dD04LF9uLnN1YnRsZS52ZXJpZnkocyxvLGEsaSk7Y2FzZSA4OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMTE6cmV0dXJuIGUucHJldj0xMSxlLnQwPWUuY2F0Y2goNSksZS5hYnJ1cHQoInJldHVybiIsITEpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s1LDExXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24odCxyLG4sYSl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtmdW5jdGlvbiBjYShlLHQscil7cmV0dXJuIGZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmYSgpe3JldHVybiBmYT1pKHIoKS5tYXJrKChmdW5jdGlvbiBlKG4sYSxpKXt2YXIgbyxzLHUsYyxmLGwsaCxwLGQsdixnLHksbTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCRuKG4pKXtlLm5leHQ9MjticmVha310aHJvdyBuZXcgTG4oIkZsYXR0ZW5lZCBKV1MgbXVzdCBiZSBhbiBvYmplY3QiKTtjYXNlIDI6aWYodm9pZCAwIT09bi5wcm90ZWN0ZWR8fHZvaWQgMCE9PW4uaGVhZGVyKXtlLm5leHQ9NDticmVha310aHJvdyBuZXcgTG4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2Nhc2UgNDppZih2b2lkIDA9PT1uLnByb3RlY3RlZHx8InN0cmluZyI9PXR5cGVvZiBuLnByb3RlY3RlZCl7ZS5uZXh0PTY7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgNjppZih2b2lkIDAhPT1uLnBheWxvYWQpe2UubmV4dD04O2JyZWFrfXRocm93IG5ldyBMbigiSldTIFBheWxvYWQgbWlzc2luZyIpO2Nhc2UgODppZigic3RyaW5nIj09dHlwZW9mIG4uc2lnbmF0dXJlKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgU2lnbmF0dXJlIG1pc3Npbmcgb3IgaW5jb3JyZWN0IHR5cGUiKTtjYXNlIDEwOmlmKHZvaWQgMD09PW4uaGVhZGVyfHwkbihuLmhlYWRlcikpe2UubmV4dD0xMjticmVha310aHJvdyBuZXcgTG4oIkpXUyBVbnByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtjYXNlIDEyOmlmKHM9e30sIW4ucHJvdGVjdGVkKXtlLm5leHQ9MjI7YnJlYWt9dT1SbihuLnByb3RlY3RlZCksZS5wcmV2PTE1LHM9SlNPTi5wYXJzZShUbi5kZWNvZGUodSkpLGUubmV4dD0yMjticmVhaztjYXNlIDE5OnRocm93IGUucHJldj0xOSxlLnQwPWUuY2F0Y2goMTUpLG5ldyBMbigiSldTIFByb3RlY3RlZCBIZWFkZXIgaXMgaW52YWxpZCIpO2Nhc2UgMjI6aWYoWG4ocyxuLmhlYWRlcikpe2UubmV4dD0yNDticmVha310aHJvdyBuZXcgTG4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjYXNlIDI0OmlmKGM9dCh0KHt9LHMpLG4uaGVhZGVyKSxmPWFhKExuLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1pP3ZvaWQgMDppLmNyaXQscyxjKSxsPSEwLCFmLmhhcygiYjY0Iikpe2UubmV4dD0zMTticmVha31pZigiYm9vbGVhbiI9PXR5cGVvZihsPXMuYjY0KSl7ZS5uZXh0PTMxO2JyZWFrfXRocm93IG5ldyBMbignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjYXNlIDMxOmlmKCJzdHJpbmciPT10eXBlb2YoaD1jLmFsZykmJmgpe2UubmV4dD0zNDticmVha310aHJvdyBuZXcgTG4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2Nhc2UgMzQ6aWYoIShwPWkmJmlhKCJhbGdvcml0aG1zIixpLmFsZ29yaXRobXMpKXx8cC5oYXMoaCkpe2UubmV4dD0zNzticmVha310aHJvdyBuZXcgT24oJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtjYXNlIDM3OmlmKCFsKXtlLm5leHQ9NDI7YnJlYWt9aWYoInN0cmluZyI9PXR5cGVvZiBuLnBheWxvYWQpe2UubmV4dD00MDticmVha310aHJvdyBuZXcgTG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKTtjYXNlIDQwOmUubmV4dD00NDticmVhaztjYXNlIDQyOmlmKCJzdHJpbmciPT10eXBlb2Ygbi5wYXlsb2FkfHxuLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtlLm5leHQ9NDQ7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtjYXNlIDQ0OmlmKGQ9ITEsImZ1bmN0aW9uIiE9dHlwZW9mIGEpe2UubmV4dD01MDticmVha31yZXR1cm4gZS5uZXh0PTQ4LGEocyxuKTtjYXNlIDQ4OmE9ZS5zZW50LGQ9ITA7Y2FzZSA1MDpyZXR1cm4gbmEoaCxhLCJ2ZXJpZnkiKSx2PUFuKEVuLmVuY29kZShudWxsIT09KG89bi5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1vP286IiIpLEVuLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2Ygbi5wYXlsb2FkP0VuLmVuY29kZShuLnBheWxvYWQpOm4ucGF5bG9hZCksZz1SbihuLnNpZ25hdHVyZSksZS5uZXh0PTU1LHVhKGgsYSxnLHYpO2Nhc2UgNTU6aWYoZS5zZW50KXtlLm5leHQ9NTg7YnJlYWt9dGhyb3cgbmV3IE5uO2Nhc2UgNTg6aWYoeT1sP1JuKG4ucGF5bG9hZCk6InN0cmluZyI9PXR5cGVvZiBuLnBheWxvYWQ/RW4uZW5jb2RlKG4ucGF5bG9hZCk6bi5wYXlsb2FkLG09e3BheWxvYWQ6eX0sdm9pZCAwIT09bi5wcm90ZWN0ZWQmJihtLnByb3RlY3RlZEhlYWRlcj1zKSx2b2lkIDAhPT1uLmhlYWRlciYmKG0udW5wcm90ZWN0ZWRIZWFkZXI9bi5oZWFkZXIpLCFkKXtlLm5leHQ9NjQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHQodCh7fSxtKSx7fSx7a2V5OmF9KSk7Y2FzZSA2NDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbSk7Y2FzZSA2NTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzE1LDE5XV0pfSkpKSxmYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGEoZSx0LHIpe3JldHVybiBoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaGEoKXtyZXR1cm4oaGE9aShyKCkubWFyaygoZnVuY3Rpb24gZShuLGEsaSl7dmFyIG8scyx1LGMsZixsO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihuPVRuLmRlY29kZShuKSksInN0cmluZyI9PXR5cGVvZiBuKXtlLm5leHQ9MzticmVha310aHJvdyBuZXcgTG4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2Nhc2UgMzppZihvPW4uc3BsaXQoIi4iKSxzPW9bMF0sdT1vWzFdLGM9b1syXSwzPT09by5sZW5ndGgpe2UubmV4dD02O2JyZWFrfXRocm93IG5ldyBMbigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2Nhc2UgNjpyZXR1cm4gZS5uZXh0PTgsY2Eoe3BheWxvYWQ6dSxwcm90ZWN0ZWQ6cyxzaWduYXR1cmU6Y30sYSxpKTtjYXNlIDg6aWYoZj1lLnNlbnQsbD17cGF5bG9hZDpmLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmYucHJvdGVjdGVkSGVhZGVyfSwiZnVuY3Rpb24iIT10eXBlb2YgYSl7ZS5uZXh0PTEyO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KHQoe30sbCkse30se2tleTpmLmtleX0pKTtjYXNlIDEyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixsKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHBhPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKGUuZ2V0VGltZSgpLzFlMyl9LGRhPTg2NDAwLHZhPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pLGdhPWZ1bmN0aW9uKGUpe3ZhciB0PXZhLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTt2YXIgcj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQocik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpyKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqcik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChyKmRhKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKnIpO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqcil9fSx5YT1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15hcHBsaWNhdGlvblwvLywiIil9LG1hPWZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3QuaW5jbHVkZXMoZSk6ISFBcnJheS5pc0FycmF5KGUpJiZ0LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGUpKSl9LHdhPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30saT1hLnR5cDtpZihpJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8eWEoZS50eXApIT09eWEoaSkpKXRocm93IG5ldyBQbigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7dHJ5e3I9SlNPTi5wYXJzZShUbi5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighJG4ocikpdGhyb3cgbmV3IFVuKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7dmFyIG89YS5pc3N1ZXI7aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhyLmlzcykpdGhyb3cgbmV3IFBuKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7dmFyIHM9YS5zdWJqZWN0O2lmKHMmJnIuc3ViIT09cyl0aHJvdyBuZXcgUG4oJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTt2YXIgdSxjPWEuYXVkaWVuY2U7aWYoYyYmIW1hKHIuYXVkLCJzdHJpbmciPT10eXBlb2YgYz9bY106YykpdGhyb3cgbmV3IFBuKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7c3dpdGNoKG4oYS5jbG9ja1RvbGVyYW5jZSkpe2Nhc2Uic3RyaW5nIjp1PWdhKGEuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjp1PWEuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOnU9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX12YXIgZj1hLmN1cnJlbnREYXRlLGw9cGEoZnx8bmV3IERhdGUpO2lmKCh2b2lkIDAhPT1yLmlhdHx8YS5tYXhUb2tlbkFnZSkmJiJudW1iZXIiIT10eXBlb2Ygci5pYXQpdGhyb3cgbmV3IFBuKCciaWF0IiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiaWF0IiwiaW52YWxpZCIpO2lmKHZvaWQgMCE9PXIubmJmKXtpZigibnVtYmVyIiE9dHlwZW9mIHIubmJmKXRocm93IG5ldyBQbignIm5iZiIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsIm5iZiIsImludmFsaWQiKTtpZihyLm5iZj5sK3UpdGhyb3cgbmV3IFBuKCcibmJmIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywibmJmIiwiY2hlY2tfZmFpbGVkIil9aWYodm9pZCAwIT09ci5leHApe2lmKCJudW1iZXIiIT10eXBlb2Ygci5leHApdGhyb3cgbmV3IFBuKCciZXhwIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywiZXhwIiwiaW52YWxpZCIpO2lmKHIuZXhwPD1sLXUpdGhyb3cgbmV3IERuKCciZXhwIiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkJywiZXhwIiwiY2hlY2tfZmFpbGVkIil9aWYoYS5tYXhUb2tlbkFnZSl7dmFyIGg9bC1yLmlhdCxwPSJudW1iZXIiPT10eXBlb2YgYS5tYXhUb2tlbkFnZT9hLm1heFRva2VuQWdlOmdhKGEubWF4VG9rZW5BZ2UpO2lmKGgtdT5wKXRocm93IG5ldyBEbignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAodG9vIGZhciBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKTtpZihoPDAtdSl0aHJvdyBuZXcgUG4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1yZXR1cm4gcn07ZnVuY3Rpb24gYmEoKXtyZXR1cm4oYmE9aShyKCkubWFyaygoZnVuY3Rpb24gZShuLGEsaSl7dmFyIG8scyx1LGM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsbGEobixhLGkpO2Nhc2UgMjppZihzPWUuc2VudCwhKG51bGw9PT0obz1zLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09bz92b2lkIDA6by5pbmNsdWRlcygiYjY0IikpfHwhMSE9PXMucHJvdGVjdGVkSGVhZGVyLmI2NCl7ZS5uZXh0PTU7YnJlYWt9dGhyb3cgbmV3IFVuKCJKV1RzIE1VU1QgTk9UIHVzZSB1bmVuY29kZWQgcGF5bG9hZCIpO2Nhc2UgNTppZih1PXdhKHMucHJvdGVjdGVkSGVhZGVyLHMucGF5bG9hZCxpKSxjPXtwYXlsb2FkOnUscHJvdGVjdGVkSGVhZGVyOnMucHJvdGVjdGVkSGVhZGVyfSwiZnVuY3Rpb24iIT10eXBlb2YgYSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHQodCh7fSxjKSx7fSx7a2V5OnMua2V5fSkpO2Nhc2UgOTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGthKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBJbignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX1mdW5jdGlvbiB4YShlKXtyZXR1cm4gJG4oZSl9dmFyIF9hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihvKHRoaXMsZSksdGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PT1uKGUpJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeSh4YSl9KHQpKXRocm93IG5ldyBIbigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgcjt0aGlzLl9qd2tzPShyPXQsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUocik6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyKSkpfXZhciBhO3JldHVybiB1KGUsW3trZXk6ImdldEtleSIsdmFsdWU6KGE9aShyKCkubWFyaygoZnVuY3Rpb24gZShuLGEpe3ZhciBpLG8scyx1LGMsZixsLGgscDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGk9dCh0KHt9LG4pLGEuaGVhZGVyKSxvPWkuYWxnLHM9aS5raWQsdT1rYShvKSxjPXRoaXMuX2p3a3Mua2V5cy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciB0PXU9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHMmJih0PXM9PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9bz09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1vJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChvKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLGY9Y1swXSwwIT09KGw9Yy5sZW5ndGgpKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgTW47Y2FzZSA4OmlmKDE9PT1sKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IGpuO2Nhc2UgMTA6aWYodm9pZCAwIT09KGg9dGhpcy5fY2FjaGVkLmdldChmKXx8dGhpcy5fY2FjaGVkLnNldChmLHt9KS5nZXQoZikpW29dKXtlLm5leHQ9MTg7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCx0YSh0KHQoe30sZikse30se2V4dDohMH0pLG8pO2Nhc2UgMTQ6aWYoISgocD1lLnNlbnQpaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PXAudHlwZSkpe2UubmV4dD0xNzticmVha310aHJvdyBuZXcgSG4oIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y2FzZSAxNzpoW29dPXA7Y2FzZSAxODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsaFtvXSk7Y2FzZSAxOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9XSksZX0oKTt2YXIgU2E9e2V4cG9ydHM6e319LEVhPXtleHBvcnRzOnt9fSxUYT1aKGZuKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciByPVRhLG49ci5CdWZmZXI7ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4gbihlLHQscil9bi5mcm9tJiZuLmFsbG9jJiZuLmFsbG9jVW5zYWZlJiZuLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9cjooYShyLHQpLHQuQnVmZmVyPWkpLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEobixpKSxpLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBuKGUsdCxyKX0saS5hbGxvYz1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgYT1uKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygcj9hLmZpbGwodCxyKTphLmZpbGwodCk6YS5maWxsKDApLGF9LGkuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlKX0saS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gci5TbG93QnVmZmVyKGUpfX0oRWEsRWEuZXhwb3J0cyk7dmFyIEFhPTY1NTM2LFJhPTQyOTQ5NjcyOTU7dmFyIENhPUVhLmV4cG9ydHMuQnVmZmVyLFBhPVguY3J5cHRvfHxYLm1zQ3J5cHRvO1BhJiZQYS5nZXRSYW5kb21WYWx1ZXM/U2EuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+UmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgcj1DYS5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5BYSlmb3IodmFyIG49MDtuPGU7bis9QWEpUGEuZ2V0UmFuZG9tVmFsdWVzKHIuc2xpY2UobixuK0FhKSk7ZWxzZSBQYS5nZXRSYW5kb21WYWx1ZXMocik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIEplLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxyKX0pKTtyZXR1cm4gcn06U2EuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIERhPVNhLmV4cG9ydHMsT2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiB1KGUsW3trZXk6ImJhc2U2NFVSTEVuY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGJuLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9fSx7a2V5OiJiYXNlNjRVUkxEZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBibi5kZWNvZGUoZSkudG9TdHJpbmcoKX19LHtrZXk6Imhhc2hTaGEyNTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBTci5mcm9tKHhuKChuZXcgVGV4dEVuY29kZXIpLmVuY29kZShlKSkpfX0se2tleToiZ2VuZXJhdGVSYW5kb21CeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIERhKGUpfX0se2tleToidmVyaWZ5Snd0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiBiYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGUsKHM9e2tleXM6W3RdfSxfYS5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IF9hKHMpKSkse2FsZ29yaXRobXM6cixhdWRpZW5jZTpuLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOmEsc3ViamVjdDppfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKX0pKTt2YXIgc319XSksZX0oKTtvcmlnaW4sVS5TZXNzaW9uU3RvcmFnZTt2YXIgSWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe28odGhpcyxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD10LHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZXR1cm4gdShlLFt7a2V5OiJyZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LG4sYSxpPXRoaXM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpLnJlZnJlc2hfdG9rZW4pe2UubmV4dD05O2JyZWFrfXJldHVybiBuPXBhcnNlSW50KHQuZXhwaXJlc19pbiksYT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBTKGksdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSksMWUzKihuPD0xMD9uOm4tMTApKSxlLm5leHQ9OSx0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihDLEpTT04uc3RyaW5naWZ5KGEpKTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyUmVmcmVzaFRva2VuVGltZW91dCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihDKTtjYXNlIDI6aWYoIWUuc2VudCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUudDA9SlNPTixlLm5leHQ9Nix0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihDKTtjYXNlIDY6ZS50MT1lLnNlbnQsdD1lLnQwLnBhcnNlLmNhbGwoZS50MCxlLnQxKSxjbGVhclRpbWVvdXQodCk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fV0pLGV9KCksTGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhLGksbyxzLHUsYyxmLGwsaCxwLGQsdixnLHksbSx3LGIsayx4LF8sRSxULEEsUixDLFAsRCxPLEksTCxVO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIGE9bmV3IHNyLGk9bmV3IE9hLG89bmV3IEooYSxpKSxuLm5leHQ9NSxvLmluaXRpYWxpemUoZSk7Y2FzZSA1OmlmKHM9bmV3IElhKG8pLHU9dChvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSxmPW9yLmdldEluc3RhbmNlKCksbi50MD1udWxsPT1mP3ZvaWQgMDpmLmluaXQsIW4udDApe24ubmV4dD0xMzticmVha31yZXR1cm4gbi5uZXh0PTEzLGYuaW5pdCghMCx1LmF0dGFjaFRva2VuKTtjYXNlIDEzOnJldHVybiBsPWZ1bmN0aW9uKGUpe3Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGYsZSl9LGg9ZnVuY3Rpb24oZSl7dS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhmLGUpfSxwPWZ1bmN0aW9uKGUpeyhudWxsPT1mP3ZvaWQgMDpmLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spJiZmLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix1Lmh0dHBSZXF1ZXN0KGYsZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHUuaHR0cFJlcXVlc3RBbGwoZSxmKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxnPWZ1bmN0aW9uKCl7dS5lbmFibGVIdHRwSGFuZGxlcihmKX0seT1mdW5jdGlvbigpe3UuZGlzYWJsZUh0dHBIYW5kbGVyKGYpfSxtPWZ1bmN0aW9uKGUpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsby5nZXRBdXRob3JpemF0aW9uVVJMKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYSxpLHM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1uZXcgVVJMKGUpLGk9bnVsbCE9PShuPWEuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PW4/bjoiIix0Lm5leHQ9NCxvLmdldFBLQ0VDb2RlKGkpO2Nhc2UgNDpyZXR1cm4gcz10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIse2F1dGhvcml6YXRpb25VUkw6ZSxwa2NlOnN9KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSx3PWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LGI9ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix1LnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQsdm9pZCAwLG4sYSk7Y2FzZSAyOnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGkpfSkpKX0saz1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxlLm5leHQ9MyxvLnNpZ25PdXQoKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSx4PWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixvLmdldFNpZ25PdXRVUkwoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxfPWZ1bmN0aW9uKGUpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdS5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sRT1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5wcmV2PTAsZS5uZXh0PTMsdS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSA2OnJldHVybiBlLnByZXY9NixlLnQwPWUuY2F0Y2goMCksZS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoZS50MCkpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsNl1dKX0pKSl9LFQ9ZnVuY3Rpb24oKXtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpfSxBPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1LmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxSPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1LmdldERlY29kZWRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sQz1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdS5nZXRJRFRva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sUD1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEQ9ZnVuY3Rpb24oKXtyZXR1cm4gdS5nZXRBY2Nlc3NUb2tlbigpfSxPPWZ1bmN0aW9uKCl7cmV0dXJuIHUuaXNBdXRoZW50aWNhdGVkKCl9LEk9ZnVuY3Rpb24oZSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixjLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LEw9ZnVuY3Rpb24oZSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixvLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LFU9ZnVuY3Rpb24oKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGMuZ2V0Q29uZmlnRGF0YSgpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LG4uYWJydXB0KCJyZXR1cm4iLHtkaXNhYmxlSHR0cEhhbmRsZXI6eSxlbmFibGVIdHRwSGFuZGxlcjpnLGdldEFjY2Vzc1Rva2VuOkQsZ2V0QXV0aG9yaXphdGlvblVSTDptLGdldEJhc2ljVXNlckluZm86QSxnZXRDb25maWdEYXRhOlUsZ2V0RGVjb2RlZElEVG9rZW46UixnZXRJRFRva2VuOkMsZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHM6UCxnZXRTaWduT3V0VVJMOngsaHR0cFJlcXVlc3Q6ZCxodHRwUmVxdWVzdEFsbDp2LGlzQXV0aGVudGljYXRlZDpPLHJlZnJlc2hBY2Nlc3NUb2tlbjpFLHJlcXVlc3RBY2Nlc3NUb2tlbjpiLHJlcXVlc3RDdXN0b21HcmFudDpfLHJldm9rZUFjY2Vzc1Rva2VuOlQsc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazpwLHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazpsLHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmgsc2V0U2Vzc2lvblN0YXRlOkksc2lnbk91dDprLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjp3LHVwZGF0ZUNvbmZpZzpMfSk7Y2FzZSAzODpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4pfSkpKX0sVWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7byh0aGlzLGUpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PXQsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpLHRoaXMuX3NwYUhlbHBlcj1yfXJldHVybiB1KGUsW3trZXk6ImF0dGFjaFRva2VuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sZSkuYXR0YWNoVG9rZW4pe3QubmV4dD0xMTticmVha31yZXR1cm4gdC50MD1PYmplY3QsdC50MT1PYmplY3QuYXNzaWduKHt9LGUuaGVhZGVycyksdC50Mj0iQmVhcmVyICIsdC5uZXh0PTcsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKTtjYXNlIDc6dC50Mz10LnNlbnQsdC50ND10LnQyLmNvbmNhdC5jYWxsKHQudDIsdC50MyksdC50NT17QXV0aG9yaXphdGlvbjp0LnQ0fSxlLmhlYWRlcnM9dC50MC5hc3NpZ24uY2FsbCh0LnQwLHQudDEsdC50NSk7Y2FzZSAxMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpeyhudWxsPT1lP3ZvaWQgMDplLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKHQpfX0se2tleToic2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KG51bGw9PWU/dm9pZCAwOmUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHQpfX0se2tleToic2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsobnVsbD09ZT92b2lkIDA6ZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHQpfX0se2tleToiZW5hYmxlSHR0cEhhbmRsZXIiLHZhbHVlOmZ1bmN0aW9uKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX19LHtrZXk6ImRpc2FibGVIdHRwSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9fSx7a2V5OiJpbml0aWFsaXplU2Vzc2lvbk1hbmdlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxvLHM7YS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShpPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09aT9pOiIiLHIsbnVsbCE9PShvPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1vP286MyxudWxsIT09KHM9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09cz9zOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLG4pfX0se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuLGEsaTtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG8oKXt2YXIgcyx1LGMsZixsLGg9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKG8pe2Zvcig7Oylzd2l0Y2goby5wcmV2PW8ubmV4dCl7Y2FzZSAwOmlmKHM9ITAsdT0hMSwhKG51bGw9PWU/dm9pZCAwOmUudG9rZW5FbmRwb2ludCkpe28ubmV4dD0zOTticmVha31yZXR1cm4gcz0hMSxjPTAsby50MD1bXSxvLnQxPWIsby5uZXh0PTksdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtjYXNlIDk6aWYoby50ND1uPW8uc2VudCxvLnQzPW51bGw9PT1vLnQ0LG8udDMpe28ubmV4dD0xMzticmVha31vLnQzPXZvaWQgMD09PW47Y2FzZSAxMzppZighby50Myl7by5uZXh0PTE3O2JyZWFrfW8udDU9dm9pZCAwLG8ubmV4dD0xODticmVhaztjYXNlIDE3Om8udDU9bi5yZXNvdXJjZVNlcnZlclVSTHM7Y2FzZSAxODppZihvLnQ2PWE9by50NSxvLnQyPW51bGwhPT1vLnQ2LCFvLnQyKXtvLm5leHQ9MjI7YnJlYWt9by50Mj12b2lkIDAhPT1hO2Nhc2UgMjI6aWYoIW8udDIpe28ubmV4dD0yNjticmVha31vLnQ3PWEsby5uZXh0PTI3O2JyZWFrO2Nhc2UgMjY6by50Nz1bXTtjYXNlIDI3Om8udDg9by50NyxvLnQ5PSgwLG8udDEpKG8udDgpLG8udDEwPVtlLmJhc2VVcmxdLGY9by50MC5jb25jYXQuY2FsbChvLnQwLG8udDksby50MTApO2Nhc2UgMzE6aWYoIShjPGYubGVuZ3RoKSl7by5uZXh0PTM5O2JyZWFrfWlmKCEobD1mW2NdKXx8IShudWxsPT09KGk9ZS50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGFydHNXaXRoKGwpKSl7by5uZXh0PTM2O2JyZWFrfXJldHVybiB1PSEwLG8uYWJydXB0KCJicmVhayIsMzkpO2Nhc2UgMzY6YysrLG8ubmV4dD0zMTticmVhaztjYXNlIDM5OmlmKGUuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZ0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihZLEpTT04uc3RyaW5naWZ5KGUpKSwhcyYmIXUpe28ubmV4dD00NDticmVha31yZXR1cm4gby5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KGUpLnRoZW4oKGZ1bmN0aW9uKG4pe3JldHVybiBTKGgsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQoZSksIWUucmV0dXJuc1Nlc3Npb24pe3IubmV4dD02O2JyZWFrfXJldHVybiB0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLHIuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSA2OnJldHVybiByLmFicnVwdCgicmV0dXJuIixuKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDQ0OnJldHVybiBvLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgSSgiU1BBLU1BSU5fVEhSRUFEX0NMSUVOVC1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDQ1OmNhc2UiZW5kIjpyZXR1cm4gby5zdG9wKCl9fSksbyx0aGlzKX0pKSl9fSx7a2V5OiJnZXRDdXN0b21HcmFudENvbmZpZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoWSk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsSlNPTi5wYXJzZSh0KSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlZnJlc2hBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG47cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5wcmV2PTAsdC5uZXh0PTMsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO2Nhc2UgNTppZighKG49dC5zZW50KSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQubmV4dD05LHRoaXMucmVxdWVzdEN1c3RvbUdyYW50KG4sZSk7Y2FzZSA5OnJldHVybiB0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSAxMzpyZXR1cm4gdC5wcmV2PTEzLHQudDA9dC5jYXRjaCgwKSx0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdCh0LnQwKSk7Y2FzZSAxNjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzAsMTNdXSl9KSkpfX0se2tleToiaHR0cFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGEsaSxvKXt2YXIgcyx1O3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYygpe3ZhciBmLGwsaCxwLGQsdj10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oYyl7Zm9yKDs7KXN3aXRjaChjLnByZXY9Yy5uZXh0KXtjYXNlIDA6cmV0dXJuIGY9ITEsYy5uZXh0PTMsdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtjYXNlIDM6cmV0dXJuIGw9Yy5zZW50LGg9MCxjLnQwPVtdLGMudDE9YixjLm5leHQ9OSxudWxsPT1sP3ZvaWQgMDpsLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDk6aWYoYy50Mz1zPWMuc2VudCxjLnQyPW51bGwhPT1jLnQzLCFjLnQyKXtjLm5leHQ9MTM7YnJlYWt9Yy50Mj12b2lkIDAhPT1zO2Nhc2UgMTM6aWYoIWMudDIpe2MubmV4dD0xNzticmVha31jLnQ0PXMsYy5uZXh0PTE4O2JyZWFrO2Nhc2UgMTc6Yy50ND1bXTtjYXNlIDE4OmMudDU9Yy50NCxjLnQ2PSgwLGMudDEpKGMudDUpLGMudDc9W2wuYmFzZVVybF0scD1jLnQwLmNvbmNhdC5jYWxsKGMudDAsYy50NixjLnQ3KTtjYXNlIDIyOmlmKCEoaDxwLmxlbmd0aCkpe2MubmV4dD0zMDticmVha31pZighKGQ9cFtoXSl8fCEobnVsbD09PSh1PW51bGw9PXQ/dm9pZCAwOnQudXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKGQpKSl7Yy5uZXh0PTI3O2JyZWFrfXJldHVybiBmPSEwLGMuYWJydXB0KCJicmVhayIsMzApO2Nhc2UgMjc6aCsrLGMubmV4dD0yMjticmVhaztjYXNlIDMwOmlmKCFmKXtjLm5leHQ9MzQ7YnJlYWt9cmV0dXJuIGMuYWJydXB0KCJyZXR1cm4iLGUucmVxdWVzdCh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpLmNhdGNoKChmdW5jdGlvbihzKXtyZXR1cm4gUyh2LHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHUoKXt2YXIgYyxmLGwsaCxwO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYoNDAxIT09KG51bGw9PT0oYz1udWxsPT1zP3ZvaWQgMDpzLnJlc3BvbnNlKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zdGF0dXMpJiYobnVsbD09cz92b2lkIDA6cy5yZXNwb25zZSkpe3IubmV4dD0zMTticmVha31yZXR1cm4gci5wcmV2PTEsci5uZXh0PTQsdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4obyk7Y2FzZSA0Omg9ci5zZW50LHIubmV4dD0xNTticmVhaztjYXNlIDc6aWYoci5wcmV2PTcsci50MD1yLmNhdGNoKDEpLCFuKXtyLm5leHQ9MTQ7YnJlYWt9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpe3IubmV4dD0xMzticmVha31yZXR1cm4gci5uZXh0PTEzLGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtjb2RlOlZ9KSk7Y2FzZSAxMzoiZnVuY3Rpb24iPT10eXBlb2YgaSYmaSgpO2Nhc2UgMTQ6dGhyb3cgbmV3IEkoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KGY9bnVsbD09PXIudDB8fHZvaWQgMD09PXIudDA/dm9pZCAwOnIudDAubmFtZSkmJnZvaWQgMCE9PWY/ZjoiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0obD1udWxsPT09ci50MHx8dm9pZCAwPT09ci50MD92b2lkIDA6ci50MC5tZXNzYWdlKSYmdm9pZCAwIT09bD9sOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIik7Y2FzZSAxNTppZighaCl7ci5uZXh0PTMxO2JyZWFrfXJldHVybiByLnByZXY9MTYsci5uZXh0PTE5LGUucmVxdWVzdCh0KTtjYXNlIDE5OnJldHVybiBwPXIuc2VudCxyLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUocCkpO2Nhc2UgMjM6aWYoci5wcmV2PTIzLHIudDE9ci5jYXRjaCgxNiksIW4pe3IubmV4dD0zMDticmVha31pZigiZnVuY3Rpb24iIT10eXBlb2YgYSl7ci5uZXh0PTI5O2JyZWFrfXJldHVybiByLm5leHQ9MjksYShyLnQxKTtjYXNlIDI5OiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpKCk7Y2FzZSAzMDpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3Qoci50MSkpO2Nhc2UgMzE6aWYoIW4pe3IubmV4dD0zNjticmVha31pZigiZnVuY3Rpb24iIT10eXBlb2YgYSl7ci5uZXh0PTM1O2JyZWFrfXJldHVybiByLm5leHQ9MzUsYShzKTtjYXNlIDM1OiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpKCk7Y2FzZSAzNjpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QocykpO2Nhc2UgMzc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSx1LHRoaXMsW1sxLDddLFsxNiwyM11dKX0pKSl9KSkpO2Nhc2UgMzQ6cmV0dXJuIGMuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBJKCJTUEEtQVVUSF9IRUxQRVItSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDM1OmNhc2UiZW5kIjpyZXR1cm4gYy5zdG9wKCl9fSksYyx0aGlzKX0pKSl9fSx7a2V5OiJodHRwUmVxdWVzdEFsbCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSxpKXt2YXIgbyxzLHU7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBjKCl7dmFyIGYsbCxoLHAsZCx2LGcseSxtLHcsaz10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oYyl7Zm9yKDs7KXN3aXRjaChjLnByZXY9Yy5uZXh0KXtjYXNlIDA6cmV0dXJuIGY9ITAsYy5uZXh0PTMsdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtjYXNlIDM6bD1jLnNlbnQsaD1fKGUpLGMucHJldj01LGgucygpO2Nhc2UgNzppZigocD1oLm4oKSkuZG9uZSl7Yy5uZXh0PTUwO2JyZWFrfXJldHVybiBkPXAudmFsdWUsdj0hMSxnPTAsYy50MD1bXSxjLnQxPWIsYy5uZXh0PTE1LGw7Y2FzZSAxNTppZihjLnQ0PW89Yy5zZW50LGMudDM9bnVsbD09PWMudDQsYy50Myl7Yy5uZXh0PTE5O2JyZWFrfWMudDM9dm9pZCAwPT09bztjYXNlIDE5OmlmKCFjLnQzKXtjLm5leHQ9MjM7YnJlYWt9Yy50NT12b2lkIDAsYy5uZXh0PTI0O2JyZWFrO2Nhc2UgMjM6Yy50NT1vLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDI0OmlmKGMudDY9cz1jLnQ1LGMudDI9bnVsbCE9PWMudDYsIWMudDIpe2MubmV4dD0yODticmVha31jLnQyPXZvaWQgMCE9PXM7Y2FzZSAyODppZighYy50Mil7Yy5uZXh0PTMyO2JyZWFrfWMudDc9cyxjLm5leHQ9MzM7YnJlYWs7Y2FzZSAzMjpjLnQ3PVtdO2Nhc2UgMzM6Yy50OD1jLnQ3LGMudDk9KDAsYy50MSkoYy50OCksYy50MTA9W2wuYmFzZVVybF0seT1jLnQwLmNvbmNhdC5jYWxsKGMudDAsYy50OSxjLnQxMCk7Y2FzZSAzNzppZighKGc8eS5sZW5ndGgpKXtjLm5leHQ9NDU7YnJlYWt9aWYoIShtPXlbZ10pfHwhKG51bGw9PT0odT1kLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChtKSkpe2MubmV4dD00MjticmVha31yZXR1cm4gdj0hMCxjLmFicnVwdCgiYnJlYWsiLDQ1KTtjYXNlIDQyOmcrKyxjLm5leHQ9Mzc7YnJlYWs7Y2FzZSA0NTppZih2KXtjLm5leHQ9NDg7YnJlYWt9cmV0dXJuIGY9ITEsYy5hYnJ1cHQoImJyZWFrIiw1MCk7Y2FzZSA0ODpjLm5leHQ9NzticmVhaztjYXNlIDUwOmMubmV4dD01NTticmVhaztjYXNlIDUyOmMucHJldj01MixjLnQxMT1jLmNhdGNoKDUpLGguZShjLnQxMSk7Y2FzZSA1NTpyZXR1cm4gYy5wcmV2PTU1LGguZigpLGMuZmluaXNoKDU1KTtjYXNlIDU4OmlmKHc9W10sIWYpe2MubmV4dD02NDticmVha31yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt3LnB1c2godC5yZXF1ZXN0KGUpKX0pKSxjLmFicnVwdCgicmV0dXJuIiwobnVsbD09dD92b2lkIDA6dC5hbGwpJiZ0LmFsbCh3KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUyhrLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG8oKXt2YXIgcyx1LGMsZixsPXRoaXM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDppZig0MDEhPT0obnVsbD09PShzPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXR1cykmJihudWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKSl7by5uZXh0PTE3O2JyZWFrfXJldHVybiBvLnByZXY9MSxvLm5leHQ9NCx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjYXNlIDQ6Zj1vLnNlbnQsby5uZXh0PTE1O2JyZWFrO2Nhc2UgNzppZihvLnByZXY9NyxvLnQwPW8uY2F0Y2goMSksIW4pe28ubmV4dD0xNDticmVha31pZigiZnVuY3Rpb24iIT10eXBlb2YgYSl7by5uZXh0PTEzO2JyZWFrfXJldHVybiBvLm5leHQ9MTMsYShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse2NvZGU6Vn0pKTtjYXNlIDEzOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpKCk7Y2FzZSAxNDp0aHJvdyBuZXcgSSgiU1BBLUFVVEhfSEVMUEVSLUhSQS1TRTAxIixudWxsIT09KHU9bnVsbD09PW8udDB8fHZvaWQgMD09PW8udDA/dm9pZCAwOm8udDAubmFtZSkmJnZvaWQgMCE9PXU/dToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0oYz1udWxsPT09by50MHx8dm9pZCAwPT09by50MD92b2lkIDA6by50MC5tZXNzYWdlKSYmdm9pZCAwIT09Yz9jOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIik7Y2FzZSAxNTppZighZil7by5uZXh0PTE3O2JyZWFrfXJldHVybiBvLmFicnVwdCgicmV0dXJuIix0LmFsbCYmdC5hbGwodykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFMobCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighbil7dC5uZXh0PTU7YnJlYWt9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpe3QubmV4dD00O2JyZWFrfXJldHVybiB0Lm5leHQ9NCxhKGUpO2Nhc2UgNDoiZnVuY3Rpb24iPT10eXBlb2YgaSYmaSgpO2Nhc2UgNTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoZSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0pKSk7Y2FzZSAxNzppZighbil7by5uZXh0PTIyO2JyZWFrfWlmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXtvLm5leHQ9MjE7YnJlYWt9cmV0dXJuIG8ubmV4dD0yMSxhKGUpO2Nhc2UgMjE6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkoKTtjYXNlIDIyOnJldHVybiBvLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChlKSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0pLG8sdGhpcyxbWzEsN11dKX0pKSl9KSkpO2Nhc2UgNjQ6dGhyb3cgbmV3IEkoIlNQQS1BVVRIX0hFTFBFUi1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIik7Y2FzZSA2NTpjYXNlImVuZCI6cmV0dXJuIGMuc3RvcCgpfX0pLGMsdGhpcyxbWzUsNTIsNTUsNThdXSl9KSkpfX0se2tleToicmVxdWVzdEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGkpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbygpe3ZhciBzLHUsYz10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6cmV0dXJuIG8ubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAyOmlmKChzPW8uc2VudCkuc3RvcmFnZSE9PVUuQnJvd3Nlck1lbW9yeXx8IXMuZW5hYmxlUEtDRXx8IXQpe28ubmV4dD05O2JyZWFrfXJldHVybiB1PWNyLmdldFBLQ0UoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKHQpKSxvLm5leHQ9Nyx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShMLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0odCksdSk7Y2FzZSA3Om8ubmV4dD0xMjticmVhaztjYXNlIDk6aWYocy5zdG9yYWdlIT09VS5XZWJXb3JrZXJ8fCFhKXtvLm5leHQ9MTI7YnJlYWt9cmV0dXJuIG8ubmV4dD0xMix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShhLG51bGwhPWk/aToiIik7Y2FzZSAxMjppZighZSl7by5uZXh0PTE0O2JyZWFrfXJldHVybiBvLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxudWxsIT10P3Q6IiIsbnVsbCE9aT9pOiIiKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBTKGMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocy5zdG9yYWdlPT09VS5XZWJXb3JrZXIpe2UubmV4dD0xMDticmVha31yZXR1cm4gZS50MD1jcixlLm5leHQ9NCx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCk7Y2FzZSA0OmUudDE9ZS5zZW50LGUudDAuc2V0U2lnbk91dFVSTC5jYWxsKGUudDAsZS50MSksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCkpLG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLGUubmV4dD0xMTticmVhaztjYXNlIDEwOnRoaXMuX3NwYUhlbHBlciYmdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKTtjYXNlIDExOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDE0OnJldHVybiBvLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgSSgiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0pLG8sdGhpcyl9KSkpfX0se2tleToidHJ5U2lnbkluU2lsZW50bHkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgYTtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXt2YXIgbyxzLHUsYz10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oaSl7Zm9yKDs7KXN3aXRjaChpLnByZXY9aS5uZXh0KXtjYXNlIDA6aWYoIWNyLmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSl7aS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGkubmV4dD0zLG4ucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpO2Nhc2UgMzpyZXR1cm4gaS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSkpO2Nhc2UgNDpyZXR1cm4gbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oYT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKSxpLnByZXY9NixpLm5leHQ9OSxlKCk7Y2FzZSA5OnU9aS5zZW50LHMuc3JjPXUsaS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIGkucHJldj0xMyxpLnQwPWkuY2F0Y2goNiksaS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoaS50MCkpO2Nhc2UgMTY6cmV0dXJuIGkuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3ZhciBhPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSghMSl9KSwxZTQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoZnVuY3Rpb24gaShvKXtyZXR1cm4gUyhjLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHMoKXt2YXIgdSxjLGYsbCxoO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT0oaD1vLmRhdGEpP3ZvaWQgMDpoLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLGNsZWFyVGltZW91dChhKSxlKCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWg/dm9pZCAwOmgudHlwZSkmJihudWxsPT09KHU9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlKSYmdChudWxsPT09KGM9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5jb2RlLG51bGw9PT0oZj1udWxsPT1oP3ZvaWQgMDpoLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNlc3Npb25TdGF0ZSxudWxsPT09KGw9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zdGF0ZSkudGhlbigoZnVuY3Rpb24odCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLGUodCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxuKGUpfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGEpfSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHMpfSkpKX0pKX0pKSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLGksbnVsbCxbWzYsMTNdXSl9KSkpfX0se2tleToiaGFuZGxlU2lnbkluIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIGksbyxzLHUsYztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gaT1yLnNlbnQsci5uZXh0PTUsZSgpO2Nhc2UgNTppZighci5zZW50KXtyLm5leHQ9NzticmVha31yZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSkpO2Nhc2UgNzppZihpLnN0b3JhZ2U9PT1VLldlYldvcmtlcil7ci5uZXh0PTE5O2JyZWFrfXJldHVybiByLm5leHQ9MTAsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCk7Y2FzZSAxMDppZighci5zZW50KXtyLm5leHQ9MTk7YnJlYWt9cmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZ0KCksci50MD1Qcm9taXNlLHIubmV4dD0xNyx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCk7Y2FzZSAxNzpyZXR1cm4gci50MT1yLnNlbnQsci5hYnJ1cHQoInJldHVybiIsci50MC5yZXNvbHZlLmNhbGwoci50MCxyLnQxKSk7Y2FzZSAxOTppZihvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoVykscz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KHopLCFvKXtyLm5leHQ9Mjc7YnJlYWt9dGhyb3codT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkuc2VhcmNoUGFyYW1zLmRlbGV0ZShXKSx1LnNlYXJjaFBhcmFtcy5kZWxldGUoeiksaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxkb2N1bWVudC50aXRsZSx1LnRvU3RyaW5nKCkpLG5ldyBJKCJTUEEtQVVUSF9IRUxQRVItU0ktU0UwMSIsbyxudWxsIT1zP3M6IiIpO2Nhc2UgMjc6aWYoaS5zdG9yYWdlIT09VS5XZWJXb3JrZXJ8fCFuKXtyLm5leHQ9MzM7YnJlYWt9cmV0dXJuIHIubmV4dD0zMCxuKCk7Y2FzZSAzMDppZighKGM9ci5zZW50KSl7ci5uZXh0PTMzO2JyZWFrfXJldHVybiByLmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDMzOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRCYXNpY1VzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXREZWNvZGVkSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENTZXJ2aWNlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX1dKSxlfSgpOyFmdW5jdGlvbihlKXt2YXIgdCxuPXNlbGY7bi5vbm1lc3NhZ2U9ZnVuY3Rpb24obil7dmFyIHM9bi5kYXRhLHU9bi5wb3J0cztyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBjLGYsbCxoLHAsZDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmlmKHA9dVswXSxzLnR5cGU9PT1CfHx0KXtyLm5leHQ9NDticmVha31yZXR1cm4gcC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBJKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKSxyLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnIudDA9cy50eXBlLHIubmV4dD1yLnQwPT09Qj83OiJnZXRfYXV0aF91cmwiPT09ci50MD8yMjoicmVxdWVzdF9nZXRfdG9rZW4iPT09ci50MD8yNDoiaHR0cC1yZXF1ZXN0Ij09PXIudDA/MjY6Imh0dHAtcmVxdWVzdC1hbGwiPT09ci50MD8yODoic2lnbi1vdXQiPT09ci50MD8zMDoicmVxdWVzdC1jdXN0b20tZ3JhbnQiPT09ci50MD80NDoicmV2b2tlLWFjY2Vzcy10b2tlbiI9PT1yLnQwPzQ2OiJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI9PT1yLnQwPzQ4OiJnZXQtYmFzaWMtdXNlci1pbmZvIj09PXIudDA/NjI6ImdldC1kZWNvZGVkLWlkLXRva2VuIj09PXIudDA/NzY6ImdldF9pZF90b2tlbiI9PT1yLnQwPzkwOiJlbmFibGVfaHR0cF9oYW5kbGVyIj09PXIudDA/MTA0OiJkaXNhYmxlX2h0dHBfaGFuZGxlciI9PT1yLnQwPzEwNzoiaXNfYXV0aGVudGljYXRlZCI9PT1yLnQwPzExMDoiZ2V0X3NpZ25fb3V0X3VybCI9PT1yLnQwPzEyNDoicmVmcmVzaF9hY2Nlc3MtdG9rZW4iPT09ci50MD8xMzg6InN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI9PT1yLnQwPzE1Mjoic2V0X3Nlc3Npb25fc3RhdGUiPT09ci50MD8xNTQ6InVwZGF0ZV9jb25maWciPT09ci50MD8xNjg6ImdldF9jb25maWdfZGF0YSI9PT1yLnQwPzE4MjoxOTY7YnJlYWs7Y2FzZSA3OnJldHVybiByLnByZXY9NyxkPU9iamVjdC5hc3NpZ24oe30scy5kYXRhKSxyLm5leHQ9MTEsTGEoZCxlKTtjYXNlIDExOih0PXIuc2VudCkuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhvKSx0LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhhKSx0LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGkpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxyLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpyLnByZXY9MTgsci50MT1yLmNhdGNoKDcpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQxKSk7Y2FzZSAyMTpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMjI6cmV0dXJuIHQuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1zP3ZvaWQgMDpzLmRhdGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMjQ6cmV0dXJuIHQucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0oYz1udWxsPT1zP3ZvaWQgMDpzLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmNvZGUsbnVsbD09PShmPW51bGw9PXM/dm9pZCAwOnMuZGF0YSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2Vzc2lvblN0YXRlLG51bGw9PT0obD1udWxsPT1zP3ZvaWQgMDpzLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnBrY2UsbnVsbD09PShoPW51bGw9PXM/dm9pZCAwOnMuZGF0YSl8fHZvaWQgMD09PWg/dm9pZCAwOmguc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMjY6cmV0dXJuIHQuaHR0cFJlcXVlc3Qocy5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDI4OnJldHVybiB0Lmh0dHBSZXF1ZXN0QWxsKHMuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxyLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAzMDpyZXR1cm4gci5wcmV2PTMwLHIudDI9cCxyLnQzPXVyLHIubmV4dD0zNSx0LnNpZ25PdXQoKTtjYXNlIDM1OnIudDQ9ci5zZW50LHIudDU9ci50My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50MyxyLnQ0KSxyLnQyLnBvc3RNZXNzYWdlLmNhbGwoci50MixyLnQ1KSxyLm5leHQ9NDM7YnJlYWs7Y2FzZSA0MDpyLnByZXY9NDAsci50Nj1yLmNhdGNoKDMwKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50NikpO2Nhc2UgNDM6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDQ0OnJldHVybiB0LnJlcXVlc3RDdXN0b21HcmFudChzLmRhdGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgNDY6cmV0dXJuIHQucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDQ4OnJldHVybiByLnByZXY9NDgsci50Nz1wLHIudDg9dXIsci5uZXh0PTUzLHQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTtjYXNlIDUzOnIudDk9ci5zZW50LHIudDEwPXIudDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDgsci50OSksci50Ny5wb3N0TWVzc2FnZS5jYWxsKHIudDcsci50MTApLHIubmV4dD02MTticmVhaztjYXNlIDU4OnIucHJldj01OCxyLnQxMT1yLmNhdGNoKDQ4KSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50MTEpKTtjYXNlIDYxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSA2MjpyZXR1cm4gci5wcmV2PTYyLHIudDEyPXAsci50MTM9dXIsci5uZXh0PTY3LHQuZ2V0QmFzaWNVc2VySW5mbygpO2Nhc2UgNjc6ci50MTQ9ci5zZW50LHIudDE1PXIudDEzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQxMyxyLnQxNCksci50MTIucG9zdE1lc3NhZ2UuY2FsbChyLnQxMixyLnQxNSksci5uZXh0PTc1O2JyZWFrO2Nhc2UgNzI6ci5wcmV2PTcyLHIudDE2PXIuY2F0Y2goNjIpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQxNikpO2Nhc2UgNzU6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDc2OnJldHVybiByLnByZXY9NzYsci50MTc9cCxyLnQxOD11cixyLm5leHQ9ODEsdC5nZXREZWNvZGVkSURUb2tlbigpO2Nhc2UgODE6ci50MTk9ci5zZW50LHIudDIwPXIudDE4LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQxOCxyLnQxOSksci50MTcucG9zdE1lc3NhZ2UuY2FsbChyLnQxNyxyLnQyMCksci5uZXh0PTg5O2JyZWFrO2Nhc2UgODY6ci5wcmV2PTg2LHIudDIxPXIuY2F0Y2goNzYpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQyMSkpO2Nhc2UgODk6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDkwOnJldHVybiByLnByZXY9OTAsci50MjI9cCxyLnQyMz11cixyLm5leHQ9OTUsdC5nZXRJRFRva2VuKCk7Y2FzZSA5NTpyLnQyND1yLnNlbnQsci50MjU9ci50MjMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDIzLHIudDI0KSxyLnQyMi5wb3N0TWVzc2FnZS5jYWxsKHIudDIyLHIudDI1KSxyLm5leHQ9MTAzO2JyZWFrO2Nhc2UgMTAwOnIucHJldj0xMDAsci50MjY9ci5jYXRjaCg5MCkscC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKHIudDI2KSk7Y2FzZSAxMDM6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDEwNDpyZXR1cm4gdC5lbmFibGVIdHRwSGFuZGxlcigpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxyLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxMDc6cmV0dXJuIHQuZGlzYWJsZUh0dHBIYW5kbGVyKCkscC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpLHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDExMDpyZXR1cm4gci5wcmV2PTExMCxyLnQyNz1wLHIudDI4PXVyLHIubmV4dD0xMTUsdC5pc0F1dGhlbnRpY2F0ZWQoKTtjYXNlIDExNTpyLnQyOT1yLnNlbnQsci50MzA9ci50MjguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDI4LHIudDI5KSxyLnQyNy5wb3N0TWVzc2FnZS5jYWxsKHIudDI3LHIudDMwKSxyLm5leHQ9MTIzO2JyZWFrO2Nhc2UgMTIwOnIucHJldj0xMjAsci50MzE9ci5jYXRjaCgxMTApLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQzMSkpO2Nhc2UgMTIzOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxMjQ6cmV0dXJuIHIucHJldj0xMjQsci50MzI9cCxyLnQzMz11cixyLm5leHQ9MTI5LHQuZ2V0U2lnbk91dFVSTCgpO2Nhc2UgMTI5OnIudDM0PXIuc2VudCxyLnQzNT1yLnQzMy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50MzMsci50MzQpLHIudDMyLnBvc3RNZXNzYWdlLmNhbGwoci50MzIsci50MzUpLHIubmV4dD0xMzc7YnJlYWs7Y2FzZSAxMzQ6ci5wcmV2PTEzNCxyLnQzNj1yLmNhdGNoKDEyNCkscC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKHIudDM2KSk7Y2FzZSAxMzc6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDEzODpyZXR1cm4gci5wcmV2PTEzOCxyLnQzNz1wLHIudDM4PXVyLHIubmV4dD0xNDMsdC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjYXNlIDE0MzpyLnQzOT1yLnNlbnQsci50NDA9ci50MzguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDM4LHIudDM5KSxyLnQzNy5wb3N0TWVzc2FnZS5jYWxsKHIudDM3LHIudDQwKSxyLm5leHQ9MTUxO2JyZWFrO2Nhc2UgMTQ4OnIucHJldj0xNDgsci50NDE9ci5jYXRjaCgxMzgpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQ0MSkpO2Nhc2UgMTUxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxNTI6dHJ5e3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh0LnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1yZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMTU0OnJldHVybiByLnByZXY9MTU0LHIudDQyPXAsci50NDM9dXIsci5uZXh0PTE1OSx0LnNldFNlc3Npb25TdGF0ZShudWxsPT1zP3ZvaWQgMDpzLmRhdGEpO2Nhc2UgMTU5OnIudDQ0PXIuc2VudCxyLnQ0NT1yLnQ0My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50NDMsci50NDQpLHIudDQyLnBvc3RNZXNzYWdlLmNhbGwoci50NDIsci50NDUpLHIubmV4dD0xNjc7YnJlYWs7Y2FzZSAxNjQ6ci5wcmV2PTE2NCxyLnQ0Nj1yLmNhdGNoKDE1NCkscC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKHIudDQ2KSk7Y2FzZSAxNjc6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDE2ODpyZXR1cm4gci5wcmV2PTE2OCxyLnQ0Nz1wLHIudDQ4PXVyLHIubmV4dD0xNzMsdC51cGRhdGVDb25maWcobnVsbD09cz92b2lkIDA6cy5kYXRhKTtjYXNlIDE3MzpyLnQ0OT1yLnNlbnQsci50NTA9ci50NDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDQ4LHIudDQ5KSxyLnQ0Ny5wb3N0TWVzc2FnZS5jYWxsKHIudDQ3LHIudDUwKSxyLm5leHQ9MTgxO2JyZWFrO2Nhc2UgMTc4OnIucHJldj0xNzgsci50NTE9ci5jYXRjaCgxNjgpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQ1MSkpO2Nhc2UgMTgxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxODI6cmV0dXJuIHIucHJldj0xODIsci50NTI9cCxyLnQ1Mz11cixyLm5leHQ9MTg3LHQuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMTg3OnIudDU0PXIuc2VudCxyLnQ1NT1yLnQ1My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50NTMsci50NTQpLHIudDUyLnBvc3RNZXNzYWdlLmNhbGwoci50NTIsci50NTUpLHIubmV4dD0xOTU7YnJlYWs7Y2FzZSAxOTI6ci5wcmV2PTE5MixyLnQ1Nj1yLmNhdGNoKDE4MikscC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKHIudDU2KSk7Y2FzZSAxOTU6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDE5NjpudWxsPT1wfHxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEkoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLUlWMDIiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIiwiVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgIi5jb25jYXQocy50eXBlLCIsIGlzIGludmFsaWQuIikpKSk7Y2FzZSAxOTc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLG51bGwsW1s3LDE4XSxbMzAsNDBdLFs0OCw1OF0sWzYyLDcyXSxbNzYsODZdLFs5MCwxMDBdLFsxMTAsMTIwXSxbMTI0LDEzNF0sWzEzOCwxNDhdLFsxNTQsMTY0XSxbMTY4LDE3OF0sWzE4MiwxOTJdXSl9KSkpfTt2YXIgYT1mdW5jdGlvbigpe24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LGk9ZnVuY3Rpb24oZSl7bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0sbz1mdW5jdGlvbigpe24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3QtZmluaXNoIn0pfX0oKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVYShlLHQpfSkpO3JldHVybnt9fSgpOwoK",dB=null,sB=!1,function(t){return mB=mB||lB(uB,dB,sB),new Worker(mB,t)}),ZB="init",IB="sign-out",yB="http-request",gB="http-request-all",XB="request-custom-grant",GB="revoke-access-token",fB="request-start",VB="request-success",WB="request-finish",vB="get-oidc-service-endpoints",CB="get-basic-user-info",SB="get-decoded-id-token",YB="enable_http_handler",RB="disable_http_handler",KB="get_auth_url",NB="request_get_token",LB="is_authenticated",JB="get_sign_out_url",xB="refresh_access-token",HB="set_session_state",kB="start_auto_refresh_token",UB="update_config",TB="get_id_token",wB="check_session_signed_in",FB="check_session_signed_out",AB="get_config_data",BB="set_session_state_from_iframe";t.Storage=void 0,(hB=t.Storage||(t.Storage={})).LocalStorage="localStorage",hB.SessionStorage="sessionStorage",hB.WebWorker="webWorker",hB.BrowserMemory="browserMemory",t.Hooks=void 0,(bB=t.Hooks||(t.Hooks={})).SignIn="sign-in",bB.SignOut="sign-out",bB.Initialize="initialize",bB.HttpRequestStart="http-request-start",bB.HttpRequestFinish="http-request-finish",bB.HttpRequestError="http-request-error",bB.HttpRequestSuccess="http-request-success",bB.RevokeAccessToken="revoke-access-token",bB.CustomGrant="custom-grant",bB.SignOutFailed="sign-out-failed";var zB,jB,MB,QB,PB,EB,DB,OB,_B,qB,$B,tz,ez,nz,iz,rz,cz,oz="rpIFrame",az="promptNoneIFrame",lz="Y2hlY2tTZXNzaW9u",uz="sign-in-silently",dz="initialized-silent-sign-in",sz="promptNoneRequestSent",mz="error",hz="error_description",bz="custom_grant_config",pz="state",Zz="Access token is invalid",Iz=function(){function e(t,n){d(this,e),this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=n}return m(e,[{key:"attachToken",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!Object.assign({attachToken:!0},t).attachToken){e.next=11;break}return e.t0=Object,e.t1=Object.assign({},t.headers),e.t2="Bearer ",e.next=7,this._authenticationClient.getAccessToken();case 7:e.t3=e.sent,e.t4=e.t2.concat.call(e.t2,e.t3),e.t5={Authorization:e.t4},t.headers=e.t0.assign.call(e.t0,e.t1,e.t5);case 11:case"end":return e.stop()}}),e,this)})))}},{key:"setHttpRequestStartCallback",value:function(t,e){(null==t?void 0:t.setHttpRequestStartCallback)&&t.setHttpRequestStartCallback(e)}},{key:"setHttpRequestSuccessCallback",value:function(t,e){(null==t?void 0:t.setHttpRequestSuccessCallback)&&t.setHttpRequestSuccessCallback(e)}},{key:"setHttpRequestFinishCallback",value:function(t,e){(null==t?void 0:t.setHttpRequestFinishCallback)&&t.setHttpRequestFinishCallback(e)}},{key:"enableHttpHandler",value:function(t){(null==t?void 0:t.enableHandler)&&t.enableHandler()}},{key:"disableHttpHandler",value:function(t){(null==t?void 0:t.disableHandler)&&t.disableHandler()}},{key:"initializeSessionManger",value:function(t,e,n,i,r){var c,o,a;r.initialize(t.clientID,null!==(c=e.checkSessionIframe)&&void 0!==c?c:"",n,null!==(o=t.checkSessionInterval)&&void 0!==o?o:3,null!==(a=t.sessionRefreshInterval)&&void 0!==a?a:300,t.signInRedirectURL,i)}},{key:"requestCustomGrant",value:function(t,e){var n,i,r;return jA(this,void 0,void 0,o().mark((function c(){var a,l,u,d,s,m=this;return o().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(a=!0,l=!1,!(null==t?void 0:t.tokenEndpoint)){c.next=39;break}return a=!1,u=0,c.t0=[],c.t1=W,c.next=9,this._dataLayer.getConfigData();case 9:if(c.t4=n=c.sent,c.t3=null===c.t4,c.t3){c.next=13;break}c.t3=void 0===n;case 13:if(!c.t3){c.next=17;break}c.t5=void 0,c.next=18;break;case 17:c.t5=n.resourceServerURLs;case 18:if(c.t6=i=c.t5,c.t2=null!==c.t6,!c.t2){c.next=22;break}c.t2=void 0!==i;case 22:if(!c.t2){c.next=26;break}c.t7=i,c.next=27;break;case 26:c.t7=[];case 27:c.t8=c.t7,c.t9=(0,c.t1)(c.t8),c.t10=[t.baseUrl],d=c.t0.concat.call(c.t0,c.t9,c.t10);case 31:if(!(u<d.length)){c.next=39;break}if(!(s=d[u])||!(null===(r=t.tokenEndpoint)||void 0===r?void 0:r.startsWith(s))){c.next=36;break}return l=!0,c.abrupt("break",39);case 36:u++,c.next=31;break;case 39:if(t.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(bz,JSON.stringify(t)),!a&&!l){c.next=44;break}return c.abrupt("return",this._authenticationClient.requestCustomGrant(t).then((function(n){return jA(m,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(e&&"function"==typeof e&&e(t),!t.returnsSession){i.next=6;break}return this._spaHelper.refreshAccessTokenAutomatically(),i.abrupt("return",this._authenticationClient.getBasicUserInfo());case 6:return i.abrupt("return",n);case 7:case"end":return i.stop()}}),i,this)})))})).catch((function(t){return Promise.reject(t)})));case 44:return c.abrupt("return",Promise.reject(new tB("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`")));case 45:case"end":return c.stop()}}),c,this)})))}},{key:"getCustomGrantConfigData",value:function(){return jA(this,void 0,void 0,o().mark((function t(){var e;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(bz);case 2:if(!(e=t.sent)){t.next=7;break}return t.abrupt("return",JSON.parse(e));case 7:return t.abrupt("return",null);case 8:case"end":return t.stop()}}),t,this)})))}},{key:"refreshAccessToken",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._authenticationClient.refreshAccessToken();case 3:return e.next=5,this.getCustomGrantConfigData();case 5:if(!(n=e.sent)){e.next=9;break}return e.next=9,this.requestCustomGrant(n,t);case 9:return this._spaHelper.refreshAccessTokenAutomatically(),e.abrupt("return",this._authenticationClient.getBasicUserInfo());case 13:return e.prev=13,e.t0=e.catch(0),e.abrupt("return",Promise.reject(e.t0));case 16:case"end":return e.stop()}}),e,this,[[0,13]])})))}},{key:"httpRequest",value:function(t,e,n,i,r,c){var a,l;return jA(this,void 0,void 0,o().mark((function u(){var d,s,m,h,b,p=this;return o().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return d=!1,u.next=3,this._dataLayer.getConfigData();case 3:return s=u.sent,m=0,u.t0=[],u.t1=W,u.next=9,null==s?void 0:s.resourceServerURLs;case 9:if(u.t3=a=u.sent,u.t2=null!==u.t3,!u.t2){u.next=13;break}u.t2=void 0!==a;case 13:if(!u.t2){u.next=17;break}u.t4=a,u.next=18;break;case 17:u.t4=[];case 18:u.t5=u.t4,u.t6=(0,u.t1)(u.t5),u.t7=[s.baseUrl],h=u.t0.concat.call(u.t0,u.t6,u.t7);case 22:if(!(m<h.length)){u.next=30;break}if(!(b=h[m])||!(null===(l=null==e?void 0:e.url)||void 0===l?void 0:l.startsWith(b))){u.next=27;break}return d=!0,u.abrupt("break",30);case 27:m++,u.next=22;break;case 30:if(!d){u.next=34;break}return u.abrupt("return",t.request(e).then((function(t){return Promise.resolve(t)})).catch((function(a){return jA(p,void 0,void 0,o().mark((function l(){var u,d,s,m,h;return o().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(401!==(null===(u=null==a?void 0:a.response)||void 0===u?void 0:u.status)&&(null==a?void 0:a.response)){o.next=31;break}return o.prev=1,o.next=4,this.refreshAccessToken(c);case 4:m=o.sent,o.next=15;break;case 7:if(o.prev=7,o.t0=o.catch(1),!n){o.next=14;break}if("function"!=typeof i){o.next=13;break}return o.next=13,i(Object.assign(Object.assign({},a),{code:Zz}));case 13:"function"==typeof r&&r();case 14:throw new tB("SPA-AUTH_HELPER-HR-SE01",null!==(d=null===o.t0||void 0===o.t0?void 0:o.t0.name)&&void 0!==d?d:"Refresh token request failed.",null!==(s=null===o.t0||void 0===o.t0?void 0:o.t0.message)&&void 0!==s?s:"An error occurred while trying to refresh the access token following a 401 response from the server.");case 15:if(!m){o.next=31;break}return o.prev=16,o.next=19,t.request(e);case 19:return h=o.sent,o.abrupt("return",Promise.resolve(h));case 23:if(o.prev=23,o.t1=o.catch(16),!n){o.next=30;break}if("function"!=typeof i){o.next=29;break}return o.next=29,i(o.t1);case 29:"function"==typeof r&&r();case 30:return o.abrupt("return",Promise.reject(o.t1));case 31:if(!n){o.next=36;break}if("function"!=typeof i){o.next=35;break}return o.next=35,i(a);case 35:"function"==typeof r&&r();case 36:return o.abrupt("return",Promise.reject(a));case 37:case"end":return o.stop()}}),l,this,[[1,7],[16,23]])})))})));case 34:return u.abrupt("return",Promise.reject(new tB("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`")));case 35:case"end":return u.stop()}}),u,this)})))}},{key:"httpRequestAll",value:function(t,e,n,i,r){var c,a,l;return jA(this,void 0,void 0,o().mark((function u(){var d,s,m,h,b,p,Z,I,y,g,X=this;return o().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return d=!0,u.next=3,this._dataLayer.getConfigData();case 3:s=u.sent,m=S(t),u.prev=5,m.s();case 7:if((h=m.n()).done){u.next=50;break}return b=h.value,p=!1,Z=0,u.t0=[],u.t1=W,u.next=15,s;case 15:if(u.t4=c=u.sent,u.t3=null===u.t4,u.t3){u.next=19;break}u.t3=void 0===c;case 19:if(!u.t3){u.next=23;break}u.t5=void 0,u.next=24;break;case 23:u.t5=c.resourceServerURLs;case 24:if(u.t6=a=u.t5,u.t2=null!==u.t6,!u.t2){u.next=28;break}u.t2=void 0!==a;case 28:if(!u.t2){u.next=32;break}u.t7=a,u.next=33;break;case 32:u.t7=[];case 33:u.t8=u.t7,u.t9=(0,u.t1)(u.t8),u.t10=[s.baseUrl],I=u.t0.concat.call(u.t0,u.t9,u.t10);case 37:if(!(Z<I.length)){u.next=45;break}if(!(y=I[Z])||!(null===(l=b.url)||void 0===l?void 0:l.startsWith(y))){u.next=42;break}return p=!0,u.abrupt("break",45);case 42:Z++,u.next=37;break;case 45:if(p){u.next=48;break}return d=!1,u.abrupt("break",50);case 48:u.next=7;break;case 50:u.next=55;break;case 52:u.prev=52,u.t11=u.catch(5),m.e(u.t11);case 55:return u.prev=55,m.f(),u.finish(55);case 58:if(g=[],!d){u.next=64;break}return t.forEach((function(t){g.push(e.request(t))})),u.abrupt("return",(null==e?void 0:e.all)&&e.all(g).then((function(t){return Promise.resolve(t)})).catch((function(t){return jA(X,void 0,void 0,o().mark((function c(){var a,l,u,d,s=this;return o().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(401!==(null===(a=null==t?void 0:t.response)||void 0===a?void 0:a.status)&&(null==t?void 0:t.response)){c.next=17;break}return c.prev=1,c.next=4,this._authenticationClient.refreshAccessToken();case 4:d=c.sent,c.next=15;break;case 7:if(c.prev=7,c.t0=c.catch(1),!n){c.next=14;break}if("function"!=typeof i){c.next=13;break}return c.next=13,i(Object.assign(Object.assign({},t),{code:Zz}));case 13:"function"==typeof r&&r();case 14:throw new tB("SPA-AUTH_HELPER-HRA-SE01",null!==(l=null===c.t0||void 0===c.t0?void 0:c.t0.name)&&void 0!==l?l:"Refresh token request failed.",null!==(u=null===c.t0||void 0===c.t0?void 0:c.t0.message)&&void 0!==u?u:"An error occurred while trying to refresh the access token following a 401 response from the server.");case 15:if(!d){c.next=17;break}return c.abrupt("return",e.all&&e.all(g).then((function(t){return Promise.resolve(t)})).catch((function(t){return jA(s,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!n){e.next=5;break}if("function"!=typeof i){e.next=4;break}return e.next=4,i(t);case 4:"function"==typeof r&&r();case 5:return e.abrupt("return",Promise.reject(t));case 6:case"end":return e.stop()}}),e)})))})));case 17:if(!n){c.next=22;break}if("function"!=typeof i){c.next=21;break}return c.next=21,i(t);case 21:"function"==typeof r&&r();case 22:return c.abrupt("return",Promise.reject(t));case 23:case"end":return c.stop()}}),c,this,[[1,7]])})))})));case 64:throw new tB("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`");case 65:case"end":return u.stop()}}),u,this,[[5,52,55,58]])})))}},{key:"requestAccessToken",value:function(e,n,i,r,c){return jA(this,void 0,void 0,o().mark((function a(){var l,u,d=this;return o().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,this._dataLayer.getConfigData();case 2:if((l=a.sent).storage!==t.Storage.BrowserMemory||!l.enablePKCE||!n){a.next=9;break}return u=Xz.getPKCE(eB.extractPKCEKeyFromStateParam(n)),a.next=7,this._authenticationClient.setPKCECode(eB.extractPKCEKeyFromStateParam(n),u);case 7:a.next=12;break;case 9:if(l.storage!==t.Storage.WebWorker||!r){a.next=12;break}return a.next=12,this._authenticationClient.setPKCECode(r,null!=c?c:"");case 12:if(!e){a.next=14;break}return a.abrupt("return",this._authenticationClient.requestAccessToken(e,null!=n?n:"",null!=c?c:"").then((function(){return jA(d,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l.storage===t.Storage.WebWorker){e.next=10;break}return e.t0=Xz,e.next=4,this._authenticationClient.getSignOutURL();case 4:e.t1=e.sent,e.t0.setSignOutURL.call(e.t0,e.t1),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically()),i&&"function"==typeof i&&l.enableOIDCSessionManagement&&i(),e.next=11;break;case 10:this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically();case 11:return e.abrupt("return",this._authenticationClient.getBasicUserInfo());case 12:case"end":return e.stop()}}),e,this)})))})).catch((function(t){return Promise.reject(t)})));case 14:return a.abrupt("return",Promise.reject(new tB("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found.")));case 15:case"end":return a.stop()}}),a,this)})))}},{key:"trySignInSilently",value:function(t,e,n){var i;return jA(this,void 0,void 0,o().mark((function r(){var c,a,l,u=this;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(!Xz.isInitializedSilentSignIn()){r.next=4;break}return r.next=3,n.receivePromptNoneResponse();case 3:return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 4:return c=document.getElementById(oz),a=null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(az),r.prev=6,r.next=9,t();case 9:l=r.sent,a.src=l,r.next=16;break;case 13:return r.prev=13,r.t0=r.catch(6),r.abrupt("return",Promise.reject(r.t0));case 16:return r.abrupt("return",new Promise((function(t,n){var i=setTimeout((function(){t(!1)}),1e4);window.addEventListener("message",(function r(c){return jA(u,void 0,void 0,o().mark((function a(){var l,u,d,s,m;return o().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:(null==(m=c.data)?void 0:m.type)==FB&&(window.removeEventListener("message",r),clearTimeout(i),t(!1)),(null==m?void 0:m.type)==wB&&(null===(l=null==m?void 0:m.data)||void 0===l?void 0:l.code)&&e(null===(u=null==m?void 0:m.data)||void 0===u?void 0:u.code,null===(d=null==m?void 0:m.data)||void 0===d?void 0:d.sessionState,null===(s=null==m?void 0:m.data)||void 0===s?void 0:s.state).then((function(e){window.removeEventListener("message",r),t(e)})).catch((function(t){window.removeEventListener("message",r),n(t)})).finally((function(){clearTimeout(i)}));case 3:case"end":return o.stop()}}),a)})))}))})));case 17:case"end":return r.stop()}}),r,null,[[6,13]])})))}},{key:"handleSignIn",value:function(e,n,i){return jA(this,void 0,void 0,o().mark((function r(){var c,a,l,u,d;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._dataLayer.getConfigData();case 2:return c=r.sent,r.next=5,e();case 5:if(!r.sent){r.next=7;break}return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 7:if(c.storage===t.Storage.WebWorker){r.next=19;break}return r.next=10,this._authenticationClient.isAuthenticated();case 10:if(!r.sent){r.next=19;break}return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(),c.enableOIDCSessionManagement&&n(),r.t0=Promise,r.next=17,this._authenticationClient.getBasicUserInfo();case 17:return r.t1=r.sent,r.abrupt("return",r.t0.resolve.call(r.t0,r.t1));case 19:if(a=new URL(window.location.href).searchParams.get(mz),l=new URL(window.location.href).searchParams.get(hz),!a){r.next=27;break}throw(u=new URL(window.location.href)).searchParams.delete(mz),u.searchParams.delete(hz),history.pushState(null,document.title,u.toString()),new tB("SPA-AUTH_HELPER-SI-SE01",a,null!=l?l:"");case 27:if(c.storage!==t.Storage.WebWorker||!i){r.next=33;break}return r.next=30,i();case 30:if(!(d=r.sent)){r.next=33;break}return r.abrupt("return",d);case 33:case"end":return r.stop()}}),r,this)})))}},{key:"getBasicUserInfo",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getDecodedIDToken",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getIDToken());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getOIDCServiceEndpoints",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getAccessToken",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getAccessToken());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"isAuthenticated",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)})))}}]),e}(),yz=function(){function t(e){d(this,t),this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}return m(t,[{key:"refreshAccessTokenAutomatically",value:function(){return jA(this,void 0,void 0,o().mark((function t(){var e,n,i,r=this;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getSessionData();case 2:if(!(e=t.sent).refresh_token){t.next=9;break}return n=parseInt(e.expires_in),i=setTimeout((function(){return jA(r,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationClient.refreshAccessToken();case 2:case"end":return t.stop()}}),t,this)})))}),1e3*(n<=10?n:n-10)),t.next=9,this._dataLayer.setTemporaryDataParameter(PA,JSON.stringify(i));case 9:case"end":return t.stop()}}),t,this)})))}},{key:"clearRefreshTokenTimeout",value:function(){return jA(this,void 0,void 0,o().mark((function t(){var e;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(PA);case 2:if(!t.sent){t.next=9;break}return t.t0=JSON,t.next=6,this._dataLayer.getTemporaryDataParameter(PA);case 6:t.t1=t.sent,e=t.t0.parse.call(t.t0,t.t1),clearTimeout(e);case 9:case"end":return t.stop()}}),t,this)})))}}]),t}(),gz=function(){function t(){d(this,t)}return m(t,null,[{key:"generateSuccessMessage",value:function(t){return{blob:(null==t?void 0:t.data)instanceof Blob?null==t?void 0:t.data:null,data:JSON.stringify(null!=t?t:""),success:!0}}},{key:"generateFailureMessage",value:function(t){return(null==t?void 0:t.toJSON)&&delete t.toJSON,{error:JSON.stringify(null!=t?t:""),success:!1}}}]),t}(),Xz=function(){function t(){d(this,t)}return m(t,null,[{key:"removeAuthorizationCode",value:function(){var t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}},{key:"getPKCE",value:function(t){var e;return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:""}},{key:"setPKCE",value:function(t,e){sessionStorage.setItem(t,e)}},{key:"setSignOutURL",value:function(t){sessionStorage.setItem(_A,t)}},{key:"getSignOutURL",value:function(){var t;return null!==(t=sessionStorage.getItem(_A))&&void 0!==t?t:""}},{key:"removePKCE",value:function(t){sessionStorage.removeItem(t)}},{key:"canContinueSignIn",value:function(e,n){return!(e&&!t.hasErrorInURL()&&!t.hasAuthSearchParamsInURL()&&!n)}},{key:"isInitializedSilentSignIn",value:function(){return t.isSilentStatePresentInURL()}},{key:"wasSignInCalled",value:function(){return!(!t.hasErrorInURL()&&!t.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}},{key:"wasSilentSignInCalled",value:function(){var t=sessionStorage.getItem(dz),e=t?JSON.parse(t):null;return Boolean(e)}},{key:"isSignOutSuccessful",value:function(){return jA(this,void 0,void 0,o().mark((function t(){var e;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!aB.isSignOutSuccessful(window.location.href)){t.next=6;break}return e=window.location.href.split("?")[0],history.pushState({},document.title,e),t.next=5,aB.clearUserSessionData();case 5:return t.abrupt("return",!0);case 6:return t.abrupt("return",!1);case 7:case"end":return t.stop()}}),t)})))}},{key:"didSignOutFail",value:function(){if(aB.didSignOutFail(window.location.href)){var t=new URL(window.location.href),e=t.searchParams.get(mz),n=t.searchParams.get(hz),i=window.location.href.split("?")[0];return history.pushState({},document.title,i),{description:null!=n?n:"",error:null!=e?e:""}}return!1}},{key:"isSilentStatePresentInURL",value:function(){var t,e=new URL(window.location.href).searchParams.get("state");return null!==(t=null==e?void 0:e.includes(uz))&&void 0!==t&&t}},{key:"hasAuthSearchParamsInURL",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search,e=/[?&]code=[^&]+/;return e.test(t)}},{key:"hasErrorInURL",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href,e=new URL(t);return!!e.searchParams.get(mz)&&e.searchParams.get(pz)!==qA}},{key:"canSendPromptNoneRequest",value:function(){var t=sessionStorage.getItem(sz);return!(t?JSON.parse(t):null)}},{key:"setPromptNoneRequestSent",value:function(t){sessionStorage.setItem(sz,JSON.stringify(t))}},{key:"waitTillPageRedirect",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=null!=t?t:3e3,e.next=3,new Promise((function(t){return setTimeout(t,1e3*n)}));case 3:case"end":return e.stop()}}),e)})))}}]),t}(),Gz=(tz=function(t,e,n,i,r,c,o){zB=t,jB=e,MB=n,PB=c,EB=r,$B=o,(QB=i)>-1&&ez(),EB>-1&&(r=setInterval((function(){rz()}),1e3*EB))},ez=function(){return jA(void 0,void 0,void 0,o().mark((function t(){var e,n,i,r;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=function(){var t;return jA(this,void 0,void 0,o().mark((function e(){var i,r,c,a,l;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,MB();case 2:i=e.sent,Boolean(zB)&&Boolean(i)&&(r="".concat(zB," ").concat(i),c=document.getElementById(oz),a=null===(t=null==c?void 0:c.contentDocument)||void 0===t?void 0:t.getElementById(n),null==(l=a.contentWindow)||l.postMessage(r,jB));case 4:case"end":return e.stop()}}),e)})))},jB&&zB&&PB){t.next=3;break}return t.abrupt("return");case 3:return n="opIFrame",r=document.getElementById(oz),(null===(e=null==r?void 0:r.contentDocument)||void 0===e?void 0:e.getElementById(n)).src=jB+"?client_id="+zB+"&redirect_uri="+PB,t.next=9,i();case 9:OB=setInterval(i,1e3*QB),iz();case 11:case"end":return t.stop()}}),t)})))},nz=function(){clearInterval(OB),clearInterval(void 0)},iz=function(){null===window||void 0===window||window.addEventListener("message",(function(t){var e;return jA(this,void 0,void 0,o().mark((function n(){var i;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if((i=jB)&&!((null==i?void 0:i.indexOf(t.origin))<0)&&(null===(e=null==t?void 0:t.data)||void 0===e?void 0:e.type)!==BB){n.next=3;break}return n.abrupt("return");case 3:if("unchanged"!==t.data){n.next=6;break}n.next=13;break;case 6:if("error"!==t.data){n.next=12;break}return n.next=9,DB();case 9:window.location.href=n.sent,n.next=13;break;case 12:"changed"===t.data&&rz();case 13:case"end":return n.stop()}}),n)})))}),!1)},rz=function(){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i,r,c,a;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=document.getElementById(oz),r=null===(n=null==i?void 0:i.contentDocument)||void 0===n?void 0:n.getElementById(az),!Xz.canSendPromptNoneRequest()){e.next=10;break}return Xz.setPromptNoneRequestSent(!0),c=function t(e){var n,i,r;(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)===BB&&(qB(null!==(r=null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.data)&&void 0!==r?r:""),null===window||void 0===window||window.removeEventListener("message",t))},_B!==t.Storage.BrowserMemory&&_B!==t.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",c),e.next=8,$B({prompt:"none",responseMode:"query",state:lz});case 8:a=e.sent,r.src=a;case 10:case"end":return e.stop()}}),e)})))},cz=function(e){return jA(void 0,void 0,void 0,o().mark((function n(){var i,r,c,a,l,u,d,s,m,h;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(c=new URL(window.location.href).searchParams.get(pz),a=new URL(window.location.href).searchParams.get(OA),l=window.parent.parent,null===c||!c.includes(lz)&&!c.includes(uz)){n.next=48;break}if(null===(u=new URL(window.location.href).searchParams.get("code"))||0===u.length){n.next=32;break}if(!c.includes(uz)){n.next=15;break}return d={data:{code:u,sessionState:null!=a?a:"",state:c},type:wB},sessionStorage.setItem(dz,"false"),l.postMessage(d,l.origin),Xz.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=14,Xz.waitTillPageRedirect();case 14:return n.abrupt("return",!0);case 15:if(s=new URL(window.location.href).searchParams.get("session_state"),_B!==t.Storage.LocalStorage&&_B!==t.Storage.SessionStorage){n.next=23;break}if(n.t0=e,!n.t0){n.next=21;break}return n.next=21,e(s);case 21:n.next=25;break;case 23:m={data:null!=s?s:"",type:BB},null===(r=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===r||r.postMessage(m);case 25:return Xz.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=29,Xz.waitTillPageRedirect();case 29:return n.abrupt("return",!0);case 32:if(!c.includes(uz)){n.next=40;break}return h={type:FB},window.parent.parent.postMessage(h,l.origin),Xz.setPromptNoneRequestSent(!1),window.location.href="about:blank",n.next=39,Xz.waitTillPageRedirect();case 39:return n.abrupt("return",!0);case 40:return Xz.setPromptNoneRequestSent(!1),n.next=43,DB();case 43:return l.location.href=n.sent,window.location.href="about:blank",n.next=47,Xz.waitTillPageRedirect();case 47:return n.abrupt("return",!0);case 48:return n.abrupt("return",!1);case 49:case"end":return n.stop()}}),n)})))},function(t,e,n){return jA(void 0,void 0,void 0,o().mark((function i(){var r,c,a,l;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:(c=document.createElement("iframe")).setAttribute("id",oz),c.style.display="none",a=!1,c.onload=function(){var t,e,n,i,r=null==(c=document.getElementById(oz))?void 0:c.contentDocument,o=null==r?void 0:r.createElement("iframe");o&&(o.setAttribute("id","opIFrame"),o.style.display="none");var l=null==r?void 0:r.createElement("iframe");l&&(l.setAttribute("id",az),l.style.display="none"),o&&(null===(e=null===(t=null==c?void 0:c.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(o)),l&&(null===(i=null===(n=null==c?void 0:c.contentDocument)||void 0===n?void 0:n.body)||void 0===i||i.appendChild(l)),a=!0},null===(r=null===document||void 0===document?void 0:document.body)||void 0===r||r.appendChild(c),DB=t,_B=e,qB=n,l=function(){return new Promise((function(t){return setTimeout(t,1)}))};case 10:if(!1!==a){i.next=15;break}return i.next=13,l();case 13:i.next=10;break;case 15:return i.abrupt("return",{initialize:tz,receivePromptNoneResponse:cz,reset:nz});case 16:case"end":return i.stop()}}),i)})))}),fz={exports:{}},Vz=function(t,e){return function(){for(var n=new Array(arguments.length),i=0;i<n.length;i++)n[i]=arguments[i];return t.apply(e,n)}},Wz=Vz,vz=Object.prototype.toString;function Cz(t){return Array.isArray(t)}function Sz(t){return void 0===t}function Yz(t){return"[object ArrayBuffer]"===vz.call(t)}function Rz(t){return null!==t&&"object"===a(t)}function Kz(t){if("[object Object]"!==vz.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function Nz(t){return"[object Function]"===vz.call(t)}function Lz(t,e){if(null!=t)if("object"!==a(t)&&(t=[t]),Cz(t))for(var n=0,i=t.length;n<i;n++)e.call(null,t[n],n,t);else for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.call(null,t[r],r,t)}var Jz={isArray:Cz,isArrayBuffer:Yz,isBuffer:function(t){return null!==t&&!Sz(t)&&null!==t.constructor&&!Sz(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===vz.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&Yz(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:Rz,isPlainObject:Kz,isUndefined:Sz,isDate:function(t){return"[object Date]"===vz.call(t)},isFile:function(t){return"[object File]"===vz.call(t)},isBlob:function(t){return"[object Blob]"===vz.call(t)},isFunction:Nz,isStream:function(t){return Rz(t)&&Nz(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===vz.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:Lz,merge:function t(){var e={};function n(n,i){Kz(e[i])&&Kz(n)?e[i]=t(e[i],n):Kz(n)?e[i]=t({},n):Cz(n)?e[i]=n.slice():e[i]=n}for(var i=0,r=arguments.length;i<r;i++)Lz(arguments[i],n);return e},extend:function(t,e,n){return Lz(e,(function(e,i){t[i]=n&&"function"==typeof e?Wz(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}},xz=Jz;function Hz(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var kz=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(xz.isURLSearchParams(e))i=e.toString();else{var r=[];xz.forEach(e,(function(t,e){null!=t&&(xz.isArray(t)?e+="[]":t=[t],xz.forEach(t,(function(t){xz.isDate(t)?t=t.toISOString():xz.isObject(t)&&(t=JSON.stringify(t)),r.push(Hz(e)+"="+Hz(t))})))})),i=r.join("&")}if(i){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t},Uz=Jz;function Tz(){this.handlers=[]}Tz.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},Tz.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},Tz.prototype.forEach=function(t){Uz.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var wz=Tz,Fz="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function Az(){throw new Error("setTimeout has not been defined")}function Bz(){throw new Error("clearTimeout has not been defined")}var zz=Az,jz=Bz;function Mz(t){if(zz===setTimeout)return setTimeout(t,0);if((zz===Az||!zz)&&setTimeout)return zz=setTimeout,setTimeout(t,0);try{return zz(t,0)}catch(e){try{return zz.call(null,t,0)}catch(e){return zz.call(this,t,0)}}}"function"==typeof Fz.setTimeout&&(zz=setTimeout),"function"==typeof Fz.clearTimeout&&(jz=clearTimeout);var Qz,Pz=[],Ez=!1,Dz=-1;function Oz(){Ez&&Qz&&(Ez=!1,Qz.length?Pz=Qz.concat(Pz):Dz=-1,Pz.length&&_z())}function _z(){if(!Ez){var t=Mz(Oz);Ez=!0;for(var e=Pz.length;e;){for(Qz=Pz,Pz=[];++Dz<e;)Qz&&Qz[Dz].run();Dz=-1,e=Pz.length}Qz=null,Ez=!1,function(t){if(jz===clearTimeout)return clearTimeout(t);if((jz===Bz||!jz)&&clearTimeout)return jz=clearTimeout,clearTimeout(t);try{jz(t)}catch(e){try{return jz.call(null,t)}catch(e){return jz.call(this,t)}}}(t)}}function qz(t,e){this.fun=t,this.array=e}qz.prototype.run=function(){this.fun.apply(null,this.array)};function $z(){}var tj=$z,ej=$z,nj=$z,ij=$z,rj=$z,cj=$z,oj=$z;var aj=Fz.performance||{},lj=aj.now||aj.mozNow||aj.msNow||aj.oNow||aj.webkitNow||function(){return(new Date).getTime()};var uj=new Date;var dj={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];Pz.push(new qz(t,e)),1!==Pz.length||Ez||Mz(_z)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:tj,addListener:ej,once:nj,off:ij,removeListener:rj,removeAllListeners:cj,emit:oj,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*lj.call(aj),n=Math.floor(e),i=Math.floor(e%1*1e9);return t&&(n-=t[0],(i-=t[1])<0&&(n--,i+=1e9)),[n,i]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-uj)/1e3}},sj=dj,mj=Jz,hj=function(t,e,n,i,r){return t.config=e,n&&(t.code=n),t.request=i,t.response=r,t.isAxiosError=!0,t.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}},t},bj={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},pj=hj,Zj=function(t,e,n,i,r){var c=new Error(t);return pj(c,e,n,i,r)},Ij=Zj,yj=Jz,gj=yj.isStandardBrowserEnv()?{write:function(t,e,n,i,r,c){var o=[];o.push(t+"="+encodeURIComponent(e)),yj.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),yj.isString(i)&&o.push("path="+i),yj.isString(r)&&o.push("domain="+r),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},Xj=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)},Gj=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t},fj=Jz,Vj=["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"],Wj=Jz,vj=Wj.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(t){var i=t;return e&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=i(window.location.href),function(e){var n=Wj.isString(e)?i(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function Cj(t){this.message=t}Cj.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Cj.prototype.__CANCEL__=!0;var Sj=Cj,Yj=Jz,Rj=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(Ij("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)},Kj=gj,Nj=kz,Lj=function(t,e){return t&&!Xj(e)?Gj(t,e):e},Jj=function(t){var e,n,i,r={};return t?(fj.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=fj.trim(t.substr(0,i)).toLowerCase(),n=fj.trim(t.substr(i+1)),e){if(r[e]&&Vj.indexOf(e)>=0)return;r[e]="set-cookie"===e?(r[e]?r[e]:[]).concat([n]):r[e]?r[e]+", "+n:n}})),r):r},xj=vj,Hj=Zj,kj=bj,Uj=Sj,Tj=function(t){return new Promise((function(e,n){var i,r=t.data,c=t.headers,o=t.responseType;function a(){t.cancelToken&&t.cancelToken.unsubscribe(i),t.signal&&t.signal.removeEventListener("abort",i)}Yj.isFormData(r)&&delete c["Content-Type"];var l=new XMLHttpRequest;if(t.auth){var u=t.auth.username||"",d=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(u+":"+d)}var s=Lj(t.baseURL,t.url);function m(){if(l){var i="getAllResponseHeaders"in l?Jj(l.getAllResponseHeaders()):null,r={data:o&&"text"!==o&&"json"!==o?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:i,config:t,request:l};Rj((function(t){e(t),a()}),(function(t){n(t),a()}),r),l=null}}if(l.open(t.method.toUpperCase(),Nj(s,t.params,t.paramsSerializer),!0),l.timeout=t.timeout,"onloadend"in l?l.onloadend=m:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(m)},l.onabort=function(){l&&(n(Hj("Request aborted",t,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(Hj("Network Error",t,null,l)),l=null},l.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",i=t.transitional||kj;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(Hj(e,t,i.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},Yj.isStandardBrowserEnv()){var h=(t.withCredentials||xj(s))&&t.xsrfCookieName?Kj.read(t.xsrfCookieName):void 0;h&&(c[t.xsrfHeaderName]=h)}"setRequestHeader"in l&&Yj.forEach(c,(function(t,e){void 0===r&&"content-type"===e.toLowerCase()?delete c[e]:l.setRequestHeader(e,t)})),Yj.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),o&&"json"!==o&&(l.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&l.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(i=function(t){l&&(n(!t||t&&t.type?new Uj("canceled"):t),l.abort(),l=null)},t.cancelToken&&t.cancelToken.subscribe(i),t.signal&&(t.signal.aborted?i():t.signal.addEventListener("abort",i))),r||(r=null),l.send(r)}))},wj=Jz,Fj=function(t,e){mj.forEach(t,(function(n,i){i!==e&&i.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[i])}))},Aj=hj,Bj={"Content-Type":"application/x-www-form-urlencoded"};function zj(t,e){!wj.isUndefined(t)&&wj.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var jj,Mj={transitional:bj,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==sj&&"[object process]"===Object.prototype.toString.call(sj))&&(jj=Tj),jj),transformRequest:[function(t,e){return Fj(e,"Accept"),Fj(e,"Content-Type"),wj.isFormData(t)||wj.isArrayBuffer(t)||wj.isBuffer(t)||wj.isStream(t)||wj.isFile(t)||wj.isBlob(t)?t:wj.isArrayBufferView(t)?t.buffer:wj.isURLSearchParams(t)?(zj(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):wj.isObject(t)||e&&"application/json"===e["Content-Type"]?(zj(e,"application/json"),function(t,e,n){if(wj.isString(t))try{return(e||JSON.parse)(t),wj.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||Mj.transitional,n=e&&e.silentJSONParsing,i=e&&e.forcedJSONParsing,r=!n&&"json"===this.responseType;if(r||i&&wj.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw Aj(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};wj.forEach(["delete","get","head"],(function(t){Mj.headers[t]={}})),wj.forEach(["post","put","patch"],(function(t){Mj.headers[t]=wj.merge(Bj)}));var Qj=Mj,Pj=Jz,Ej=Qj,Dj=function(t){return!(!t||!t.__CANCEL__)},Oj=Jz,_j=function(t,e,n){var i=this||Ej;return Pj.forEach(n,(function(n){t=n.call(i,t,e)})),t},qj=Dj,$j=Qj,tM=Sj;function eM(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new tM("canceled")}var nM=Jz,iM=function(t,e){e=e||{};var n={};function i(t,e){return nM.isPlainObject(t)&&nM.isPlainObject(e)?nM.merge(t,e):nM.isPlainObject(e)?nM.merge({},e):nM.isArray(e)?e.slice():e}function r(n){return nM.isUndefined(e[n])?nM.isUndefined(t[n])?void 0:i(void 0,t[n]):i(t[n],e[n])}function c(t){if(!nM.isUndefined(e[t]))return i(void 0,e[t])}function o(n){return nM.isUndefined(e[n])?nM.isUndefined(t[n])?void 0:i(void 0,t[n]):i(void 0,e[n])}function a(n){return n in e?i(t[n],e[n]):n in t?i(void 0,t[n]):void 0}var l={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:a};return nM.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=l[t]||r,i=e(t);nM.isUndefined(i)&&e!==a||(n[t]=i)})),n},rM="0.26.1",cM=rM,oM={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){oM[t]=function(n){return a(n)===t||"a"+(e<1?"n ":" ")+t}}));var aM={};oM.transitional=function(t,e,n){function i(t,e){return"[Axios v"+cM+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,r,c){if(!1===t)throw new Error(i(r," has been removed"+(e?" in "+e:"")));return e&&!aM[r]&&(aM[r]=!0,console.warn(i(r," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,r,c)}};var lM={assertOptions:function(t,e,n){if("object"!==a(t))throw new TypeError("options must be an object");for(var i=Object.keys(t),r=i.length;r-- >0;){var c=i[r],o=e[c];if(o){var l=t[c],u=void 0===l||o(l,c,t);if(!0!==u)throw new TypeError("option "+c+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:oM},uM=Jz,dM=kz,sM=wz,mM=function(t){return eM(t),t.headers=t.headers||{},t.data=_j.call(t,t.data,t.headers,t.transformRequest),t.headers=Oj.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),Oj.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||$j.adapter)(t).then((function(e){return eM(t),e.data=_j.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return qj(e)||(eM(t),e&&e.response&&(e.response.data=_j.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},hM=iM,bM=lM,pM=bM.validators;function ZM(t){this.defaults=t,this.interceptors={request:new sM,response:new sM}}ZM.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=hM(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&bM.assertOptions(n,{silentJSONParsing:pM.transitional(pM.boolean),forcedJSONParsing:pM.transitional(pM.boolean),clarifyTimeoutError:pM.transitional(pM.boolean)},!1);var i=[],r=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(r=r&&t.synchronous,i.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!r){var a=[mM,void 0];for(Array.prototype.unshift.apply(a,i),a=a.concat(o),c=Promise.resolve(e);a.length;)c=c.then(a.shift(),a.shift());return c}for(var l=e;i.length;){var u=i.shift(),d=i.shift();try{l=u(l)}catch(t){d(t);break}}try{c=mM(l)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},ZM.prototype.getUri=function(t){return t=hM(this.defaults,t),dM(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},uM.forEach(["delete","get","head","options"],(function(t){ZM.prototype[t]=function(e,n){return this.request(hM(n||{},{method:t,url:e,data:(n||{}).data}))}})),uM.forEach(["post","put","patch"],(function(t){ZM.prototype[t]=function(e,n,i){return this.request(hM(i||{},{method:t,url:e,data:n}))}}));var IM=ZM,yM=Sj;function gM(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,i=n._listeners.length;for(e=0;e<i;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,i=new Promise((function(t){n.subscribe(t),e=t})).then(t);return i.cancel=function(){n.unsubscribe(e)},i},t((function(t){n.reason||(n.reason=new yM(t),e(n.reason))}))}gM.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},gM.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},gM.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},gM.source=function(){var t,e=new gM((function(e){t=e}));return{token:e,cancel:t}};var XM=gM,GM=Jz,fM=Jz,VM=Vz,WM=IM,vM=iM;var CM=function t(e){var n=new WM(e),i=VM(WM.prototype.request,n);return fM.extend(i,WM.prototype,n),fM.extend(i,n),i.create=function(n){return t(vM(e,n))},i}(Qj);CM.Axios=WM,CM.Cancel=Sj,CM.CancelToken=XM,CM.isCancel=Dj,CM.VERSION=rM,CM.all=function(t){return Promise.all(t)},CM.spread=function(t){return function(e){return t.apply(null,e)}},CM.isAxiosError=function(t){return GM.isObject(t)&&!0===t.isAxiosError},fz.exports=CM,fz.exports.default=CM;var SM,YM=fz.exports;var RM=SM=function(){function t(){d(this,t),this.attachToken=function(){return Promise.resolve()},this.requestStartCallback=function(){return null},this.requestSuccessCallback=function(){return null},this.requestErrorCallback=function(){return null},this.requestFinishCallback=function(){return 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)}return m(t,[{key:"requestHandler",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){var n,i;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.attachToken(t);case 2:return(null==t?void 0:t.shouldEncodeToFormData)&&(n=null==t?void 0:t.data,i=new FormData,Object.keys(n).forEach((function(t){i.append(t,n[t])})),t.data=i),SM.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),e.abrupt("return",t);case 5:case"end":return e.stop()}}),e,this)})))}},{key:"errorHandler",value:function(t){throw SM.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"successHandler",value:function(t){return SM.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}},{key:"init",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=arguments.length>1?arguments[1]:void 0;return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:SM.isHandlerEnabled=t,this.attachToken=e;case 2:case"end":return n.stop()}}),n,this)})))}},{key:"enableHandler",value:function(){SM.isHandlerEnabled=!0}},{key:"disableHandler",value:function(){SM.isHandlerEnabled=!1}},{key:"disableHandlerWithTimeout",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:SM.DEFAULT_HANDLER_DISABLE_TIMEOUT;SM.isHandlerEnabled=!1,setTimeout((function(){SM.isHandlerEnabled=!0}),t)}},{key:"setHttpRequestStartCallback",value:function(t){this.requestStartCallback=t}},{key:"setHttpRequestSuccessCallback",value:function(t){this.requestSuccessCallback=t}},{key:"setHttpRequestErrorCallback",value:function(t){this.requestErrorCallback=t}},{key:"setHttpRequestFinishCallback",value:function(t){this.requestFinishCallback=t}}],[{key:"getInstance",value:function(){var t=this;return this.axiosInstance||(this.axiosInstance=YM.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new SM),this.axiosInstance.interceptors.request.use((function(e){return jA(t,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.clientInstance.requestHandler(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t,this)})))})),this.axiosInstance.interceptors.response.use((function(e){return t.clientInstance.successHandler(e)}),(function(e){return t.clientInstance.errorHandler(e)})),this.axiosInstance.all=YM.all,this.axiosInstance.spread=YM.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}}]),t}();RM.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,RM=SM=function(t,e,n,i){var r,c=arguments.length,o=c<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if("object"===("undefined"==typeof Reflect?"undefined":a(Reflect))&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,i);else for(var l=t.length-1;l>=0;l--)(r=t[l])&&(o=(c<3?r(o):c>3?r(e,n,o):r(e,n))||o);return c>3&&o&&Object.defineProperty(e,n,o),o}([function(t){}],RM);var KM=function(){function t(){d(this,t)}return m(t,[{key:"setData",value:function(t,e){return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:localStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:localStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),NM=function(){function t(){d(this,t),this._data=new Map}return m(t,[{key:"setData",value:function(t,e){return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:this._data.set(t,e);case 1:case"end":return n.stop()}}),n,this)})))}},{key:"getData",value:function(t){var e,n;return jA(this,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}");case 1:case"end":return i.stop()}}),i,this)})))}},{key:"removeData",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._data.delete(t);case 1:case"end":return e.stop()}}),e,this)})))}}]),t}(),LM=function(){function t(){d(this,t)}return m(t,[{key:"setData",value:function(t,e){return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:sessionStorage.setItem(t,e);case 1:case"end":return n.stop()}}),n)})))}},{key:"getData",value:function(t){var e;return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}");case 1:case"end":return n.stop()}}),n)})))}},{key:"removeData",value:function(t){return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:sessionStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),JM=[],xM=[],HM="undefined"!=typeof Uint8Array?Uint8Array:Array,kM=!1;function UM(){kM=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)JM[e]=t[e],xM[t.charCodeAt(e)]=e;xM["-".charCodeAt(0)]=62,xM["_".charCodeAt(0)]=63}function TM(t,e,n){for(var i,r,c=[],o=e;o<n;o+=3)i=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(JM[(r=i)>>18&63]+JM[r>>12&63]+JM[r>>6&63]+JM[63&r]);return c.join("")}function wM(t){var e;kM||UM();for(var n=t.length,i=n%3,r="",c=[],o=16383,a=0,l=n-i;a<l;a+=o)c.push(TM(t,a,a+o>l?l:a+o));return 1===i?(e=t[n-1],r+=JM[e>>2],r+=JM[e<<4&63],r+="=="):2===i&&(e=(t[n-2]<<8)+t[n-1],r+=JM[e>>10],r+=JM[e>>4&63],r+=JM[e<<2&63],r+="="),c.push(r),c.join("")}function FM(t,e,n,i,r){var c,o,a=8*r-i-1,l=(1<<a)-1,u=l>>1,d=-7,s=n?r-1:0,m=n?-1:1,h=t[e+s];for(s+=m,c=h&(1<<-d)-1,h>>=-d,d+=a;d>0;c=256*c+t[e+s],s+=m,d-=8);for(o=c&(1<<-d)-1,c>>=-d,d+=i;d>0;o=256*o+t[e+s],s+=m,d-=8);if(0===c)c=1-u;else{if(c===l)return o?NaN:1/0*(h?-1:1);o+=Math.pow(2,i),c-=u}return(h?-1:1)*o*Math.pow(2,c-i)}function AM(t,e,n,i,r,c){var o,a,l,u=8*c-r-1,d=(1<<u)-1,s=d>>1,m=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,h=i?0:c-1,b=i?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=d):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+s>=1?m/l:m*Math.pow(2,1-s))*l>=2&&(o++,l/=2),o+s>=d?(a=0,o=d):o+s>=1?(a=(e*l-1)*Math.pow(2,r),o+=s):(a=e*Math.pow(2,s-1)*Math.pow(2,r),o=0));r>=8;t[n+h]=255&a,h+=b,a/=256,r-=8);for(o=o<<r|a,u+=r;u>0;t[n+h]=255&o,h+=b,o/=256,u-=8);t[n+h-b]|=128*p}var BM={}.toString,zM=Array.isArray||function(t){return"[object Array]"==BM.call(t)};PM.TYPED_ARRAY_SUPPORT=void 0===Fz.TYPED_ARRAY_SUPPORT||Fz.TYPED_ARRAY_SUPPORT;var jM=MM();function MM(){return PM.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function QM(t,e){if(MM()<e)throw new RangeError("Invalid typed array length");return PM.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=PM.prototype:(null===t&&(t=new PM(e)),t.length=e),t}function PM(t,e,n){if(!(PM.TYPED_ARRAY_SUPPORT||this instanceof PM))return new PM(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return OM(this,t)}return EM(this,t,e,n)}function EM(t,e,n,i){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,i){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(i||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===i?new Uint8Array(e):void 0===i?new Uint8Array(e,n):new Uint8Array(e,n,i);PM.TYPED_ARRAY_SUPPORT?(t=e).__proto__=PM.prototype:t=_M(t,e);return t}(t,e,n,i):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!PM.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var i=0|tQ(e,n),r=(t=QM(t,i)).write(e,n);r!==i&&(t=t.slice(0,r));return t}(t,e,n):function(t,e){if($M(e)){var n=0|qM(e.length);return 0===(t=QM(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(i=e.length)!=i?QM(t,0):_M(t,e);if("Buffer"===e.type&&zM(e.data))return _M(t,e.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function DM(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function OM(t,e){if(DM(e),t=QM(t,e<0?0:0|qM(e)),!PM.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function _M(t,e){var n=e.length<0?0:0|qM(e.length);t=QM(t,n);for(var i=0;i<n;i+=1)t[i]=255&e[i];return t}function qM(t){if(t>=MM())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+MM().toString(16)+" bytes");return 0|t}function $M(t){return!(null==t||!t._isBuffer)}function tQ(t,e){if($M(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return SQ(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return YQ(t).length;default:if(i)return SQ(t).length;e=(""+e).toLowerCase(),i=!0}}function eQ(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return ZQ(this,e,n);case"utf8":case"utf-8":return mQ(this,e,n);case"ascii":return bQ(this,e,n);case"latin1":case"binary":return pQ(this,e,n);case"base64":return sQ(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return IQ(this,e,n);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function nQ(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function iQ(t,e,n,i,r){if(0===t.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(r)return-1;n=t.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof e&&(e=PM.from(e,i)),$M(e))return 0===e.length?-1:rQ(t,e,n,i,r);if("number"==typeof e)return e&=255,PM.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):rQ(t,[e],n,i,r);throw new TypeError("val must be string, number or Buffer")}function rQ(t,e,n,i,r){var c,o=1,a=t.length,l=e.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;o=2,a/=2,l/=2,n/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(r){var d=-1;for(c=n;c<a;c++)if(u(t,c)===u(e,-1===d?0:c-d)){if(-1===d&&(d=c),c-d+1===l)return d*o}else-1!==d&&(c-=c-d),d=-1}else for(n+l>a&&(n=a-l),c=n;c>=0;c--){for(var s=!0,m=0;m<l;m++)if(u(t,c+m)!==u(e,m)){s=!1;break}if(s)return c}return-1}function cQ(t,e,n,i){n=Number(n)||0;var r=t.length-n;i?(i=Number(i))>r&&(i=r):i=r;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var o=0;o<i;++o){var a=parseInt(e.substr(2*o,2),16);if(isNaN(a))return o;t[n+o]=a}return o}function oQ(t,e,n,i){return RQ(SQ(e,t.length-n),t,n,i)}function aQ(t,e,n,i){return RQ(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,i)}function lQ(t,e,n,i){return aQ(t,e,n,i)}function uQ(t,e,n,i){return RQ(YQ(e),t,n,i)}function dQ(t,e,n,i){return RQ(function(t,e){for(var n,i,r,c=[],o=0;o<t.length&&!((e-=2)<0);++o)i=(n=t.charCodeAt(o))>>8,r=n%256,c.push(r),c.push(i);return c}(e,t.length-n),t,n,i)}function sQ(t,e,n){return 0===e&&n===t.length?wM(t):wM(t.slice(e,n))}function mQ(t,e,n){n=Math.min(t.length,n);for(var i=[],r=e;r<n;){var c,o,a,l,u=t[r],d=null,s=u>239?4:u>223?3:u>191?2:1;if(r+s<=n)switch(s){case 1:u<128&&(d=u);break;case 2:128==(192&(c=t[r+1]))&&(l=(31&u)<<6|63&c)>127&&(d=l);break;case 3:c=t[r+1],o=t[r+2],128==(192&c)&&128==(192&o)&&(l=(15&u)<<12|(63&c)<<6|63&o)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:c=t[r+1],o=t[r+2],a=t[r+3],128==(192&c)&&128==(192&o)&&128==(192&a)&&(l=(15&u)<<18|(63&c)<<12|(63&o)<<6|63&a)>65535&&l<1114112&&(d=l)}null===d?(d=65533,s=1):d>65535&&(d-=65536,i.push(d>>>10&1023|55296),d=56320|1023&d),i.push(d),r+=s}return function(t){var e=t.length;if(e<=hQ)return String.fromCharCode.apply(String,t);var n="",i=0;for(;i<e;)n+=String.fromCharCode.apply(String,t.slice(i,i+=hQ));return n}(i)}PM.poolSize=8192,PM._augment=function(t){return t.__proto__=PM.prototype,t},PM.from=function(t,e,n){return EM(null,t,e,n)},PM.TYPED_ARRAY_SUPPORT&&(PM.prototype.__proto__=Uint8Array.prototype,PM.__proto__=Uint8Array),PM.alloc=function(t,e,n){return function(t,e,n,i){return DM(e),e<=0?QM(t,e):void 0!==n?"string"==typeof i?QM(t,e).fill(n,i):QM(t,e).fill(n):QM(t,e)}(null,t,e,n)},PM.allocUnsafe=function(t){return OM(null,t)},PM.allocUnsafeSlow=function(t){return OM(null,t)},PM.isBuffer=KQ,PM.compare=function(t,e){if(!$M(t)||!$M(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,i=e.length,r=0,c=Math.min(n,i);r<c;++r)if(t[r]!==e[r]){n=t[r],i=e[r];break}return n<i?-1:i<n?1:0},PM.isEncoding=function(t){switch(String(t).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}},PM.concat=function(t,e){if(!zM(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return PM.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var i=PM.allocUnsafe(e),r=0;for(n=0;n<t.length;++n){var c=t[n];if(!$M(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,r),r+=c.length}return i},PM.byteLength=tQ,PM.prototype._isBuffer=!0,PM.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)nQ(this,e,e+1);return this},PM.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)nQ(this,e,e+3),nQ(this,e+1,e+2);return this},PM.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)nQ(this,e,e+7),nQ(this,e+1,e+6),nQ(this,e+2,e+5),nQ(this,e+3,e+4);return this},PM.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?mQ(this,0,t):eQ.apply(this,arguments)},PM.prototype.equals=function(t){if(!$M(t))throw new TypeError("Argument must be a Buffer");return this===t||0===PM.compare(this,t)},PM.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},PM.prototype.compare=function(t,e,n,i,r){if(!$M(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),e<0||n>t.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&e>=n)return 0;if(i>=r)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(r>>>=0)-(i>>>=0),o=(n>>>=0)-(e>>>=0),a=Math.min(c,o),l=this.slice(i,r),u=t.slice(e,n),d=0;d<a;++d)if(l[d]!==u[d]){c=l[d],o=u[d];break}return c<o?-1:o<c?1:0},PM.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},PM.prototype.indexOf=function(t,e,n){return iQ(this,t,e,n,!0)},PM.prototype.lastIndexOf=function(t,e,n){return iQ(this,t,e,n,!1)},PM.prototype.write=function(t,e,n,i){if(void 0===e)i="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)i=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}var r=this.length-e;if((void 0===n||n>r)&&(n=r),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return cQ(this,t,e,n);case"utf8":case"utf-8":return oQ(this,t,e,n);case"ascii":return aQ(this,t,e,n);case"latin1":case"binary":return lQ(this,t,e,n);case"base64":return uQ(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return dQ(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},PM.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var hQ=4096;function bQ(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(127&t[r]);return i}function pQ(t,e,n){var i="";n=Math.min(t.length,n);for(var r=e;r<n;++r)i+=String.fromCharCode(t[r]);return i}function ZQ(t,e,n){var i=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>i)&&(n=i);for(var r="",c=e;c<n;++c)r+=CQ(t[c]);return r}function IQ(t,e,n){for(var i=t.slice(e,n),r="",c=0;c<i.length;c+=2)r+=String.fromCharCode(i[c]+256*i[c+1]);return r}function yQ(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function gQ(t,e,n,i,r,c){if(!$M(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>r||e<c)throw new RangeError('"value" argument is out of bounds');if(n+i>t.length)throw new RangeError("Index out of range")}function XQ(t,e,n,i){e<0&&(e=65535+e+1);for(var r=0,c=Math.min(t.length-n,2);r<c;++r)t[n+r]=(e&255<<8*(i?r:1-r))>>>8*(i?r:1-r)}function GQ(t,e,n,i){e<0&&(e=4294967295+e+1);for(var r=0,c=Math.min(t.length-n,4);r<c;++r)t[n+r]=e>>>8*(i?r:3-r)&255}function fQ(t,e,n,i,r,c){if(n+i>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function VQ(t,e,n,i,r){return r||fQ(t,0,n,4),AM(t,e,n,i,23,4),n+4}function WQ(t,e,n,i,r){return r||fQ(t,0,n,8),AM(t,e,n,i,52,8),n+8}PM.prototype.slice=function(t,e){var n,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(e=void 0===e?i:~~e)<0?(e+=i)<0&&(e=0):e>i&&(e=i),e<t&&(e=t),PM.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=PM.prototype;else{var r=e-t;n=new PM(r,void 0);for(var c=0;c<r;++c)n[c]=this[c+t]}return n},PM.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||yQ(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i},PM.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||yQ(t,e,this.length);for(var i=this[t+--e],r=1;e>0&&(r*=256);)i+=this[t+--e]*r;return i},PM.prototype.readUInt8=function(t,e){return e||yQ(t,1,this.length),this[t]},PM.prototype.readUInt16LE=function(t,e){return e||yQ(t,2,this.length),this[t]|this[t+1]<<8},PM.prototype.readUInt16BE=function(t,e){return e||yQ(t,2,this.length),this[t]<<8|this[t+1]},PM.prototype.readUInt32LE=function(t,e){return e||yQ(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},PM.prototype.readUInt32BE=function(t,e){return e||yQ(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},PM.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||yQ(t,e,this.length);for(var i=this[t],r=1,c=0;++c<e&&(r*=256);)i+=this[t+c]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*e)),i},PM.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||yQ(t,e,this.length);for(var i=e,r=1,c=this[t+--i];i>0&&(r*=256);)c+=this[t+--i]*r;return c>=(r*=128)&&(c-=Math.pow(2,8*e)),c},PM.prototype.readInt8=function(t,e){return e||yQ(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},PM.prototype.readInt16LE=function(t,e){e||yQ(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},PM.prototype.readInt16BE=function(t,e){e||yQ(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},PM.prototype.readInt32LE=function(t,e){return e||yQ(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},PM.prototype.readInt32BE=function(t,e){return e||yQ(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},PM.prototype.readFloatLE=function(t,e){return e||yQ(t,4,this.length),FM(this,t,!0,23,4)},PM.prototype.readFloatBE=function(t,e){return e||yQ(t,4,this.length),FM(this,t,!1,23,4)},PM.prototype.readDoubleLE=function(t,e){return e||yQ(t,8,this.length),FM(this,t,!0,52,8)},PM.prototype.readDoubleBE=function(t,e){return e||yQ(t,8,this.length),FM(this,t,!1,52,8)},PM.prototype.writeUIntLE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||gQ(this,t,e,n,Math.pow(2,8*n)-1,0);var r=1,c=0;for(this[e]=255&t;++c<n&&(r*=256);)this[e+c]=t/r&255;return e+n},PM.prototype.writeUIntBE=function(t,e,n,i){(t=+t,e|=0,n|=0,i)||gQ(this,t,e,n,Math.pow(2,8*n)-1,0);var r=n-1,c=1;for(this[e+r]=255&t;--r>=0&&(c*=256);)this[e+r]=t/c&255;return e+n},PM.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,1,255,0),PM.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},PM.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,2,65535,0),PM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):XQ(this,t,e,!0),e+2},PM.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,2,65535,0),PM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):XQ(this,t,e,!1),e+2},PM.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,4,4294967295,0),PM.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):GQ(this,t,e,!0),e+4},PM.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,4,4294967295,0),PM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):GQ(this,t,e,!1),e+4},PM.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);gQ(this,t,e,n,r-1,-r)}var c=0,o=1,a=0;for(this[e]=255&t;++c<n&&(o*=256);)t<0&&0===a&&0!==this[e+c-1]&&(a=1),this[e+c]=(t/o>>0)-a&255;return e+n},PM.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e|=0,!i){var r=Math.pow(2,8*n-1);gQ(this,t,e,n,r-1,-r)}var c=n-1,o=1,a=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===a&&0!==this[e+c+1]&&(a=1),this[e+c]=(t/o>>0)-a&255;return e+n},PM.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,1,127,-128),PM.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},PM.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,2,32767,-32768),PM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):XQ(this,t,e,!0),e+2},PM.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,2,32767,-32768),PM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):XQ(this,t,e,!1),e+2},PM.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,4,2147483647,-2147483648),PM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):GQ(this,t,e,!0),e+4},PM.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||gQ(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),PM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):GQ(this,t,e,!1),e+4},PM.prototype.writeFloatLE=function(t,e,n){return VQ(this,t,e,!0,n)},PM.prototype.writeFloatBE=function(t,e,n){return VQ(this,t,e,!1,n)},PM.prototype.writeDoubleLE=function(t,e,n){return WQ(this,t,e,!0,n)},PM.prototype.writeDoubleBE=function(t,e,n){return WQ(this,t,e,!1,n)},PM.prototype.copy=function(t,e,n,i){if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(e<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),t.length-e<i-n&&(i=t.length-e+n);var r,c=i-n;if(this===t&&n<e&&e<i)for(r=c-1;r>=0;--r)t[r+e]=this[r+n];else if(c<1e3||!PM.TYPED_ARRAY_SUPPORT)for(r=0;r<c;++r)t[r+e]=this[r+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},PM.prototype.fill=function(t,e,n,i){if("string"==typeof t){if("string"==typeof e?(i=e,e=0,n=this.length):"string"==typeof n&&(i=n,n=this.length),1===t.length){var r=t.charCodeAt(0);r<256&&(t=r)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!PM.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var o=$M(t)?t:SQ(new PM(t,i).toString()),a=o.length;for(c=0;c<n-e;++c)this[c+e]=o[c%a]}return this};var vQ=/[^+\/0-9A-Za-z-_]/g;function CQ(t){return t<16?"0"+t.toString(16):t.toString(16)}function SQ(t,e){var n;e=e||1/0;for(var i=t.length,r=null,c=[],o=0;o<i;++o){if((n=t.charCodeAt(o))>55295&&n<57344){if(!r){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===i){(e-=3)>-1&&c.push(239,191,189);continue}r=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(e-=3)>-1&&c.push(239,191,189);if(r=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function YQ(t){return function(t){var e,n,i,r,c,o;kM||UM();var a=t.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[a-2]?2:"="===t[a-1]?1:0,o=new HM(3*a/4-c),i=c>0?a-4:a;var l=0;for(e=0,n=0;e<i;e+=4,n+=3)r=xM[t.charCodeAt(e)]<<18|xM[t.charCodeAt(e+1)]<<12|xM[t.charCodeAt(e+2)]<<6|xM[t.charCodeAt(e+3)],o[l++]=r>>16&255,o[l++]=r>>8&255,o[l++]=255&r;return 2===c?(r=xM[t.charCodeAt(e)]<<2|xM[t.charCodeAt(e+1)]>>4,o[l++]=255&r):1===c&&(r=xM[t.charCodeAt(e)]<<10|xM[t.charCodeAt(e+1)]<<4|xM[t.charCodeAt(e+2)]>>2,o[l++]=r>>8&255,o[l++]=255&r),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(vQ,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function RQ(t,e,n,i){for(var r=0;r<i&&!(r+n>=e.length||r>=t.length);++r)e[r+n]=t[r];return r}function KQ(t){return null!=t&&(!!t._isBuffer||NQ(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&NQ(t.slice(0,0))}(t))}function NQ(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var LQ=Object.freeze({__proto__:null,Buffer:PM,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),PM.alloc(+t)},isBuffer:KQ,kMaxLength:jM}),JQ={exports:{}},xQ={},HQ={};Object.defineProperty(HQ,"__esModule",{value:!0}),HQ.default=function(t){var e=t.length,n=e%4;if(!n)return t;var i=e,r=4-n,c=e+r,o=PM.alloc(c);for(o.write(t);r--;)o.write("=",i++);return o.toString()},Object.defineProperty(xQ,"__esModule",{value:!0});var kQ=HQ;function UQ(t,e){return void 0===e&&(e="utf8"),PM.isBuffer(t)?wQ(t.toString("base64")):wQ(PM.from(t,e).toString("base64"))}function TQ(t){return t=t.toString(),kQ.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function wQ(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var FQ=UQ;FQ.encode=UQ,FQ.decode=function(t,e){return void 0===e&&(e="utf8"),PM.from(TQ(t),"base64").toString(e)},FQ.toBase64=TQ,FQ.fromBase64=wQ,FQ.toBuffer=function(t){return PM.from(TQ(t),"base64")},xQ.default=FQ,function(t){t.exports=xQ.default,t.exports.default=t.exports}(JQ);var AQ=JQ.exports,BQ={exports:{}};!function(t){!function(e,n){var i={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=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(t,n,i,r,c){for(var o,a,l,u,d,s,m,h,b,p,Z,I,y;c>=64;){for(o=n[0],a=n[1],l=n[2],u=n[3],d=n[4],s=n[5],m=n[6],h=n[7],p=0;p<16;p++)Z=r+4*p,t[p]=(255&i[Z])<<24|(255&i[Z+1])<<16|(255&i[Z+2])<<8|255&i[Z+3];for(p=16;p<64;p++)I=((b=t[p-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,y=((b=t[p-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,t[p]=(I+t[p-7]|0)+(y+t[p-16]|0);for(p=0;p<64;p++)I=(((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&s^~d&m)|0)+(h+(e[p]+t[p]|0)|0)|0,y=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,h=m,m=s,s=d,d=u+I|0,u=l,l=a,a=o,o=I+y|0;n[0]+=o,n[1]+=a,n[2]+=l,n[3]+=u,n[4]+=d,n[5]+=s,n[6]+=m,n[7]+=h,r+=64,c-=64}return r}var i=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.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 e.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},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[i++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(i=n(this.temp,this.state,t,i,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[i++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,i=this.bufferLength,r=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[i]=128;for(var a=i+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=r>>>24&255,this.buffer[o-7]=r>>>16&255,this.buffer[o-6]=r>>>8&255,this.buffer[o-5]=r>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=i;var r=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;this.inner.update(e);for(n=0;n<e.length;n++)e[n]^=106;this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new i).update(t),n=e.digest();return e.clean(),n}function o(t,e){var n=new r(t).update(e),i=n.digest();return n.clean(),i}function a(t,e,n,i){var r=i[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(i),e.finish(t),i[0]++}t.HMAC=r,t.hash=c,t.default=c,t.hmac=o;var l=new Uint8Array(t.digestLength);function u(t,e,n,i){void 0===e&&(e=l),void 0===i&&(i=32);for(var c=new Uint8Array([1]),u=o(e,t),d=new r(u),s=new Uint8Array(d.digestLength),m=s.length,h=new Uint8Array(i),b=0;b<i;b++)m===s.length&&(a(s,d,n,c),m=0),h[b]=s[m++];return d.clean(),s.fill(0),c.fill(0),h}function d(t,e,n,i){for(var c=new r(t),o=c.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),u=new Uint8Array(o),d=new Uint8Array(i),s=0;s*o<i;s++){var m=s+1;a[0]=m>>>24&255,a[1]=m>>>16&255,a[2]=m>>>8&255,a[3]=m>>>0&255,c.reset(),c.update(e),c.update(a),c.finish(u);for(var h=0;h<o;h++)l[h]=u[h];for(h=2;h<=n;h++){c.reset(),c.update(u).finish(u);for(var b=0;b<o;b++)l[b]^=u[b]}for(h=0;h<o&&s*o+h<i;h++)d[s*o+h]=l[h]}for(s=0;s<o;s++)l[s]=u[s]=0;for(s=0;s<4;s++)a[s]=0;return c.clean(),d}t.hkdf=u,t.pbkdf2=d}(i);var r=i.default;for(var c in i)r[c]=i[c];t.exports=r}()}(BQ);var zQ=n(BQ.exports),jQ=crypto,MQ=function(t){return t instanceof CryptoKey},QQ=new TextEncoder,PQ=new TextDecoder;function EQ(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i=e.reduce((function(t,e){return t+e.length}),0),r=new Uint8Array(i),c=0;return e.forEach((function(t){r.set(t,c),c+=t.length})),r}var DQ=function(t){var e=t;e instanceof Uint8Array&&(e=PQ.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return function(t){for(var e=atob(t),n=new Uint8Array(e.length),i=0;i<e.length;i++)n[i]=e.charCodeAt(i);return n}(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}},OQ=function(t){b(n,t);var e=f(n);function n(t){var i,r;return d(this,n),(i=e.call(this,t)).code="ERR_JOSE_GENERIC",i.name=i.constructor.name,null===(r=Error.captureStackTrace)||void 0===r||r.call(Error,X(i),i.constructor),i}return m(n,null,[{key:"code",get:function(){return"ERR_JOSE_GENERIC"}}]),n}(g(Error)),_Q=function(t){b(n,t);var e=f(n);function n(t){var i,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return d(this,n),(i=e.call(this,t)).code="ERR_JWT_CLAIM_VALIDATION_FAILED",i.claim=r,i.reason=c,i}return m(n,null,[{key:"code",get:function(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}]),n}(OQ),qQ=function(t){b(n,t);var e=f(n);function n(t){var i,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";return d(this,n),(i=e.call(this,t)).code="ERR_JWT_EXPIRED",i.claim=r,i.reason=c,i}return m(n,null,[{key:"code",get:function(){return"ERR_JWT_EXPIRED"}}]),n}(OQ),$Q=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_ALG_NOT_ALLOWED",t}return m(n,null,[{key:"code",get:function(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}]),n}(OQ),tP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JOSE_NOT_SUPPORTED",t}return m(n,null,[{key:"code",get:function(){return"ERR_JOSE_NOT_SUPPORTED"}}]),n}(OQ),eP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_INVALID",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWS_INVALID"}}]),n}(OQ),nP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWT_INVALID",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWT_INVALID"}}]),n}(OQ),iP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWKS_INVALID",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWKS_INVALID"}}]),n}(OQ),rP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWKS_NO_MATCHING_KEY",t.message="no applicable key found in the JSON Web Key Set",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWKS_NO_MATCHING_KEY"}}]),n}(OQ),cP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",t.message="multiple matching keys found in the JSON Web Key Set",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}]),n}(OQ),oP=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",t.message="signature verification failed",t}return m(n,null,[{key:"code",get:function(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}]),n}(OQ);function aP(){return"function"==typeof WebSocketPair}function lP(){try{return void 0!==sj.versions.node}catch(t){return!1}}function uP(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(e," must be ").concat(t))}function dP(t,e){return t.name===e}function sP(t){return parseInt(t.name.slice(4),10)}function mP(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function hP(t,e){if(e.length&&!e.some((function(e){return t.usages.includes(e)}))){var n="CryptoKey does not support this operation, its usages must include ";if(e.length>2){var i=e.pop();n+="one of ".concat(e.join(", "),", or ").concat(i,".")}else 2===e.length?n+="one of ".concat(e[0]," or ").concat(e[1],"."):n+="".concat(e[0],".");throw new TypeError(n)}}var bP=function(t){for(var e="Key must be ",n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];if(i.length>2){var c=i.pop();e+="one of type ".concat(i.join(", "),", or ").concat(c,".")}else 2===i.length?e+="one of type ".concat(i[0]," or ").concat(i[1],"."):e+="of type ".concat(i[0],".");return null==t?e+=" Received ".concat(t):"function"==typeof t&&t.name?e+=" Received function ".concat(t.name):"object"===a(t)&&null!=t&&t.constructor&&t.constructor.name&&(e+=" Received an instance of ".concat(t.constructor.name)),e},pP=function(t){return MQ(t)},ZP=["CryptoKey"],IP=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i,r=e.filter(Boolean);if(0===r.length||1===r.length)return!0;var c,o=S(r);try{for(o.s();!(c=o.n()).done;){var a=c.value,l=Object.keys(a);if(i&&0!==i.size)for(var u=0,d=l;u<d.length;u++){var s=d[u];if(i.has(s))return!1;i.add(s)}else i=new Set(l)}}catch(t){o.e(t)}finally{o.f()}return!0};function yP(t){if("object"!==a(e=t)||null===e||"[object Object]"!==Object.prototype.toString.call(t))return!1;var e;if(null===Object.getPrototypeOf(t))return!0;for(var n=t;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(t)===n}var gP=function(t,e){if(t.startsWith("RS")||t.startsWith("PS")){var n=e.algorithm.modulusLength;if("number"!=typeof n||n<2048)throw new TypeError("".concat(t," requires key modulusLength to be 2048 bits or larger"))}};function XP(t){var e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-".concat(t.alg.slice(-3))},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new tP("".concat(t.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new tP('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-".concat(t.alg.slice(-3))},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(t.alg.slice(-3))},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(t.alg.slice(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new tP('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},n=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},n=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new tP('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(aP()||lP())&&"OKP":if("EdDSA"!==t.alg)throw new tP('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(t.crv){case"Ed25519":e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=t.d?["sign"]:["verify"];break;case lP()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},n=t.d?["sign"]:["verify"];break;default:throw new tP('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new tP('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}var GP=function(){var t=u(o().mark((function t(e){var n,i,r,a,l,u,d,s,m;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=XP(e),l=a.algorithm,u=a.keyUsages,d=[l,null!==(i=e.ext)&&void 0!==i&&i,null!==(r=e.key_ops)&&void 0!==r?r:u],"PBKDF2"!==l.name){t.next=4;break}return t.abrupt("return",(s=jQ.subtle).importKey.apply(s,["raw",DQ(e.k)].concat(d)));case 4:return delete(m=c({},e)).alg,t.abrupt("return",(n=jQ.subtle).importKey.apply(n,["jwk",m].concat(d)));case 7:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();function fP(t,e,n){return VP.apply(this,arguments)}function VP(){return(VP=u(o().mark((function t(e,n,i){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(yP(e)){t.next=2;break}throw new TypeError("JWK must be an object");case 2:if(n||(n=e.alg),"string"==typeof n&&n){t.next=5;break}throw new TypeError('"alg" argument is required when "jwk.alg" is not present');case 5:t.t0=e.kty,t.next="oct"===t.t0?8:"RSA"===t.t0?14:"EC"===t.t0||"OKP"===t.t0?16:17;break;case 8:if("string"==typeof e.k&&e.k){t.next=10;break}throw new TypeError('missing "k" (Key Value) Parameter value');case 10:if(null!=i||(i=!0!==e.ext),!i){t.next=13;break}return t.abrupt("return",GP(c(c({},e),{},{alg:n,ext:!1})));case 13:return t.abrupt("return",DQ(e.k));case 14:if(void 0===e.oth){t.next=16;break}throw new tP('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case 16:return t.abrupt("return",GP(c(c({},e),{},{alg:n})));case 17:throw new tP('Unsupported "kty" (Key Type) Parameter value');case 18:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var WP=function(t,e,n){t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?function(t){if(!(t instanceof Uint8Array)){if(!pP(t))throw new TypeError(bP.apply(void 0,[t].concat(W(ZP),["Uint8Array"])));if("secret"!==t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}}(e):function(t,e){if(!pP(t))throw new TypeError(bP.apply(void 0,[t].concat(W(ZP))));if("secret"===t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===e&&"public"===t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===e&&"public"===t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError("".concat(ZP.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))}(e,n)};function vP(t,e,n,i,r){if(void 0!==r.crit&&void 0===i.crit)throw new t('"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((function(t){return"string"!=typeof t||0===t.length})))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');var c;c=void 0!==n?new Map([].concat(W(Object.entries(n)),W(e.entries()))):e;var o,a=S(i.crit);try{for(a.s();!(o=a.n()).done;){var l=o.value;if(!c.has(l))throw new tP('Extension Header Parameter "'.concat(l,'" is not recognized'));if(void 0===r[l])throw new t('Extension Header Parameter "'.concat(l,'" is missing'));if(c.get(l)&&void 0===i[l])throw new t('Extension Header Parameter "'.concat(l,'" MUST be integrity protected'))}}catch(t){a.e(t)}finally{a.f()}return new Set(i.crit)}var CP=function(t,e){if(void 0!==e&&(!Array.isArray(e)||e.some((function(t){return"string"!=typeof t}))))throw new TypeError('"'.concat(t,'" option must be an array of strings'));if(e)return new Set(e)};function SP(t,e){var n="SHA-".concat(t.slice(-3));switch(t){case"HS256":case"HS384":case"HS512":return{hash:n,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:n,name:"RSA-PSS",saltLength:t.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:e.namedCurve};case(aP()||lP())&&"EdDSA":var i=e.namedCurve;return{name:i,namedCurve:i};default:throw new tP("alg ".concat(t," is not supported either by JOSE or your javascript runtime"))}}function YP(t,e,n){if(MQ(e))return function(t,e){switch(e){case"HS256":case"HS384":case"HS512":if(!dP(t.algorithm,"HMAC"))throw uP("HMAC");var n=parseInt(e.slice(2),10);if(sP(t.algorithm.hash)!==n)throw uP("SHA-".concat(n),"algorithm.hash");break;case"RS256":case"RS384":case"RS512":if(!dP(t.algorithm,"RSASSA-PKCS1-v1_5"))throw uP("RSASSA-PKCS1-v1_5");var i=parseInt(e.slice(2),10);if(sP(t.algorithm.hash)!==i)throw uP("SHA-".concat(i),"algorithm.hash");break;case"PS256":case"PS384":case"PS512":if(!dP(t.algorithm,"RSA-PSS"))throw uP("RSA-PSS");var r=parseInt(e.slice(2),10);if(sP(t.algorithm.hash)!==r)throw uP("SHA-".concat(r),"algorithm.hash");break;case lP()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw uP("NODE-ED25519 or NODE-ED448");break;case aP()&&"EdDSA":if(!dP(t.algorithm,"NODE-ED25519"))throw uP("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":if(!dP(t.algorithm,"ECDSA"))throw uP("ECDSA");var c=mP(e);if(t.algorithm.namedCurve!==c)throw uP(c,"algorithm.namedCurve");break;default:throw new TypeError("CryptoKey does not support this operation")}for(var o=arguments.length,a=new Array(o>2?o-2:0),l=2;l<o;l++)a[l-2]=arguments[l];hP(t,a)}(e,t,n),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(bP.apply(void 0,[e].concat(W(ZP))));return jQ.subtle.importKey("raw",e,{hash:"SHA-".concat(t.slice(-3)),name:"HMAC"},!1,[n])}throw new TypeError(bP.apply(void 0,[e].concat(W(ZP),["Uint8Array"])))}var RP=function(){var t=u(o().mark((function t(e,n,i,r){var c,a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,YP(e,n,"verify");case 2:return c=t.sent,gP(e,c),a=SP(e,c.algorithm),t.prev=5,t.next=8,jQ.subtle.verify(a,c,i,r);case 8:return t.abrupt("return",t.sent);case 11:return t.prev=11,t.t0=t.catch(5),t.abrupt("return",!1);case 14:case"end":return t.stop()}}),t,null,[[5,11]])})));return function(e,n,i,r){return t.apply(this,arguments)}}();function KP(t,e,n){return NP.apply(this,arguments)}function NP(){return NP=u(o().mark((function t(e,n,i){var r,a,l,u,d,s,m,h,b,p,Z,I,y;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(yP(e)){t.next=2;break}throw new eP("Flattened JWS must be an object");case 2:if(void 0!==e.protected||void 0!==e.header){t.next=4;break}throw new eP('Flattened JWS must have either of the "protected" or "header" members');case 4:if(void 0===e.protected||"string"==typeof e.protected){t.next=6;break}throw new eP("JWS Protected Header incorrect type");case 6:if(void 0!==e.payload){t.next=8;break}throw new eP("JWS Payload missing");case 8:if("string"==typeof e.signature){t.next=10;break}throw new eP("JWS Signature missing or incorrect type");case 10:if(void 0===e.header||yP(e.header)){t.next=12;break}throw new eP("JWS Unprotected Header incorrect type");case 12:if(a={},!e.protected){t.next=22;break}l=DQ(e.protected),t.prev=15,a=JSON.parse(PQ.decode(l)),t.next=22;break;case 19:throw t.prev=19,t.t0=t.catch(15),new eP("JWS Protected Header is invalid");case 22:if(IP(a,e.header)){t.next=24;break}throw new eP("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");case 24:if(u=c(c({},a),e.header),d=vP(eP,new Map([["b64",!0]]),null==i?void 0:i.crit,a,u),s=!0,!d.has("b64")){t.next=31;break}if("boolean"==typeof(s=a.b64)){t.next=31;break}throw new eP('The "b64" (base64url-encode payload) Header Parameter must be a boolean');case 31:if("string"==typeof(m=u.alg)&&m){t.next=34;break}throw new eP('JWS "alg" (Algorithm) Header Parameter missing or invalid');case 34:if(!(h=i&&CP("algorithms",i.algorithms))||h.has(m)){t.next=37;break}throw new $Q('"alg" (Algorithm) Header Parameter not allowed');case 37:if(!s){t.next=42;break}if("string"==typeof e.payload){t.next=40;break}throw new eP("JWS Payload must be a string");case 40:t.next=44;break;case 42:if("string"==typeof e.payload||e.payload instanceof Uint8Array){t.next=44;break}throw new eP("JWS Payload must be a string or an Uint8Array instance");case 44:if(b=!1,"function"!=typeof n){t.next=50;break}return t.next=48,n(a,e);case 48:n=t.sent,b=!0;case 50:return WP(m,n,"verify"),p=EQ(QQ.encode(null!==(r=e.protected)&&void 0!==r?r:""),QQ.encode("."),"string"==typeof e.payload?QQ.encode(e.payload):e.payload),Z=DQ(e.signature),t.next=55,RP(m,n,Z,p);case 55:if(t.sent){t.next=58;break}throw new oP;case 58:if(I=s?DQ(e.payload):"string"==typeof e.payload?QQ.encode(e.payload):e.payload,y={payload:I},void 0!==e.protected&&(y.protectedHeader=a),void 0!==e.header&&(y.unprotectedHeader=e.header),!b){t.next=64;break}return t.abrupt("return",c(c({},y),{},{key:n}));case 64:return t.abrupt("return",y);case 65:case"end":return t.stop()}}),t,null,[[15,19]])}))),NP.apply(this,arguments)}function LP(t,e,n){return JP.apply(this,arguments)}function JP(){return JP=u(o().mark((function t(e,n,i){var r,a,l,u,d,s;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e instanceof Uint8Array&&(e=PQ.decode(e)),"string"==typeof e){t.next=3;break}throw new eP("Compact JWS must be a string or Uint8Array");case 3:if(r=e.split("."),a=r[0],l=r[1],u=r[2],3===r.length){t.next=6;break}throw new eP("Invalid Compact JWS");case 6:return t.next=8,KP({payload:l,protected:a,signature:u},n,i);case 8:if(d=t.sent,s={payload:d.payload,protectedHeader:d.protectedHeader},"function"!=typeof n){t.next=12;break}return t.abrupt("return",c(c({},s),{},{key:d.key}));case 12:return t.abrupt("return",s);case 13:case"end":return t.stop()}}),t)}))),JP.apply(this,arguments)}var xP=function(t){return Math.floor(t.getTime()/1e3)},HP=86400,kP=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i,UP=function(t){var e=kP.exec(t);if(!e)throw new TypeError("Invalid time period format");var n=parseFloat(e[1]);switch(e[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*HP);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}},TP=function(t){return t.toLowerCase().replace(/^application\//,"")},wP=function(t,e){return"string"==typeof t?e.includes(t):!!Array.isArray(t)&&e.some(Set.prototype.has.bind(new Set(t)))},FP=function(t,e){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=i.typ;if(r&&("string"!=typeof t.typ||TP(t.typ)!==TP(r)))throw new _Q('unexpected "typ" JWT header value',"typ","check_failed");try{n=JSON.parse(PQ.decode(e))}catch(t){}if(!yP(n))throw new nP("JWT Claims Set must be a top-level JSON object");var c=i.issuer;if(c&&!(Array.isArray(c)?c:[c]).includes(n.iss))throw new _Q('unexpected "iss" claim value',"iss","check_failed");var o=i.subject;if(o&&n.sub!==o)throw new _Q('unexpected "sub" claim value',"sub","check_failed");var l,u=i.audience;if(u&&!wP(n.aud,"string"==typeof u?[u]:u))throw new _Q('unexpected "aud" claim value',"aud","check_failed");switch(a(i.clockTolerance)){case"string":l=UP(i.clockTolerance);break;case"number":l=i.clockTolerance;break;case"undefined":l=0;break;default:throw new TypeError("Invalid clockTolerance option type")}var d=i.currentDate,s=xP(d||new Date);if((void 0!==n.iat||i.maxTokenAge)&&"number"!=typeof n.iat)throw new _Q('"iat" claim must be a number',"iat","invalid");if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new _Q('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>s+l)throw new _Q('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new _Q('"exp" claim must be a number',"exp","invalid");if(n.exp<=s-l)throw new qQ('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){var m=s-n.iat,h="number"==typeof i.maxTokenAge?i.maxTokenAge:UP(i.maxTokenAge);if(m-l>h)throw new qQ('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(m<0-l)throw new _Q('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};function AP(){return AP=u(o().mark((function t(e,n,i){var r,a,l,u;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,LP(e,n,i);case 2:if(a=t.sent,!(null===(r=a.protectedHeader.crit)||void 0===r?void 0:r.includes("b64"))||!1!==a.protectedHeader.b64){t.next=5;break}throw new nP("JWTs MUST NOT use unencoded payload");case 5:if(l=FP(a.protectedHeader,a.payload,i),u={payload:l,protectedHeader:a.protectedHeader},"function"!=typeof n){t.next=9;break}return t.abrupt("return",c(c({},u),{},{key:a.key}));case 9:return t.abrupt("return",u);case 10:case"end":return t.stop()}}),t)}))),AP.apply(this,arguments)}function BP(t){switch("string"==typeof t&&t.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new tP('Unsupported "alg" value for a JSON Web Key Set')}}function zP(t){return yP(t)}var jP=function(){function t(e){if(d(this,t),this._cached=new WeakMap,!function(t){return t&&"object"===a(t)&&Array.isArray(t.keys)&&t.keys.every(zP)}(e))throw new iP("JSON Web Key Set malformed");var n;this._jwks=(n=e,"function"==typeof structuredClone?structuredClone(n):JSON.parse(JSON.stringify(n)))}var e;return m(t,[{key:"getKey",value:(e=u(o().mark((function t(e,n){var i,r,a,l,u,d,s,m,h;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=c(c({},e),n.header),r=i.alg,a=i.kid,l=BP(r),u=this._jwks.keys.filter((function(t){var e=l===t.kty;if(e&&"string"==typeof a&&(e=a===t.kid),e&&"string"==typeof t.alg&&(e=r===t.alg),e&&"string"==typeof t.use&&(e="sig"===t.use),e&&Array.isArray(t.key_ops)&&(e=t.key_ops.includes("verify")),e&&"EdDSA"===r&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(r){case"ES256":e="P-256"===t.crv;break;case"ES256K":e="secp256k1"===t.crv;break;case"ES384":e="P-384"===t.crv;break;case"ES512":e="P-521"===t.crv}return e})),d=u[0],0!==(s=u.length)){t.next=8;break}throw new rP;case 8:if(1===s){t.next=10;break}throw new cP;case 10:if(void 0!==(m=this._cached.get(d)||this._cached.set(d,{}).get(d))[r]){t.next=18;break}return t.next=14,fP(c(c({},d),{},{ext:!0}),r);case 14:if(!((h=t.sent)instanceof Uint8Array||"public"!==h.type)){t.next=17;break}throw new iP("JSON Web Key Set members must be public keys");case 17:m[r]=h;case 18:return t.abrupt("return",m[r]);case 19:case"end":return t.stop()}}),t,this)}))),function(t,n){return e.apply(this,arguments)})}]),t}();var MP={exports:{}},QP={exports:{}},PP=i(LQ);
450
452
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
451
- !function(e,t){var n=pP,r=n.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function c(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=n:(i(n,t),t.Buffer=c),c.prototype=Object.create(r.prototype),i(r,c),c.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},c.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"==typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},c.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},c.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}}(bP,bP.exports);var IP=65536,gP=4294967295;var yP=bP.exports.Buffer,XP=t.crypto||t.msCrypto;XP&&XP.getRandomValues?hP.exports=function(e,t){if(e>gP)throw new RangeError("requested too many random bytes");var n=yP.allocUnsafe(e);if(e>0)if(e>IP)for(var r=0;r<e;r+=IP)XP.getRandomValues(n.slice(r,r+IP));else XP.getRandomValues(n);if("function"==typeof t)return Hz.nextTick((function(){t(null,n)}));return n}:hP.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var fP=hP.exports,GP=function(){function e(){u(this,e)}return s(e,[{key:"base64URLEncode",value:function(e){return dQ.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}},{key:"base64URLDecode",value:function(e){return dQ.decode(e).toString()}},{key:"hashSha256",value:function(e){return pM.from(mQ((new TextEncoder).encode(e)))}},{key:"generateRandomBytes",value:function(e){return fP(e)}},{key:"verifyJwt",value:function(e,t,n,r,i,c,o){return function(e,t,n){return dP.apply(this,arguments)}(e,(a={keys:[t]},ZP.prototype.getKey.bind(new ZP(a))),{algorithms:n,audience:r,clockTolerance:o,issuer:i,subject:c}).then((function(){return Promise.resolve(!0)}));var a}}]),e}(),VP=function(t){switch(t){case e.Storage.LocalStorage:return new $j;case e.Storage.SessionStorage:return new tM;case e.Storage.BrowserMemory:return new eM;default:return new tM}},WP=function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c,o,a,l,u,d,s,m,Z,h,b,p,I,g,y,X,f,G,W,C,R,S,Y,J,K,N,L,H,x,k,U,A,w,F,T,B;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=VP(t.storage),c=new GP,o=new lB(i,c),n.next=5,o.initialize(t);case 5:return a=new BB(o),l=o.getDataLayer(),n.next=9,jB((function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.signOut());case 1:case"end":return e.stop()}}),e)})))}),null!==(r=t.storage)&&void 0!==r?r:e.Storage.SessionStorage,(function(e){return l.setSessionDataParameter(DT,null!=e?e:"")}));case 9:if(u=n.sent,d=!1,s=qj.getInstance(),m=!0,b=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!Object.assign({attachToken:!0},e).attachToken){t.next=11;break}return t.t0=Object,t.t1=Object.assign({},e.headers),t.t2="Bearer ",t.next=7,o.getAccessToken();case 7:t.t3=t.sent,t.t4=t.t2.concat.call(t.t2,t.t3),t.t5={Authorization:t.t4},e.headers=t.t0.assign.call(t.t0,t.t1,t.t5);case 11:case"end":return t.stop()}}),t)})))},n.t0=null==s?void 0:s.init,!n.t0){n.next=18;break}return n.next=18,s.init(!0,b);case 18:return p=function(e){(null==s?void 0:s.setHttpRequestStartCallback)&&s.setHttpRequestStartCallback(e)},I=function(e){(null==s?void 0:s.setHttpRequestSuccessCallback)&&s.setHttpRequestSuccessCallback(e)},g=function(e){(null==s?void 0:s.setHttpRequestFinishCallback)&&s.setHttpRequestFinishCallback(e),h=e},y=function(e){Z=e},X=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,o,a,u;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!1,t.next=3,l.getConfigData();case 3:return c=t.sent,o=0,t.t0=[],t.t1=V,t.next=9,null==c?void 0:c.resourceServerURLs;case 9:if(t.t3=n=t.sent,t.t2=null!==t.t3,!t.t2){t.next=13;break}t.t2=void 0!==n;case 13:if(!t.t2){t.next=17;break}t.t4=n,t.next=18;break;case 17:t.t4=[];case 18:t.t5=t.t4,t.t6=(0,t.t1)(t.t5),t.t7=[c.baseUrl],a=t.t0.concat.call(t.t0,t.t6,t.t7);case 22:if(!(o<a.length)){t.next=30;break}if(!(u=a[o])||!(null===(r=null==e?void 0:e.url)||void 0===r?void 0:r.startsWith(u))){t.next=27;break}return i=!0,t.abrupt("break",30);case 27:o++,t.next=22;break;case 30:if(!i){t.next=34;break}return t.abrupt("return",s.request(e).then((function(e){return Promise.resolve(e)})).catch((function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c,o,a;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(401!==(null===(r=null==t?void 0:t.response)||void 0===r?void 0:r.status)&&(null==t?void 0:t.response)){n.next=31;break}return n.prev=1,n.next=4,K();case 4:o=n.sent,n.next=15;break;case 7:if(n.prev=7,n.t0=n.catch(1),!m){n.next=14;break}if("function"!=typeof Z){n.next=13;break}return n.next=13,Z(Object.assign(Object.assign({},t),{code:TB}));case 13:"function"==typeof h&&h();case 14:throw new $T("SPA-MAIN_THREAD_CLIENT-HR-SE01",null!==(i=null===n.t0||void 0===n.t0?void 0:n.t0.name)&&void 0!==i?i:"Refresh token request failed.",null!==(c=null===n.t0||void 0===n.t0?void 0:n.t0.message)&&void 0!==c?c:"An error occurred while trying to refresh the access token following a 401 response from the server.");case 15:if(!o){n.next=31;break}return n.prev=16,n.next=19,s.request(e);case 19:return a=n.sent,n.abrupt("return",Promise.resolve(a));case 23:if(n.prev=23,n.t1=n.catch(16),!m){n.next=30;break}if("function"!=typeof Z){n.next=29;break}return n.next=29,Z(n.t1);case 29:"function"==typeof h&&h();case 30:return n.abrupt("return",Promise.reject(n.t1));case 31:if(!m){n.next=36;break}if("function"!=typeof Z){n.next=35;break}return n.next=35,Z(t);case 35:"function"==typeof h&&h();case 36:return n.abrupt("return",Promise.reject(t));case 37:case"end":return n.stop()}}),n,null,[[1,7],[16,23]])})))})));case 34:throw new $T("SPA-MAIN_THREAD_CLIENT-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`");case 35:case"end":return t.stop()}}),t)})))},f=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,a,u,d,b,p,I,g,y,X;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return c=!0,t.next=3,l.getConfigData();case 3:a=t.sent,u=v(e),t.prev=5,u.s();case 7:if((d=u.n()).done){t.next=50;break}return b=d.value,p=!1,I=0,t.t0=[],t.t1=V,t.next=15,a;case 15:if(t.t4=n=t.sent,t.t3=null===t.t4,t.t3){t.next=19;break}t.t3=void 0===n;case 19:if(!t.t3){t.next=23;break}t.t5=void 0,t.next=24;break;case 23:t.t5=n.resourceServerURLs;case 24:if(t.t6=r=t.t5,t.t2=null!==t.t6,!t.t2){t.next=28;break}t.t2=void 0!==r;case 28:if(!t.t2){t.next=32;break}t.t7=r,t.next=33;break;case 32:t.t7=[];case 33:t.t8=t.t7,t.t9=(0,t.t1)(t.t8),t.t10=[a.baseUrl],g=t.t0.concat.call(t.t0,t.t9,t.t10);case 37:if(!(I<g.length)){t.next=45;break}if(!(y=g[I])||!(null===(i=b.url)||void 0===i?void 0:i.startsWith(y))){t.next=42;break}return p=!0,t.abrupt("break",45);case 42:I++,t.next=37;break;case 45:if(p){t.next=48;break}return c=!1,t.abrupt("break",50);case 48:t.next=7;break;case 50:t.next=55;break;case 52:t.prev=52,t.t11=t.catch(5),u.e(t.t11);case 55:return t.prev=55,u.f(),t.finish(55);case 58:if(X=[],!c){t.next=64;break}return e.forEach((function(e){X.push(s.request(e))})),t.abrupt("return",(null==s?void 0:s.all)&&s.all(X).then((function(e){return Promise.resolve(e)})).catch((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(401!==(null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.status)&&(null==e?void 0:e.response)){t.next=17;break}return t.prev=1,t.next=4,o.refreshAccessToken();case 4:c=t.sent,t.next=15;break;case 7:if(t.prev=7,t.t0=t.catch(1),!m){t.next=14;break}if("function"!=typeof Z){t.next=13;break}return t.next=13,Z(Object.assign(Object.assign({},e),{code:TB}));case 13:"function"==typeof h&&h();case 14:throw new $T("SPA-MAIN_THREAD_CLIENT-HRA-SE01",null!==(r=null===t.t0||void 0===t.t0?void 0:t.t0.name)&&void 0!==r?r:"Refresh token request failed.",null!==(i=null===t.t0||void 0===t.t0?void 0:t.t0.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.");case 15:if(!c){t.next=17;break}return t.abrupt("return",s.all&&s.all(X).then((function(e){return Promise.resolve(e)})).catch((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!m){t.next=5;break}if("function"!=typeof Z){t.next=4;break}return t.next=4,Z(e);case 4:"function"==typeof h&&h();case 5:return t.abrupt("return",Promise.reject(e));case 6:case"end":return t.stop()}}),t)})))})));case 17:if(!m){t.next=22;break}if("function"!=typeof Z){t.next=21;break}return t.next=21,Z(e);case 21:"function"==typeof h&&h();case 22:return t.abrupt("return",Promise.reject(e));case 23:case"end":return t.stop()}}),t,null,[[1,7]])})))})));case 64:throw new $T("SPA-MAIN_THREAD_CLIENT-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`");case 65:case"end":return t.stop()}}),t,null,[[5,52,55,58]])})))},G=function(){return s},W=function(){return(null==s?void 0:s.enableHandler)&&s.enableHandler(),m=!0,!0},C=function(){return(null==s?void 0:s.disableHandler)&&s.disableHandler(),m=!1,!0},R=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.getOIDCServiceEndpoints();case 2:return i=e.sent,e.next=5,l.getConfigData();case 5:c=e.sent,u.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",(function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.getBasicUserInfo();case 2:return e.abrupt("return",e.sent.sessionState);case 3:case"end":return e.stop()}}),e)})))}),null!==(n=c.checkSessionInterval)&&void 0!==n?n:3,null!==(r=c.sessionRefreshInterval)&&void 0!==r?r:300,c.signInRedirectURL,(function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",o.getAuthorizationURL(e));case 1:case"end":return t.stop()}}),t)})))}));case 7:case"end":return e.stop()}}),e)})))},S=function(t,n,r,i){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function c(){var d,s,m,Z,h,b,p,I,g,y;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,l.getConfigData();case 2:return Z=c.sent,c.next=5,u.receivePromptNoneResponse((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.setSessionDataParameter(DT,null!=e?e:"");case 2:return t.abrupt("return");case 3:case"end":return t.stop()}}),t)})))}));case 5:if(!c.sent){c.next=8;break}return c.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 8:return c.next=10,o.isAuthenticated();case 10:if(!c.sent){c.next=19;break}return a.clearRefreshTokenTimeout(),a.refreshAccessTokenAutomatically(),Z.enableOIDCSessionManagement&&R(),c.t0=Promise,c.next=17,o.getBasicUserInfo();case 17:return c.t1=c.sent,c.abrupt("return",c.t0.resolve.call(c.t0,c.t1));case 19:if((null==Z?void 0:Z.responseMode)===e.ResponseMode.formPost&&n?(h=n,b=null!=r?r:"",p=null!=i?i:""):(h=null!==(d=new URL(window.location.href).searchParams.get(ET))&&void 0!==d?d:"",b=null!==(s=new URL(window.location.href).searchParams.get(DT))&&void 0!==s?s:"",p=null!==(m=new URL(window.location.href).searchParams.get(qT))&&void 0!==m?m:"",zB.removeAuthorizationCode()),!h||!p){c.next=22;break}return c.abrupt("return",L(h,b,p));case 22:if(I=new URL(window.location.href).searchParams.get(UB),g=new URL(window.location.href).searchParams.get(AB),!I){c.next=30;break}throw(y=new URL(window.location.href)).searchParams.delete(UB),y.searchParams.delete(AB),history.pushState(null,document.title,y.toString()),new $T("SPA-MAIN_THREAD_CLIENT-SI-SE01",I,null!=g?g:"");case 30:return c.abrupt("return",o.getAuthorizationURL(t).then((function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(Z.storage!==e.Storage.BrowserMemory||!Z.enablePKCE){n.next=8;break}return r=eB.extractPKCEKeyFromStateParam(p),n.t0=zB,n.t1=r,n.next=6,o.getPKCECode(p);case 6:n.t2=n.sent,n.t0.setPKCE.call(n.t0,n.t1,n.t2);case 8:return location.href=t,n.next=11,zB.waitTillPageRedirect();case 11:return n.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 12:case"end":return n.stop()}}),n)})))})));case 31:case"end":return c.stop()}}),c)})))},Y=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,o.isAuthenticated();case 2:if(e.t0=e.sent,!e.t0){e.next=5;break}e.t0=!d;case 5:if(!e.t0){e.next=11;break}return e.next=8,o.signOut();case 8:location.href=e.sent,e.next=18;break;case 11:return location.href=zB.getSignOutURL(),e.next=14,l.removeOIDCProviderMetaData();case 14:return e.next=16,l.removeTemporaryData();case 16:return e.next=18,l.removeSessionData();case 18:return a.clearRefreshTokenTimeout(),e.next=21,zB.waitTillPageRedirect();case 21:return e.abrupt("return",!0);case 22:case"end":return e.stop()}}),e)})))},J=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,u,s,m,Z;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(c=!0,u=!1,!(null==e?void 0:e.tokenEndpoint)){t.next=39;break}return c=!1,s=0,t.t0=[],t.t1=V,t.next=9,l.getConfigData();case 9:if(t.t4=n=t.sent,t.t3=null===t.t4,t.t3){t.next=13;break}t.t3=void 0===n;case 13:if(!t.t3){t.next=17;break}t.t5=void 0,t.next=18;break;case 17:t.t5=n.resourceServerURLs;case 18:if(t.t6=r=t.t5,t.t2=null!==t.t6,!t.t2){t.next=22;break}t.t2=void 0!==r;case 22:if(!t.t2){t.next=26;break}t.t7=r,t.next=27;break;case 26:t.t7=[];case 27:t.t8=t.t7,t.t9=(0,t.t1)(t.t8),t.t10=[e.baseUrl],m=t.t0.concat.call(t.t0,t.t9,t.t10);case 31:if(!(s<m.length)){t.next=39;break}if(!(Z=m[s])||!(null===(i=e.tokenEndpoint)||void 0===i?void 0:i.startsWith(Z))){t.next=36;break}return u=!0,t.abrupt("break",39);case 36:s++,t.next=31;break;case 39:if(e.shouldReplayAfterRefresh&&l.setTemporaryDataParameter(wB,JSON.stringify(e)),!c&&!u){t.next=44;break}return t.abrupt("return",o.requestCustomGrant(e).then((function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(e.preventSignOutURLUpdate&&(d=!0),!e.returnsSession){n.next=6;break}return a.refreshAccessTokenAutomatically(),n.abrupt("return",o.getBasicUserInfo());case 6:return n.abrupt("return",t);case 7:case"end":return n.stop()}}),n)})))})).catch((function(e){return Promise.reject(e)})));case 44:return t.abrupt("return",Promise.reject(new $T("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`")));case 45:case"end":return t.stop()}}),t)})))},K=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,o.refreshAccessToken();case 3:return e.next=5,B();case 5:if(!(t=e.sent)){e.next=9;break}return e.next=9,J(t);case 9:return a.refreshAccessTokenAutomatically(),e.abrupt("return",o.getBasicUserInfo());case 13:return e.prev=13,e.t0=e.catch(0),e.abrupt("return",Promise.reject(e.t0));case 16:case"end":return e.stop()}}),e,null,[[0,13]])})))},N=function(){return o.revokeAccessToken().then((function(){return u.reset(),a.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(e){return Promise.reject(e)}))},L=function(t,n,r){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function i(){var c,u;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,l.getConfigData();case 2:if((c=i.sent).storage!==e.Storage.BrowserMemory||!c.enablePKCE){i.next=7;break}return u=zB.getPKCE(eB.extractPKCEKeyFromStateParam(r)),i.next=7,o.setPKCECode(eB.extractPKCEKeyFromStateParam(r),u);case 7:return i.abrupt("return",o.requestAccessToken(t,n,r).then((function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=zB,e.next=3,o.getSignOutURL();case 3:return e.t1=e.sent,e.t0.setSignOutURL.call(e.t0,e.t1),a.clearRefreshTokenTimeout(),a.refreshAccessTokenAutomatically(),c.enableOIDCSessionManagement&&R(),e.abrupt("return",o.getBasicUserInfo());case 9:case"end":return e.stop()}}),e)})))})).catch((function(e){return Promise.reject(e)})));case 8:case"end":return i.stop()}}),i)})))},H=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c,a,d,s,m;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.getConfigData();case 2:if(r=t.sent,!zB.isInitializedSilentSignIn()){t.next=7;break}return t.next=6,u.receivePromptNoneResponse();case 6:return t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 7:return i=document.getElementById(KB),c=null===(n=null==i?void 0:i.contentDocument)||void 0===n?void 0:n.getElementById(NB),t.prev=9,t.next=12,o.getAuthorizationURL({prompt:"none",state:HB});case 12:if(a=t.sent,(d=new URL(a)).searchParams.set("response_mode","query"),s=d.toString(),r.storage!==e.Storage.BrowserMemory||!r.enablePKCE){t.next=24;break}return m=d.searchParams.get(qT),t.t0=zB,t.t1=eB.extractPKCEKeyFromStateParam(null!=m?m:""),t.next=22,o.getPKCECode(null!=m?m:"");case 22:t.t2=t.sent,t.t0.setPKCE.call(t.t0,t.t1,t.t2);case 24:c.src=s,t.next=30;break;case 27:return t.prev=27,t.t3=t.catch(9),t.abrupt("return",Promise.reject(t.t3));case 30:return t.abrupt("return",new Promise((function(e,t){var n=setTimeout((function(){e(!1)}),1e4);window.addEventListener("message",(function r(i){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function c(){var o,a,l,u;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:(null==(u=i.data)?void 0:u.type)==mB&&(window.removeEventListener("message",r),clearTimeout(n),e(!1)),(null==u?void 0:u.type)==sB&&(null===(o=null==u?void 0:u.data)||void 0===o?void 0:o.code)&&L(u.data.code,null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.sessionState,null===(l=null==u?void 0:u.data)||void 0===l?void 0:l.state).then((function(t){window.removeEventListener("message",r),e(t)})).catch((function(e){window.removeEventListener("message",r),t(e)})).finally((function(){clearTimeout(n)}));case 3:case"end":return c.stop()}}),c)})))}))})));case 31:case"end":return t.stop()}}),t,null,[[9,27]])})))},x=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.getBasicUserInfo());case 1:case"end":return e.stop()}}),e)})))},k=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.getDecodedIDToken());case 1:case"end":return e.stop()}}),e)})))},U=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.getIDToken());case 1:case"end":return e.stop()}}),e)})))},A=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.getOIDCServiceEndpoints());case 1:case"end":return e.stop()}}),e)})))},w=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.getAccessToken());case 1:case"end":return e.stop()}}),e)})))},F=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",o.isAuthenticated());case 1:case"end":return e.stop()}}),e)})))},T=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.getConfigData();case 2:return n=t.sent,r=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),e),t.next=7,o.updateConfig(i);case 7:i.enableOIDCSessionManagement&&r&&(u.reset(),R());case 8:case"end":return t.stop()}}),t)})))},B=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.getTemporaryDataParameter(wB);case 2:if(!(t=e.sent)){e.next=7;break}return e.abrupt("return",JSON.parse(t));case 7:return e.abrupt("return",null);case 8:case"end":return e.stop()}}),e)})))},n.abrupt("return",{disableHttpHandler:C,enableHttpHandler:W,getAccessToken:w,getBasicUserInfo:x,getDecodedIDToken:k,getHttpClient:G,getIDToken:U,getOIDCServiceEndpoints:A,httpRequest:X,httpRequestAll:f,isAuthenticated:F,refreshAccessToken:K,requestCustomGrant:J,revokeAccessToken:N,setHttpRequestErrorCallback:y,setHttpRequestFinishCallback:g,setHttpRequestStartCallback:p,setHttpRequestSuccessCallback:I,signIn:S,signOut:Y,trySignInSilently:H,updateConfig:T});case 44:case"end":return n.stop()}}),n)})))};function CP(e,t,n){var r=void 0===t?null:t,i=function(e,t){var n=atob(e);if(t){for(var r=new Uint8Array(n.length),i=0,c=n.length;i<c;++i)r[i]=n.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(r.buffer))}return n}(e,void 0!==n&&n),c=i.indexOf("\n",10)+1,o=i.substring(c)+(r?"//# sourceMappingURL="+r:""),a=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(a)}var vP,RP,SP,YP,JP=(vP="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gdCh0KXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbcl0/YXJndW1lbnRzW3JdOnt9O3IlMj9lKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiByKGUpe3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxyKGUpfWZ1bmN0aW9uIG4oZSx0LHIsbixhLG8saSl7dHJ5e3ZhciBzPWVbb10oaSksdT1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixhKX1mdW5jdGlvbiBhKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihhLG8pe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe24oaSxhLG8scyx1LCJuZXh0IixlKX1mdW5jdGlvbiB1KGUpe24oaSxhLG8scyx1LCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZpKGUucHJvdG90eXBlLHQpLHImJmkoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmbChlLHQpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0sZihlKX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LGwoZSx0KX1mdW5jdGlvbiBoKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBwKGUsdCxyKXtyZXR1cm4gcD1oKCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtudWxsXTtuLnB1c2guYXBwbHkobix0KTt2YXIgYT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLG4pKTtyZXR1cm4gciYmbChhLHIucHJvdG90eXBlKSxhfSxwLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBkKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIGQ9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fChyPWUsLTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKHIpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSkpcmV0dXJuIGU7dmFyIHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT10KXtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7dC5zZXQoZSxuKX1mdW5jdGlvbiBuKCl7cmV0dXJuIHAoZSxhcmd1bWVudHMsZih0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGwobixlKX0sZChlKX1mdW5jdGlvbiB2KGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBnKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdihlKX1mdW5jdGlvbiBtKGUpe3ZhciB0PWgoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWYoZSk7aWYodCl7dmFyIGE9Zih0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZyh0aGlzLHIpfX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbD09cilyZXR1cm47dmFyIG4sYSxvPVtdLGk9ITAscz0hMTt0cnl7Zm9yKHI9ci5jYWxsKGUpOyEoaT0obj1yLm5leHQoKSkuZG9uZSkmJihvLnB1c2gobi52YWx1ZSksIXR8fG8ubGVuZ3RoIT09dCk7aT0hMCk7fWNhdGNoKGUpe3M9ITAsYT1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX1yZXR1cm4gb30oZSx0KXx8dyhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gayhlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fHcoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gdyhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gayhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP2soZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIGsoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBSKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj13KGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8saT0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gaT1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLG89ZX0sZjpmdW5jdGlvbigpe3RyeXtpfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgb319fX1mdW5jdGlvbiBfKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihhLG8pe2Z1bmN0aW9uIGkoZSl7dHJ5e3Uobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP2EoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKGkscyl9dSgobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfQovKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgoKICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24geChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oYSxvKXtmdW5jdGlvbiBpKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9hKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihpLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgUzshZnVuY3Rpb24oZSl7ZS5mb3JtUG9zdD0iZm9ybV9wb3N0IixlLnF1ZXJ5PSJxdWVyeSJ9KFN8fChTPXt9KSk7dmFyIEU7IWZ1bmN0aW9uKGUpe2UuQ29uZmlnRGF0YT0iY29uZmlnX2RhdGEiLGUuT0lEQ1Byb3ZpZGVyTWV0YURhdGE9Im9pZGNfcHJvdmlkZXJfbWV0YV9kYXRhIixlLlNlc3Npb25EYXRhPSJzZXNzaW9uX2RhdGEiLGUuVGVtcG9yYXJ5RGF0YT0idGVtcG9yYXJ5X2RhdGEifShFfHwoRT17fSkpO3ZhciBULEE9InJlZnJlc2hfdG9rZW5fdGltZXIiLEM9WyJSUzI1NiIsIlJTNTEyIiwiUlMzODQiLCJQUzI1NiJdOyFmdW5jdGlvbihlKXtlLkluY2x1ZGU9ImluY2x1ZGUiLGUuU2FtZU9yaWdpbj0ic2FtZS1vcmlnaW4iLGUuT21pdD0ib21pdCJ9KFR8fChUPXt9KSk7dmFyIEQ9cygoZnVuY3Rpb24gZSh0LHIsbil7byh0aGlzLGUpLHRoaXMubWVzc2FnZT1uLHRoaXMubmFtZT1yLHRoaXMuY29kZT10LE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCh0aGlzIGluc3RhbmNlb2YgZT90aGlzLmNvbnN0cnVjdG9yOnZvaWQgMCkucHJvdG90eXBlKX0pKSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKX1yZXR1cm4gcyhlLG51bGwsW3trZXk6ImZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO3ZhciByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD15KGUsMiksbj10WzBdLGE9dFsxXSxvPW4uc3BsaXQoIl8iKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKV0uY29uY2F0KGIoZS5zbGljZSgxKSkpLmpvaW4oIiIpfSkpLmpvaW4oIiIpO3Jbb109YX0pKSxyfX0se2tleToiZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19fSx7a2V5OiJnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD8iIi5jb25jYXQodCwiX3JlcXVlc3RfIikuY29uY2F0KHIpOiJyZXF1ZXN0XyIuY29uY2F0KHIpfX0se2tleToiZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuInBrY2VfY29kZV92ZXJpZmllciMiLmNvbmNhdChwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKSl9fV0pLGV9KCk7Ty5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIixyPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O3ZhciBQLEksVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO28odGhpcyxlKSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4geChuLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4geChuLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9LHRoaXMuX2NyeXB0b0hlbHBlcj1yfXJldHVybiBzKGUsW3trZXk6InJlc29sdmVFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG47cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gcj17fSx0Lm5leHQ9Myx0aGlzLl9jb25maWcoKTtjYXNlIDM6cmV0dXJuIG49dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLChuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO3JbdF09KG51bGw9PW4/dm9pZCAwOm4uZW5kcG9pbnRzKT9uLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkscikpKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbjtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXt9LGUubmV4dD0zLHRoaXMuX2NvbmZpZygpO2Nhc2UgMzppZihyPWUuc2VudCxuPVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0sci5lbmRwb2ludHMmJk9iamVjdC5rZXlzKG51bGw9PXI/dm9pZCAwOnIuZW5kcG9pbnRzKS5ldmVyeSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7cmV0dXJuIG4uaW5jbHVkZXModCl9KSkpe2UubmV4dD03O2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0hFTFBFUi1SRUUtTkYwMSIsIk5vIHJlcXVpcmVkIGVuZHBvaW50cy4iLCJSZXF1aXJlZCBvaWRjIGVuZHBvaW50cyBhcmUgbm90IGRlZmluZWQiKTtjYXNlIDc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChyLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO3Rbbl09KG51bGw9PXI/dm9pZCAwOnIuZW5kcG9pbnRzKT9yLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LHQpKSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixhO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9e30sZS5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOmlmKHI9ZS5zZW50LG49ci5iYXNlVXJsKXtlLm5leHQ9NzticmVha310aHJvdyBuZXcgRCgiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7Y2FzZSA3OnJldHVybiByLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO3Rbbl09KG51bGw9PXI/dm9pZCAwOnIuZW5kcG9pbnRzKT9yLmVuZHBvaW50c1tlXToiIn0pKSxhPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX0sZS5hYnJ1cHQoInJldHVybiIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHQpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJ2YWxpZGF0ZUlkVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sYSxvLGkscyx1O3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQuandrc191cmksdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKG49dC5zZW50LHImJjAhPT1yLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXRocm93IG5ldyBEKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuIHQucHJldj04LHQubmV4dD0xMSxmZXRjaChyLHtjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9ULkluY2x1ZGU6VC5TYW1lT3JpZ2lufSk7Y2FzZSAxMTphPXQuc2VudCx0Lm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDp0aHJvdyB0LnByZXY9MTQsdC50MD10LmNhdGNoKDgpLG5ldyBEKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10LnQwP3QudDA6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIik7Y2FzZSAxNzppZigyMDA9PT1hLnN0YXR1cyYmYS5vayl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LnQxPUQsdC50Mj0iSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoIi5jb25jYXQoYS5zdGF0dXNUZXh0LCIpLiIpLHQubmV4dD0yMixhLmpzb24oKTtjYXNlIDIyOnRocm93IHQudDM9dC5zZW50LG5ldyB0LnQxKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsdC50Mix0LnQzKTtjYXNlIDI0OnJldHVybiB0Lm5leHQ9MjYsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI2OnJldHVybiBvPXQuc2VudC5pc3N1ZXIsdC5uZXh0PTI5LGEuanNvbigpO2Nhc2UgMjk6cmV0dXJuIGk9dC5zZW50LHM9aS5rZXlzLHQubmV4dD0zMyx0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0scyk7Y2FzZSAzMzpyZXR1cm4gdT10LnNlbnQsdC50ND10aGlzLl9jcnlwdG9IZWxwZXIsdC50NT1lLHQudDY9dSx0Lm5leHQ9MzksdGhpcy5fY29uZmlnKCk7Y2FzZSAzOTpyZXR1cm4gdC50Nz10LnNlbnQuY2xpZW50SUQsdC50OD1udWxsIT1vP286IiIsdC50OT10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsdC5uZXh0PTQ0LHRoaXMuX2NvbmZpZygpO2Nhc2UgNDQ6cmV0dXJuIHQudDEwPXQuc2VudC5jbG9ja1RvbGVyYW5jZSx0LmFicnVwdCgicmV0dXJuIix0LnQ0LmlzVmFsaWRJZFRva2VuLmNhbGwodC50NCx0LnQ1LHQudDYsdC50Nyx0LnQ4LHQudDksdC50MTApKTtjYXNlIDQ2OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzLFtbOCwxNF1dKX0pKSl9fSx7a2V5OiJnZXRBdXRoZW50aWNhdGVkVXNlckluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLG89dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSksaT1PLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChvKSxzPW51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPW8uZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixjPW51bGwhPT0obj1vLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGY9dSYmYz8iIi5jb25jYXQodSwiICIpLmNvbmNhdChjKTp1fHxjfHwiIixsPW51bGwhPT0oYT1vLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWE/YTpmO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpsLHRlbmFudERvbWFpbjppLHVzZXJuYW1lOnN9LE8uZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKG8pKX19LHtrZXk6InJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgYSxvLGk7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gYT0ib3BlbmlkIixuLm5leHQ9Myx0aGlzLl9jb25maWcoKTtjYXNlIDM6cmV0dXJuIG89bi5zZW50LG4ubmV4dD02LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSh0KTtjYXNlIDY6cmV0dXJuIGk9bi5zZW50LG4uYWJydXB0KCJyZXR1cm4iLChvLnNjb3BlJiZvLnNjb3BlLmxlbmd0aD4wJiYoby5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG8uc2NvcGUucHVzaCgib3BlbmlkIiksYT1vLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLGkuYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLGEpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsby5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPW8uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKSkpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiY2xlYXJVc2VyU2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpO2Nhc2UgMjpyZXR1cm4gdC5uZXh0PTQsdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiaGFuZGxlVG9rZW5SZXNwb25zZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixhLG89dGhpcztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmlmKDIwMD09PWUuc3RhdHVzJiZlLm9rKXtyLm5leHQ9NzticmVha31yZXR1cm4gci50MD1ELHIudDE9IkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgiLmNvbmNhdChlLnN0YXR1c1RleHQsIikuIiksci5uZXh0PTUsZS5qc29uKCk7Y2FzZSA1OnRocm93IHIudDI9ci5zZW50LG5ldyByLnQwKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsci50MSxyLnQyKTtjYXNlIDc6cmV0dXJuIHIubmV4dD05LGUuanNvbigpO2Nhc2UgOTpyZXR1cm4obj1yLnNlbnQpLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksci5uZXh0PTEzLHRoaXMuX2NvbmZpZygpO2Nhc2UgMTM6aWYoIXIuc2VudC52YWxpZGF0ZUlEVG9rZW4pe3IubmV4dD0xNTticmVha31yZXR1cm4gci5hYnJ1cHQoInJldHVybiIsdGhpcy52YWxpZGF0ZUlkVG9rZW4obi5pZF90b2tlbikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geChvLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgcjtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobix0KTtjYXNlIDI6cmV0dXJuIHI9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9LGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVzb2x2ZShyKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSkpO2Nhc2UgMTU6cmV0dXJuIGE9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9LHIubmV4dD0xOCx0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobix0KTtjYXNlIDE4OnJldHVybiByLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoYSkpO2Nhc2UgMTk6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6ImdlbmVyYXRlUEtDRUtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7dmFyIG4sYSxvO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpO2Nhc2UgMjpyZXR1cm4gbj1yLnNlbnQsYT1bXSxPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZhLnB1c2goZSl9KSksbz1hLnNvcnQoKS5wb3AoKSxyLmFicnVwdCgicmV0dXJuIiwicGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KG51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT10P3Q6Ii0xIikrMSkpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX1dKSxlfSgpLEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe28odGhpcyxlKSx0aGlzLl9jcnlwdG9VdGlscz10fXJldHVybiBzKGUsW3trZXk6ImdldENvZGVWZXJpZmllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX19LHtrZXk6ImdldENvZGVDaGFsbGVuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9fSx7a2V5OiJnZXRKV0tGb3JUaGVJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpLGE9Uih0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7aWYobi5raWQ9PT1vLmtpZClyZXR1cm4gb319Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dGhyb3cgbmV3IEQoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrbi5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5raWR9KSkuam9pbigiLCAiKSl9fSx7a2V5OiJpc1ZhbGlkSWRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLG8pe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LEMscixuLGEsbykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgRCgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIj09PShudWxsPT1lP3ZvaWQgMDplLmNvZGUpJiYibmJmIj09PShudWxsPT1lP3ZvaWQgMDplLmNsYWltKT9Qcm9taXNlLnJlamVjdChuZXcgRCgiSlMtQ1JZUFRPX1VUSUxTLUlWSVQtSVYwMiIsIkpXVCBOQkYgQ0xBSU0gVkFMSURBVElPTiBGQUlMRUQiLCJKV1QgTkJGIGNsYWltIHZhbGlkYXRpb24gaGFzIGJlZW4gZmFpbGVkIikpOlByb21pc2UucmVqZWN0KG5ldyBEKCJKUy1DUllQVE9fVVRJTFMtSVZJVC1JVjAzIiwiSldUIFZBTElEQVRJT04gRkFJTEVEIiwiSldUIHZhbGlkYXRpb24gaGFzIGJlZW4gZmFpbGVkIikpfSkpfX0se2tleToiZGVjb2RlSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBEKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19XSksZX0oKSxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXRoaXM7byh0aGlzLGUpLHRoaXMuX2NyeXB0b1V0aWxzPXIsdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBMKHIpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBVKHQsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4geChuLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4geChuLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fXJldHVybiBzKGUsW3trZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbygpe3ZhciBpLHMsdSxjLGYsbCxoLHAsZCx2LGcsbSxiLHcsayxfLHgsUyxFLFQ7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihvKXtmb3IoOzspc3dpdGNoKG8ucHJldj1vLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iik7Y2FzZSAyOnJldHVybiBpPW8uc2VudCxvLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYocz1vLnNlbnQsaSYmMCE9PWkudHJpbSgpLmxlbmd0aCl7by5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEQoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSA4OnJldHVybiB1PW5ldyBVUkwoaSksKGM9bmV3IE1hcCkuc2V0KCJyZXNwb25zZV90eXBlIiwiY29kZSIpLGMuc2V0KCJjbGllbnRfaWQiLHMuY2xpZW50SUQpLGY9Im9wZW5pZCIscy5zY29wZSYmcy5zY29wZS5sZW5ndGg+MCYmKHMuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxzLnNjb3BlLnB1c2goIm9wZW5pZCIpLGY9cy5zY29wZS5qb2luKCIgIikpLGMuc2V0KCJzY29wZSIsZiksYy5zZXQoInJlZGlyZWN0X3VyaSIscy5zaWduSW5SZWRpcmVjdFVSTCkscy5yZXNwb25zZU1vZGUmJmMuc2V0KCJyZXNwb25zZV9tb2RlIixzLnJlc3BvbnNlTW9kZSksby5uZXh0PTE0LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleSh0KTtjYXNlIDE0OmlmKGw9by5zZW50LCFzLmVuYWJsZVBLQ0Upe28ubmV4dD0yMTticmVha31yZXR1cm4gaD1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSxwPW51bGw9PT0obj10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldENvZGVDaGFsbGVuZ2UoaCksby5uZXh0PTE5LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGwsaCx0KTtjYXNlIDE5OmMuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2IiksYy5zZXQoImNvZGVfY2hhbGxlbmdlIixwKTtjYXNlIDIxOmlmKHMucHJvbXB0JiZjLnNldCgicHJvbXB0IixzLnByb21wdCksZD1lKWZvcih2PTAsZz1PYmplY3QuZW50cmllcyhkKTt2PGcubGVuZ3RoO3YrKyltPXkoZ1t2XSwyKSxiPW1bMF0sdz1tWzFdLCIiIT1iJiYiIiE9dyYmInN0YXRlIiE9PWImJihrPWIucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpLGMuc2V0KGssdy50b1N0cmluZygpKSk7Yy5zZXQoInN0YXRlIixPLmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihsLGQ/bnVsbD09PShhPWQuc3RhdGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRvU3RyaW5nKCk6IiIpKSxfPVIoYy5lbnRyaWVzKCkpO3RyeXtmb3IoXy5zKCk7ISh4PV8ubigpKS5kb25lOylTPXkoeC52YWx1ZSwyKSxFPVNbMF0sVD1TWzFdLHUuc2VhcmNoUGFyYW1zLmFwcGVuZChFLFQpfWNhdGNoKGUpe18uZShlKX1maW5hbGx5e18uZigpfXJldHVybiBvLmFicnVwdCgicmV0dXJuIix1LnRvU3RyaW5nKCkpO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxvLHRoaXMpfSkpKX19LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIG8saSxzLHUsYztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGEpe2Zvcig7Oylzd2l0Y2goYS5wcmV2PWEubmV4dCl7Y2FzZSAwOnJldHVybiBhLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbz1hLnNlbnQudG9rZW5fZW5kcG9pbnQsYS5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKGk9YS5zZW50LG8mJjAhPT1vLnRyaW0oKS5sZW5ndGgpe2EubmV4dD04O2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgODppZihhLnQwPXQsIWEudDApe2EubmV4dD0xMjticmVha31yZXR1cm4gYS5uZXh0PTEyLHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCxuKTtjYXNlIDEyOmlmKChzPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoaS5jbGllbnRJRCkpLGkuY2xpZW50U2VjcmV0JiZpLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnMucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChpLmNsaWVudFNlY3JldCkpLHU9ZSxzLnB1c2goImNvZGU9Ii5jb25jYXQodSkpLHMucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxzLnB1c2goInJlZGlyZWN0X3VyaT0iLmNvbmNhdChpLnNpZ25JblJlZGlyZWN0VVJMKSksYS50MT1pLmVuYWJsZVBLQ0UsIWEudDEpe2EubmV4dD0yOTticmVha31yZXR1cm4gYS50Mj1zLGEudDM9ImNvZGVfdmVyaWZpZXI9IixhLm5leHQ9MjQsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKHIpLG4pO2Nhc2UgMjQ6cmV0dXJuIGEudDQ9YS5zZW50LGEudDU9YS50My5jb25jYXQuY2FsbChhLnQzLGEudDQpLGEudDIucHVzaC5jYWxsKGEudDIsYS50NSksYS5uZXh0PTI5LHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKE8uZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxuKTtjYXNlIDI5OnJldHVybiBhLnByZXY9MjksYS5uZXh0PTMyLGZldGNoKG8se2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6aS5zZW5kQ29va2llc0luUmVxdWVzdHM/VC5JbmNsdWRlOlQuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKE8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSk7Y2FzZSAzMjpjPWEuc2VudCxhLm5leHQ9Mzg7YnJlYWs7Y2FzZSAzNTp0aHJvdyBhLnByZXY9MzUsYS50Nj1hLmNhdGNoKDI5KSxuZXcgRCgiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9YS50Nj9hLnQ2OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpO2Nhc2UgMzg6aWYoYy5vayl7YS5uZXh0PTQ1O2JyZWFrfXJldHVybiBhLnQ3PUQsYS50OD0iUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoYy5zdGF0dXNUZXh0KSxhLm5leHQ9NDMsYy5qc29uKCk7Y2FzZSA0Mzp0aHJvdyBhLnQ5PWEuc2VudCxuZXcgYS50NygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYS50OCxhLnQ5KTtjYXNlIDQ1OnJldHVybiBhLm5leHQ9NDcsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShjLG4pO2Nhc2UgNDc6cmV0dXJuIGEuYWJydXB0KCJyZXR1cm4iLGEuc2VudCk7Y2FzZSA0ODpjYXNlImVuZCI6cmV0dXJuIGEuc3RvcCgpfX0pLGEsdGhpcyxbWzI5LDM1XV0pfSkpKX19LHtrZXk6InJlZnJlc2hBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixhLG8saTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQudG9rZW5fZW5kcG9pbnQsdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OnJldHVybiBuPXQuc2VudCx0Lm5leHQ9OCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSA4OmlmKChhPXQuc2VudCkucmVmcmVzaF90b2tlbil7dC5uZXh0PTExO2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2Nhc2UgMTE6aWYociYmMCE9PXIudHJpbSgpLmxlbmd0aCl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSAxMzpyZXR1cm4obz1bXSkucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxvLnB1c2goInJlZnJlc2hfdG9rZW49Ii5jb25jYXQoYS5yZWZyZXNoX3Rva2VuKSksby5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxuLmNsaWVudFNlY3JldCYmbi5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZvLnB1c2goImNsaWVudF9zZWNyZXQ9Ii5jb25jYXQobi5jbGllbnRTZWNyZXQpKSx0LnByZXY9MTUsdC5uZXh0PTE4LGZldGNoKHIse2JvZHk6by5qb2luKCImIiksY3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/VC5JbmNsdWRlOlQuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKE8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSk7Y2FzZSAxODppPXQuc2VudCx0Lm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTp0aHJvdyB0LnByZXY9MjEsdC50MD10LmNhdGNoKDE1KSxuZXcgRCgiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dC50MD90LnQwOiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpO2Nhc2UgMjQ6aWYoaS5vayl7dC5uZXh0PTMxO2JyZWFrfXJldHVybiB0LnQxPUQsdC50Mj0iUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoaS5zdGF0dXNUZXh0KSx0Lm5leHQ9MjksaS5qc29uKCk7Y2FzZSAyOTp0aHJvdyB0LnQzPXQuc2VudCxuZXcgdC50MSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsdC50Mix0LnQzKTtjYXNlIDMxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGksZSkpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxNSwyMV1dKX0pKSl9fSx7a2V5OiJyZXZva2VBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixhLG87cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LnJldm9jYXRpb25fZW5kcG9pbnQsdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKG49dC5zZW50LHImJjAhPT1yLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSA4OnJldHVybihhPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQobi5jbGllbnRJRCkpLHQudDA9YSx0LnQxPSJ0b2tlbj0iLHQubmV4dD0xNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSAxNDpyZXR1cm4gdC50Mj10LnNlbnQuYWNjZXNzX3Rva2VuLHQudDM9dC50MS5jb25jYXQuY2FsbCh0LnQxLHQudDIpLHQudDAucHVzaC5jYWxsKHQudDAsdC50MyksYS5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIiksdC5wcmV2PTE4LHQubmV4dD0yMSxmZXRjaChyLHtib2R5OmEuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP1QuSW5jbHVkZTpULlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhPLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pO2Nhc2UgMjE6bz10LnNlbnQsdC5uZXh0PTI3O2JyZWFrO2Nhc2UgMjQ6dGhyb3cgdC5wcmV2PTI0LHQudDQ9dC5jYXRjaCgxOCksbmV3IEQoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQudDQ/dC50NDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIik7Y2FzZSAyNzppZigyMDA9PT1vLnN0YXR1cyYmby5vayl7dC5uZXh0PTM0O2JyZWFrfXJldHVybiB0LnQ1PUQsdC50Nj0iSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoby5zdGF0dXNUZXh0LCIpLiIpLHQubmV4dD0zMixvLmpzb24oKTtjYXNlIDMyOnRocm93IHQudDc9dC5zZW50LG5ldyB0LnQ1KCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIix0LnQ2LHQudDcpO2Nhc2UgMzQ6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLCh0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUobykpKTtjYXNlIDM1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzLFtbMTgsMjRdXSl9KSkpfX0se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuLGEsbyxpLHMsdSxjLGY9dGhpcztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbj1yLnNlbnQsci5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKGE9ci5zZW50LChvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpuLnRva2VuX2VuZHBvaW50KSYmMCE9PW8udHJpbSgpLmxlbmd0aCl7ci5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEQoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuIHIubmV4dD0xMCxQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9eShlLDIpLG49clswXSxhPXJbMV07cmV0dXJuIHgoZix2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHI7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGEsdCk7Y2FzZSAyOnJldHVybiByPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIiwiIi5jb25jYXQobiwiPSIpLmNvbmNhdChyKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSkpO2Nhc2UgMTA6aWYoaT1yLnNlbnQscz1PYmplY3QuYXNzaWduKHt9LE8uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxyLnQwPWUuYXR0YWNoVG9rZW4sIXIudDApe3IubmV4dD0yMzticmVha31yZXR1cm4gci50MT1PYmplY3Qsci50Mj1PYmplY3QuYXNzaWduKHt9LHMpLHIudDM9IkJlYXJlciAiLHIubmV4dD0xOSx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEodCk7Y2FzZSAxOTpyLnQ0PXIuc2VudC5hY2Nlc3NfdG9rZW4sci50NT1yLnQzLmNvbmNhdC5jYWxsKHIudDMsci50NCksci50Nj17QXV0aG9yaXphdGlvbjpyLnQ1fSxzPXIudDEuYXNzaWduLmNhbGwoci50MSxyLnQyLHIudDYpO2Nhc2UgMjM6cmV0dXJuIHU9e2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6YS5zZW5kQ29va2llc0luUmVxdWVzdHM/VC5JbmNsdWRlOlQuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHMpLG1ldGhvZDoiUE9TVCJ9LHIucHJldj0yNCxyLm5leHQ9MjcsZmV0Y2gobyx1KTtjYXNlIDI3OmM9ci5zZW50LHIubmV4dD0zMzticmVhaztjYXNlIDMwOnRocm93IHIucHJldj0zMCxyLnQ3PXIuY2F0Y2goMjQpLG5ldyBEKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ci50Nz9yLnQ3OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKTtjYXNlIDMzOmlmKDIwMD09PWMuc3RhdHVzJiZjLm9rKXtyLm5leHQ9NDA7YnJlYWt9cmV0dXJuIHIudDg9RCxyLnQ5PSJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoIi5jb25jYXQoYy5zdGF0dXNUZXh0LCIpIiksci5uZXh0PTM4LGMuanNvbigpO2Nhc2UgMzg6dGhyb3cgci50MTA9ci5zZW50LG5ldyByLnQ4KCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLHIudDksci50MTApO2Nhc2UgNDA6aWYoIWUucmV0dXJuc1Nlc3Npb24pe3IubmV4dD00NDticmVha31yLnQxMT10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGMsdCksci5uZXh0PTQ5O2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHIudDEyPVByb21pc2Usci5uZXh0PTQ3LGMuanNvbigpO2Nhc2UgNDc6ci50MTM9ci5zZW50LHIudDExPXIudDEyLnJlc29sdmUuY2FsbChyLnQxMixyLnQxMyk7Y2FzZSA0OTpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci50MTEpO2Nhc2UgNTA6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMsW1syNCwzMF1dKX0pKSl9fSx7a2V5OiJnZXRCYXNpY1VzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuLGE7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsbj10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09cj92b2lkIDA6ci5pZF90b2tlbiksYT17YWxsb3dlZFNjb3BlczpyLnNjb3BlLHNlc3Npb25TdGF0ZTpyLnNlc3Npb25fc3RhdGV9LHQuYWJydXB0KCJyZXR1cm4iLChPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxhPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSxuKSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDI6cmV0dXJuIHI9dC5zZW50LmlkX3Rva2VuLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHIpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudC5pZF90b2tlbik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRPSURDUHJvdmlkZXJNZXRhRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixhO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2NvbmZpZygpO2Nhc2UgMjppZihyPXQuc2VudCx0LnQwPSFlLCF0LnQwKXt0Lm5leHQ9ODticmVha31yZXR1cm4gdC5uZXh0PTcsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKTtjYXNlIDc6dC50MD10LnNlbnQ7Y2FzZSA4OmlmKCF0LnQwKXt0Lm5leHQ9MTA7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVzb2x2ZSgpKTtjYXNlIDEwOmlmKCEobj1yLndlbGxLbm93bkVuZHBvaW50KSl7dC5uZXh0PTM2O2JyZWFrfXJldHVybiB0LnByZXY9MTIsdC5uZXh0PTE1LGZldGNoKG4pO2Nhc2UgMTU6aWYoMjAwPT09KGE9dC5zZW50KS5zdGF0dXMmJmEub2spe3QubmV4dD0xODticmVha310aHJvdyBuZXcgRXJyb3I7Y2FzZSAxODp0Lm5leHQ9MjM7YnJlYWs7Y2FzZSAyMDp0aHJvdyB0LnByZXY9MjAsdC50MT10LmNhdGNoKDEyKSxuZXcgRCgiSlMtQVVUSF9DT1JFLUdPUE1ELUhFMDEiLCJJbnZhbGlkIHdlbGwta25vd24gcmVzcG9uc2UiLCJUaGUgd2VsbCBrbm93biBlbmRwb2ludCByZXNwb25zZSBoYXMgYmVlbiBmYWlsZWQgd2l0aCBhbiBlcnJvci4iKTtjYXNlIDIzOnJldHVybiB0LnQyPXRoaXMuX2RhdGFMYXllcix0LnQzPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLHQubmV4dD0yNyxhLmpzb24oKTtjYXNlIDI3OnJldHVybiB0LnQ0PXQuc2VudCx0Lm5leHQ9MzAsdC50My5yZXNvbHZlRW5kcG9pbnRzLmNhbGwodC50Myx0LnQ0KTtjYXNlIDMwOnJldHVybiB0LnQ1PXQuc2VudCx0Lm5leHQ9MzMsdC50Mi5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDIsdC50NSk7Y2FzZSAzMzpyZXR1cm4gdC5uZXh0PTM1LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSAzNTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgMzY6aWYoIXIuYmFzZVVybCl7dC5uZXh0PTUyO2JyZWFrfXJldHVybiB0LnByZXY9MzcsdC50Nj10aGlzLl9kYXRhTGF5ZXIsdC5uZXh0PTQxLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKTtjYXNlIDQxOnJldHVybiB0LnQ3PXQuc2VudCx0Lm5leHQ9NDQsdC50Ni5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDYsdC50Nyk7Y2FzZSA0NDp0Lm5leHQ9NDk7YnJlYWs7Y2FzZSA0Njp0aHJvdyB0LnByZXY9NDYsdC50OD10LmNhdGNoKDM3KSxuZXcgRCgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQudDg/dC50ODoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIik7Y2FzZSA0OTpyZXR1cm4gdC5uZXh0PTUxLHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSA1MTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgNTI6cmV0dXJuIHQucHJldj01Mix0LnQ5PXRoaXMuX2RhdGFMYXllcix0Lm5leHQ9NTYsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKTtjYXNlIDU2OnJldHVybiB0LnQxMD10LnNlbnQsdC5uZXh0PTU5LHQudDkuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEuY2FsbCh0LnQ5LHQudDEwKTtjYXNlIDU5OnQubmV4dD02NDticmVhaztjYXNlIDYxOnRocm93IHQucHJldj02MSx0LnQxMT10LmNhdGNoKDUyKSxuZXcgRCgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQudDExP3QudDExOiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGV4cGxpY2l0bHkgZmFpbGVkLiIpO2Nhc2UgNjQ6cmV0dXJuIHQubmV4dD02Nix0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApO2Nhc2UgNjY6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVzb2x2ZSgpKTtjYXNlIDY3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzLFtbMTIsMjBdLFszNyw0Nl0sWzUyLDYxXV0pfSkpKX19LHtrZXk6ImdldE9JRENTZXJ2aWNlRW5kcG9pbnRzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQscixuLGEsbyxpLHMsdSxjO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZigpe3ZhciBsO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZil7Zm9yKDs7KXN3aXRjaChmLnByZXY9Zi5uZXh0KXtjYXNlIDA6cmV0dXJuIGYubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOnJldHVybiBsPWYuc2VudCxmLmFicnVwdCgicmV0dXJuIix7YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT1sLmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0odD1sLmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09dD90OiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KHI9bC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PXI/cjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShuPWwuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PW4/bjoiIixpc3N1ZXI6bnVsbCE9PShhPWwuaXNzdWVyKSYmdm9pZCAwIT09YT9hOiIiLGp3a3NVcmk6bnVsbCE9PShvPWwuandrc191cmkpJiZ2b2lkIDAhPT1vP286IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPWwucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KHM9bC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09cz9zOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PWwudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGM9bC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIn0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGYuc3RvcCgpfX0pLGYsdGhpcyl9KSkpfX0se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBvLGkscyx1O3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oYSl7Zm9yKDs7KXN3aXRjaChhLnByZXY9YS5uZXh0KXtjYXNlIDA6cmV0dXJuIGEubmV4dD0yLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7Y2FzZSAyOmlmKGEudDE9dD1hLnNlbnQsYS50MD1udWxsPT09YS50MSxhLnQwKXthLm5leHQ9NjticmVha31hLnQwPXZvaWQgMD09PXQ7Y2FzZSA2OmlmKCFhLnQwKXthLm5leHQ9MTA7YnJlYWt9YS50Mj12b2lkIDAsYS5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6YS50Mj10LmVuZF9zZXNzaW9uX2VuZHBvaW50O2Nhc2UgMTE6cmV0dXJuIG89YS50MixhLm5leHQ9MTQsdGhpcy5fY29uZmlnKCk7Y2FzZSAxNDppZihpPWEuc2VudCxvJiYwIT09by50cmltKCkubGVuZ3RoKXthLm5leHQ9MTc7YnJlYWt9dGhyb3cgbmV3IEQoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSAxNzpyZXR1cm4gYS5uZXh0PTE5LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDE5OmlmKGEudDQ9cj1hLnNlbnQsYS50Mz1udWxsPT09YS50NCxhLnQzKXthLm5leHQ9MjM7YnJlYWt9YS50Mz12b2lkIDA9PT1yO2Nhc2UgMjM6aWYoIWEudDMpe2EubmV4dD0yNzticmVha31hLnQ1PXZvaWQgMCxhLm5leHQ9Mjg7YnJlYWs7Y2FzZSAyNzphLnQ1PXIuaWRfdG9rZW47Y2FzZSAyODppZigocz1hLnQ1KSYmMCE9PXMudHJpbSgpLmxlbmd0aCl7YS5uZXh0PTMxO2JyZWFrfXRocm93IG5ldyBEKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAyIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2Nhc2UgMzE6aWYoKHU9bnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09bj9uOm51bGw9PWk/dm9pZCAwOmkuc2lnbkluUmVkaXJlY3RVUkwpJiYwIT09dS50cmltKCkubGVuZ3RoKXthLm5leHQ9MzQ7YnJlYWt9dGhyb3cgbmV3IEQoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDMiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtjYXNlIDM0OnJldHVybiBhLmFicnVwdCgicmV0dXJuIiwiIi5jb25jYXQobywiP2lkX3Rva2VuX2hpbnQ9IikuY29uY2F0KHMsIiZwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9IikuY29uY2F0KHUsIiZzdGF0ZT1zaWduX291dF9zdWNjZXNzIikpO2Nhc2UgMzU6Y2FzZSJlbmQiOnJldHVybiBhLnN0b3AoKX19KSxhLHRoaXMpfSkpKX19LHtrZXk6InNpZ25PdXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuZ2V0U2lnbk91dFVSTChlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJjbGVhclVzZXJTZXNzaW9uRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjppZihyLnQxPXQ9ci5zZW50LHIudDA9bnVsbD09PXIudDEsci50MCl7ci5uZXh0PTY7YnJlYWt9ci50MD12b2lkIDA9PT10O2Nhc2UgNjppZighci50MCl7ci5uZXh0PTEwO2JyZWFrfXIudDI9dm9pZCAwLHIubmV4dD0xMTticmVhaztjYXNlIDEwOnIudDI9dC5hY2Nlc3NfdG9rZW47Y2FzZSAxMTpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci50Mik7Y2FzZSAxMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToiaXNBdXRoZW50aWNhdGVkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LnQwPUJvb2xlYW4sdC5uZXh0PTMsdGhpcy5nZXRBY2Nlc3NUb2tlbihlKTtjYXNlIDM6cmV0dXJuIHQudDE9dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLCgwLHQudDApKHQudDEpKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKE8uZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKSx0KTtjYXNlIDI6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHIuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJzZXRQS0NFQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKE8uZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbSh0KSxlLHIpO2Nhc2UgMjpyZXR1cm4gbi5hYnJ1cHQoInJldHVybiIsbi5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InVwZGF0ZUNvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoZSk7Y2FzZSAyOnJldHVybiB0Lm5leHQ9NCx0aGlzLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCEwKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSksZX0oKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe28odGhpcyxlKSx0aGlzLl9pZD10LHRoaXMuX3N0b3JlPXJ9cmV0dXJuIHMoZSxbe2tleToic2V0RGF0YUluQnVsayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgYSxvLGkscztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKGUpO2Nhc2UgMjppZihuLnQxPXI9bi5zZW50LG4udDA9bnVsbCE9PW4udDEsIW4udDApe24ubmV4dD02O2JyZWFrfW4udDA9dm9pZCAwIT09cjtjYXNlIDY6aWYoIW4udDApe24ubmV4dD0xMDticmVha31uLnQyPXIsbi5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6bi50Mj1udWxsO2Nhc2UgMTE6cmV0dXJuIGE9bi50MixvPWEmJkpTT04ucGFyc2UoYSksaT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbyksdCkscz1KU09OLnN0cmluZ2lmeShpKSxuLm5leHQ9MTcsdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldFZhbHVlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG47cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIG8saSxzLGM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihhKXtmb3IoOzspc3dpdGNoKGEucHJldj1hLm5leHQpe2Nhc2UgMDpyZXR1cm4gYS5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YShlKTtjYXNlIDI6aWYoYS50MT1uPWEuc2VudCxhLnQwPW51bGwhPT1hLnQxLCFhLnQwKXthLm5leHQ9NjticmVha31hLnQwPXZvaWQgMCE9PW47Y2FzZSA2OmlmKCFhLnQwKXthLm5leHQ9MTA7YnJlYWt9YS50Mj1uLGEubmV4dD0xMTticmVhaztjYXNlIDEwOmEudDI9bnVsbDtjYXNlIDExOnJldHVybiBvPWEudDIsaT1vJiZKU09OLnBhcnNlKG8pLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHUoe30sdCxyKSksYz1KU09OLnN0cmluZ2lmeShzKSxhLm5leHQ9MTcsdGhpcy5fc3RvcmUuc2V0RGF0YShlLGMpO2Nhc2UgMTc6Y2FzZSJlbmQiOnJldHVybiBhLnN0b3AoKX19KSxhLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhLG8saSxzO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEoZSk7Y2FzZSAyOmlmKG4udDE9cj1uLnNlbnQsbi50MD1udWxsIT09bi50MSwhbi50MCl7bi5uZXh0PTY7YnJlYWt9bi50MD12b2lkIDAhPT1yO2Nhc2UgNjppZighbi50MCl7bi5uZXh0PTEwO2JyZWFrfW4udDI9cixuLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpuLnQyPW51bGw7Y2FzZSAxMTpyZXR1cm4gYT1uLnQyLG89YSYmSlNPTi5wYXJzZShhKSxkZWxldGUoaT1PYmplY3QuYXNzaWduKHt9LG8pKVt0XSxzPUpTT04uc3RyaW5naWZ5KGkpLG4ubmV4dD0xOCx0aGlzLl9zdG9yZS5zZXREYXRhKGUscyk7Y2FzZSAxODpjYXNlImVuZCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiX3Jlc29sdmVLZXkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/IiIuY29uY2F0KGUsIi0iKS5jb25jYXQodGhpcy5faWQsIi0iKS5jb25jYXQodCk6IiIuY29uY2F0KGUsIi0iKS5jb25jYXQodGhpcy5faWQpfX0se2tleToic2V0Q29uZmlnRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoRS5Db25maWdEYXRhKSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InNldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KEUuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0VGVtcG9yYXJ5RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHIoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KEUuVGVtcG9yYXJ5RGF0YSx0KSxlKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6InNldFNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoRS5TZXNzaW9uRGF0YSx0KSxlKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6ImdldENvbmZpZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC50MD1KU09OLHQubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShFLkNvbmZpZ0RhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9SlNPTix0Lm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMzppZih0LnQyPWU9dC5zZW50LHQudDE9bnVsbCE9PXQudDIsIXQudDEpe3QubmV4dD03O2JyZWFrfXQudDE9dm9pZCAwIT09ZTtjYXNlIDc6aWYoIXQudDEpe3QubmV4dD0xMTticmVha310LnQzPWUsdC5uZXh0PTEyO2JyZWFrO2Nhc2UgMTE6dC50Mz1udWxsO2Nhc2UgMTI6cmV0dXJuIHQudDQ9dC50Myx0LmFicnVwdCgicmV0dXJuIix0LnQwLnBhcnNlLmNhbGwodC50MCx0LnQ0KSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0VGVtcG9yYXJ5RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci50MD1KU09OLHIubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShFLlRlbXBvcmFyeURhdGEsZSkpO2Nhc2UgMzppZihyLnQyPXQ9ci5zZW50LHIudDE9bnVsbCE9PXIudDIsIXIudDEpe3IubmV4dD03O2JyZWFrfXIudDE9dm9pZCAwIT09dDtjYXNlIDc6aWYoIXIudDEpe3IubmV4dD0xMTticmVha31yLnQzPXQsci5uZXh0PTEyO2JyZWFrO2Nhc2UgMTE6ci50Mz1udWxsO2Nhc2UgMTI6cmV0dXJuIHIudDQ9ci50MyxyLmFicnVwdCgicmV0dXJuIixyLnQwLnBhcnNlLmNhbGwoci50MCxyLnQ0KSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToiZ2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIudDA9SlNPTixyLm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5TZXNzaW9uRGF0YSxlKSk7Y2FzZSAzOmlmKHIudDI9dD1yLnNlbnQsci50MT1udWxsIT09ci50Miwhci50MSl7ci5uZXh0PTc7YnJlYWt9ci50MT12b2lkIDAhPT10O2Nhc2UgNzppZighci50MSl7ci5uZXh0PTExO2JyZWFrfXIudDM9dCxyLm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTpyLnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gci50ND1yLnQzLHIuYWJydXB0KCJyZXR1cm4iLHIudDAucGFyc2UuY2FsbChyLnQwLHIudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShFLkNvbmZpZ0RhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShFLk9JRENQcm92aWRlck1ldGFEYXRhKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5UZW1wb3JhcnlEYXRhLGUpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5TZXNzaW9uRGF0YSxlKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRDb25maWdEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5Db25maWdEYXRhKSk7Y2FzZSAyOnJldHVybiByPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIixyJiZKU09OLnBhcnNlKHIpW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcjtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsciYmSlNPTi5wYXJzZShyKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShFLlRlbXBvcmFyeURhdGEsdCkpO2Nhc2UgMjpyZXR1cm4gbj1yLnNlbnQsci5hYnJ1cHQoInJldHVybiIsbiYmSlNPTi5wYXJzZShuKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geCh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbjtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoRS5TZXNzaW9uRGF0YSx0KSk7Y2FzZSAyOnJldHVybiBuPXIuc2VudCxyLmFicnVwdCgicmV0dXJuIixuJiZKU09OLnBhcnNlKG4pW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6InNldENvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEUuQ29uZmlnRGF0YSksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6InNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShFLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToic2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShFLlRlbXBvcmFyeURhdGEsciksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldFNlc3Npb25EYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEUuU2Vzc2lvbkRhdGEsciksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShFLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShFLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEUuVGVtcG9yYXJ5RGF0YSx0KSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShFLlNlc3Npb25EYXRhLHQpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX1dKSxlfSgpLGo9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpTLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH0sTj1mdW5jdGlvbigpewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmZ1bmN0aW9uIGUodCxyKXtvKHRoaXMsZSksZS5faW5zdGFuY2VJRD9lLl9pbnN0YW5jZUlEKz0xOmUuX2luc3RhbmNlSUQ9MCx0aGlzLl9kYXRhTGF5ZXI9bmV3IE0oImluc3RhbmNlXyIuY29uY2F0KGUuX2luc3RhbmNlSUQpLHQpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgSCh0aGlzLl9kYXRhTGF5ZXIsciksZS5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBIKHRoaXMuX2RhdGFMYXllcixyKX0KLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV0dXJuIHMoZSxbe2tleToiaW5pdGlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixuO3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oYSl7Zm9yKDs7KXN3aXRjaChhLnByZXY9YS5uZXh0KXtjYXNlIDA6cmV0dXJuIGEubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLGUpLHtzY29wZTpbXS5jb25jYXQoYihudWxsIT09KHQ9ai5zY29wZSkmJnZvaWQgMCE9PXQ/dDpbXSksYihudWxsIT09KG49bnVsbD09PShyPWUuc2NvcGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09aj92b2lkIDA6ai5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09bj9uOltdKSl9KSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gYS5zdG9wKCl9fSksYSx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkYXRhID0gYXV0aC5nZXREYXRhTGF5ZXIoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREYXRhTGF5ZXIKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImdldERhdGFMYXllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICAgKiBjdXN0b20gcGF0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGZpZHAgcGFyYW1ldGVyLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHVybCk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBdXRob3JpemF0aW9uVVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRBdXRob3JpemF0aW9uVVJMIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuLGE9dGhpcztyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiBudWxsPT0obj1PYmplY3QuYXNzaWduKHt9LGUpKXx8ZGVsZXRlIG4uZm9yY2VJbml0LHIubmV4dD00LHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSA0OmlmKCFyLnNlbnQpe3IubmV4dD04O2JyZWFrfXIudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwobix0KSxyLm5leHQ9OTticmVhaztjYXNlIDg6ci50MD10aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGEuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKG4sdCl9KSk7Y2FzZSA5OnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnQwKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscix0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBvPXRoaXM7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihhKXtmb3IoOzspc3dpdGNoKGEucHJldj1hLm5leHQpe2Nhc2UgMDpyZXR1cm4gYS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKTtjYXNlIDI6aWYoIWEuc2VudCl7YS5uZXh0PTY7YnJlYWt9YS50MD10aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCxyLG4pLGEubmV4dD03O2JyZWFrO2Nhc2UgNjphLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQscixuKX0pKTtjYXNlIDc6cmV0dXJuIGEuYWJydXB0KCJyZXR1cm4iLGEudDApO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGEuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0QmFzaWNVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgICAqIH0pOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3Jldm9rZUFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJyZXZva2VBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXZva2VBY2Nlc3NUb2tlbihlKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYWNjZXNzCiAgICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZWZyZXNoQWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InJlZnJlc2hBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGF1dGguZ2V0QWNjZXNzVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBY2Nlc3NUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InJlcXVlc3RDdXN0b21HcmFudCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFBLQ0UgY29kZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0UEtDRUNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUsdCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGtjZSAtIFRoZSBQS0NFIGNvZGUuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhd2FpdCBhdXRoLnNldFBLQ0VDb2RlKCJwa2NlX2NvZGUiKQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJzZXRQS0NFQ29kZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6cmV0dXJuIG4ubmV4dD0yLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLHQscik7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gbi5zdG9wKCl9fSksbix0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaXMgc3VjY2Vzc2Z1bCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6InVwZGF0ZUNvbmZpZyIsdmFsdWU6Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAgICogfQogICAgICAgICAgICoKICAgICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWcKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi8KZnVuY3Rpb24oZSl7cmV0dXJuIHgodGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSxbe2tleToiaXNTaWduT3V0U3VjY2Vzc2Z1bCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJiFufQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGhhcyBmYWlsZWQgb3Igbm90LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNkaWRTaWduT3V0RmFpbAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZGlkU2lnbk91dEZhaWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVUkwoZSkscj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIiksbj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFyJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1yJiZufX0se2tleToiY2xlYXJVc2VyU2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5jbGVhclVzZXJTZXNzaW9uRGF0YShlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSksZX0oKSxxPSJpbml0IjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFB8fChQPXt9KSksZnVuY3Rpb24oZSl7ZS5TaWduSW49InNpZ24taW4iLGUuU2lnbk91dD0ic2lnbi1vdXQiLGUuSW5pdGlhbGl6ZT0iaW5pdGlhbGl6ZSIsZS5IdHRwUmVxdWVzdFN0YXJ0PSJodHRwLXJlcXVlc3Qtc3RhcnQiLGUuSHR0cFJlcXVlc3RGaW5pc2g9Imh0dHAtcmVxdWVzdC1maW5pc2giLGUuSHR0cFJlcXVlc3RFcnJvcj0iaHR0cC1yZXF1ZXN0LWVycm9yIixlLkh0dHBSZXF1ZXN0U3VjY2Vzcz0iaHR0cC1yZXF1ZXN0LXN1Y2Nlc3MiLGUuUmV2b2tlQWNjZXNzVG9rZW49InJldm9rZS1hY2Nlc3MtdG9rZW4iLGUuQ3VzdG9tR3JhbnQ9ImN1c3RvbS1ncmFudCIsZS5TaWduT3V0RmFpbGVkPSJzaWduLW91dC1mYWlsZWQifShJfHwoST17fSkpO3ZhciBLPSJjdXN0b21fZ3JhbnRfY29uZmlnIixKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtvKHRoaXMsZSksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9dCx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmV0dXJuIHMoZSxbe2tleToicmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYT10aGlzO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2Nhc2UgMjppZighKHQ9ZS5zZW50KS5yZWZyZXNoX3Rva2VuKXtlLm5leHQ9OTticmVha31yZXR1cm4gcj1wYXJzZUludCh0LmV4cGlyZXNfaW4pLG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gXyhhLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pLDFlMyoocjw9MTA/cjpyLTEwKSksZS5uZXh0PTksdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoQSxKU09OLnN0cmluZ2lmeShuKSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJjbGVhclJlZnJlc2hUb2tlblRpbWVvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoQSk7Y2FzZSAyOmlmKCFlLnNlbnQpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLnQwPUpTT04sZS5uZXh0PTYsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoQSk7Y2FzZSA2OmUudDE9ZS5zZW50LHQ9ZS50MC5wYXJzZS5jYWxsKGUudDAsZS50MSksY2xlYXJUaW1lb3V0KHQpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX1dKSxlfSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiBzKGUsbnVsbCxbe2tleToiZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fX0se2tleToiZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX1dKSxlfSgpLEY9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBXKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24geihlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBWPXtleHBvcnRzOnt9fSxZPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LEc9WSxYPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gJChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBaKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIFEoZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVguY2FsbChlKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT09cihlKX1mdW5jdGlvbiB0ZShlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PVguY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiByZShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09WC5jYWxsKGUpfWZ1bmN0aW9uIG5lKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9PXIoZSkmJihlPVtlXSksJChlKSlmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBvIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbykmJnQuY2FsbChudWxsLGVbb10sbyxlKX12YXIgYWU9e2lzQXJyYXk6JCxpc0FycmF5QnVmZmVyOlEsaXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhWihlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFaKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09WC5jYWxsKGUpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZRKGUuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OmVlLGlzUGxhaW5PYmplY3Q6dGUsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09WC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09WC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09WC5jYWxsKGUpfSxpc0Z1bmN0aW9uOnJlLGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBlZShlKSYmcmUoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1YLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6bmUsbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIHIocixuKXt0ZSh0W25dKSYmdGUocik/dFtuXT1lKHRbbl0scik6dGUocik/dFtuXT1lKHt9LHIpOiQocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGE9YXJndW1lbnRzLmxlbmd0aDtuPGE7bisrKW5lKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbmUodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0codCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0sb2U9YWU7ZnVuY3Rpb24gaWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIHNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKG9lLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGE9W107b2UuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihvZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sb2UuZm9yRWFjaChlLChmdW5jdGlvbihlKXtvZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6b2UuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxhLnB1c2goaWUodCkrIj0iK2llKGUpKX0pKSl9KSksbj1hLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX0sdWU9YWU7ZnVuY3Rpb24gY2UoKXt0aGlzLmhhbmRsZXJzPVtdfWNlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGNlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sY2UucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGZlPWNlLGxlPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24gaGUoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBwZSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIGRlPWhlLHZlPXBlO2Z1bmN0aW9uIGdlKGUpe2lmKGRlPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChkZT09PWhlfHwhZGUpJiZzZXRUaW1lb3V0KXJldHVybiBkZT1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIGRlKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBkZS5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gZGUuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgbGUuc2V0VGltZW91dCYmKGRlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5jbGVhclRpbWVvdXQmJih2ZT1jbGVhclRpbWVvdXQpO3ZhciBtZSx5ZT1bXSxiZT0hMSx3ZT0tMTtmdW5jdGlvbiBrZSgpe2JlJiZtZSYmKGJlPSExLG1lLmxlbmd0aD95ZT1tZS5jb25jYXQoeWUpOndlPS0xLHllLmxlbmd0aCYmUmUoKSl9ZnVuY3Rpb24gUmUoKXtpZighYmUpe3ZhciBlPWdlKGtlKTtiZT0hMDtmb3IodmFyIHQ9eWUubGVuZ3RoO3Q7KXtmb3IobWU9eWUseWU9W107Kyt3ZTx0OyltZSYmbWVbd2VdLnJ1bigpO3dlPS0xLHQ9eWUubGVuZ3RofW1lPW51bGwsYmU9ITEsZnVuY3Rpb24oZSl7aWYodmU9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigodmU9PT1wZXx8IXZlKSYmY2xlYXJUaW1lb3V0KXJldHVybiB2ZT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXt2ZShlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHZlLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gdmUuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBfZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fV9lLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiB4ZSgpe312YXIgU2U9eGUsRWU9eGUsVGU9eGUsQWU9eGUsQ2U9eGUsRGU9eGUsT2U9eGU7dmFyIFBlPWxlLnBlcmZvcm1hbmNlfHx7fSxJZT1QZS5ub3d8fFBlLm1vek5vd3x8UGUubXNOb3d8fFBlLm9Ob3d8fFBlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIFVlPW5ldyBEYXRlO3ZhciBMZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt5ZS5wdXNoKG5ldyBfZShlLHQpKSwxIT09eWUubGVuZ3RofHxiZXx8Z2UoUmUpfSx0aXRsZToiYnJvd3NlciIsYnJvd3NlcjohMCxlbnY6e30sYXJndjpbXSx2ZXJzaW9uOiIiLHZlcnNpb25zOnt9LG9uOlNlLGFkZExpc3RlbmVyOkVlLG9uY2U6VGUsb2ZmOkFlLHJlbW92ZUxpc3RlbmVyOkNlLHJlbW92ZUFsbExpc3RlbmVyczpEZSxlbWl0Ok9lLGJpbmRpbmc6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxjd2Q6ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGNoZGlyOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHVtYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGhydGltZTpmdW5jdGlvbihlKXt2YXIgdD0uMDAxKkllLmNhbGwoUGUpLHI9TWF0aC5mbG9vcih0KSxuPU1hdGguZmxvb3IodCUxKjFlOSk7cmV0dXJuIGUmJihyLT1lWzBdLChuLT1lWzFdKTwwJiYoci0tLG4rPTFlOSkpLFtyLG5dfSxwbGF0Zm9ybToiYnJvd3NlciIscmVsZWFzZTp7fSxjb25maWc6e30sdXB0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlLVVlKS8xZTN9fSxIZT1MZSxNZT1hZSxqZT1mdW5jdGlvbihlLHQscixuLGEpe3JldHVybiBlLmNvbmZpZz10LHImJihlLmNvZGU9ciksZS5yZXF1ZXN0PW4sZS5yZXNwb25zZT1hLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sTmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LHFlPWplLEtlPWZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBxZShvLHQscixuLGEpfSxKZT1LZSxCZT1hZSxGZT1CZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGEsbyl7dmFyIGk9W107aS5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksQmUuaXNOdW1iZXIocikmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLEJlLmlzU3RyaW5nKG4pJiZpLnB1c2goInBhdGg9IituKSxCZS5pc1N0cmluZyhhKSYmaS5wdXNoKCJkb21haW49IithKSwhMD09PW8mJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFdlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LHplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LFZlPWFlLFllPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0sR2U9YWUsWGU9R2UuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBuKGUpe3ZhciBuPWU7cmV0dXJuIHQmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6Ii8iPT09ci5wYXRobmFtZS5jaGFyQXQoMCk/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIGU9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIHI9R2UuaXNTdHJpbmcodCk/bih0KTp0O3JldHVybiByLnByb3RvY29sPT09ZS5wcm90b2NvbCYmci5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiAkZShlKXt0aGlzLm1lc3NhZ2U9ZX0kZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sJGUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIFplPSRlLFFlPWFlLGV0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QoSmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sdHQ9RmUscnQ9c2UsbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmIVdlKHQpP3plKGUsdCk6dH0sYXQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9e307cmV0dXJuIGU/KFZlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PVZlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPVZlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoYVt0XSYmWWUuaW5kZXhPZih0KT49MClyZXR1cm47YVt0XT0ic2V0LWNvb2tpZSI9PT10PyhhW3RdP2FbdF06W10pLmNvbmNhdChbcl0pOmFbdF0/YVt0XSsiLCAiK3I6cn19KSksYSk6YX0sb3Q9WGUsaXQ9S2Usc3Q9TmUsdXQ9WmUsY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuLGE9ZS5kYXRhLG89ZS5oZWFkZXJzLGk9ZS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gcygpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksZS5zaWduYWwmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1RZS5pc0Zvcm1EYXRhKGEpJiZkZWxldGUgb1siQ29udGVudC1UeXBlIl07dmFyIHU9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7dmFyIGM9ZS5hdXRoLnVzZXJuYW1lfHwiIixmPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7by5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoYysiOiIrZil9dmFyIGw9bnQoZS5iYXNlVVJMLGUudXJsKTtmdW5jdGlvbiBoKCl7aWYodSl7dmFyIG49ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB1P2F0KHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGwsYT17ZGF0YTppJiYidGV4dCIhPT1pJiYianNvbiIhPT1pP3UucmVzcG9uc2U6dS5yZXNwb25zZVRleHQsc3RhdHVzOnUuc3RhdHVzLHN0YXR1c1RleHQ6dS5zdGF0dXNUZXh0LGhlYWRlcnM6bixjb25maWc6ZSxyZXF1ZXN0OnV9O2V0KChmdW5jdGlvbihlKXt0KGUpLHMoKX0pLChmdW5jdGlvbihlKXtyKGUpLHMoKX0pLGEpLHU9bnVsbH19aWYodS5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCkscnQobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSx1LnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gdT91Lm9ubG9hZGVuZD1oOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSYmND09PXUucmVhZHlTdGF0ZSYmKDAhPT11LnN0YXR1c3x8dS5yZXNwb25zZVVSTCYmMD09PXUucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoaCl9LHUub25hYm9ydD1mdW5jdGlvbigpe3UmJihyKGl0KCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIsdSkpLHU9bnVsbCl9LHUub25lcnJvcj1mdW5jdGlvbigpe3IoaXQoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCx1KSksdT1udWxsfSx1Lm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixuPWUudHJhbnNpdGlvbmFsfHxzdDtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih0PWUudGltZW91dEVycm9yTWVzc2FnZSkscihpdCh0LGUsbi5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHUpKSx1PW51bGx9LFFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBwPShlLndpdGhDcmVkZW50aWFsc3x8b3QobCkpJiZlLnhzcmZDb29raWVOYW1lP3R0LnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO3AmJihvW2UueHNyZkhlYWRlck5hbWVdPXApfSJzZXRSZXF1ZXN0SGVhZGVyImluIHUmJlFlLmZvckVhY2gobywoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1hJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgb1t0XTp1LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxRZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fCh1LndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxpJiYianNvbiIhPT1pJiYodS5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmdS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnUudXBsb2FkJiZ1LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYobj1mdW5jdGlvbihlKXt1JiYocighZXx8ZSYmZS50eXBlP25ldyB1dCgiY2FuY2VsZWQiKTplKSx1LmFib3J0KCksdT1udWxsKX0sZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksZS5zaWduYWwmJihlLnNpZ25hbC5hYm9ydGVkP24oKTplLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKSxhfHwoYT1udWxsKSx1LnNlbmQoYSl9KSl9LGZ0PWFlLGx0PWZ1bmN0aW9uKGUsdCl7TWUuZm9yRWFjaChlLChmdW5jdGlvbihyLG4pe24hPT10JiZuLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPXIsZGVsZXRlIGVbbl0pfSkpfSxodD1qZSxwdD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIGR0KGUsdCl7IWZ0LmlzVW5kZWZpbmVkKGUpJiZmdC5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgdnQsZ3Q9e3RyYW5zaXRpb25hbDpOZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09SGUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChIZSkpJiYodnQ9Y3QpLHZ0KSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBsdCh0LCJBY2NlcHQiKSxsdCh0LCJDb250ZW50LVR5cGUiKSxmdC5pc0Zvcm1EYXRhKGUpfHxmdC5pc0FycmF5QnVmZmVyKGUpfHxmdC5pc0J1ZmZlcihlKXx8ZnQuaXNTdHJlYW0oZSl8fGZ0LmlzRmlsZShlKXx8ZnQuaXNCbG9iKGUpP2U6ZnQuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6ZnQuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KGR0KHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpmdC5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KGR0KHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQscil7aWYoZnQuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxmdC50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4ocnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8Z3QudHJhbnNpdGlvbmFsLHI9dCYmdC5zaWxlbnRKU09OUGFyc2luZyxuPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsYT0hciYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoYXx8biYmZnQuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihhKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93IGh0KGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07ZnQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7Z3QuaGVhZGVyc1tlXT17fX0pKSxmdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2d0LmhlYWRlcnNbZV09ZnQubWVyZ2UocHQpfSkpO3ZhciBtdD1ndCx5dD1hZSxidD1tdCx3dD1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sa3Q9YWUsUnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXN8fGJ0O3JldHVybiB5dC5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9ci5jYWxsKG4sZSx0KX0pKSxlfSxfdD13dCx4dD1tdCxTdD1aZTtmdW5jdGlvbiBFdChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgU3QoImNhbmNlbGVkIil9dmFyIFR0PWFlLEF0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIFR0LmlzUGxhaW5PYmplY3QoZSkmJlR0LmlzUGxhaW5PYmplY3QodCk/VHQubWVyZ2UoZSx0KTpUdC5pc1BsYWluT2JqZWN0KHQpP1R0Lm1lcmdlKHt9LHQpOlR0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gYShyKXtyZXR1cm4gVHQuaXNVbmRlZmluZWQodFtyXSk/VHQuaXNVbmRlZmluZWQoZVtyXSk/dm9pZCAwOm4odm9pZCAwLGVbcl0pOm4oZVtyXSx0W3JdKX1mdW5jdGlvbiBvKGUpe2lmKCFUdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gbih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gaShyKXtyZXR1cm4gVHQuaXNVbmRlZmluZWQodFtyXSk/VHQuaXNVbmRlZmluZWQoZVtyXSk/dm9pZCAwOm4odm9pZCAwLGVbcl0pOm4odm9pZCAwLHRbcl0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIHIgaW4gdD9uKGVbcl0sdFtyXSk6ciBpbiBlP24odm9pZCAwLGVbcl0pOnZvaWQgMH12YXIgdT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6aSx0cmFuc2Zvcm1SZXF1ZXN0OmksdHJhbnNmb3JtUmVzcG9uc2U6aSxwYXJhbXNTZXJpYWxpemVyOmksdGltZW91dDppLHRpbWVvdXRNZXNzYWdlOmksd2l0aENyZWRlbnRpYWxzOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksdHJhbnNwb3J0OmksaHR0cEFnZW50OmksaHR0cHNBZ2VudDppLGNhbmNlbFRva2VuOmksc29ja2V0UGF0aDppLHJlc3BvbnNlRW5jb2Rpbmc6aSx2YWxpZGF0ZVN0YXR1czpzfTtyZXR1cm4gVHQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD11W2VdfHxhLG49dChlKTtUdC5pc1VuZGVmaW5lZChuKSYmdCE9PXN8fChyW2VdPW4pfSkpLHJ9LEN0PSIwLjI2LjEiLER0PUN0LE90PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtPdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gcihuKT09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgUHQ9e307T3QudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCl7cmV0dXJuIltBeGlvcyB2IitEdCsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixhLG8pe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IobihhLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSk7cmV0dXJuIHQmJiFQdFthXSYmKFB0W2FdPSEwLGNvbnNvbGUud2FybihuKGEsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixhLG8pfX07dmFyIEl0PXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxuKXtpZigib2JqZWN0IiE9PXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgYT1PYmplY3Qua2V5cyhlKSxvPWEubGVuZ3RoO28tLSA+MDspe3ZhciBpPWFbb10scz10W2ldO2lmKHMpe3ZhciB1PWVbaV0sYz12b2lkIDA9PT11fHxzKHUsaSxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIraSsiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09bil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitpKX19LHZhbGlkYXRvcnM6T3R9LFV0PWFlLEx0PXNlLEh0PWZlLE10PWZ1bmN0aW9uKGUpe3JldHVybiBFdChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9UnQuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9a3QubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxrdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fHh0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBFdChlKSx0LmRhdGE9UnQuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gX3QodCl8fChFdChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPVJ0LmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LGp0PUF0LE50PUl0LHF0PU50LnZhbGlkYXRvcnM7ZnVuY3Rpb24gS3QoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBIdCxyZXNwb25zZTpuZXcgSHR9fUt0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PWp0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIHI9dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09ciYmTnQuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpxdC50cmFuc2l0aW9uYWwocXQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6cXQudHJhbnNpdGlvbmFsKHF0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6cXQudHJhbnNpdGlvbmFsKHF0LmJvb2xlYW4pfSwhMSk7dmFyIG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoYT1hJiZlLnN5bmNocm9ub3VzLG4udW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIG8saT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWEpe3ZhciBzPVtNdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShzLG4pLHM9cy5jb25jYXQoaSksbz1Qcm9taXNlLnJlc29sdmUodCk7cy5sZW5ndGg7KW89by50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBvfWZvcih2YXIgdT10O24ubGVuZ3RoOyl7dmFyIGM9bi5zaGlmdCgpLGY9bi5zaGlmdCgpO3RyeXt1PWModSl9Y2F0Y2goZSl7ZihlKTticmVha319dHJ5e289TXQodSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7aS5sZW5ndGg7KW89by50aGVuKGkuc2hpZnQoKSxpLnNoaWZ0KCkpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPWp0KHRoaXMuZGVmYXVsdHMsZSksTHQoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0sVXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe0t0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoanQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxVdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0t0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChqdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgSnQ9S3QsQnQ9WmU7ZnVuY3Rpb24gRnQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHIuX2xpc3RlbmVycyl7dmFyIHQsbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxuO3QrKylyLl9saXN0ZW5lcnNbdF0oZSk7ci5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Iuc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUodCl9LG59LGUoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IEJ0KGUpLHQoci5yZWFzb24pKX0pKX1GdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxGdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxGdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LEZ0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IEZ0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgV3Q9RnQsenQ9YWUsVnQ9YWUsWXQ9WSxHdD1KdCxYdD1BdDt2YXIgJHQ9ZnVuY3Rpb24gZSh0KXt2YXIgcj1uZXcgR3QodCksbj1ZdChHdC5wcm90b3R5cGUucmVxdWVzdCxyKTtyZXR1cm4gVnQuZXh0ZW5kKG4sR3QucHJvdG90eXBlLHIpLFZ0LmV4dGVuZChuLHIpLG4uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBlKFh0KHQscikpfSxufShtdCk7JHQuQXhpb3M9R3QsJHQuQ2FuY2VsPVplLCR0LkNhbmNlbFRva2VuPVd0LCR0LmlzQ2FuY2VsPXd0LCR0LlZFUlNJT049Q3QsJHQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sJHQuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sJHQuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiB6dC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sVi5leHBvcnRzPSR0LFYuZXhwb3J0cy5kZWZhdWx0PSR0O3ZhciBadCxRdD1WLmV4cG9ydHM7dmFyIGVyPVp0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKSx0aGlzLmF0dGFjaFRva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXJldHVybiBzKGUsW3trZXk6InJlcXVlc3RIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuYXR0YWNoVG9rZW4oZSk7Y2FzZSAyOnJldHVybihudWxsPT1lP3ZvaWQgMDplLnNob3VsZEVuY29kZVRvRm9ybURhdGEpJiYocj1udWxsPT1lP3ZvaWQgMDplLmRhdGEsbj1uZXcgRm9ybURhdGEsT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bi5hcHBlbmQoZSxyW2VdKX0pKSxlLmRhdGE9biksWnQuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSksdC5hYnJ1cHQoInJldHVybiIsZSk7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJlcnJvckhhbmRsZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3Rocm93IFp0LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfX0se2tleToic3VjY2Vzc0hhbmRsZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBadC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX19LHtrZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6WnQuaXNIYW5kbGVyRW5hYmxlZD1lLHRoaXMuYXR0YWNoVG9rZW49dDtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLHRoaXMpfSkpKX19LHtrZXk6ImVuYWJsZUhhbmRsZXIiLHZhbHVlOmZ1bmN0aW9uKCl7WnQuaXNIYW5kbGVyRW5hYmxlZD0hMH19LHtrZXk6ImRpc2FibGVIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbigpe1p0LmlzSGFuZGxlckVuYWJsZWQ9ITF9fSx7a2V5OiJkaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpadC5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUO1p0LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtadC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX19LHtrZXk6InNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX19LHtrZXk6InNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfX0se2tleToic2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19XSxbe2tleToiZ2V0SW5zdGFuY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVF0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IFp0KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKChmdW5jdGlvbih0KXtyZXR1cm4gXyhlLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIodCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKHQpfSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9UXQuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9UXQuc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX19XSksZX0oKTtlci5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxlcj1adD1mdW5jdGlvbihlLHQsbixhKXt2YXIgbyxpPWFyZ3VtZW50cy5sZW5ndGgscz1pPDM/dDpudWxsPT09YT9hPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKTphO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdD8idW5kZWZpbmVkIjpyKFJlZmxlY3QpKSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxuLGEpO2Vsc2UgZm9yKHZhciB1PWUubGVuZ3RoLTE7dT49MDt1LS0pKG89ZVt1XSkmJihzPShpPDM/byhzKTppPjM/byh0LG4scyk6byh0LG4pKXx8cyk7cmV0dXJuIGk+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixzKSxzfShbZnVuY3Rpb24oZSl7fV0sZXIpO3ZhciB0cj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSksdGhpcy5fZGF0YT1uZXcgTWFwfXJldHVybiBzKGUsW3trZXk6InNldERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDp0aGlzLl9kYXRhLnNldChlLHQpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsdGhpcyl9KSkpfX0se2tleToiZ2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLmFicnVwdCgicmV0dXJuIixudWxsIT09KHI9bnVsbD09PSh0PXRoaXMuX2RhdGEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldChlKSkmJnZvaWQgMCE9PXI/cjoie30iKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5fZGF0YS5kZWxldGUoZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fV0pLGV9KCkscnI9W10sbnI9W10sYXI9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksb3I9ITE7ZnVuY3Rpb24gaXIoKXtvcj0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpcnJbdF09ZVt0XSxucltlLmNoYXJDb2RlQXQodCldPXQ7bnJbIi0iLmNoYXJDb2RlQXQoMCldPTYyLG5yWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBzcihlLHQscil7Zm9yKHZhciBuLGEsbz1bXSxpPXQ7aTxyO2krPTMpbj0oZVtpXTw8MTYpKyhlW2krMV08PDgpK2VbaSsyXSxvLnB1c2gocnJbKGE9bik+PjE4JjYzXStyclthPj4xMiY2M10rcnJbYT4+NiY2M10rcnJbNjMmYV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHVyKGUpe3ZhciB0O29yfHxpcigpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxhPSIiLG89W10saT0xNjM4MyxzPTAsdT1yLW47czx1O3MrPWkpby5wdXNoKHNyKGUscyxzK2k+dT91OnMraSkpO3JldHVybiAxPT09bj8odD1lW3ItMV0sYSs9cnJbdD4+Ml0sYSs9cnJbdDw8NCY2M10sYSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxhKz1yclt0Pj4xMF0sYSs9cnJbdD4+NCY2M10sYSs9cnJbdDw8MiY2M10sYSs9Ij0iKSxvLnB1c2goYSksby5qb2luKCIiKX1mdW5jdGlvbiBjcihlLHQscixuLGEpe3ZhciBvLGkscz04KmEtbi0xLHU9KDE8PHMpLTEsYz11Pj4xLGY9LTcsbD1yP2EtMTowLGg9cj8tMToxLHA9ZVt0K2xdO2ZvcihsKz1oLG89cCYoMTw8LWYpLTEscD4+PS1mLGYrPXM7Zj4wO289MjU2Km8rZVt0K2xdLGwrPWgsZi09OCk7Zm9yKGk9byYoMTw8LWYpLTEsbz4+PS1mLGYrPW47Zj4wO2k9MjU2KmkrZVt0K2xdLGwrPWgsZi09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gaT9OYU46MS8wKihwPy0xOjEpO2krPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4ocD8tMToxKSppKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBmcihlLHQscixuLGEsbyl7dmFyIGkscyx1LGM9OCpvLWEtMSxmPSgxPDxjKS0xLGw9Zj4+MSxoPTIzPT09YT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6by0xLGQ9bj8xOi0xLHY9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxpPWYpOihpPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtaSkpPDEmJihpLS0sdSo9MiksKHQrPWkrbD49MT9oL3U6aCpNYXRoLnBvdygyLDEtbCkpKnU+PTImJihpKyssdS89MiksaStsPj1mPyhzPTAsaT1mKTppK2w+PTE/KHM9KHQqdS0xKSpNYXRoLnBvdygyLGEpLGkrPWwpOihzPXQqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsYSksaT0wKSk7YT49ODtlW3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsYS09OCk7Zm9yKGk9aTw8YXxzLGMrPWE7Yz4wO2VbcitwXT0yNTUmaSxwKz1kLGkvPTI1NixjLT04KTtlW3IrcC1kXXw9MTI4KnZ9dmFyIGxyPXt9LnRvU3RyaW5nLGhyPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWxyLmNhbGwoZSl9O2dyLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09bGUuVFlQRURfQVJSQVlfU1VQUE9SVHx8bGUuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgcHI9ZHIoKTtmdW5jdGlvbiBkcigpe3JldHVybiBnci5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiB2cihlLHQpe2lmKGRyKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPWdyLnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBncih0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBncihlLHQscil7aWYoIShnci5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgZ3IpKXJldHVybiBuZXcgZ3IoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gYnIodGhpcyxlKX1yZXR1cm4gbXIodGhpcyxlLHQscil9ZnVuY3Rpb24gbXIoZSx0LHIsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTtnci5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1nci5wcm90b3R5cGU6ZT13cihlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO2lmKCFnci5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBuPTB8X3IodCxyKSxhPShlPXZyKGUsbikpLndyaXRlKHQscik7YSE9PW4mJihlPWUuc2xpY2UoMCxhKSk7cmV0dXJuIGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKFJyKHQpKXt2YXIgcj0wfGtyKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXZyKGUscikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLHIpLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChuPXQubGVuZ3RoKSE9bj92cihlLDApOndyKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmhyKHQuZGF0YSkpcmV0dXJuIHdyKGUsdC5kYXRhKX12YXIgbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24geXIoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBicihlLHQpe2lmKHlyKHQpLGU9dnIoZSx0PDA/MDowfGtyKHQpKSwhZ3IuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1mdW5jdGlvbiB3cihlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGtyKHQubGVuZ3RoKTtlPXZyKGUscik7Zm9yKHZhciBuPTA7bjxyO24rPTEpZVtuXT0yNTUmdFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBrcihlKXtpZihlPj1kcigpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitkcigpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBScihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gX3IoZSx0KXtpZihScihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIHI9ZS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gWHIoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiAkcihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBYcihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiB4cihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBOcih0aGlzLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gTHIodGhpcyx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBNcih0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ganIodGhpcyx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVXIodGhpcyx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcXIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gU3IoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBFcihlLHQscixuLGEpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWE/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihhKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWEpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9Z3IuZnJvbSh0LG4pKSxScih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOlRyKGUsdCxyLG4sYSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsZ3IuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/YT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOlRyKGUsW3RdLHIsbixhKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBUcihlLHQscixuLGEpe3ZhciBvLGk9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtpPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09aT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqaSl9aWYoYSl7dmFyIGY9LTE7Zm9yKG89cjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWY/MDpvLWYpKXtpZigtMT09PWYmJihmPW8pLG8tZisxPT09dSlyZXR1cm4gZippfWVsc2UtMSE9PWYmJihvLT1vLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsaD0wO2g8dTtoKyspaWYoYyhlLG8raCkhPT1jKHQsaCkpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBBcihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgYT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5hJiYobj1hKTpuPWE7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqaSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGk7ZVtyK2ldPXN9cmV0dXJuIGl9ZnVuY3Rpb24gQ3IoZSx0LHIsbil7cmV0dXJuIFpyKFhyKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIERyKGUsdCxyLG4pe3JldHVybiBacihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gdH0odCksZSxyLG4pfWZ1bmN0aW9uIE9yKGUsdCxyLG4pe3JldHVybiBEcihlLHQscixuKX1mdW5jdGlvbiBQcihlLHQscixuKXtyZXR1cm4gWnIoJHIodCksZSxyLG4pfWZ1bmN0aW9uIElyKGUsdCxyLG4pe3JldHVybiBacihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGEsbz1bXSxpPTA7aTxlLmxlbmd0aCYmISgodC09Mik8MCk7KytpKW49KHI9ZS5jaGFyQ29kZUF0KGkpKT4+OCxhPXIlMjU2LG8ucHVzaChhKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFVyKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD91cihlKTp1cihlLnNsaWNlKHQscikpfWZ1bmN0aW9uIExyKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxhPXQ7YTxyOyl7dmFyIG8saSxzLHUsYz1lW2FdLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoYStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVthKzFdKSkmJih1PSgzMSZjKTw8Nnw2MyZvKT4xMjcmJihmPXUpO2JyZWFrO2Nhc2UgMzpvPWVbYSsxXSxpPWVbYSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZpKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmaSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz1lW2ErMV0saT1lW2ErMl0scz1lW2ErM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZpKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksYSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9SHIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciByPSIiLG49MDtmb3IoO248dDspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShuLG4rPUhyKSk7cmV0dXJuIHJ9KG4pfWdyLnBvb2xTaXplPTgxOTIsZ3IuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPWdyLnByb3RvdHlwZSxlfSxnci5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbXIobnVsbCxlLHQscil9LGdyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihnci5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGdyLl9fcHJvdG9fXz1VaW50OEFycmF5KSxnci5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB5cih0KSx0PD0wP3ZyKGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/dnIoZSx0KS5maWxsKHIsbik6dnIoZSx0KS5maWxsKHIpOnZyKGUsdCl9KG51bGwsZSx0LHIpfSxnci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gYnIobnVsbCxlKX0sZ3IuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBicihudWxsLGUpfSxnci5pc0J1ZmZlcj1Rcixnci5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVJyKGUpfHwhUnIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGE9MCxvPU1hdGgubWluKHIsbik7YTxvOysrYSlpZihlW2FdIT09dFthXSl7cj1lW2FdLG49dFthXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LGdyLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGdyLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFocihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBnci5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPWdyLmFsbG9jVW5zYWZlKHQpLGE9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFScihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4sYSksYSs9by5sZW5ndGh9cmV0dXJuIG59LGdyLmJ5dGVMZW5ndGg9X3IsZ3IucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxnci5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVNyKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnci5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVNyKHRoaXMsdCx0KzMpLFNyKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGdyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpU3IodGhpcyx0LHQrNyksU3IodGhpcyx0KzEsdCs2KSxTcih0aGlzLHQrMix0KzUpLFNyKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGdyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0xyKHRoaXMsMCxlKTp4ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdyLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1nci5jb21wYXJlKHRoaXMsZSl9LGdyLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGdyLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIVJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWEmJihhPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8YT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49YSYmdD49cilyZXR1cm4gMDtpZihuPj1hKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShhPj4+PTApLShuPj4+PTApLGk9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihvLGkpLHU9dGhpcy5zbGljZShuLGEpLGM9ZS5zbGljZSh0LHIpLGY9MDtmPHM7KytmKWlmKHVbZl0hPT1jW2ZdKXtvPXVbZl0saT1jW2ZdO2JyZWFrfXJldHVybiBvPGk/LTE6aTxvPzE6MH0sZ3IucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGdyLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsciwhMCl9LGdyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKHRoaXMsZSx0LHIsITEpfSxnci5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGE9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5hKSYmKHI9YSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIEFyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIENyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBEcih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBPcih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIFByKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSXIodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sZ3IucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEhyPTQwOTY7ZnVuY3Rpb24gTXIoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBhPXQ7YTxyOysrYSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBqcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGE9dDthPHI7KythKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVthXSk7cmV0dXJuIG59ZnVuY3Rpb24gTnIoZSx0LHIpe3ZhciBuPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgYT0iIixvPXQ7bzxyOysrbylhKz1HcihlW29dKTtyZXR1cm4gYX1mdW5jdGlvbiBxcihlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxhPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpYSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBhfWZ1bmN0aW9uIEtyKGUsdCxyKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0PnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBKcihlLHQscixuLGEsbyl7aWYoIVJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0PmF8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBCcihlLHQscixuKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBhPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1yLDIpO2E8bzsrK2EpZVtyK2FdPSh0JjI1NTw8OCoobj9hOjEtYSkpPj4+OCoobj9hOjEtYSl9ZnVuY3Rpb24gRnIoZSx0LHIsbil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBhPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1yLDQpO2E8bzsrK2EpZVtyK2FdPXQ+Pj44KihuP2E6My1hKSYyNTV9ZnVuY3Rpb24gV3IoZSx0LHIsbixhLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB6cihlLHQscixuLGEpe3JldHVybiBhfHxXcihlLDAsciw0KSxmcihlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBWcihlLHQscixuLGEpe3JldHVybiBhfHxXcihlLDAsciw4KSxmcihlLHQscixuLDUyLDgpLHIrOH1nci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9bik8MCYmKGU9MCk6ZT5uJiYoZT1uKSwodD12b2lkIDA9PT10P246fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLHQ8ZSYmKHQ9ZSksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1nci5wcm90b3R5cGU7ZWxzZXt2YXIgYT10LWU7cj1uZXcgZ3IoYSx2b2lkIDApO2Zvcih2YXIgbz0wO288YTsrK28pcltvXT10aGlzW28rZV19cmV0dXJuIHJ9LGdyLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8S3IoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxhPTEsbz0wOysrbzx0JiYoYSo9MjU2KTspbis9dGhpc1tlK29dKmE7cmV0dXJuIG59LGdyLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8S3IoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0sYT0xO3Q+MCYmKGEqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmE7cmV0dXJuIG59LGdyLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S3IoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxnci5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGdyLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S3IoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sZ3IucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLcihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LGdyLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S3IoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnci5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8S3IoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxhPTEsbz0wOysrbzx0JiYoYSo9MjU2KTspbis9dGhpc1tlK29dKmE7cmV0dXJuIG4+PShhKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxnci5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8S3IoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dCxhPTEsbz10aGlzW2UrLS1uXTtuPjAmJihhKj0yNTYpOylvKz10aGlzW2UrLS1uXSphO3JldHVybiBvPj0oYSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sZ3IucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtyKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGdyLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEtyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGdyLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEtyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGdyLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZ3IucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEtyKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxnci5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8S3IoZSw0LHRoaXMubGVuZ3RoKSxjcih0aGlzLGUsITAsMjMsNCl9LGdyLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLcihlLDQsdGhpcy5sZW5ndGgpLGNyKHRoaXMsZSwhMSwyMyw0KX0sZ3IucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLcihlLDgsdGhpcy5sZW5ndGgpLGNyKHRoaXMsZSwhMCw1Miw4KX0sZ3IucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxLcihlLDgsdGhpcy5sZW5ndGgpLGNyKHRoaXMsZSwhMSw1Miw4KX0sZ3IucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8SnIodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKGEqPTI1Nik7KXRoaXNbdCtvXT1lL2EmMjU1O3JldHVybiB0K3J9LGdyLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fEpyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGE9ci0xLG89MTtmb3IodGhpc1t0K2FdPTI1NSZlOy0tYT49MCYmKG8qPTI1Nik7KXRoaXNbdCthXT1lL28mMjU1O3JldHVybiB0K3J9LGdyLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEpyKHRoaXMsZSx0LDEsMjU1LDApLGdyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnci5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxKcih0aGlzLGUsdCwyLDY1NTM1LDApLGdyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpCcih0aGlzLGUsdCwhMCksdCsyfSxnci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxKcih0aGlzLGUsdCwyLDY1NTM1LDApLGdyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpCcih0aGlzLGUsdCwhMSksdCsyfSxnci5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxKcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpGcih0aGlzLGUsdCwhMCksdCs0fSxnci5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxKcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGcih0aGlzLGUsdCwhMSksdCs0fSxnci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBhPU1hdGgucG93KDIsOCpyLTEpO0pyKHRoaXMsZSx0LHIsYS0xLC1hKX12YXIgbz0wLGk9MSxzPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyllPDAmJjA9PT1zJiYwIT09dGhpc1t0K28tMV0mJihzPTEpLHRoaXNbdCtvXT0oZS9pPj4wKS1zJjI1NTtyZXR1cm4gdCtyfSxnci5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBhPU1hdGgucG93KDIsOCpyLTEpO0pyKHRoaXMsZSx0LHIsYS0xLC1hKX12YXIgbz1yLTEsaT0xLHM9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKGkqPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QrbysxXSYmKHM9MSksdGhpc1t0K29dPShlL2k+PjApLXMmMjU1O3JldHVybiB0K3J9LGdyLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SnIodGhpcyxlLHQsMSwxMjcsLTEyOCksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sZ3IucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxKcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkJyKHRoaXMsZSx0LCEwKSx0KzJ9LGdyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SnIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLGdyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpCcih0aGlzLGUsdCwhMSksdCsyfSxnci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEpyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpGcih0aGlzLGUsdCwhMCksdCs0fSxnci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEpyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksZ3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGcih0aGlzLGUsdCwhMSksdCs0fSxnci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4genIodGhpcyxlLHQsITAscil9LGdyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB6cih0aGlzLGUsdCwhMSxyKX0sZ3IucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBWcih0aGlzLGUsdCwhMCxyKX0sZ3IucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBWcih0aGlzLGUsdCwhMSxyKX0sZ3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgYSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGE9by0xO2E+PTA7LS1hKWVbYSt0XT10aGlzW2Ercl07ZWxzZSBpZihvPDFlM3x8IWdyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGE9MDthPG87KythKWVbYSt0XT10aGlzW2Ercl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxnci5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgYT1lLmNoYXJDb2RlQXQoMCk7YTwyNTYmJihlPWEpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhZ3IuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIGk9UnIoZSk/ZTpYcihuZXcgZ3IoZSxuKS50b1N0cmluZygpKSxzPWkubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1pW28lc119cmV0dXJuIHRoaXN9O3ZhciBZcj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBHcihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWHIoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsYT1udWxsLG89W10saT0wO2k8bjsrK2kpe2lmKChyPWUuY2hhckNvZGVBdChpKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFhKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoaSsxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWE9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksYT1yO2NvbnRpbnVlfXI9NjU1MzYrKGEtNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgYSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGE9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uICRyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxvLGk7b3J8fGlyKCk7dmFyIHM9ZS5sZW5ndGg7aWYocyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW3MtMl0/MjoiPSI9PT1lW3MtMV0/MTowLGk9bmV3IGFyKDMqcy80LW8pLG49bz4wP3MtNDpzO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylhPW5yW2UuY2hhckNvZGVBdCh0KV08PDE4fG5yW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bnJbZS5jaGFyQ29kZUF0KHQrMildPDw2fG5yW2UuY2hhckNvZGVBdCh0KzMpXSxpW3UrK109YT4+MTYmMjU1LGlbdSsrXT1hPj44JjI1NSxpW3UrK109MjU1JmE7cmV0dXJuIDI9PT1vPyhhPW5yW2UuY2hhckNvZGVBdCh0KV08PDJ8bnJbZS5jaGFyQ29kZUF0KHQrMSldPj40LGlbdSsrXT0yNTUmYSk6MT09PW8mJihhPW5yW2UuY2hhckNvZGVBdCh0KV08PDEwfG5yW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxucltlLmNoYXJDb2RlQXQodCsyKV0+PjIsaVt1KytdPWE+PjgmMjU1LGlbdSsrXT0yNTUmYSksaX0oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShZciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gWnIoZSx0LHIsbil7Zm9yKHZhciBhPTA7YTxuJiYhKGErcj49dC5sZW5ndGh8fGE+PWUubGVuZ3RoKTsrK2EpdFthK3JdPWVbYV07cmV0dXJuIGF9ZnVuY3Rpb24gUXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxlbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZlbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgdG49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOmdyLElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLGdyLmFsbG9jKCtlKX0saXNCdWZmZXI6UXIsa01heExlbmd0aDpwcn0pLHJuPXtleHBvcnRzOnt9fSxubj17fSxhbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGFuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxhPTQtcixvPXQrYSxpPWdyLmFsbG9jKG8pO2ZvcihpLndyaXRlKGUpO2EtLTspaS53cml0ZSgiPSIsbisrKTtyZXR1cm4gaS50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobm4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvbj1hbjtmdW5jdGlvbiBzbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLGdyLmlzQnVmZmVyKGUpP2NuKGUudG9TdHJpbmcoImJhc2U2NCIpKTpjbihnci5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksb24uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gY24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciBmbixsbj1zbjtsbi5lbmNvZGU9c24sbG4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksZ3IuZnJvbSh1bihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LGxuLnRvQmFzZTY0PXVuLGxuLmZyb21CYXNlNjQ9Y24sbG4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGdyLmZyb20odW4oZSksImJhc2U2NCIpfSxubi5kZWZhdWx0PWxuLChmbj1ybikuZXhwb3J0cz1ubi5kZWZhdWx0LGZuLmV4cG9ydHMuZGVmYXVsdD1mbi5leHBvcnRzO3ZhciBobj1ybi5leHBvcnRzLHBuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQscil7dmFyIG49e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIHIoZSxyLG4sYSxvKXtmb3IodmFyIGkscyx1LGMsZixsLGgscCxkLHYsZyxtLHk7bz49NjQ7KXtmb3IoaT1yWzBdLHM9clsxXSx1PXJbMl0sYz1yWzNdLGY9cls0XSxsPXJbNV0saD1yWzZdLHA9cls3XSx2PTA7djwxNjt2KyspZz1hKzQqdixlW3ZdPSgyNTUmbltnXSk8PDI0fCgyNTUmbltnKzFdKTw8MTZ8KDI1NSZuW2crMl0pPDw4fDI1NSZuW2crM107Zm9yKHY9MTY7djw2NDt2KyspbT0oKGQ9ZVt2LTJdKT4+PjE3fGQ8PDE1KV4oZD4+PjE5fGQ8PDEzKV5kPj4+MTAseT0oKGQ9ZVt2LTE1XSk+Pj43fGQ8PDI1KV4oZD4+PjE4fGQ8PDE0KV5kPj4+MyxlW3ZdPShtK2Vbdi03XXwwKSsoeStlW3YtMTZdfDApO2Zvcih2PTA7djw2NDt2KyspbT0oKChmPj4+NnxmPDwyNileKGY+Pj4xMXxmPDwyMSleKGY+Pj4yNXxmPDw3KSkrKGYmbF5+ZiZoKXwwKSsocCsodFt2XStlW3ZdfDApfDApfDAseT0oKGk+Pj4yfGk8PDMwKV4oaT4+PjEzfGk8PDE5KV4oaT4+PjIyfGk8PDEwKSkrKGkmc15pJnVecyZ1KXwwLHA9aCxoPWwsbD1mLGY9YyttfDAsYz11LHU9cyxzPWksaT1tK3l8MDtyWzBdKz1pLHJbMV0rPXMsclsyXSs9dSxyWzNdKz1jLHJbNF0rPWYscls1XSs9bCxyWzZdKz1oLHJbN10rPXAsYSs9NjQsby09NjR9cmV0dXJuIGF9dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaWdlc3RMZW5ndGg9ZS5kaWdlc3RMZW5ndGgsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemUsdGhpcy5zdGF0ZT1uZXcgSW50MzJBcnJheSg4KSx0aGlzLnRlbXA9bmV3IEludDMyQXJyYXkoNjQpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDEyOCksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLnJlc2V0KCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVbMF09MTc3OTAzMzcwMyx0aGlzLnN0YXRlWzFdPTMxNDQxMzQyNzcsdGhpcy5zdGF0ZVsyXT0xMDEzOTA0MjQyLHRoaXMuc3RhdGVbM109Mjc3MzQ4MDc2Mix0aGlzLnN0YXRlWzRdPTEzNTk4OTMxMTksdGhpcy5zdGF0ZVs1XT0yNjAwODIyOTI0LHRoaXMuc3RhdGVbNl09NTI4NzM0NjM1LHRoaXMuc3RhdGVbN109MTU0MTQ1OTIyNSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXN9LHQucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmJ1ZmZlci5sZW5ndGg7ZSsrKXRoaXMuYnVmZmVyW2VdPTA7Zm9yKGU9MDtlPHRoaXMudGVtcC5sZW5ndGg7ZSsrKXRoaXMudGVtcFtlXT0wO3RoaXMucmVzZXQoKX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ZS5sZW5ndGgpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJTSEEyNTY6IGNhbid0IHVwZGF0ZSBiZWNhdXNlIGhhc2ggd2FzIGZpbmlzaGVkLiIpO3ZhciBuPTA7aWYodGhpcy5ieXRlc0hhc2hlZCs9dCx0aGlzLmJ1ZmZlckxlbmd0aD4wKXtmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPDY0JiZ0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbbisrXSx0LS07NjQ9PT10aGlzLmJ1ZmZlckxlbmd0aCYmKHIodGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCw2NCksdGhpcy5idWZmZXJMZW5ndGg9MCl9Zm9yKHQ+PTY0JiYobj1yKHRoaXMudGVtcCx0aGlzLnN0YXRlLGUsbix0KSx0JT02NCk7dD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmluaXNoZWQpe3ZhciB0PXRoaXMuYnl0ZXNIYXNoZWQsbj10aGlzLmJ1ZmZlckxlbmd0aCxhPXQvNTM2ODcwOTEyfDAsbz10PDwzLGk9dCU2NDw1Nj82NDoxMjg7dGhpcy5idWZmZXJbbl09MTI4O2Zvcih2YXIgcz1uKzE7czxpLTg7cysrKXRoaXMuYnVmZmVyW3NdPTA7dGhpcy5idWZmZXJbaS04XT1hPj4+MjQmMjU1LHRoaXMuYnVmZmVyW2ktN109YT4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltpLTZdPWE+Pj44JjI1NSx0aGlzLmJ1ZmZlcltpLTVdPWE+Pj4wJjI1NSx0aGlzLmJ1ZmZlcltpLTRdPW8+Pj4yNCYyNTUsdGhpcy5idWZmZXJbaS0zXT1vPj4+MTYmMjU1LHRoaXMuYnVmZmVyW2ktMl09bz4+PjgmMjU1LHRoaXMuYnVmZmVyW2ktMV09bz4+PjAmMjU1LHIodGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCxpKSx0aGlzLmZpbmlzaGVkPSEwfWZvcihzPTA7czw4O3MrKyllWzQqcyswXT10aGlzLnN0YXRlW3NdPj4+MjQmMjU1LGVbNCpzKzFdPXRoaXMuc3RhdGVbc10+Pj4xNiYyNTUsZVs0KnMrMl09dGhpcy5zdGF0ZVtzXT4+PjgmMjU1LGVbNCpzKzNdPXRoaXMuc3RhdGVbc10+Pj4wJjI1NTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSx0LnByb3RvdHlwZS5fc2F2ZVN0YXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5zdGF0ZS5sZW5ndGg7dCsrKWVbdF09dGhpcy5zdGF0ZVt0XX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dGhpcy5zdGF0ZS5sZW5ndGg7cisrKXRoaXMuc3RhdGVbcl09ZVtyXTt0aGlzLmJ5dGVzSGFzaGVkPXQsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmJ1ZmZlckxlbmd0aD0wfSx0fSgpO2UuSGFzaD1uO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlubmVyPW5ldyBuLHRoaXMub3V0ZXI9bmV3IG4sdGhpcy5ibG9ja1NpemU9dGhpcy5pbm5lci5ibG9ja1NpemUsdGhpcy5kaWdlc3RMZW5ndGg9dGhpcy5pbm5lci5kaWdlc3RMZW5ndGg7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja1NpemUpO2lmKGUubGVuZ3RoPnRoaXMuYmxvY2tTaXplKShuZXcgbikudXBkYXRlKGUpLmZpbmlzaCh0KS5jbGVhbigpO2Vsc2UgZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdFtyXT1lW3JdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49NTQ7dGhpcy5pbm5lci51cGRhdGUodCk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdXj0xMDY7dGhpcy5vdXRlci51cGRhdGUodCksdGhpcy5pc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMub3N0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLmlubmVyLl9zYXZlU3RhdGUodGhpcy5pc3RhdGUpLHRoaXMub3V0ZXIuX3NhdmVTdGF0ZSh0aGlzLm9zdGF0ZSk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPTB9cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLmlzdGF0ZSx0aGlzLmlubmVyLmJsb2NrU2l6ZSksdGhpcy5vdXRlci5fcmVzdG9yZVN0YXRlKHRoaXMub3N0YXRlLHRoaXMub3V0ZXIuYmxvY2tTaXplKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5pc3RhdGUubGVuZ3RoO2UrKyl0aGlzLm9zdGF0ZVtlXT10aGlzLmlzdGF0ZVtlXT0wO3RoaXMuaW5uZXIuY2xlYW4oKSx0aGlzLm91dGVyLmNsZWFuKCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZSksdGhpc30sZS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLmZpbmlzaGVkP3RoaXMub3V0ZXIuZmluaXNoKGUpOih0aGlzLmlubmVyLmZpbmlzaChlKSx0aGlzLm91dGVyLnVwZGF0ZShlLHRoaXMuZGlnZXN0TGVuZ3RoKS5maW5pc2goZSkpLHRoaXN9LGUucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sZX0oKTtmdW5jdGlvbiBvKGUpe3ZhciB0PShuZXcgbikudXBkYXRlKGUpLHI9dC5kaWdlc3QoKTtyZXR1cm4gdC5jbGVhbigpLHJ9ZnVuY3Rpb24gaShlLHQpe3ZhciByPW5ldyBhKGUpLnVwZGF0ZSh0KSxuPXIuZGlnZXN0KCk7cmV0dXJuIHIuY2xlYW4oKSxufWZ1bmN0aW9uIHMoZSx0LHIsbil7dmFyIGE9blswXTtpZigwPT09YSl0aHJvdyBuZXcgRXJyb3IoImhrZGY6IGNhbm5vdCBleHBhbmQgbW9yZSIpO3QucmVzZXQoKSxhPjEmJnQudXBkYXRlKGUpLHImJnQudXBkYXRlKHIpLHQudXBkYXRlKG4pLHQuZmluaXNoKGUpLG5bMF0rK31lLkhNQUM9YSxlLmhhc2g9byxlLmRlZmF1bHQ9byxlLmhtYWM9aTt2YXIgdT1uZXcgVWludDhBcnJheShlLmRpZ2VzdExlbmd0aCk7ZnVuY3Rpb24gYyhlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1pKHQsZSksZj1uZXcgYShjKSxsPW5ldyBVaW50OEFycmF5KGYuZGlnZXN0TGVuZ3RoKSxoPWwubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkobiksZD0wO2Q8bjtkKyspaD09PWwubGVuZ3RoJiYocyhsLGYscixvKSxoPTApLHBbZF09bFtoKytdO3JldHVybiBmLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxwfWZ1bmN0aW9uIGYoZSx0LHIsbil7Zm9yKHZhciBvPW5ldyBhKGUpLGk9by5kaWdlc3RMZW5ndGgscz1uZXcgVWludDhBcnJheSg0KSx1PW5ldyBVaW50OEFycmF5KGkpLGM9bmV3IFVpbnQ4QXJyYXkoaSksZj1uZXcgVWludDhBcnJheShuKSxsPTA7bCppPG47bCsrKXt2YXIgaD1sKzE7c1swXT1oPj4+MjQmMjU1LHNbMV09aD4+PjE2JjI1NSxzWzJdPWg+Pj44JjI1NSxzWzNdPWg+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUocyksby5maW5pc2goYyk7Zm9yKHZhciBwPTA7cDxpO3ArKyl1W3BdPWNbcF07Zm9yKHA9MjtwPD1yO3ArKyl7by5yZXNldCgpLG8udXBkYXRlKGMpLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPGk7ZCsrKXVbZF1ePWNbZF19Zm9yKHA9MDtwPGkmJmwqaStwPG47cCsrKWZbbCppK3BdPXVbcF19Zm9yKGw9MDtsPGk7bCsrKXVbbF09Y1tsXT0wO2ZvcihsPTA7bDw0O2wrKylzW2xdPTA7cmV0dXJuIG8uY2xlYW4oKSxmfWUuaGtkZj1jLGUucGJrZGYyPWZ9KG4pO3ZhciBhPW4uZGVmYXVsdDtmb3IodmFyIG8gaW4gbilhW29dPW5bb107ZS5leHBvcnRzPWF9KCl9KHBuKTt2YXIgZG49Vyhwbi5leHBvcnRzKSx2bj1jcnlwdG8sZ249ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBDcnlwdG9LZXl9LG1uPW5ldyBUZXh0RW5jb2Rlcix5bj1uZXcgVGV4dERlY29kZXI7ZnVuY3Rpb24gYm4oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTt2YXIgbj10LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Lmxlbmd0aH0pLDApLGE9bmV3IFVpbnQ4QXJyYXkobiksbz0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KGUsbyksbys9ZS5sZW5ndGh9KSksYX12YXIgd249ZnVuY3Rpb24oZSl7dmFyIHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9eW4uZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXRvYihlKSxyPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9KHQpfWNhdGNoKGUpe3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKX19LGtuPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYTtyZXR1cm4gbyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIixuLm5hbWU9bi5jb25zdHJ1Y3Rvci5uYW1lLG51bGw9PT0oYT1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl8fHZvaWQgMD09PWF8fGEuY2FsbChFcnJvcix2KG4pLG4uY29uc3RydWN0b3IpLG59cmV0dXJuIHMocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fV0pLHJ9KGQoRXJyb3IpKSxSbj1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKGUpe3ZhciBuLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtyZXR1cm4gbyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIixuLmNsYWltPWEsbi5yZWFzb249aSxufXJldHVybiBzKHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQifX1dKSxyfShrbiksX249ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcihlKXt2YXIgbixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidW5zcGVjaWZpZWQiLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJ1bnNwZWNpZmllZCI7cmV0dXJuIG8odGhpcyxyKSwobj10LmNhbGwodGhpcyxlKSkuY29kZT0iRVJSX0pXVF9FWFBJUkVEIixuLmNsYWltPWEsbi5yZWFzb249aSxufXJldHVybiBzKHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fV0pLHJ9KGtuKSx4bj1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIixlfXJldHVybiBzKHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KT1NFX0FMR19OT1RfQUxMT1dFRCJ9fV0pLHJ9KGtuKSxTbj1mdW5jdGlvbihlKXtjKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCIsZX1yZXR1cm4gcyhyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19XSkscn0oa24pLEVuPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldTX0lOVkFMSUQiLGV9cmV0dXJuIHMocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19XSkscn0oa24pLFRuPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldUX0lOVkFMSUQiLGV9cmV0dXJuIHMocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXVF9JTlZBTElEIn19XSkscn0oa24pLEFuPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldLU19JTlZBTElEIixlfXJldHVybiBzKHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1dKSxyfShrbiksQ249ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsZS5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCIsZX1yZXR1cm4gcyhyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1dKSxyfShrbiksRG49ZnVuY3Rpb24oZSl7YyhyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLGUubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCIsZX1yZXR1cm4gcyhyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldLU19NVUxUSVBMRV9NQVRDSElOR19LRVlTIn19XSkscn0oa24pLE9uPWZ1bmN0aW9uKGUpe2MocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIixlLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIixlfXJldHVybiBzKHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1dKSxyfShrbik7ZnVuY3Rpb24gUG4oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiBJbigpe3RyeXtyZXR1cm4gdm9pZCAwIT09SGUudmVyc2lvbnMubm9kZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhbGdvcml0aG0ubmFtZSI7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgIi5jb25jYXQodCwiIG11c3QgYmUgIikuY29uY2F0KGUpKX1mdW5jdGlvbiBMbihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIEhuKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIE1uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19ZnVuY3Rpb24gam4oZSx0KXtpZih0Lmxlbmd0aCYmIXQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUudXNhZ2VzLmluY2x1ZGVzKHQpfSkpKXt2YXIgcj0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7dmFyIG49dC5wb3AoKTtyKz0ib25lIG9mICIuY29uY2F0KHQuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQobiwiLiIpfWVsc2UgMj09PXQubGVuZ3RoP3IrPSJvbmUgb2YgIi5jb25jYXQodFswXSwiIG9yICIpLmNvbmNhdCh0WzFdLCIuIik6cis9IiIuY29uY2F0KHRbMF0sIi4iKTt0aHJvdyBuZXcgVHlwZUVycm9yKHIpfX12YXIgTm49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSJLZXkgbXVzdCBiZSAiLG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuPjE/bi0xOjApLG89MTtvPG47bysrKWFbby0xXT1hcmd1bWVudHNbb107aWYoYS5sZW5ndGg+Mil7dmFyIGk9YS5wb3AoKTt0Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoYS5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChpLCIuIil9ZWxzZSAyPT09YS5sZW5ndGg/dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KGFbMF0sIiBvciAiKS5jb25jYXQoYVsxXSwiLiIpOnQrPSJvZiB0eXBlICIuY29uY2F0KGFbMF0sIi4iKTtyZXR1cm4gbnVsbD09ZT90Kz0iIFJlY2VpdmVkICIuY29uY2F0KGUpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/dCs9IiBSZWNlaXZlZCBmdW5jdGlvbiAiLmNvbmNhdChlLm5hbWUpOiJvYmplY3QiPT09cihlKSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYodCs9IiBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAiLmNvbmNhdChlLmNvbnN0cnVjdG9yLm5hbWUpKSx0fSxxbj1mdW5jdGlvbihlKXtyZXR1cm4gZ24oZSl9LEtuPVsiQ3J5cHRvS2V5Il0sSm49ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTt2YXIgbixhPXQuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT1hLmxlbmd0aHx8MT09PWEubGVuZ3RoKXJldHVybiEwO3ZhciBvLGk9UihhKTt0cnl7Zm9yKGkucygpOyEobz1pLm4oKSkuZG9uZTspe3ZhciBzPW8udmFsdWUsdT1PYmplY3Qua2V5cyhzKTtpZihuJiYwIT09bi5zaXplKWZvcih2YXIgYz0wLGY9dTtjPGYubGVuZ3RoO2MrKyl7dmFyIGw9ZltjXTtpZihuLmhhcyhsKSlyZXR1cm4hMTtuLmFkZChsKX1lbHNlIG49bmV3IFNldCh1KX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuITB9O2Z1bmN0aW9uIEJuKGUpe2lmKCJvYmplY3QiIT09cih0PWUpfHxudWxsPT09dHx8IltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ7aWYobnVsbD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMDtmb3IodmFyIG49ZTtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bn12YXIgRm49ZnVuY3Rpb24oZSx0KXtpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7dmFyIHI9dC5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aDtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19O2Z1bmN0aW9uIFduKGUpe3ZhciB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0scj1bInNpZ24iLCJ2ZXJpZnkiXTticmVhaztjYXNlIkExMjhDQkMtSFMyNTYiOmNhc2UiQTE5MkNCQy1IUzM4NCI6Y2FzZSJBMjU2Q0JDLUhTNTEyIjp0aHJvdyBuZXcgU24oIiIuY29uY2F0KGUuYWxnLCIga2V5cyBjYW5ub3QgYmUgaW1wb3J0ZWQgYXMgQ3J5cHRvS2V5IGluc3RhbmNlcyIpKTtjYXNlIkExMjhHQ00iOmNhc2UiQTE5MkdDTSI6Y2FzZSJBMjU2R0NNIjpjYXNlIkExMjhHQ01LVyI6Y2FzZSJBMTkyR0NNS1ciOmNhc2UiQTI1NkdDTUtXIjp0PXtuYW1lOiJBRVMtR0NNIn0scj1bImVuY3J5cHQiLCJkZWNyeXB0Il07YnJlYWs7Y2FzZSJBMTI4S1ciOmNhc2UiQTE5MktXIjpjYXNlIkEyNTZLVyI6dD17bmFtZToiQUVTLUtXIn0scj1bIndyYXBLZXkiLCJ1bndyYXBLZXkiXTticmVhaztjYXNlIlBCRVMyLUhTMjU2K0ExMjhLVyI6Y2FzZSJQQkVTMi1IUzM4NCtBMTkyS1ciOmNhc2UiUEJFUzItSFM1MTIrQTI1NktXIjp0PXtuYW1lOiJQQktERjIifSxyPVsiZGVyaXZlQml0cyJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFNuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIlJTQSI6c3dpdGNoKGUuYWxnKXtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp0PXtuYW1lOiJSU0EtUFNTIixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDoiU0hBLSIuY29uY2F0KGUuYWxnLnNsaWNlKC0zKSl9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0iLmNvbmNhdChwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxKX0scj1lLmQ/WyJkZWNyeXB0IiwidW53cmFwS2V5Il06WyJlbmNyeXB0Iiwid3JhcEtleSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFNuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIkVDIjpzd2l0Y2goZS5hbGcpe2Nhc2UiRVMyNTYiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzM4NCI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMzg0In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRUNESC1FUyI6Y2FzZSJFQ0RILUVTK0ExMjhLVyI6Y2FzZSJFQ0RILUVTK0ExOTJLVyI6Y2FzZSJFQ0RILUVTK0EyNTZLVyI6dD17bmFtZToiRUNESCIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJkZXJpdmVCaXRzIl06W107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgU24oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UoUG4oKXx8SW4oKSkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgU24oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO3N3aXRjaChlLmNydil7Y2FzZSJFZDI1NTE5Ijp0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSBJbigpJiYiRWQ0NDgiOnQ9e25hbWU6Ik5PREUtRUQ0NDgiLG5hbWVkQ3VydmU6Ik5PREUtRUQ0NDgifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFNuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiY3J2IiAoU3VidHlwZSBvZiBLZXkgUGFpcikgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgU24oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpyfX12YXIgem49ZnVuY3Rpb24oKXt2YXIgZT1hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIpe3ZhciBuLGEsbyxpLHMsdSxjLGYsbDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKGk9V24ocikscz1pLmFsZ29yaXRobSx1PWkua2V5VXNhZ2VzLGM9W3MsbnVsbCE9PShhPXIuZXh0KSYmdm9pZCAwIT09YSYmYSxudWxsIT09KG89ci5rZXlfb3BzKSYmdm9pZCAwIT09bz9vOnVdLCJQQktERjIiIT09cy5uYW1lKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsKGY9dm4uc3VidGxlKS5pbXBvcnRLZXkuYXBwbHkoZixbInJhdyIsd24oci5rKV0uY29uY2F0KGMpKSk7Y2FzZSA0OnJldHVybiBkZWxldGUobD10KHt9LHIpKS5hbGcsZS5hYnJ1cHQoInJldHVybiIsKG49dm4uc3VidGxlKS5pbXBvcnRLZXkuYXBwbHkobixbImp3ayIsbF0uY29uY2F0KGMpKSk7Y2FzZSA3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2Z1bmN0aW9uIFZuKGUsdCxyKXtyZXR1cm4gWW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFluKCl7cmV0dXJuKFluPWEocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixuLGEpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoQm4ocikpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2Nhc2UgMjppZihufHwobj1yLmFsZyksInN0cmluZyI9PXR5cGVvZiBuJiZuKXtlLm5leHQ9NTticmVha310aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO2Nhc2UgNTplLnQwPXIua3R5LGUubmV4dD0ib2N0Ij09PWUudDA/ODoiUlNBIj09PWUudDA/MTQ6IkVDIj09PWUudDB8fCJPS1AiPT09ZS50MD8xNjoxNzticmVhaztjYXNlIDg6aWYoInN0cmluZyI9PXR5cGVvZiByLmsmJnIuayl7ZS5uZXh0PTEwO2JyZWFrfXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO2Nhc2UgMTA6aWYobnVsbCE9YXx8KGE9ITAhPT1yLmV4dCksIWEpe2UubmV4dD0xMzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsem4odCh0KHt9LHIpLHt9LHthbGc6bixleHQ6ITF9KSkpO2Nhc2UgMTM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHduKHIuaykpO2Nhc2UgMTQ6aWYodm9pZCAwPT09ci5vdGgpe2UubmV4dD0xNjticmVha310aHJvdyBuZXcgU24oJ1JTQSBKV0sgIm90aCIgKE90aGVyIFByaW1lcyBJbmZvKSBQYXJhbWV0ZXIgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCcpO2Nhc2UgMTY6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHpuKHQodCh7fSxyKSx7fSx7YWxnOm59KSkpO2Nhc2UgMTc6dGhyb3cgbmV3IFNuKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpO2Nhc2UgMTg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgR249ZnVuY3Rpb24oZSx0LHIpe2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/ZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFxbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKE5uLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KGIoS24pLFsiVWludDhBcnJheSJdKSkpO2lmKCJzZWNyZXQiIT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KEtuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpfX0odCk6ZnVuY3Rpb24oZSx0KXtpZighcW4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihObi5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChiKEtuKSkpKTtpZigic2VjcmV0Ij09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChLbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJykpO2lmKCJzaWduIj09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KEtuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKCJkZWNyeXB0Ij09PXQmJiJwdWJsaWMiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KEtuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiJykpO2lmKGUuYWxnb3JpdGhtJiYidmVyaWZ5Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChLbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSk7aWYoZS5hbGdvcml0aG0mJiJlbmNyeXB0Ij09PXQmJiJwcml2YXRlIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChLbi5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpfSh0LHIpfTtmdW5jdGlvbiBYbihlLHQscixuLGEpe2lmKHZvaWQgMCE9PWEuY3JpdCYmdm9pZCAwPT09bi5jcml0KXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpO2lmKCFufHx2b2lkIDA9PT1uLmNyaXQpcmV0dXJuIG5ldyBTZXQ7aWYoIUFycmF5LmlzQXJyYXkobi5jcml0KXx8MD09PW4uY3JpdC5sZW5ndGh8fG4uY3JpdC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aH0pKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO3ZhciBvO289dm9pZCAwIT09cj9uZXcgTWFwKFtdLmNvbmNhdChiKE9iamVjdC5lbnRyaWVzKHIpKSxiKHQuZW50cmllcygpKSkpOnQ7dmFyIGkscz1SKG4uY3JpdCk7dHJ5e2ZvcihzLnMoKTshKGk9cy5uKCkpLmRvbmU7KXt2YXIgdT1pLnZhbHVlO2lmKCFvLmhhcyh1KSl0aHJvdyBuZXcgU24oJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh1LCciIGlzIG5vdCByZWNvZ25pemVkJykpO2lmKHZvaWQgMD09PWFbdV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh1LCciIGlzIG1pc3NpbmcnKSk7aWYoby5nZXQodSkmJnZvaWQgMD09PW5bdV0pdGhyb3cgbmV3IGUoJ0V4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICInLmNvbmNhdCh1LCciIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZCcpKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9cmV0dXJuIG5ldyBTZXQobi5jcml0KX12YXIgJG49ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlfSkpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciJy5jb25jYXQoZSwnIiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO2lmKHQpcmV0dXJuIG5ldyBTZXQodCl9O2Z1bmN0aW9uIFpuKGUsdCl7dmFyIHI9IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSk7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlKFBuKCl8fEluKCkpJiYiRWREU0EiOnZhciBuPXQubmFtZWRDdXJ2ZTtyZXR1cm57bmFtZTpuLG5hbWVkQ3VydmU6bn07ZGVmYXVsdDp0aHJvdyBuZXcgU24oImFsZyAiLmNvbmNhdChlLCIgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZSIpKX19ZnVuY3Rpb24gUW4oZSx0LHIpe2lmKGduKHQpKXJldHVybiBmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjppZighTG4oZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBVbigiSE1BQyIpO3ZhciByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKEhuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBVbigiU0hBLSIuY29uY2F0KHIpLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOmlmKCFMbihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBVbigiUlNBU1NBLVBLQ1MxLXYxXzUiKTt2YXIgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZihIbihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgVW4oIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVhaztjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjppZighTG4oZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBVbigiUlNBLVBTUyIpO3ZhciBhPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKEhuKGUuYWxnb3JpdGhtLmhhc2gpIT09YSl0aHJvdyBVbigiU0hBLSIuY29uY2F0KGEpLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrO2Nhc2UgSW4oKSYmIkVkRFNBIjppZigiTk9ERS1FRDI1NTE5IiE9PWUuYWxnb3JpdGhtLm5hbWUmJiJOT0RFLUVENDQ4IiE9PWUuYWxnb3JpdGhtLm5hbWUpdGhyb3cgVW4oIk5PREUtRUQyNTUxOSBvciBOT0RFLUVENDQ4Iik7YnJlYWs7Y2FzZSBQbigpJiYiRWREU0EiOmlmKCFMbihlLmFsZ29yaXRobSwiTk9ERS1FRDI1NTE5IikpdGhyb3cgVW4oIk5PREUtRUQyNTUxOSIpO2JyZWFrO2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOmlmKCFMbihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBVbigiRUNEU0EiKTt2YXIgbz1Nbih0KTtpZihlLmFsZ29yaXRobS5uYW1lZEN1cnZlIT09byl0aHJvdyBVbihvLCJhbGdvcml0aG0ubmFtZWRDdXJ2ZSIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24iKX1mb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheShpPjI/aS0yOjApLHU9Mjt1PGk7dSsrKXNbdS0yXT1hcmd1bWVudHNbdV07am4oZSxzKX0odCxlLHIpLHQ7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2lmKCFlLnN0YXJ0c1dpdGgoIkhTIikpdGhyb3cgbmV3IFR5cGVFcnJvcihObi5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChiKEtuKSkpKTtyZXR1cm4gdm4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOiJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpLG5hbWU6IkhNQUMifSwhMSxbcl0pfXRocm93IG5ldyBUeXBlRXJyb3IoTm4uYXBwbHkodm9pZCAwLFt0XS5jb25jYXQoYihLbiksWyJVaW50OEFycmF5Il0pKSl9dmFyIGVhPWZ1bmN0aW9uKCl7dmFyIGU9YShyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSh0LHIsbixhKXt2YXIgbyxpO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLFFuKHQsciwidmVyaWZ5Iik7Y2FzZSAyOnJldHVybiBvPWUuc2VudCxGbih0LG8pLGk9Wm4odCxvLmFsZ29yaXRobSksZS5wcmV2PTUsZS5uZXh0PTgsdm4uc3VidGxlLnZlcmlmeShpLG8sbixhKTtjYXNlIDg6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAxMTpyZXR1cm4gZS5wcmV2PTExLGUudDA9ZS5jYXRjaCg1KSxlLmFicnVwdCgicmV0dXJuIiwhMSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzUsMTFdXSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIsbixhKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2Z1bmN0aW9uIHRhKGUsdCxyKXtyZXR1cm4gcmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHJhKCl7cmV0dXJuIHJhPWEocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUocixuLGEpe3ZhciBvLGkscyx1LGMsZixsLGgscCxkLHYsZyxtO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoQm4ocikpe2UubmV4dD0yO2JyZWFrfXRocm93IG5ldyBFbigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2Nhc2UgMjppZih2b2lkIDAhPT1yLnByb3RlY3RlZHx8dm9pZCAwIT09ci5oZWFkZXIpe2UubmV4dD00O2JyZWFrfXRocm93IG5ldyBFbignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7Y2FzZSA0OmlmKHZvaWQgMD09PXIucHJvdGVjdGVkfHwic3RyaW5nIj09dHlwZW9mIHIucHJvdGVjdGVkKXtlLm5leHQ9NjticmVha310aHJvdyBuZXcgRW4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7Y2FzZSA2OmlmKHZvaWQgMCE9PXIucGF5bG9hZCl7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEVuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7Y2FzZSA4OmlmKCJzdHJpbmciPT10eXBlb2Ygci5zaWduYXR1cmUpe2UubmV4dD0xMDticmVha310aHJvdyBuZXcgRW4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTA6aWYodm9pZCAwPT09ci5oZWFkZXJ8fEJuKHIuaGVhZGVyKSl7ZS5uZXh0PTEyO2JyZWFrfXRocm93IG5ldyBFbigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2Nhc2UgMTI6aWYoaT17fSwhci5wcm90ZWN0ZWQpe2UubmV4dD0yMjticmVha31zPXduKHIucHJvdGVjdGVkKSxlLnByZXY9MTUsaT1KU09OLnBhcnNlKHluLmRlY29kZShzKSksZS5uZXh0PTIyO2JyZWFrO2Nhc2UgMTk6dGhyb3cgZS5wcmV2PTE5LGUudDA9ZS5jYXRjaCgxNSksbmV3IEVuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIik7Y2FzZSAyMjppZihKbihpLHIuaGVhZGVyKSl7ZS5uZXh0PTI0O2JyZWFrfXRocm93IG5ldyBFbigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2Nhc2UgMjQ6aWYodT10KHQoe30saSksci5oZWFkZXIpLGM9WG4oRW4sbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PWE/dm9pZCAwOmEuY3JpdCxpLHUpLGY9ITAsIWMuaGFzKCJiNjQiKSl7ZS5uZXh0PTMxO2JyZWFrfWlmKCJib29sZWFuIj09dHlwZW9mKGY9aS5iNjQpKXtlLm5leHQ9MzE7YnJlYWt9dGhyb3cgbmV3IEVuKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2Nhc2UgMzE6aWYoInN0cmluZyI9PXR5cGVvZihsPXUuYWxnKSYmbCl7ZS5uZXh0PTM0O2JyZWFrfXRocm93IG5ldyBFbignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y2FzZSAzNDppZighKGg9YSYmJG4oImFsZ29yaXRobXMiLGEuYWxnb3JpdGhtcykpfHxoLmhhcyhsKSl7ZS5uZXh0PTM3O2JyZWFrfXRocm93IG5ldyB4bignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2Nhc2UgMzc6aWYoIWYpe2UubmV4dD00MjticmVha31pZigic3RyaW5nIj09dHlwZW9mIHIucGF5bG9hZCl7ZS5uZXh0PTQwO2JyZWFrfXRocm93IG5ldyBFbigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpO2Nhc2UgNDA6ZS5uZXh0PTQ0O2JyZWFrO2Nhc2UgNDI6aWYoInN0cmluZyI9PXR5cGVvZiByLnBheWxvYWR8fHIucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2UubmV4dD00NDticmVha310aHJvdyBuZXcgRW4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpO2Nhc2UgNDQ6aWYocD0hMSwiZnVuY3Rpb24iIT10eXBlb2Ygbil7ZS5uZXh0PTUwO2JyZWFrfXJldHVybiBlLm5leHQ9NDgsbihpLHIpO2Nhc2UgNDg6bj1lLnNlbnQscD0hMDtjYXNlIDUwOnJldHVybiBHbihsLG4sInZlcmlmeSIpLGQ9Ym4obW4uZW5jb2RlKG51bGwhPT0obz1yLnByb3RlY3RlZCkmJnZvaWQgMCE9PW8/bzoiIiksbW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiByLnBheWxvYWQ/bW4uZW5jb2RlKHIucGF5bG9hZCk6ci5wYXlsb2FkKSx2PXduKHIuc2lnbmF0dXJlKSxlLm5leHQ9NTUsZWEobCxuLHYsZCk7Y2FzZSA1NTppZihlLnNlbnQpe2UubmV4dD01ODticmVha310aHJvdyBuZXcgT247Y2FzZSA1ODppZihnPWY/d24oci5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIHIucGF5bG9hZD9tbi5lbmNvZGUoci5wYXlsb2FkKTpyLnBheWxvYWQsbT17cGF5bG9hZDpnfSx2b2lkIDAhPT1yLnByb3RlY3RlZCYmKG0ucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PXIuaGVhZGVyJiYobS51bnByb3RlY3RlZEhlYWRlcj1yLmhlYWRlciksIXApe2UubmV4dD02NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCh0KHt9LG0pLHt9LHtrZXk6bn0pKTtjYXNlIDY0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixtKTtjYXNlIDY1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMTUsMTldXSl9KSkpLHJhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBuYShlLHQscil7cmV0dXJuIGFhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBhYSgpe3JldHVybihhYT1hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbixhKXt2YXIgbyxpLHMsdSxjLGY7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyIGluc3RhbmNlb2YgVWludDhBcnJheSYmKHI9eW4uZGVjb2RlKHIpKSwic3RyaW5nIj09dHlwZW9mIHIpe2UubmV4dD0zO2JyZWFrfXRocm93IG5ldyBFbigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y2FzZSAzOmlmKG89ci5zcGxpdCgiLiIpLGk9b1swXSxzPW9bMV0sdT1vWzJdLDM9PT1vLmxlbmd0aCl7ZS5uZXh0PTY7YnJlYWt9dGhyb3cgbmV3IEVuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y2FzZSA2OnJldHVybiBlLm5leHQ9OCx0YSh7cGF5bG9hZDpzLHByb3RlY3RlZDppLHNpZ25hdHVyZTp1fSxuLGEpO2Nhc2UgODppZihjPWUuc2VudCxmPXtwYXlsb2FkOmMucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6Yy5wcm90ZWN0ZWRIZWFkZXJ9LCJmdW5jdGlvbiIhPXR5cGVvZiBuKXtlLm5leHQ9MTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHQodCh7fSxmKSx7fSx7a2V5OmMua2V5fSkpO2Nhc2UgMTI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGYpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgb2E9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS5nZXRUaW1lKCkvMWUzKX0saWE9ODY0MDAsc2E9L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2ksdWE9ZnVuY3Rpb24oZSl7dmFyIHQ9c2EuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHRpbWUgcGVyaW9kIGZvcm1hdCIpO3ZhciByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKHIqaWEpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19LGNhPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKX0sZmE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/dC5pbmNsdWRlcyhlKTohIUFycmF5LmlzQXJyYXkoZSkmJnQuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoZSkpKX0sbGE9ZnVuY3Rpb24oZSx0KXt2YXIgbixhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxvPWEudHlwO2lmKG8mJigic3RyaW5nIiE9dHlwZW9mIGUudHlwfHxjYShlLnR5cCkhPT1jYShvKSkpdGhyb3cgbmV3IFJuKCd1bmV4cGVjdGVkICJ0eXAiIEpXVCBoZWFkZXIgdmFsdWUnLCJ0eXAiLCJjaGVja19mYWlsZWQiKTt0cnl7bj1KU09OLnBhcnNlKHluLmRlY29kZSh0KSl9Y2F0Y2goZSl7fWlmKCFCbihuKSl0aHJvdyBuZXcgVG4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTt2YXIgaT1hLmlzc3VlcjtpZihpJiYhKEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmluY2x1ZGVzKG4uaXNzKSl0aHJvdyBuZXcgUm4oJ3VuZXhwZWN0ZWQgImlzcyIgY2xhaW0gdmFsdWUnLCJpc3MiLCJjaGVja19mYWlsZWQiKTt2YXIgcz1hLnN1YmplY3Q7aWYocyYmbi5zdWIhPT1zKXRocm93IG5ldyBSbigndW5leHBlY3RlZCAic3ViIiBjbGFpbSB2YWx1ZScsInN1YiIsImNoZWNrX2ZhaWxlZCIpO3ZhciB1LGM9YS5hdWRpZW5jZTtpZihjJiYhZmEobi5hdWQsInN0cmluZyI9PXR5cGVvZiBjP1tjXTpjKSl0aHJvdyBuZXcgUm4oJ3VuZXhwZWN0ZWQgImF1ZCIgY2xhaW0gdmFsdWUnLCJhdWQiLCJjaGVja19mYWlsZWQiKTtzd2l0Y2gocihhLmNsb2NrVG9sZXJhbmNlKSl7Y2FzZSJzdHJpbmciOnU9dWEoYS5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOnU9YS5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6dT0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfXZhciBmPWEuY3VycmVudERhdGUsbD1vYShmfHxuZXcgRGF0ZSk7aWYoKHZvaWQgMCE9PW4uaWF0fHxhLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBuLmlhdCl0aHJvdyBuZXcgUm4oJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09bi5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2Ygbi5uYmYpdGhyb3cgbmV3IFJuKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKG4ubmJmPmwrdSl0aHJvdyBuZXcgUm4oJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1uLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBuLmV4cCl0aHJvdyBuZXcgUm4oJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYobi5leHA8PWwtdSl0aHJvdyBuZXcgX24oJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihhLm1heFRva2VuQWdlKXt2YXIgaD1sLW4uaWF0LHA9Im51bWJlciI9PXR5cGVvZiBhLm1heFRva2VuQWdlP2EubWF4VG9rZW5BZ2U6dWEoYS5tYXhUb2tlbkFnZSk7aWYoaC11PnApdGhyb3cgbmV3IF9uKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGg8MC11KXRocm93IG5ldyBSbignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBufTtmdW5jdGlvbiBoYSgpe3JldHVybihoYT1hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbixhKXt2YXIgbyxpLHMsdTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixuYShyLG4sYSk7Y2FzZSAyOmlmKGk9ZS5zZW50LCEobnVsbD09PShvPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmluY2x1ZGVzKCJiNjQiKSl8fCExIT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXtlLm5leHQ9NTticmVha310aHJvdyBuZXcgVG4oIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y2FzZSA1OmlmKHM9bGEoaS5wcm90ZWN0ZWRIZWFkZXIsaS5wYXlsb2FkLGEpLHU9e3BheWxvYWQ6cyxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9LCJmdW5jdGlvbiIhPXR5cGVvZiBuKXtlLm5leHQ9OTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCh0KHt9LHUpLHt9LHtrZXk6aS5rZXl9KSk7Y2FzZSA5OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGEoZSl7c3dpdGNoKCJzdHJpbmciPT10eXBlb2YgZSYmZS5zbGljZSgwLDIpKXtjYXNlIlJTIjpjYXNlIlBTIjpyZXR1cm4iUlNBIjtjYXNlIkVTIjpyZXR1cm4iRUMiO2Nhc2UiRWQiOnJldHVybiJPS1AiO2RlZmF1bHQ6dGhyb3cgbmV3IFNuKCdVbnN1cHBvcnRlZCAiYWxnIiB2YWx1ZSBmb3IgYSBKU09OIFdlYiBLZXkgU2V0Jyl9fWZ1bmN0aW9uIGRhKGUpe3JldHVybiBCbihlKX12YXIgdmE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKG8odGhpcyxlKSx0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09PXIoZSkmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KGRhKX0odCkpdGhyb3cgbmV3IEFuKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciBuO3RoaXMuX2p3a3M9KG49dCwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZShuKTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG4pKSl9dmFyIG47cmV0dXJuIHMoZSxbe2tleToiZ2V0S2V5Iix2YWx1ZToobj1hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKHIsbil7dmFyIGEsbyxpLHMsdSxjLGYsbCxoO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYT10KHQoe30sciksbi5oZWFkZXIpLG89YS5hbGcsaT1hLmtpZCxzPXBhKG8pLHU9dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9cz09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgaSYmKHQ9aT09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1vPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW8mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG8pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksYz11WzBdLDAhPT0oZj11Lmxlbmd0aCkpe2UubmV4dD04O2JyZWFrfXRocm93IG5ldyBDbjtjYXNlIDg6aWYoMT09PWYpe2UubmV4dD0xMDticmVha310aHJvdyBuZXcgRG47Y2FzZSAxMDppZih2b2lkIDAhPT0obD10aGlzLl9jYWNoZWQuZ2V0KGMpfHx0aGlzLl9jYWNoZWQuc2V0KGMse30pLmdldChjKSlbb10pe2UubmV4dD0xODticmVha31yZXR1cm4gZS5uZXh0PTE0LFZuKHQodCh7fSxjKSx7fSx7ZXh0OiEwfSksbyk7Y2FzZSAxNDppZighKChoPWUuc2VudClpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJwdWJsaWMiIT09aC50eXBlKSl7ZS5uZXh0PTE3O2JyZWFrfXRocm93IG5ldyBBbigiSlNPTiBXZWIgS2V5IFNldCBtZW1iZXJzIG11c3QgYmUgcHVibGljIGtleXMiKTtjYXNlIDE3Omxbb109aDtjYXNlIDE4OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixsW29dKTtjYXNlIDE5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dKSxlfSgpO3ZhciBnYT17ZXhwb3J0czp7fX0sbWE9e2V4cG9ydHM6e319LHlhPXoodG4pOwovKiEgc2FmZS1idWZmZXIuIE1JVCBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KIWZ1bmN0aW9uKGUsdCl7dmFyIHI9eWEsbj1yLkJ1ZmZlcjtmdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfWZ1bmN0aW9uIG8oZSx0LHIpe3JldHVybiBuKGUsdCxyKX1uLmZyb20mJm4uYWxsb2MmJm4uYWxsb2NVbnNhZmUmJm4uYWxsb2NVbnNhZmVTbG93P2UuZXhwb3J0cz1yOihhKHIsdCksdC5CdWZmZXI9byksby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksYShuLG8pLG8uZnJvbT1mdW5jdGlvbihlLHQscil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSx0LHIpfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBhPW4oZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiByP2EuZmlsbCh0LHIpOmEuZmlsbCh0KTphLmZpbGwoMCksYX0sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuKGUpfSxvLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByLlNsb3dCdWZmZXIoZSl9fShtYSxtYS5leHBvcnRzKTt2YXIgYmE9NjU1MzYsd2E9NDI5NDk2NzI5NTt2YXIga2E9bWEuZXhwb3J0cy5CdWZmZXIsUmE9Ri5jcnlwdG98fEYubXNDcnlwdG87UmEmJlJhLmdldFJhbmRvbVZhbHVlcz9nYS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZT53YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciByPWthLmFsbG9jVW5zYWZlKGUpO2lmKGU+MClpZihlPmJhKWZvcih2YXIgbj0wO248ZTtuKz1iYSlSYS5nZXRSYW5kb21WYWx1ZXMoci5zbGljZShuLG4rYmEpKTtlbHNlIFJhLmdldFJhbmRvbVZhbHVlcyhyKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gSGUubmV4dFRpY2soKGZ1bmN0aW9uKCl7dChudWxsLHIpfSkpO3JldHVybiByfTpnYS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfTt2YXIgX2EseGE9Z2EuZXhwb3J0cyxTYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIHMoZSxbe2tleToiYmFzZTY0VVJMRW5jb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gaG4uZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX19LHtrZXk6ImJhc2U2NFVSTERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGhuLmRlY29kZShlKS50b1N0cmluZygpfX0se2tleToiaGFzaFNoYTI1NiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGdyLmZyb20oZG4oKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9fSx7a2V5OiJnZW5lcmF0ZVJhbmRvbUJ5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geGEoZSl9fSx7a2V5OiJ2ZXJpZnlKd3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxvLGkpe3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oZSwocz17a2V5czpbdF19LHZhLnByb3RvdHlwZS5nZXRLZXkuYmluZChuZXcgdmEocykpKSx7YWxnb3JpdGhtczpyLGF1ZGllbmNlOm4sY2xvY2tUb2xlcmFuY2U6aSxpc3N1ZXI6YSxzdWJqZWN0Om99KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoITApfSkpO3ZhciBzfX1dKSxlfSgpLEVhPWZ1bmN0aW9uKGUpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixhLG8saSxzLHUsYyxmLGwsaCxwLGQsdixnLG0seSx3LGsseCxTLEUsVCxBLEMsTyxQLEksVSxMLEgsTTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiByPW5ldyB0cixuPW5ldyBTYSxhPW5ldyBOKHIsbiksdC5uZXh0PTUsYS5pbml0aWFsaXplKGUpO2Nhc2UgNTppZihvPW5ldyBKKGEpLGk9YS5nZXREYXRhTGF5ZXIoKSxzPWVyLmdldEluc3RhbmNlKCksdT1mdW5jdGlvbihlKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIU9iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSxlKS5hdHRhY2hUb2tlbil7dC5uZXh0PTExO2JyZWFrfXJldHVybiB0LnQwPU9iamVjdCx0LnQxPU9iamVjdC5hc3NpZ24oe30sZS5oZWFkZXJzKSx0LnQyPSJCZWFyZXIgIix0Lm5leHQ9NyxhLmdldEFjY2Vzc1Rva2VuKCk7Y2FzZSA3OnQudDM9dC5zZW50LHQudDQ9dC50Mi5jb25jYXQuY2FsbCh0LnQyLHQudDMpLHQudDU9e0F1dGhvcml6YXRpb246dC50NH0sZS5oZWFkZXJzPXQudDAuYXNzaWduLmNhbGwodC50MCx0LnQxLHQudDUpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LHQudDA9bnVsbD09cz92b2lkIDA6cy5pbml0LCF0LnQwKXt0Lm5leHQ9MTM7YnJlYWt9cmV0dXJuIHQubmV4dD0xMyxzLmluaXQoITAsdSk7Y2FzZSAxMzpyZXR1cm4gYz1mdW5jdGlvbihlKXsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sZj1mdW5jdGlvbihlKXsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl9LGw9ZnVuY3Rpb24oZSl7KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0saD1mdW5jdGlvbih0KXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3ZhciBuLGEsbyx1LGMsZixsO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHU9ITEsYz0wLHIudDA9W10sci50MT1iLHIubmV4dD02LGkuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgNjppZihyLnQ0PW49ci5zZW50LHIudDM9bnVsbD09PXIudDQsci50Myl7ci5uZXh0PTEwO2JyZWFrfXIudDM9dm9pZCAwPT09bjtjYXNlIDEwOmlmKCFyLnQzKXtyLm5leHQ9MTQ7YnJlYWt9ci50NT12b2lkIDAsci5uZXh0PTE1O2JyZWFrO2Nhc2UgMTQ6ci50NT1uLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDE1OmlmKHIudDY9YT1yLnQ1LHIudDI9bnVsbCE9PXIudDYsIXIudDIpe3IubmV4dD0xOTticmVha31yLnQyPXZvaWQgMCE9PWE7Y2FzZSAxOTppZighci50Mil7ci5uZXh0PTIzO2JyZWFrfXIudDc9YSxyLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMzpyLnQ3PVtdO2Nhc2UgMjQ6ci50OD1yLnQ3LHIudDk9KDAsci50MSkoci50OCksci50MTA9W2UuYmFzZVVybF0sZj1yLnQwLmNvbmNhdC5jYWxsKHIudDAsci50OSxyLnQxMCk7Y2FzZSAyODppZighKGM8Zi5sZW5ndGgpKXtyLm5leHQ9MzY7YnJlYWt9aWYoIShsPWZbY10pfHwhKG51bGw9PT0obz1udWxsPT10P3ZvaWQgMDp0LnVybCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RhcnRzV2l0aChsKSkpe3IubmV4dD0zMzticmVha31yZXR1cm4gdT0hMCxyLmFicnVwdCgiYnJlYWsiLDM2KTtjYXNlIDMzOmMrKyxyLm5leHQ9Mjg7YnJlYWs7Y2FzZSAzNjppZighdSl7ci5uZXh0PTQwO2JyZWFrfXJldHVybiByLmFicnVwdCgicmV0dXJuIixzLnJlcXVlc3QodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHIoKXt2YXIgbixhLG8saTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmlmKDQwMSE9PShudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc3RhdHVzKSYmKG51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpKXtyLm5leHQ9MTI7YnJlYWt9cmV0dXJuIHIucHJldj0xLHIubmV4dD00LFMoKTtjYXNlIDQ6aT1yLnNlbnQsci5uZXh0PTEwO2JyZWFrO2Nhc2UgNzp0aHJvdyByLnByZXY9NyxyLnQwPXIuY2F0Y2goMSksbmV3IEQoIlNQQS1XT1JLRVJfQ09SRS1IUi1TRTAxIixudWxsIT09KGE9bnVsbD09PXIudDB8fHZvaWQgMD09PXIudDA/dm9pZCAwOnIudDAubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0obz1udWxsPT09ci50MHx8dm9pZCAwPT09ci50MD92b2lkIDA6ci50MC5tZXNzYWdlKSYmdm9pZCAwIT09bz9vOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIik7Y2FzZSAxMDppZighaSl7ci5uZXh0PTEyO2JyZWFrfXJldHVybiByLmFicnVwdCgicmV0dXJuIixzLnJlcXVlc3QodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDEyOnJldHVybiByLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChlKSk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHIsbnVsbCxbWzEsN11dKX0pKSl9KSkpO2Nhc2UgNDA6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KG5ldyBEKCJTUEEtV09SS0VSX0NPUkUtSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDQxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSkscil9KSkpfSxwPWZ1bmN0aW9uKHQpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiByKCl7dmFyIG4sYSxvLHUsYyxmLGwsaCxwLGQsdixnO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dT0hMCxjPVIodCksci5wcmV2PTIsYy5zKCk7Y2FzZSA0OmlmKChmPWMubigpKS5kb25lKXtyLm5leHQ9NDc7YnJlYWt9cmV0dXJuIGw9Zi52YWx1ZSxoPSExLHA9MCxyLnQwPVtdLHIudDE9YixyLm5leHQ9MTIsaS5nZXRDb25maWdEYXRhKCk7Y2FzZSAxMjppZihyLnQ0PW49ci5zZW50LHIudDM9bnVsbD09PXIudDQsci50Myl7ci5uZXh0PTE2O2JyZWFrfXIudDM9dm9pZCAwPT09bjtjYXNlIDE2OmlmKCFyLnQzKXtyLm5leHQ9MjA7YnJlYWt9ci50NT12b2lkIDAsci5uZXh0PTIxO2JyZWFrO2Nhc2UgMjA6ci50NT1uLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDIxOmlmKHIudDY9YT1yLnQ1LHIudDI9bnVsbCE9PXIudDYsIXIudDIpe3IubmV4dD0yNTticmVha31yLnQyPXZvaWQgMCE9PWE7Y2FzZSAyNTppZighci50Mil7ci5uZXh0PTI5O2JyZWFrfXIudDc9YSxyLm5leHQ9MzA7YnJlYWs7Y2FzZSAyOTpyLnQ3PVtdO2Nhc2UgMzA6ci50OD1yLnQ3LHIudDk9KDAsci50MSkoci50OCksci50MTA9W2UuYmFzZVVybF0sZD1yLnQwLmNvbmNhdC5jYWxsKHIudDAsci50OSxyLnQxMCk7Y2FzZSAzNDppZighKHA8ZC5sZW5ndGgpKXtyLm5leHQ9NDI7YnJlYWt9aWYoISh2PWRbcF0pfHwhKG51bGw9PT0obz1sLnVybCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RhcnRzV2l0aCh2KSkpe3IubmV4dD0zOTticmVha31yZXR1cm4gaD0hMCxyLmFicnVwdCgiYnJlYWsiLDQyKTtjYXNlIDM5OnArKyxyLm5leHQ9MzQ7YnJlYWs7Y2FzZSA0MjppZihoKXtyLm5leHQ9NDU7YnJlYWt9cmV0dXJuIHU9ITEsci5hYnJ1cHQoImJyZWFrIiw0Nyk7Y2FzZSA0NTpyLm5leHQ9NDticmVhaztjYXNlIDQ3OnIubmV4dD01MjticmVhaztjYXNlIDQ5OnIucHJldj00OSxyLnQxMT1yLmNhdGNoKDIpLGMuZShyLnQxMSk7Y2FzZSA1MjpyZXR1cm4gci5wcmV2PTUyLGMuZigpLHIuZmluaXNoKDUyKTtjYXNlIDU1OmlmKGc9W10sIXUpe3IubmV4dD02MTticmVha31yZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXtnLnB1c2gocy5yZXF1ZXN0KGUpKX0pKSxyLmFicnVwdCgicmV0dXJuIiwobnVsbD09cz92b2lkIDA6cy5hbGwpJiZzLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gdCgpe3ZhciByLG4sYSxvO3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoNDAxIT09KG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMpKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIHQucHJldj0xLHQubmV4dD00LFMoKTtjYXNlIDQ6bz10LnNlbnQsdC5uZXh0PTEwO2JyZWFrO2Nhc2UgNzp0aHJvdyB0LnByZXY9Nyx0LnQwPXQuY2F0Y2goMSksbmV3IEQoIlNQQS1XT1JLRVJfQ09SRS1IUkEtU0UwMSIsbnVsbCE9PShuPW51bGw9PT10LnQwfHx2b2lkIDA9PT10LnQwP3ZvaWQgMDp0LnQwLm5hbWUpJiZ2b2lkIDAhPT1uP246IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGE9bnVsbD09PXQudDB8fHZvaWQgMD09PXQudDA/dm9pZCAwOnQudDAubWVzc2FnZSkmJnZvaWQgMCE9PWE/YToiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpO2Nhc2UgMTA6aWYoIW8pe3QubmV4dD0xMjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIscy5hbGwmJnMuYWxsKGcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKSk7Y2FzZSAxMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoZSkpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1sxLDddXSl9KSkpfSkpKTtjYXNlIDYxOnJldHVybiByLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgRCgiU1BBLVdPUktFUl9DT1JFLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSkpO2Nhc2UgNjI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyLG51bGwsW1syLDQ5LDUyLDU1XV0pfSkpKX0sZD1mdW5jdGlvbigpe3MuZW5hYmxlSGFuZGxlciYmcy5lbmFibGVIYW5kbGVyKCl9LHY9ZnVuY3Rpb24oKXtzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixhLmdldEF1dGhvcml6YXRpb25VUkwoZSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixuLG8saTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBuPW5ldyBVUkwoZSksbz1udWxsIT09KHI9bi5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpKSYmdm9pZCAwIT09cj9yOiIiLHQubmV4dD00LGEuZ2V0UEtDRUNvZGUobyk7Y2FzZSA0OnJldHVybiBpPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIix7YXV0aG9yaXphdGlvblVSTDplLHBrY2U6aX0pO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LG09ZnVuY3Rpb24oKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIG8uY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0seT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcygpe3ZhciB1O3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocyl7Zm9yKDs7KXN3aXRjaChzLnByZXY9cy5uZXh0KXtjYXNlIDA6cmV0dXJuIHMubmV4dD0yLGkuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjppZih1PXMuc2VudCwhcnx8IXUuZW5hYmxlUEtDRSl7cy5uZXh0PTY7YnJlYWt9cmV0dXJuIHMubmV4dD02LGEuc2V0UEtDRUNvZGUocixudWxsIT1uP246IiIpO2Nhc2UgNjppZighZSl7cy5uZXh0PTg7YnJlYWt9cmV0dXJuIHMuYWJydXB0KCJyZXR1cm4iLGEucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbnVsbCE9dD90OiIiLG51bGwhPW4/bjoiJyIpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSkpO2Nhc2UgODpyZXR1cm4gcy5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QobmV3IEQoIlNQQS1XT1JLRVJfQ09SRS1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSkpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIHMuc3RvcCgpfX0pLHMpfSkpKX0sdz1mdW5jdGlvbigpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gby5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxlLm5leHQ9MyxhLnNpZ25PdXQoKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxrPWZ1bmN0aW9uKCl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixhLmdldFNpZ25PdXRVUkwoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIHIsbixzLHUsYyxmLGwsaDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHU9ITAsYz0hMSwhKG51bGw9PWU/dm9pZCAwOmUudG9rZW5FbmRwb2ludCkpe3QubmV4dD0zOTticmVha31yZXR1cm4gdT0hMSxmPTAsdC50MD1bXSx0LnQxPWIsdC5uZXh0PTksaS5nZXRDb25maWdEYXRhKCk7Y2FzZSA5OmlmKHQudDQ9cj10LnNlbnQsdC50Mz1udWxsPT09dC50NCx0LnQzKXt0Lm5leHQ9MTM7YnJlYWt9dC50Mz12b2lkIDA9PT1yO2Nhc2UgMTM6aWYoIXQudDMpe3QubmV4dD0xNzticmVha310LnQ1PXZvaWQgMCx0Lm5leHQ9MTg7YnJlYWs7Y2FzZSAxNzp0LnQ1PXIucmVzb3VyY2VTZXJ2ZXJVUkxzO2Nhc2UgMTg6aWYodC50Nj1uPXQudDUsdC50Mj1udWxsIT09dC50NiwhdC50Mil7dC5uZXh0PTIyO2JyZWFrfXQudDI9dm9pZCAwIT09bjtjYXNlIDIyOmlmKCF0LnQyKXt0Lm5leHQ9MjY7YnJlYWt9dC50Nz1uLHQubmV4dD0yNzticmVhaztjYXNlIDI2OnQudDc9W107Y2FzZSAyNzp0LnQ4PXQudDcsdC50OT0oMCx0LnQxKSh0LnQ4KSx0LnQxMD1bZS5iYXNlVXJsXSxsPXQudDAuY29uY2F0LmNhbGwodC50MCx0LnQ5LHQudDEwKTtjYXNlIDMxOmlmKCEoZjxsLmxlbmd0aCkpe3QubmV4dD0zOTticmVha31pZighKGg9bFtmXSl8fCEobnVsbD09PShzPWUudG9rZW5FbmRwb2ludCl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhcnRzV2l0aChoKSkpe3QubmV4dD0zNjticmVha31yZXR1cm4gYz0hMCx0LmFicnVwdCgiYnJlYWsiLDM5KTtjYXNlIDM2OmYrKyx0Lm5leHQ9MzE7YnJlYWs7Y2FzZSAzOTppZihlLnNob3VsZFJlcGxheUFmdGVyUmVmcmVzaCYmaS5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKEssSlNPTi5zdHJpbmdpZnkoZSkpLCF1JiYhYyl7dC5uZXh0PTQ0O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixhLnJlcXVlc3RDdXN0b21HcmFudChlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gcigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYoIWUucmV0dXJuc1Nlc3Npb24pe3IubmV4dD01O2JyZWFrfXJldHVybiBvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxyLmFicnVwdCgicmV0dXJuIixhLmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSA1OnJldHVybiByLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxyKX0pKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKSk7Y2FzZSA0NDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QobmV3IEQoIlNQQS1XT1JLRVJfQ09SRS1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDQ1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxTPWZ1bmN0aW9uKCl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9MyxhLnJlZnJlc2hBY2Nlc3NUb2tlbigpO2Nhc2UgMzpyZXR1cm4gZS5uZXh0PTUsTSgpO2Nhc2UgNTppZighKHQ9ZS5zZW50KSl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUubmV4dD05LHgodCk7Y2FzZSA5OnJldHVybiBvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxlLmFicnVwdCgicmV0dXJuIixhLmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSAxMzpyZXR1cm4gZS5wcmV2PTEzLGUudDA9ZS5jYXRjaCgwKSxlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChlLnQwKSk7Y2FzZSAxNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsbnVsbCxbWzAsMTNdXSl9KSkpfSxFPWZ1bmN0aW9uKCl7cmV0dXJuIGEucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX0pKX0sVD1mdW5jdGlvbigpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsYS5nZXRCYXNpY1VzZXJJbmZvKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sQT1mdW5jdGlvbigpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsYS5nZXREZWNvZGVkSURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEM9ZnVuY3Rpb24oKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuZ2V0SURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LE89ZnVuY3Rpb24oKXtyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0QWNjZXNzVG9rZW4oKX0sST1mdW5jdGlvbigpe3JldHVybiBhLmlzQXV0aGVudGljYXRlZCgpfSxVPWZ1bmN0aW9uKGUpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsaS5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxMPWZ1bmN0aW9uKGUpe3JldHVybiBfKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsYS51cGRhdGVDb25maWcoZSk7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxIPWZ1bmN0aW9uKCl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixpLmdldENvbmZpZ0RhdGEoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxNPWZ1bmN0aW9uKCl7cmV0dXJuIF8odm9pZCAwLHZvaWQgMCx2b2lkIDAscmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixpLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoSyk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsSlNPTi5wYXJzZSh0KSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LHQuYWJydXB0KCJyZXR1cm4iLHtkaXNhYmxlSHR0cEhhbmRsZXI6dixlbmFibGVIdHRwSGFuZGxlcjpkLGdldEFjY2Vzc1Rva2VuOlAsZ2V0QXV0aG9yaXphdGlvblVSTDpnLGdldEJhc2ljVXNlckluZm86VCxnZXRDb25maWdEYXRhOkgsZ2V0RGVjb2RlZElEVG9rZW46QSxnZXRJRFRva2VuOkMsZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHM6TyxnZXRTaWduT3V0VVJMOmssaHR0cFJlcXVlc3Q6aCxodHRwUmVxdWVzdEFsbDpwLGlzQXV0aGVudGljYXRlZDpJLHJlZnJlc2hBY2Nlc3NUb2tlbjpTLHJlcXVlc3RBY2Nlc3NUb2tlbjp5LHJlcXVlc3RDdXN0b21HcmFudDp4LHJldm9rZUFjY2Vzc1Rva2VuOkUsc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazpsLHNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjazpjLHNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrOmYsc2V0U2Vzc2lvblN0YXRlOlUsc2lnbk91dDp3LHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjptLHVwZGF0ZUNvbmZpZzpMfSk7Y2FzZSAzOTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sVGE9c2VsZjtUYS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhLHI9ZS5wb3J0cztyZXR1cm4gXyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gZSgpe3ZhciBuLGEsbyxpLHMsdTtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHM9clswXSx0LnR5cGU9PT1xfHxfYSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBEKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1ORjAxIiwiVGhlIHdlYiB3b3JrZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldC4iLCJUaGUgaW5pdGlhbGl6ZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbiBjYW4gYmUgY2FycmllZCBvdXQuIikpKSxlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OmUudDA9dC50eXBlLGUubmV4dD1lLnQwPT09cT83OiJnZXRfYXV0aF91cmwiPT09ZS50MD8yMjoicmVxdWVzdF9nZXRfdG9rZW4iPT09ZS50MD8yNDoiaHR0cC1yZXF1ZXN0Ij09PWUudDA/MjY6Imh0dHAtcmVxdWVzdC1hbGwiPT09ZS50MD8yODoic2lnbi1vdXQiPT09ZS50MD8zMDoicmVxdWVzdC1jdXN0b20tZ3JhbnQiPT09ZS50MD80NDoicmV2b2tlLWFjY2Vzcy10b2tlbiI9PT1lLnQwPzQ2OiJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI9PT1lLnQwPzQ4OiJnZXQtYmFzaWMtdXNlci1pbmZvIj09PWUudDA/NjI6ImdldC1kZWNvZGVkLWlkLXRva2VuIj09PWUudDA/NzY6ImdldF9pZF90b2tlbiI9PT1lLnQwPzkwOiJlbmFibGVfaHR0cF9oYW5kbGVyIj09PWUudDA/MTA0OiJkaXNhYmxlX2h0dHBfaGFuZGxlciI9PT1lLnQwPzEwNzoiaXNfYXV0aGVudGljYXRlZCI9PT1lLnQwPzExMDoiZ2V0X3NpZ25fb3V0X3VybCI9PT1lLnQwPzEyNDoicmVmcmVzaF9hY2Nlc3MtdG9rZW4iPT09ZS50MD8xMzg6InN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI9PT1lLnQwPzE1Mjoic2V0X3Nlc3Npb25fc3RhdGUiPT09ZS50MD8xNTQ6InVwZGF0ZV9jb25maWciPT09ZS50MD8xNjg6ImdldF9jb25maWdfZGF0YSI9PT1lLnQwPzE4MjoxOTY7YnJlYWs7Y2FzZSA3OnJldHVybiBlLnByZXY9Nyx1PU9iamVjdC5hc3NpZ24oe30sdC5kYXRhKSxlLm5leHQ9MTEsRWEodSk7Y2FzZSAxMTooX2E9ZS5zZW50KS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKERhKSxfYS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soQWEpLF9hLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKENhKSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxlLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODplLnByZXY9MTgsZS50MT1lLmNhdGNoKDcpLHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDEpKTtjYXNlIDIxOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAyMjpyZXR1cm4gX2EuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT10P3ZvaWQgMDp0LmRhdGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLGUuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDI0OnJldHVybiBfYS5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGE9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zZXNzaW9uU3RhdGUsbnVsbD09PShvPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucGtjZSxudWxsPT09KGk9bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdGF0ZSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMjY6cmV0dXJuIF9hLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMjg6cmV0dXJuIF9hLmh0dHBSZXF1ZXN0QWxsKHQuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksZS5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMzA6cmV0dXJuIGUucHJldj0zMCxlLnQyPXMsZS50Mz1CLGUubmV4dD0zNSxfYS5zaWduT3V0KCk7Y2FzZSAzNTplLnQ0PWUuc2VudCxlLnQ1PWUudDMuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDMsZS50NCksZS50Mi5wb3N0TWVzc2FnZS5jYWxsKGUudDIsZS50NSksZS5uZXh0PTQzO2JyZWFrO2Nhc2UgNDA6ZS5wcmV2PTQwLGUudDY9ZS5jYXRjaCgzMCkscy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50NikpO2Nhc2UgNDM6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDQ0OnJldHVybiBfYS5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSA0NjpyZXR1cm4gX2EucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbihlKXtzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3MucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSA0ODpyZXR1cm4gZS5wcmV2PTQ4LGUudDc9cyxlLnQ4PUIsZS5uZXh0PTUzLF9hLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7Y2FzZSA1MzplLnQ5PWUuc2VudCxlLnQxMD1lLnQ4LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQ4LGUudDkpLGUudDcucG9zdE1lc3NhZ2UuY2FsbChlLnQ3LGUudDEwKSxlLm5leHQ9NjE7YnJlYWs7Y2FzZSA1ODplLnByZXY9NTgsZS50MTE9ZS5jYXRjaCg0OCkscy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MTEpKTtjYXNlIDYxOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSA2MjpyZXR1cm4gZS5wcmV2PTYyLGUudDEyPXMsZS50MTM9QixlLm5leHQ9NjcsX2EuZ2V0QmFzaWNVc2VySW5mbygpO2Nhc2UgNjc6ZS50MTQ9ZS5zZW50LGUudDE1PWUudDEzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQxMyxlLnQxNCksZS50MTIucG9zdE1lc3NhZ2UuY2FsbChlLnQxMixlLnQxNSksZS5uZXh0PTc1O2JyZWFrO2Nhc2UgNzI6ZS5wcmV2PTcyLGUudDE2PWUuY2F0Y2goNjIpLHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDE2KSk7Y2FzZSA3NTpyZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgNzY6cmV0dXJuIGUucHJldj03NixlLnQxNz1zLGUudDE4PUIsZS5uZXh0PTgxLF9hLmdldERlY29kZWRJRFRva2VuKCk7Y2FzZSA4MTplLnQxOT1lLnNlbnQsZS50MjA9ZS50MTguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDE4LGUudDE5KSxlLnQxNy5wb3N0TWVzc2FnZS5jYWxsKGUudDE3LGUudDIwKSxlLm5leHQ9ODk7YnJlYWs7Y2FzZSA4NjplLnByZXY9ODYsZS50MjE9ZS5jYXRjaCg3Nikscy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50MjEpKTtjYXNlIDg5OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSA5MDpyZXR1cm4gZS5wcmV2PTkwLGUudDIyPXMsZS50MjM9QixlLm5leHQ9OTUsX2EuZ2V0SURUb2tlbigpO2Nhc2UgOTU6ZS50MjQ9ZS5zZW50LGUudDI1PWUudDIzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQyMyxlLnQyNCksZS50MjIucG9zdE1lc3NhZ2UuY2FsbChlLnQyMixlLnQyNSksZS5uZXh0PTEwMzticmVhaztjYXNlIDEwMDplLnByZXY9MTAwLGUudDI2PWUuY2F0Y2goOTApLHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDI2KSk7Y2FzZSAxMDM6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDEwNDpyZXR1cm4gX2EuZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxMDc6cmV0dXJuIF9hLmRpc2FibGVIdHRwSGFuZGxlcigpLHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpLGUuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDExMDpyZXR1cm4gZS5wcmV2PTExMCxlLnQyNz1zLGUudDI4PUIsZS5uZXh0PTExNSxfYS5pc0F1dGhlbnRpY2F0ZWQoKTtjYXNlIDExNTplLnQyOT1lLnNlbnQsZS50MzA9ZS50MjguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKGUudDI4LGUudDI5KSxlLnQyNy5wb3N0TWVzc2FnZS5jYWxsKGUudDI3LGUudDMwKSxlLm5leHQ9MTIzO2JyZWFrO2Nhc2UgMTIwOmUucHJldj0xMjAsZS50MzE9ZS5jYXRjaCgxMTApLHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUudDMxKSk7Y2FzZSAxMjM6cmV0dXJuIGUuYWJydXB0KCJicmVhayIsMTk3KTtjYXNlIDEyNDpyZXR1cm4gZS5wcmV2PTEyNCxlLnQzMj1zLGUudDMzPUIsZS5uZXh0PTEyOSxfYS5nZXRTaWduT3V0VVJMKCk7Y2FzZSAxMjk6ZS50MzQ9ZS5zZW50LGUudDM1PWUudDMzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQzMyxlLnQzNCksZS50MzIucG9zdE1lc3NhZ2UuY2FsbChlLnQzMixlLnQzNSksZS5uZXh0PTEzNzticmVhaztjYXNlIDEzNDplLnByZXY9MTM0LGUudDM2PWUuY2F0Y2goMTI0KSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQzNikpO2Nhc2UgMTM3OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxMzg6cmV0dXJuIGUucHJldj0xMzgsZS50Mzc9cyxlLnQzOD1CLGUubmV4dD0xNDMsX2EucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAxNDM6ZS50Mzk9ZS5zZW50LGUudDQwPWUudDM4LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQzOCxlLnQzOSksZS50MzcucG9zdE1lc3NhZ2UuY2FsbChlLnQzNyxlLnQ0MCksZS5uZXh0PTE1MTticmVhaztjYXNlIDE0ODplLnByZXY9MTQ4LGUudDQxPWUuY2F0Y2goMTM4KSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQ0MSkpO2Nhc2UgMTUxOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxNTI6dHJ5e3MucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKF9hLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfXJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxNTQ6cmV0dXJuIGUucHJldj0xNTQsZS50NDI9cyxlLnQ0Mz1CLGUubmV4dD0xNTksX2Euc2V0U2Vzc2lvblN0YXRlKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSk7Y2FzZSAxNTk6ZS50NDQ9ZS5zZW50LGUudDQ1PWUudDQzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQ0MyxlLnQ0NCksZS50NDIucG9zdE1lc3NhZ2UuY2FsbChlLnQ0MixlLnQ0NSksZS5uZXh0PTE2NzticmVhaztjYXNlIDE2NDplLnByZXY9MTY0LGUudDQ2PWUuY2F0Y2goMTU0KSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQ0NikpO2Nhc2UgMTY3OnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxNjg6cmV0dXJuIGUucHJldj0xNjgsZS50NDc9cyxlLnQ0OD1CLGUubmV4dD0xNzMsX2EudXBkYXRlQ29uZmlnKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSk7Y2FzZSAxNzM6ZS50NDk9ZS5zZW50LGUudDUwPWUudDQ4LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChlLnQ0OCxlLnQ0OSksZS50NDcucG9zdE1lc3NhZ2UuY2FsbChlLnQ0NyxlLnQ1MCksZS5uZXh0PTE4MTticmVhaztjYXNlIDE3ODplLnByZXY9MTc4LGUudDUxPWUuY2F0Y2goMTY4KSxzLnBvc3RNZXNzYWdlKEIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlLnQ1MSkpO2Nhc2UgMTgxOnJldHVybiBlLmFicnVwdCgiYnJlYWsiLDE5Nyk7Y2FzZSAxODI6cmV0dXJuIGUucHJldj0xODIsZS50NTI9cyxlLnQ1Mz1CLGUubmV4dD0xODcsX2EuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMTg3OmUudDU0PWUuc2VudCxlLnQ1NT1lLnQ1My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoZS50NTMsZS50NTQpLGUudDUyLnBvc3RNZXNzYWdlLmNhbGwoZS50NTIsZS50NTUpLGUubmV4dD0xOTU7YnJlYWs7Y2FzZSAxOTI6ZS5wcmV2PTE5MixlLnQ1Nj1lLmNhdGNoKDE4Mikscy5wb3N0TWVzc2FnZShCLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZS50NTYpKTtjYXNlIDE5NTpyZXR1cm4gZS5hYnJ1cHQoImJyZWFrIiwxOTcpO2Nhc2UgMTk2Om51bGw9PXN8fHMucG9zdE1lc3NhZ2UoQi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBEKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsIlRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICIuY29uY2F0KHQudHlwZSwiLCBpcyBpbnZhbGlkLiIpKSkpO2Nhc2UgMTk3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNywxOF0sWzMwLDQwXSxbNDgsNThdLFs2Miw3Ml0sWzc2LDg2XSxbOTAsMTAwXSxbMTEwLDEyMF0sWzEyNCwxMzRdLFsxMzgsMTQ4XSxbMTU0LDE2NF0sWzE2OCwxNzhdLFsxODIsMTkyXV0pfSkpKX07dmFyIEFhPWZ1bmN0aW9uKCl7VGEucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LENhPWZ1bmN0aW9uKGUpe1RhLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxEYT1mdW5jdGlvbigpe1RhLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX07cmV0dXJue319KCk7Cgo=",RP=null,SP=!1,function(e){return YP=YP||CP(vP,RP,SP),new Worker(YP,e)}),KP=function(t){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i,c,o,a,l,u,d,s,m,Z,h,b,p,I,g,y,X,f,G,V,W,C,v,R,S,Y,J,K,N,L,H,x,k,U;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return c=null!==(r=null==t?void 0:t.requestTimeout)&&void 0!==r?r:6e4,o=!0,a=!1,n.next=5,jB((function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={type:uB},e.prev=1,e.next=4,d(t);case 4:return n=e.sent,e.abrupt("return",n);case 8:return e.prev=8,e.t0=e.catch(1),e.abrupt("return",zB.getSignOutURL());case 11:case"end":return e.stop()}}),e,null,[[1,8]])})))}),t.storage,(function(e){return I(e)}));case 5:return l=n.sent,u=new JP,d=function(e){var t=new MessageChannel;return u.postMessage(e,[t.port2]),new Promise((function(e,n){var r=setTimeout((function(){n(new $T("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=function(t){var i=t.data;if(clearTimeout(r),null==i?void 0:i.success){var c=(null==i?void 0:i.data)?JSON.parse(null==i?void 0:i.data):null;(null==i?void 0:i.blob)&&(c.data=null==i?void 0:i.blob),e(c)}else n(i.error?JSON.parse(i.error):null)}}))},s=function(e){return d({data:e,type:"request-custom-grant"}).then((function(t){return e.preventSignOutURLUpdate&&(a=!0),Promise.resolve(t)})).catch((function(e){return Promise.reject(e)}))},m=function(e){return d({data:e,type:"http-request"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o){t.next=5;break}if("function"!=typeof i.requestErrorCallback){t.next=4;break}return t.next=4,i.requestErrorCallback(e);case 4:"function"==typeof i.requestFinishCallback&&i.requestFinishCallback();case 5:return t.abrupt("return",Promise.reject(e));case 6:case"end":return t.stop()}}),t)})))}))},Z=function(e){return d({data:e,type:"http-request-all"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o){t.next=5;break}if("function"!=typeof i.requestErrorCallback){t.next=4;break}return t.next=4,i.requestErrorCallback(e);case 4:"function"==typeof i.requestFinishCallback&&i.requestFinishCallback();case 5:return t.abrupt("return",Promise.reject(e));case 6:case"end":return t.stop()}}),t)})))}))},h=function(){return d({type:"enable_http_handler"}).then((function(){return o=!0,Promise.resolve(!0)})).catch((function(e){return Promise.reject(e)}))},b=function(){return d({type:"disable_http_handler"}).then((function(){return o=!1,Promise.resolve(!0)})).catch((function(e){return Promise.reject(e)}))},p=function(){return i||(i={requestErrorCallback:function(){return Promise.resolve()},requestFinishCallback:function(){return null},requestStartCallback:function(){return null},requestSuccessCallback:function(){return null}}),u.onmessage=function(e){var t=e.data;switch(t.type){case"request-finish":(null==i?void 0:i.requestFinishCallback)&&(null==i||i.requestFinishCallback());break;case"request-start":(null==i?void 0:i.requestStartCallback)&&(null==i||i.requestStartCallback());break;case"request-success":(null==i?void 0:i.requestSuccessCallback)&&(null==i||i.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},d({data:t,type:"init"}).then((function(){return Promise.resolve(!0)})).catch((function(e){return Promise.reject(e)}))},I=function(e){return d({data:e,type:"set_session_state"})},g=function(){return d({type:"start_auto_refresh_token"})},y=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,v();case 2:return i=e.sent,e.next=5,R();case 5:c=e.sent,l.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",(function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,S();case 2:return e.abrupt("return",e.sent.sessionState);case 3:case"end":return e.stop()}}),e)})))}),null!==(n=c.checkSessionInterval)&&void 0!==n?n:3,null!==(r=c.sessionRefreshInterval)&&void 0!==r?r:300,c.signInRedirectURL,(function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,f(e);case 2:return t.abrupt("return",t.sent.authorizationURL);case 3:case"end":return t.stop()}}),t)})))}));case 7:case"end":return e.stop()}}),e)})))},X=function(){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n,r,i,c,o,a,u,s,m,Z;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,R();case 2:if(r=e.sent,!zB.isInitializedSilentSignIn()){e.next=7;break}return e.next=6,l.receivePromptNoneResponse();case 6:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 7:return i=document.getElementById(KB),c=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(NB),o={data:{prompt:"none",state:HB},type:dB},e.prev=10,e.next=13,d(o);case 13:a=e.sent,u=eB.extractPKCEKeyFromStateParam(null!==(n=new URL(a.authorizationURL).searchParams.get(qT))&&void 0!==n?n:""),a.pkce&&r.enablePKCE&&zB.setPKCE(u,a.pkce),s=a.authorizationURL,(m=new URL(s)).searchParams.set("response_mode","query"),Z=m.toString(),c.src=Z,e.next=26;break;case 23:return e.prev=23,e.t0=e.catch(10),e.abrupt("return",Promise.reject(e.t0));case 26:return e.abrupt("return",new Promise((function(e,t){var n=setTimeout((function(){e(!1)}),1e4);window.addEventListener("message",(function r(i){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function c(){var o,a,l,u,d;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:(null==(d=i.data)?void 0:d.type)==mB&&(window.removeEventListener("message",r),clearTimeout(n),e(!1)),(null==d?void 0:d.type)==sB&&(null===(o=null==d?void 0:d.data)||void 0===o?void 0:o.code)&&G(null===(a=null==d?void 0:d.data)||void 0===a?void 0:a.code,null===(l=null==d?void 0:d.data)||void 0===l?void 0:l.sessionState,null===(u=null==d?void 0:d.data)||void 0===u?void 0:u.state).then((function(t){window.removeEventListener("message",r),e(t)})).catch((function(e){window.removeEventListener("message",r),t(e)})).finally((function(){clearTimeout(n)}));case 3:case"end":return c.stop()}}),c)})))}))})));case 27:case"end":return e.stop()}}),e,null,[[10,23]])})))},f=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,R();case 2:return n=t.sent,r={data:e,type:dB},t.abrupt("return",d(r).then((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.pkce&&n.enablePKCE&&(i=eB.extractPKCEKeyFromStateParam(null!==(r=new URL(e.authorizationURL).searchParams.get(qT))&&void 0!==r?r:""),zB.setPKCE(i,e.pkce)),t.abrupt("return",Promise.resolve(e));case 2:case"end":return t.stop()}}),t)})))})));case 5:case"end":return t.stop()}}),t)})))},G=function(e,t,n){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,R();case 2:return i=r.sent,c=eB.extractPKCEKeyFromStateParam(n),o={data:{code:e,pkce:i.enablePKCE?zB.getPKCE(c):void 0,sessionState:t,state:n},type:"request_get_token"},i.enablePKCE&&zB.removePKCE(c),r.abrupt("return",d(o).then((function(e){return d({type:"get_sign_out_url"}).then((function(t){return zB.setSignOutURL(t),i.enableOIDCSessionManagement&&y(),g(),Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))})).catch((function(e){return Promise.reject(e)})));case 7:case"end":return r.stop()}}),r)})))},V=function(t,n,r,i){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function c(){var o,a,u,d,s,m,Z,h,b,p;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,R();case 2:return d=c.sent,c.next=5,l.receivePromptNoneResponse((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",I(e));case 1:case"end":return t.stop()}}),t)})))}));case 5:if(!c.sent){c.next=8;break}return c.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 8:if(s=new URL(window.location.href).searchParams.get(UB),m=new URL(window.location.href).searchParams.get(AB),!s){c.next=16;break}throw(Z=new URL(window.location.href)).searchParams.delete(UB),Z.searchParams.delete(AB),history.pushState(null,document.title,Z.toString()),new $T("SPA-WEB_WORKER_CLIENT-SI-SE01",s,null!=m?m:"");case 16:return c.next=18,K();case 18:if(!c.sent){c.next=23;break}return c.next=21,g();case 21:return d.enableOIDCSessionManagement&&y(),c.abrupt("return",S());case 23:if((null==d?void 0:d.responseMode)===e.ResponseMode.formPost&&n?(h=n,b=null!=r?r:"",p=null!=i?i:""):(h=null!==(o=new URL(window.location.href).searchParams.get(ET))&&void 0!==o?o:"",b=null!==(a=new URL(window.location.href).searchParams.get(DT))&&void 0!==a?a:"",p=null!==(u=new URL(window.location.href).searchParams.get(qT))&&void 0!==u?u:"",zB.removeAuthorizationCode()),!h||!p){c.next=26;break}return c.abrupt("return",G(h,b,p));case 26:return c.abrupt("return",f(t).then((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return location.href=e.authorizationURL,t.next=3,zB.waitTillPageRedirect();case 3:return t.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 4:case"end":return t.stop()}}),t)})))})).catch((function(e){return Promise.reject(e)})));case 27:case"end":return c.stop()}}),c)})))},W=function(){return K().then((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e||a){t.next=5;break}return n={type:uB},t.abrupt("return",d(n).then((function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return window.location.href=e,t.next=3,zB.waitTillPageRedirect();case 3:return t.abrupt("return",Promise.resolve(!0));case 4:case"end":return t.stop()}}),t)})))})).catch((function(e){return Promise.reject(e)})));case 5:return window.location.href=zB.getSignOutURL(),t.next=8,zB.waitTillPageRedirect();case 8:return t.abrupt("return",Promise.resolve(!0));case 9:case"end":return t.stop()}}),t)})))})).catch((function(e){return Promise.reject(e)}))},C=function(){return d({type:"revoke-access-token"}).then((function(e){return l.reset(),Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},v=function(){return d({type:"get-oidc-service-endpoints"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},R=function(){return d({type:"get_config_data"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},S=function(){return d({type:"get-basic-user-info"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},Y=function(){return d({type:"get-decoded-id-token"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},J=function(){return d({type:"get_id_token"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},K=function(){return d({type:"is_authenticated"}).then((function(e){return Promise.resolve(e)})).catch((function(e){return Promise.reject(e)}))},N=function(){return d({type:"refresh_access-token"})},L=function(e){e&&"function"==typeof e&&(i.requestSuccessCallback=e)},H=function(e){e&&"function"==typeof e&&(i.requestErrorCallback=e)},x=function(e){e&&"function"==typeof e&&(i.requestStartCallback=e)},k=function(e){e&&"function"==typeof e&&(i.requestFinishCallback=e)},U=function(e){return zT(void 0,void 0,void 0,regeneratorRuntime.mark((function t(){var n,r,i,c;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,R();case 2:return n=t.sent,r=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),e),c={data:i,type:"update_config"},t.next=8,d(c);case 8:i.enableOIDCSessionManagement&&r&&(l.reset(),y());case 9:case"end":return t.stop()}}),t)})))},n.abrupt("return",{disableHttpHandler:b,enableHttpHandler:h,getBasicUserInfo:S,getDecodedIDToken:Y,getIDToken:J,getOIDCServiceEndpoints:v,httpRequest:m,httpRequestAll:Z,initialize:p,isAuthenticated:K,refreshAccessToken:N,requestCustomGrant:s,revokeAccessToken:C,setHttpRequestErrorCallback:H,setHttpRequestFinishCallback:k,setHttpRequestStartCallback:x,setHttpRequestSuccessCallback:L,signIn:V,signOut:W,trySignInSilently:X,updateConfig:U});case 36:case"end":return n.stop()}}),n)})))},NP={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage},LP="primaryInstance",HP=function(){function t(e){u(this,t),this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=function(){return null},this._onSignOutCallback=function(){return null},this._onSignOutFailedCallback=function(){return null},this._onEndUserSession=function(){return null},this._onInitialize=function(){return null},this._onCustomGrant=new Map,this._instanceID=e}return s(t,[{key:"_isInitialized",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function e(){var t,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._startedInitialize){e.next=2;break}return e.abrupt("return",!1);case 2:t=0,n=function(){return new Promise((function(e){return setTimeout(e,1)}))};case 4:if(this._initialized){e.next=11;break}return 1e4===t&&console.warn("It is taking longer than usual for the object to be initialized"),e.next=8,n();case 8:t++,e.next=4;break;case 11:return e.abrupt("return",!0);case 12:case"end":return e.stop()}}),e,this)})))}},{key:"_validateMethod",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:if(e.sent){e.next=4;break}return e.abrupt("return",Promise.reject());case 4:return e.next=6,this.isAuthenticated();case 6:if(e.sent){e.next=8;break}return e.abrupt("return",Promise.reject());case 8:return e.abrupt("return",!0);case 9:case"end":return e.stop()}}),e,this)})))}
453
+ !function(t,e){var n=PP,i=n.Buffer;function r(t,e){for(var n in t)e[n]=t[n]}function c(t,e,n){return i(t,e,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(r(n,e),e.Buffer=c),c.prototype=Object.create(i.prototype),r(i,c),c.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,n)},c.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var r=i(t);return void 0!==e?"string"==typeof n?r.fill(e,n):r.fill(e):r.fill(0),r},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}}(QP,QP.exports);var EP=65536,DP=4294967295;var OP=QP.exports.Buffer,_P=e.crypto||e.msCrypto;_P&&_P.getRandomValues?MP.exports=function(t,e){if(t>DP)throw new RangeError("requested too many random bytes");var n=OP.allocUnsafe(t);if(t>0)if(t>EP)for(var i=0;i<t;i+=EP)_P.getRandomValues(n.slice(i,i+EP));else _P.getRandomValues(n);if("function"==typeof e)return sj.nextTick((function(){e(null,n)}));return n}:MP.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var qP=MP.exports,$P=function(){function t(){d(this,t)}return m(t,[{key:"base64URLEncode",value:function(t){return AQ.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}},{key:"base64URLDecode",value:function(t){return AQ.decode(t).toString()}},{key:"hashSha256",value:function(t){return PM.from(zQ((new TextEncoder).encode(t)))}},{key:"generateRandomBytes",value:function(t){return qP(t)}},{key:"verifyJwt",value:function(t,e,n,i,r,c,o){return function(t,e,n){return AP.apply(this,arguments)}(t,(a={keys:[e]},jP.prototype.getKey.bind(new jP(a))),{algorithms:n,audience:i,clockTolerance:o,issuer:r,subject:c}).then((function(){return Promise.resolve(!0)}));var a}}]),t}(),tE=function(e){switch(e){case t.Storage.LocalStorage:return new KM;case t.Storage.SessionStorage:return new LM;case t.Storage.BrowserMemory:return new NM;default:return new LM}},eE=function(e,n){return jA(void 0,void 0,void 0,o().mark((function i(){var r,c,a,l,u,d,s,m,h,b,p,Z,I,y,g,X,G,f,V,W,v,C,S,Y,R,K,N,L,J,x,H,k,U,T,w,F,A,B,z,j;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return c=tE(e.storage),a=new $P,l=new aB(c,a),i.next=5,l.initialize(e);case 5:return u=new yz(l),d=l.getDataLayer(),i.next=9,Gz((function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.signOut());case 1:case"end":return t.stop()}}),t)})))}),null!==(r=e.storage)&&void 0!==r?r:t.Storage.SessionStorage,(function(t){return d.setSessionDataParameter(OA,null!=t?t:"")}));case 9:if(s=i.sent,m=n(l,u),h=!1,b=RM.getInstance(),p=!0,i.t0=null==b?void 0:b.init,!i.t0){i.next=18;break}return i.next=18,b.init(!0,m.attachToken);case 18:return y=function(t){m.setHttpRequestStartCallback(b,t)},g=function(t){m.setHttpRequestSuccessCallback(b,t)},X=function(t){m.setHttpRequestFinishCallback(b,t),I=t},G=function(t){Z=t},f=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.httpRequest(b,t,p,Z,I);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},V=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.httpRequestAll(t,b,p,Z,I);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},W=function(){return b},v=function(){return m.enableHttpHandler(b),p=!0,!0},C=function(){return m.disableHttpHandler(b),p=!1,!0},S=function(){return jA(void 0,void 0,void 0,o().mark((function t(){var e,n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.getOIDCServiceEndpoints();case 2:return e=t.sent,t.next=5,d.getConfigData();case 5:n=t.sent,m.initializeSessionManger(n,e,(function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.getBasicUserInfo();case 2:return t.abrupt("return",t.sent.sessionState);case 3:case"end":return t.stop()}}),t)})))}),(function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",l.getAuthorizationURL(t));case 1:case"end":return e.stop()}}),e)})))}),s);case 7:case"end":return t.stop()}}),t)})))},Y=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,s.receivePromptNoneResponse((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d.setSessionDataParameter(OA,null!=t?t:"");case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))}));case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},R=function(n,i,r,c){return jA(void 0,void 0,void 0,o().mark((function a(){var u,d,s,h,b,p,Z;return o().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,m.handleSignIn(Y,S);case 2:if(!(h=a.sent)){a.next=7;break}return a.abrupt("return",h);case 7:if((null==e?void 0:e.responseMode)===t.ResponseMode.formPost&&i?(b=i,p=null!=r?r:"",Z=null!=c?c:""):(b=null!==(u=new URL(window.location.href).searchParams.get(DA))&&void 0!==u?u:"",p=null!==(d=new URL(window.location.href).searchParams.get(OA))&&void 0!==d?d:"",Z=null!==(s=new URL(window.location.href).searchParams.get($A))&&void 0!==s?s:"",Xz.removeAuthorizationCode()),!b||!Z){a.next=10;break}return a.abrupt("return",H(b,p,Z));case 10:return a.abrupt("return",l.getAuthorizationURL(n).then((function(n){return jA(void 0,void 0,void 0,o().mark((function i(){var r;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(e.storage!==t.Storage.BrowserMemory||!e.enablePKCE){i.next=8;break}return r=eB.extractPKCEKeyFromStateParam(Z),i.t0=Xz,i.t1=r,i.next=6,l.getPKCECode(Z);case 6:i.t2=i.sent,i.t0.setPKCE.call(i.t0,i.t1,i.t2);case 8:return location.href=n,i.next=11,Xz.waitTillPageRedirect();case 11:return i.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 12:case"end":return i.stop()}}),i)})))})));case 11:case"end":return a.stop()}}),a)})))},K=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,l.isAuthenticated();case 2:if(t.t0=t.sent,!t.t0){t.next=5;break}t.t0=!h;case 5:if(!t.t0){t.next=11;break}return t.next=8,l.signOut();case 8:location.href=t.sent,t.next=18;break;case 11:return location.href=Xz.getSignOutURL(),t.next=14,d.removeOIDCProviderMetaData();case 14:return t.next=16,d.removeTemporaryData();case 16:return t.next=18,d.removeSessionData();case 18:return u.clearRefreshTokenTimeout(),t.next=21,Xz.waitTillPageRedirect();case 21:return t.abrupt("return",!0);case 22:case"end":return t.stop()}}),t)})))},N=function(t){t.preventSignOutURLUpdate&&(h=!0)},L=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.requestCustomGrant(t,N);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},J=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,m.refreshAccessToken(N);case 3:return t.abrupt("return",t.sent);case 6:return t.prev=6,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 9:case"end":return t.stop()}}),t,null,[[0,6]])})))},x=function(){return l.revokeAccessToken().then((function(){return s.reset(),u.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},H=function(t,e,n){return jA(void 0,void 0,void 0,o().mark((function i(){return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,m.requestAccessToken(t,e,S,void 0,n);case 2:return i.abrupt("return",i.sent);case 3:case"end":return i.stop()}}),i)})))},k=function(){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i,r,c,a;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d.getConfigData();case 2:return n=e.sent,e.next=5,l.getAuthorizationURL({prompt:"none",state:uz});case 5:if(i=e.sent,(r=new URL(i)).searchParams.set("response_mode","query"),c=r.toString(),n.storage!==t.Storage.BrowserMemory||!n.enablePKCE){e.next=17;break}return a=r.searchParams.get($A),e.t0=Xz,e.t1=eB.extractPKCEKeyFromStateParam(null!=a?a:""),e.next=15,l.getPKCECode(null!=a?a:"");case 15:e.t2=e.sent,e.t0.setPKCE.call(e.t0,e.t1,e.t2);case 17:return e.abrupt("return",c);case 18:case"end":return e.stop()}}),e)})))},U=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,m.trySignInSilently(k,H,s);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},T=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getBasicUserInfo());case 1:case"end":return t.stop()}}),t)})))},w=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getDecodedIDToken());case 1:case"end":return t.stop()}}),t)})))},F=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getIDToken());case 1:case"end":return t.stop()}}),t)})))},A=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t)})))},B=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getAccessToken());case 1:case"end":return t.stop()}}),t)})))},z=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.isAuthenticated());case 1:case"end":return t.stop()}}),t)})))},j=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i,r;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d.getConfigData();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),r=Object.assign(Object.assign({},n),t),e.next=7,l.updateConfig(r);case 7:r.enableOIDCSessionManagement&&i&&(s.reset(),S());case 8:case"end":return e.stop()}}),e)})))},i.abrupt("return",{disableHttpHandler:C,enableHttpHandler:v,getAccessToken:B,getBasicUserInfo:T,getDecodedIDToken:w,getHttpClient:W,getIDToken:F,getOIDCServiceEndpoints:A,httpRequest:f,httpRequestAll:V,isAuthenticated:z,refreshAccessToken:J,requestCustomGrant:L,revokeAccessToken:x,setHttpRequestErrorCallback:G,setHttpRequestFinishCallback:X,setHttpRequestStartCallback:y,setHttpRequestSuccessCallback:g,signIn:R,signOut:K,trySignInSilently:U,updateConfig:j});case 46:case"end":return i.stop()}}),i)})))},nE=function(e){switch(e){case t.Storage.LocalStorage:return new KM;case t.Storage.SessionStorage:return new LM;case t.Storage.BrowserMemory:return new NM;default:return new LM}},iE=function(e,n,i){return jA(void 0,void 0,void 0,o().mark((function r(){var c,a,l,u,d,s,m,h,b,p,Z,I,y,g,X,G,f,V,W,v,C,S,Y,R,K,N,L,J,x,H,k,U,T,w,F,A,B,z,j,M,Q,P,E;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return l=null!==(c=null==e?void 0:e.requestTimeout)&&void 0!==c?c:6e4,u=!0,d=!1,s=nE(e.storage),m=new $P,h=new aB(s,m),r.next=8,h.initialize(e);case 8:return b=new yz(h),r.next=11,Gz((function(){return jA(void 0,void 0,void 0,o().mark((function t(){var e,n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={type:IB},t.prev=1,t.next=4,y(e);case 4:return n=t.sent,t.abrupt("return",n);case 8:return t.prev=8,t.t0=t.catch(1),t.abrupt("return",Xz.getSignOutURL());case 11:case"end":return t.stop()}}),t,null,[[1,8]])})))}),e.storage,(function(t){return v(t)}));case 11:return p=r.sent,Z=i(h,b),I=new n,y=function(t){var e=new MessageChannel;return I.postMessage(t,[e.port2]),new Promise((function(t,n){var i=setTimeout((function(){n(new tB("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+l/1e3+" since dispatching the request"))}),l);return e.port1.onmessage=function(e){var r=e.data;if(clearTimeout(i),null==r?void 0:r.success){var c=(null==r?void 0:r.data)?JSON.parse(null==r?void 0:r.data):null;(null==r?void 0:r.blob)&&(c.data=null==r?void 0:r.blob),t(c)}else n(r.error?JSON.parse(r.error):null)}}))},g=function(t){return y({data:t,type:XB}).then((function(e){return t.preventSignOutURLUpdate&&(d=!0),Promise.resolve(e)})).catch((function(t){return Promise.reject(t)}))},X=function(t){return y({data:t,type:yB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u){e.next=5;break}if("function"!=typeof a.requestErrorCallback){e.next=4;break}return e.next=4,a.requestErrorCallback(t);case 4:"function"==typeof a.requestFinishCallback&&a.requestFinishCallback();case 5:return e.abrupt("return",Promise.reject(t));case 6:case"end":return e.stop()}}),e)})))}))},G=function(t){return y({data:t,type:gB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u){e.next=5;break}if("function"!=typeof a.requestErrorCallback){e.next=4;break}return e.next=4,a.requestErrorCallback(t);case 4:"function"==typeof a.requestFinishCallback&&a.requestFinishCallback();case 5:return e.abrupt("return",Promise.reject(t));case 6:case"end":return e.stop()}}),e)})))}))},f=function(){return y({type:YB}).then((function(){return u=!0,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},V=function(){return y({type:RB}).then((function(){return u=!1,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},W=function(){return a||(a={requestErrorCallback:function(){return Promise.resolve()},requestFinishCallback:function(){return null},requestStartCallback:function(){return null},requestSuccessCallback:function(){return null}}),I.onmessage=function(t){var e=t.data;switch(e.type){case WB:(null==a?void 0:a.requestFinishCallback)&&(null==a||a.requestFinishCallback());break;case fB:(null==a?void 0:a.requestStartCallback)&&(null==a||a.requestStartCallback());break;case VB:(null==a?void 0:a.requestSuccessCallback)&&(null==a||a.requestSuccessCallback(e.data?JSON.parse(e.data):null))}},y({data:e,type:ZB}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},v=function(t){return y({data:t,type:HB})},C=function(){return y({type:kB})},S=function(){return jA(void 0,void 0,void 0,o().mark((function t(){var e,n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,U();case 2:return e=t.sent,t.next=5,T();case 5:n=t.sent,Z.initializeSessionManger(n,e,(function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,w();case 2:return t.abrupt("return",t.sent.sessionState);case 3:case"end":return t.stop()}}),t)})))}),(function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,K(t);case 2:return e.abrupt("return",e.sent.authorizationURL);case 3:case"end":return e.stop()}}),e)})))}),p);case 7:case"end":return t.stop()}}),t)})))},Y=function(){return jA(void 0,void 0,void 0,o().mark((function t(){var e,n,i,r,c,a,l,u;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T();case 2:return n=t.sent,i={data:{prompt:"none",state:uz},type:KB},t.next=6,y(i);case 6:return r=t.sent,c=eB.extractPKCEKeyFromStateParam(null!==(e=new URL(r.authorizationURL).searchParams.get($A))&&void 0!==e?e:""),r.pkce&&n.enablePKCE&&Xz.setPKCE(c,r.pkce),a=r.authorizationURL,(l=new URL(a)).searchParams.set("response_mode","query"),u=l.toString(),t.abrupt("return",u);case 14:case"end":return t.stop()}}),t)})))},R=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Z.trySignInSilently(Y,N,p);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},K=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T();case 2:return n=e.sent,i={data:t,type:KB},e.abrupt("return",y(i).then((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var i,r;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.pkce&&n.enablePKCE&&(r=eB.extractPKCEKeyFromStateParam(null!==(i=new URL(t.authorizationURL).searchParams.get($A))&&void 0!==i?i:""),Xz.setPKCE(r,t.pkce)),e.abrupt("return",Promise.resolve(t));case 2:case"end":return e.stop()}}),e)})))})));case 5:case"end":return e.stop()}}),e)})))},N=function(t,e,n){return jA(void 0,void 0,void 0,o().mark((function i(){var r,c,a;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,T();case 2:return r=i.sent,c=eB.extractPKCEKeyFromStateParam(n),a={data:{code:t,pkce:r.enablePKCE?Xz.getPKCE(c):void 0,sessionState:e,state:n},type:NB},r.enablePKCE&&Xz.removePKCE(c),i.abrupt("return",y(a).then((function(t){return y({type:JB}).then((function(e){return Xz.setSignOutURL(e),r.enableOIDCSessionManagement&&S(),C(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(t)})));case 7:case"end":return i.stop()}}),i)})))},L=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p.receivePromptNoneResponse((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",v(t));case 1:case"end":return e.stop()}}),e)})))}));case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},J=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,B();case 2:if(!t.sent){t.next=7;break}return t.next=5,C();case 5:return e.enableOIDCSessionManagement&&S(),t.abrupt("return",w());case 7:case"end":return t.stop()}}),t)})))},x=function(n,i,r,c){return jA(void 0,void 0,void 0,o().mark((function a(){var l,u,d,s,m,h,b;return o().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,Z.handleSignIn(L,S,J);case 2:if(!(s=a.sent)){a.next=7;break}return a.abrupt("return",s);case 7:if((null==e?void 0:e.responseMode)===t.ResponseMode.formPost&&i?(m=i,h=null!=r?r:"",b=null!=c?c:""):(m=null!==(l=new URL(window.location.href).searchParams.get(DA))&&void 0!==l?l:"",h=null!==(u=new URL(window.location.href).searchParams.get(OA))&&void 0!==u?u:"",b=null!==(d=new URL(window.location.href).searchParams.get($A))&&void 0!==d?d:"",Xz.removeAuthorizationCode()),!m||!b){a.next=10;break}return a.abrupt("return",N(m,h,b));case 10:return a.abrupt("return",K(n).then((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return location.href=t.authorizationURL,e.next=3,Xz.waitTillPageRedirect();case 3:return e.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 4:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 11:case"end":return a.stop()}}),a)})))},H=function(){return B().then((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t||d){e.next=5;break}return n={type:IB},e.abrupt("return",y(n).then((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return window.location.href=t,e.next=3,Xz.waitTillPageRedirect();case 3:return e.abrupt("return",Promise.resolve(!0));case 4:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 5:return window.location.href=Xz.getSignOutURL(),e.next=8,Xz.waitTillPageRedirect();case 8:return e.abrupt("return",Promise.resolve(!0));case 9:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)}))},k=function(){return y({type:GB}).then((function(t){return p.reset(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},U=function(){return y({type:vB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},T=function(){return y({type:AB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},w=function(){return y({type:CB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},F=function(){return y({type:SB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},A=function(){return y({type:TB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},B=function(){return y({type:LB}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},z=function(){return y({type:xB})},j=function(t){t&&"function"==typeof t&&(a.requestSuccessCallback=t)},M=function(t){t&&"function"==typeof t&&(a.requestErrorCallback=t)},Q=function(t){t&&"function"==typeof t&&(a.requestStartCallback=t)},P=function(t){t&&"function"==typeof t&&(a.requestFinishCallback=t)},E=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i,r,c;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T();case 2:return n=e.sent,i=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),r=Object.assign(Object.assign({},n),t),c={data:r,type:UB},e.next=8,y(c);case 8:r.enableOIDCSessionManagement&&i&&(p.reset(),S());case 9:case"end":return e.stop()}}),e)})))},r.abrupt("return",{disableHttpHandler:V,enableHttpHandler:f,getBasicUserInfo:w,getDecodedIDToken:F,getIDToken:A,getOIDCServiceEndpoints:U,httpRequest:X,httpRequestAll:G,initialize:W,isAuthenticated:B,refreshAccessToken:z,requestCustomGrant:g,revokeAccessToken:k,setHttpRequestErrorCallback:M,setHttpRequestFinishCallback:P,setHttpRequestStartCallback:Q,setHttpRequestSuccessCallback:j,signIn:x,signOut:H,trySignInSilently:R,updateConfig:E});case 46:case"end":return r.stop()}}),r)})))},rE={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:t.Storage.SessionStorage},cE="primaryInstance",oE=function(){function e(t){d(this,e),this._authHelper=Iz,this._worker=pB,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=function(){return null},this._onSignOutCallback=function(){return null},this._onSignOutFailedCallback=function(){return null},this._onEndUserSession=function(){return null},this._onInitialize=function(){return null},this._onCustomGrant=new Map,this._instanceID=t}return m(e,[{key:"instantiateAuthHelper",value:function(t){this._authHelper=t||Iz}},{key:"instantiateWorker",value:function(t){this._worker=t||pB}},{key:"_isInitialized",value:function(){return jA(this,void 0,void 0,o().mark((function t(){var e,n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this._startedInitialize){t.next=2;break}return t.abrupt("return",!1);case 2:e=0,n=function(){return new Promise((function(t){return setTimeout(t,1)}))};case 4:if(this._initialized){t.next=11;break}return 1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),t.next=8,n();case 8:e++,t.next=4;break;case 11:return t.abrupt("return",!0);case 12:case"end":return t.stop()}}),t,this)})))}},{key:"_validateMethod",value:function(){return jA(this,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:if(t.sent){t.next=4;break}return t.abrupt("return",Promise.reject());case 4:return t.next=6,this.isAuthenticated();case 6:if(t.sent){t.next=8;break}return t.abrupt("return",Promise.reject());case 8:return t.abrupt("return",!0);case 9:case"end":return t.stop()}}),t,this)})))}
452
454
  /**
453
455
  * This method returns the instance of the singleton class.
454
456
  *
@@ -487,7 +489,7 @@ function(e){return jT(this,void 0,void 0,regeneratorRuntime.mark((function t(){r
487
489
  *
488
490
  * @preserve
489
491
  */
490
- function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c,o,a=this;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(this._storage=null!==(n=t.storage)&&void 0!==n?n:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,this._storage===e.Storage.WebWorker){r.next=15;break}if(this._client){r.next=10;break}return i=t,c=Object.assign({},NP),r.next=9,WP(Object.assign(Object.assign({},c),i));case 9:this._client=r.sent;case 10:return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),r.abrupt("return",Promise.resolve(!0));case 15:if(this._client){r.next=21;break}return o=t,r.next=19,KP(Object.assign(Object.assign({},NP),o));case 19:return this._client=r.sent,r.abrupt("return",this._client.initialize().then((function(){return a._onInitialize&&a._onInitialize(!0),a._initialized=!0,Promise.resolve(!0)})).catch((function(e){return Promise.reject(e)})));case 21:return r.abrupt("return",Promise.resolve(!0));case 22:case"end":return r.stop()}}),r,this)})))}
492
+ function(e,n,i){var r;return jA(this,void 0,void 0,o().mark((function c(){var a,l,u,d=this;return o().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(this._storage=null!==(r=e.storage)&&void 0!==r?r:t.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,n&&this.instantiateAuthHelper(n),i&&this.instantiateWorker(i),this._storage===t.Storage.WebWorker){c.next=17;break}if(this._client){c.next=12;break}return a=e,l=Object.assign({},rE),c.next=11,eE(Object.assign(Object.assign({},l),a),(function(t,e){return new d._authHelper(t,e)}));case 11:this._client=c.sent;case 12:return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),c.abrupt("return",Promise.resolve(!0));case 17:if(this._client){c.next=23;break}return u=e,c.next=21,iE(Object.assign(Object.assign({},rE),u),this._worker,(function(t,e){return new d._authHelper(t,e)}));case 21:return this._client=c.sent,c.abrupt("return",this._client.initialize().then((function(){return d._onInitialize&&d._onInitialize(!0),d._initialized=!0,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)})));case 23:return c.abrupt("return",Promise.resolve(!0));case 24:case"end":return c.stop()}}),c,this)})))}
491
493
  /**
492
494
  * This method returns a Promise that resolves with the basic user information obtained from the ID token.
493
495
  *
@@ -507,7 +509,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
507
509
  * @memberof AsgardeoSPAClient
508
510
  *
509
511
  * @preserve
510
- */},{key:"getBasicUserInfo",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo());case 3:case"end":return t.stop()}}),t,this)})))}
512
+ */},{key:"getBasicUserInfo",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.getBasicUserInfo());case 3:case"end":return e.stop()}}),e,this)})))}
511
513
  /**
512
514
  * This method initiates the authentication flow. This should be called twice.
513
515
  * 1. To initiate the authentication flow.
@@ -543,7 +545,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
543
545
  * @memberof AsgardeoSPAClient
544
546
  *
545
547
  * @preserve
546
- */},{key:"signIn",value:function(e,t,n,r){var i;return zT(this,void 0,void 0,regeneratorRuntime.mark((function c(){var o=this;return regeneratorRuntime.wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,this._isInitialized();case 2:if(zB.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t)){c.next=4;break}return c.abrupt("return");case 4:return null==e||delete e.callOnlyOnRedirect,c.abrupt("return",null===(i=this._client)||void 0===i?void 0:i.signIn(e,t,n,r).then((function(e){return o._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&o._onSignInCallback(e),e})));case 6:case"end":return c.stop()}}),c,this)})))}},{key:"trySignInSilently",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:if(!zB.wasSignInCalled()){t.next=4;break}return t.abrupt("return");case 4:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.trySignInSilently().then((function(e){if(n._onSignInCallback&&e){var t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&n._onSignInCallback(t)}return e})));case 5:case"end":return t.stop()}}),t,this)})))}
548
+ */},{key:"signIn",value:function(t,e,n,i){var r;return jA(this,void 0,void 0,o().mark((function c(){var a=this;return o().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,this._isInitialized();case 2:if(Xz.canContinueSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect),e)){c.next=4;break}return c.abrupt("return");case 4:return null==t||delete t.callOnlyOnRedirect,c.abrupt("return",null===(r=this._client)||void 0===r?void 0:r.signIn(t,e,n,i).then((function(t){return a._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&a._onSignInCallback(t),t})));case 6:case"end":return c.stop()}}),c,this)})))}},{key:"trySignInSilently",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){var n=this;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:if(!Xz.wasSignInCalled()){e.next=4;break}return e.abrupt("return");case 4:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then((function(t){if(n._onSignInCallback&&t){var e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&n._onSignInCallback(e)}return t})));case 5:case"end":return e.stop()}}),e,this)})))}
547
549
  /**
548
550
  * This method initiates the sign-out flow.
549
551
  *
@@ -563,7 +565,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
563
565
  * @memberof AsgardeoSPAClient
564
566
  *
565
567
  * @preserve
566
- */},{key:"signOut",value:function(){var e,t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.next=4,null===(e=this._client)||void 0===e?void 0:e.signOut();case 4:if(n.t1=t=n.sent,n.t0=null!==n.t1,!n.t0){n.next=8;break}n.t0=void 0!==t;case 8:if(!n.t0){n.next=12;break}n.t2=t,n.next=13;break;case 12:n.t2=!1;case 13:return r=n.t2,n.abrupt("return",r);case 15:case"end":return n.stop()}}),n,this)})))}
568
+ */},{key:"signOut",value:function(){var t,e;return jA(this,void 0,void 0,o().mark((function n(){var i;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.next=4,null===(t=this._client)||void 0===t?void 0:t.signOut();case 4:if(n.t1=e=n.sent,n.t0=null!==n.t1,!n.t0){n.next=8;break}n.t0=void 0!==e;case 8:if(!n.t0){n.next=12;break}n.t2=e,n.next=13;break;case 12:n.t2=!1;case 13:return i=n.t2,n.abrupt("return",i);case 15:case"end":return n.stop()}}),n,this)})))}
567
569
  /**
568
570
  * This method sends an API request to a protected endpoint.
569
571
  * The access token is automatically attached to the header of the request.
@@ -600,7 +602,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
600
602
  * @memberof AsgardeoSPAClient
601
603
  *
602
604
  * @preserve
603
- */},{key:"httpRequest",value:function(e){var t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.httpRequest(e));case 3:case"end":return n.stop()}}),n,this)})))}
605
+ */},{key:"httpRequest",value:function(t){var e;return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.httpRequest(t));case 3:case"end":return n.stop()}}),n,this)})))}
604
606
  /**
605
607
  * This method sends multiple API requests to a protected endpoint.
606
608
  * The access token is automatically attached to the header of the request.
@@ -647,7 +649,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
647
649
  * @memberof AsgardeoSPAClient
648
650
  *
649
651
  * @preserve
650
- */},{key:"httpRequestAll",value:function(e){var t;return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e));case 3:case"end":return n.stop()}}),n,this)})))}
652
+ */},{key:"httpRequestAll",value:function(t){var e;return jA(this,void 0,void 0,o().mark((function n(){return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._validateMethod();case 2:return n.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.httpRequestAll(t));case 3:case"end":return n.stop()}}),n,this)})))}
651
653
  /**
652
654
  * This method allows you to send a request with a custom grant.
653
655
  *
@@ -678,7 +680,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
678
680
  * @memberof AsgardeoSPAClient
679
681
  *
680
682
  * @preserve
681
- */},{key:"requestCustomGrant",value:function(e){var t,n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function r(){var i,c;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(!e.signInRequired){r.next=5;break}return r.next=3,this._validateMethod();case 3:r.next=7;break;case 5:return r.next=7,this._validateMethod();case 7:if(e.id){r.next=9;break}return r.abrupt("return",Promise.reject(new $T("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.")));case 9:return r.next=11,null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e);case 11:return i=r.sent,(c=this._onCustomGrant.get(e.id))&&c(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(e.id)),r.abrupt("return",i);case 15:case"end":return r.stop()}}),r,this)})))}
683
+ */},{key:"requestCustomGrant",value:function(t){var e,n;return jA(this,void 0,void 0,o().mark((function i(){var r,c;return o().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(!t.signInRequired){i.next=5;break}return i.next=3,this._validateMethod();case 3:i.next=7;break;case 5:return i.next=7,this._validateMethod();case 7:if(t.id){i.next=9;break}return i.abrupt("return",Promise.reject(new tB("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.")));case 9:return i.next=11,null===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t);case 11:return r=i.sent,(c=this._onCustomGrant.get(t.id))&&c(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(t.id)),i.abrupt("return",r);case 15:case"end":return i.stop()}}),i,this)})))}
682
684
  /**
683
685
  * This method ends a user session. The access token is revoked and the session information is destroyed.
684
686
  *
@@ -698,7 +700,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
698
700
  * @memberof AsgardeoSPAClient
699
701
  *
700
702
  * @preserve
701
- */},{key:"revokeAccessToken",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:return t.next=4,null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();case 4:if(n=t.sent,t.t0=this._onEndUserSession,!t.t0){t.next=9;break}return t.next=9,this._onEndUserSession(n);case 9:return t.abrupt("return",n);case 10:case"end":return t.stop()}}),t,this)})))}
703
+ */},{key:"revokeAccessToken",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.next=4,null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();case 4:if(n=e.sent,e.t0=this._onEndUserSession,!e.t0){e.next=9;break}return e.next=9,this._onEndUserSession(n);case 9:return e.abrupt("return",n);case 10:case"end":return e.stop()}}),e,this)})))}
702
704
  /**
703
705
  * This method returns a Promise that resolves with an object containing the service endpoints.
704
706
  *
@@ -718,7 +720,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
718
720
  * @memberof AsgardeoSPAClient
719
721
  *
720
722
  * @preserve
721
- */},{key:"getOIDCServiceEndpoints",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints());case 3:case"end":return t.stop()}}),t,this)})))}
723
+ */},{key:"getOIDCServiceEndpoints",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.getOIDCServiceEndpoints());case 3:case"end":return e.stop()}}),e,this)})))}
722
724
  /**
723
725
  * This methods returns the Axios http client.
724
726
  *
@@ -727,7 +729,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
727
729
  * @memberof AsgardeoSPAClient
728
730
  *
729
731
  * @preserve
730
- */},{key:"getHttpClient",value:function(){if(this._client){if(this._storage!==e.Storage.WebWorker)return this._client.getHttpClient();throw new $T("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 $T("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.")}
732
+ */},{key:"getHttpClient",value:function(){if(this._client){if(this._storage!==t.Storage.WebWorker)return this._client.getHttpClient();throw new tB("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 tB("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.")}
731
733
  /**
732
734
  * This method decodes the payload of the id token and returns it.
733
735
  *
@@ -747,7 +749,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
747
749
  * @memberof AsgardeoSPAClient
748
750
  *
749
751
  * @preserve
750
- */},{key:"getDecodedIDToken",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken());case 3:case"end":return t.stop()}}),t,this)})))}
752
+ */},{key:"getDecodedIDToken",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.getDecodedIDToken());case 3:case"end":return e.stop()}}),e,this)})))}
751
753
  /**
752
754
  * This method return the ID token.
753
755
  *
@@ -763,7 +765,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
763
765
  * @memberof AsgardeoAuthClient
764
766
  *
765
767
  * @preserve
766
- */},{key:"getIDToken",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.getIDToken());case 3:case"end":return t.stop()}}),t,this)})))}
768
+ */},{key:"getIDToken",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.getIDToken());case 3:case"end":return e.stop()}}),e,this)})))}
767
769
  /**
768
770
  * This method return a Promise that resolves with the access token.
769
771
  *
@@ -785,7 +787,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
785
787
  * @memberof AsgardeoSPAClient
786
788
  *
787
789
  * @preserve
788
- */},{key:"getAccessToken",value:function(){return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:if(!this._storage||![(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage)){t.next=4;break}return t.abrupt("return",Promise.reject(new $T("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.")));case 4:return n=this._client,t.abrupt("return",n.getAccessToken());case 6:case"end":return t.stop()}}),t,this)})))}
790
+ */},{key:"getAccessToken",value:function(){return jA(this,void 0,void 0,o().mark((function e(){var n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:if(!this._storage||![(t.Storage.WebWorker,t.Storage.BrowserMemory)].includes(this._storage)){e.next=4;break}return e.abrupt("return",Promise.reject(new tB("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.")));case 4:return n=this._client,e.abrupt("return",n.getAccessToken());case 6:case"end":return e.stop()}}),e,this)})))}
789
791
  /**
790
792
  * This method refreshes the access token.
791
793
  *
@@ -806,7 +808,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
806
808
  * @memberof AsgardeoSPAClient
807
809
  *
808
810
  * @preserve
809
- */},{key:"refreshAccessToken",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._validateMethod();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken());case 3:case"end":return t.stop()}}),t,this)})))}
811
+ */},{key:"refreshAccessToken",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._validateMethod();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.refreshAccessToken());case 3:case"end":return e.stop()}}),e,this)})))}
810
812
  /**
811
813
  * This method specifies if the user is authenticated or not.
812
814
  *
@@ -815,7 +817,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
815
817
  * @memberof AsgardeoSPAClient
816
818
  *
817
819
  * @preserve
818
- */},{key:"isAuthenticated",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.isAuthenticated());case 3:case"end":return t.stop()}}),t,this)})))}},{key:"on",value:function(t,n,r){var i,c,o,a;return zT(this,void 0,void 0,regeneratorRuntime.mark((function l(){var u;return regeneratorRuntime.wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return l.next=2,this._isInitialized();case 2:if(!n||"function"!=typeof n){l.next=35;break}l.t0=t,l.next=l.t0===e.Hooks.SignIn?6:l.t0===e.Hooks.SignOut?8:l.t0===e.Hooks.RevokeAccessToken?14:l.t0===e.Hooks.Initialize?16:l.t0===e.Hooks.HttpRequestError?18:l.t0===e.Hooks.HttpRequestFinish?20:l.t0===e.Hooks.HttpRequestStart?22:l.t0===e.Hooks.HttpRequestSuccess?24:l.t0===e.Hooks.CustomGrant?26:l.t0===e.Hooks.SignOutFailed?28:32;break;case 6:return this._onSignInCallback=n,l.abrupt("break",33);case 8:return this._onSignOutCallback=n,l.next=11,zB.isSignOutSuccessful();case 11:if(!l.sent){l.next=13;break}this._onSignOutCallback();case 13:return l.abrupt("break",33);case 14:return this._onEndUserSession=n,l.abrupt("break",33);case 16:return this._onInitialize=n,l.abrupt("break",33);case 18:return null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(n),l.abrupt("break",33);case 20:return null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n),l.abrupt("break",33);case 22:return null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(n),l.abrupt("break",33);case 24:return null===(a=this._client)||void 0===a||a.setHttpRequestSuccessCallback(n),l.abrupt("break",33);case 26:return r&&this._onCustomGrant.set(r,n),l.abrupt("break",33);case 28:return this._onSignOutFailedCallback=n,(u=zB.didSignOutFail())&&this._onSignOutFailedCallback(u),l.abrupt("break",33);case 32:throw new $T("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.");case 33:l.next=36;break;case 35:throw new $T("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");case 36:case"end":return l.stop()}}),l,this)})))}
820
+ */},{key:"isAuthenticated",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.isAuthenticated());case 3:case"end":return e.stop()}}),e,this)})))}},{key:"on",value:function(e,n,i){var r,c,a,l;return jA(this,void 0,void 0,o().mark((function u(){var d;return o().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,this._isInitialized();case 2:if(!n||"function"!=typeof n){o.next=35;break}o.t0=e,o.next=o.t0===t.Hooks.SignIn?6:o.t0===t.Hooks.SignOut?8:o.t0===t.Hooks.RevokeAccessToken?14:o.t0===t.Hooks.Initialize?16:o.t0===t.Hooks.HttpRequestError?18:o.t0===t.Hooks.HttpRequestFinish?20:o.t0===t.Hooks.HttpRequestStart?22:o.t0===t.Hooks.HttpRequestSuccess?24:o.t0===t.Hooks.CustomGrant?26:o.t0===t.Hooks.SignOutFailed?28:32;break;case 6:return this._onSignInCallback=n,o.abrupt("break",33);case 8:return this._onSignOutCallback=n,o.next=11,Xz.isSignOutSuccessful();case 11:if(!o.sent){o.next=13;break}this._onSignOutCallback();case 13:return o.abrupt("break",33);case 14:return this._onEndUserSession=n,o.abrupt("break",33);case 16:return this._onInitialize=n,o.abrupt("break",33);case 18:return null===(r=this._client)||void 0===r||r.setHttpRequestErrorCallback(n),o.abrupt("break",33);case 20:return null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n),o.abrupt("break",33);case 22:return null===(a=this._client)||void 0===a||a.setHttpRequestStartCallback(n),o.abrupt("break",33);case 24:return null===(l=this._client)||void 0===l||l.setHttpRequestSuccessCallback(n),o.abrupt("break",33);case 26:return i&&this._onCustomGrant.set(i,n),o.abrupt("break",33);case 28:return this._onSignOutFailedCallback=n,(d=Xz.didSignOutFail())&&this._onSignOutFailedCallback(d),o.abrupt("break",33);case 32:throw new tB("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.");case 33:o.next=36;break;case 35:throw new tB("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");case 36:case"end":return o.stop()}}),u,this)})))}
819
821
  /**
820
822
  * This method enables callback functions attached to the http client.
821
823
  *
@@ -831,7 +833,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
831
833
  * @memberof AsgardeoSPAClient
832
834
  *
833
835
  * @preserve
834
- */},{key:"enableHttpHandler",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler());case 3:case"end":return t.stop()}}),t,this)})))}
836
+ */},{key:"enableHttpHandler",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.enableHttpHandler());case 3:case"end":return e.stop()}}),e,this)})))}
835
837
  /**
836
838
  * This method disables callback functions attached to the http client.
837
839
  *
@@ -847,7 +849,7 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
847
849
  * @memberof AsgardeoSPAClient
848
850
  *
849
851
  * @preserve
850
- */},{key:"disableHttpHandler",value:function(){var e;return zT(this,void 0,void 0,regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._isInitialized();case 2:return t.abrupt("return",null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler());case 3:case"end":return t.stop()}}),t,this)})))}
852
+ */},{key:"disableHttpHandler",value:function(){var t;return jA(this,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:return e.abrupt("return",null===(t=this._client)||void 0===t?void 0:t.disableHttpHandler());case 3:case"end":return e.stop()}}),e,this)})))}
851
853
  /**
852
854
  * This method updates the configuration that was passed into the constructor when instantiating this class.
853
855
  *
@@ -867,5 +869,5 @@ function(t){var n;return zT(this,void 0,void 0,regeneratorRuntime.mark((function
867
869
  * @memberof AsgardeoAuthClient
868
870
  *
869
871
  * @preserve
870
- */},{key:"updateConfig",value:function(t){return zT(this,void 0,void 0,regeneratorRuntime.mark((function n(){var r,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._isInitialized();case 2:if(this._storage!==e.Storage.WebWorker){n.next=8;break}return r=this._client,n.next=6,r.updateConfig(t);case 6:n.next=11;break;case 8:return i=this._client,n.next=11,i.updateConfig(t);case 11:return n.abrupt("return");case 12:case"end":return n.stop()}}),n,this)})))}}],[{key:"getInstance",value:function(e){var n,r;return e&&(null===(n=this._instances)||void 0===n?void 0:n.get(e))?this._instances.get(e):!e&&(null===(r=this._instances)||void 0===r?void 0:r.get(LP))?this._instances.get(LP):e?(this._instances.set(e,new t(e)),this._instances.get(e)):(this._instances.set(LP,new t(LP)),this._instances.get(LP))}}]),t}();HP._instances=new Map;var xP=function(e){Z(n,e);var t=f(n);function n(){var e;return u(this,n),(e=t.apply(this,arguments)).onmessage=function(){return null},e}return s(n)}(g(Worker));e.AUTHORIZATION_CODE=ET,e.AsgardeoAuthClient=lB,e.AsgardeoAuthException=$T,e.AsgardeoSPAClient=HP,e.AuthenticationUtils=eB,e.CLAIM_VALIDATION_ERROR="ERR_JWT_CLAIM_VALIDATION_FAILED",e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.DataLayer=oB,e.NBF_CLAIM="nbf",e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=QT,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=DT,e.SIGN_OUT_SUCCESS_PARAM=_T,e.SIGN_OUT_URL=OT,e.SPAUtils=zB,e.STATE=qT,e.SUPPORTED_SIGNATURE_ALGORITHMS=PT,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=xP,Object.defineProperty(e,"__esModule",{value:!0})}));
872
+ */},{key:"updateConfig",value:function(e){return jA(this,void 0,void 0,o().mark((function n(){var i,r;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._isInitialized();case 2:if(this._storage!==t.Storage.WebWorker){n.next=8;break}return i=this._client,n.next=6,i.updateConfig(e);case 6:n.next=11;break;case 8:return r=this._client,n.next=11,r.updateConfig(e);case 11:return n.abrupt("return");case 12:case"end":return n.stop()}}),n,this)})))}}],[{key:"getInstance",value:function(t){var n,i;return t&&(null===(n=this._instances)||void 0===n?void 0:n.get(t))?this._instances.get(t):!t&&(null===(i=this._instances)||void 0===i?void 0:i.get(cE))?this._instances.get(cE):t?(this._instances.set(t,new e(t)),this._instances.get(t)):(this._instances.set(cE,new e(cE)),this._instances.get(cE))}}]),e}();oE._instances=new Map;var aE=function(t){b(n,t);var e=f(n);function n(){var t;return d(this,n),(t=e.apply(this,arguments)).onmessage=function(){return null},t}return m(n)}(g(Worker)),lE=function(t,e){return jA(void 0,void 0,void 0,o().mark((function n(){var i,r,c,a,l,u,d,s,m,h,b,p,Z,I,y,g,X,G,f,V,W,v,C,S,Y,R,K,N,L,J,x;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=new NM,r=new $P,c=new aB(i,r),n.next=5,c.initialize(t);case 5:if(a=new yz(c),l=e(c,a),u=c.getDataLayer(),d=RM.getInstance(),n.t0=null==d?void 0:d.init,!n.t0){n.next=13;break}return n.next=13,d.init(!0,l.attachToken);case 13:return s=function(t){l.setHttpRequestStartCallback(d,t)},m=function(t){l.setHttpRequestSuccessCallback(d,t)},h=function(t){(null==d?void 0:d.setHttpRequestFinishCallback)&&d.setHttpRequestFinishCallback(t)},b=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.httpRequest(d,t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},p=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.httpRequestAll(t,d);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},Z=function(){l.enableHttpHandler(d)},I=function(){l.disableHttpHandler(d)},y=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",c.getAuthorizationURL(t).then((function(t){return jA(void 0,void 0,void 0,o().mark((function e(){var n,i,r,a;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new URL(t),r=null!==(n=i.searchParams.get($A))&&void 0!==n?n:"",e.next=4,c.getPKCECode(r);case 4:return a=e.sent,e.abrupt("return",{authorizationURL:t,pkce:a});case 6:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e)})))},g=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a.clearRefreshTokenTimeout(),a.refreshAccessTokenAutomatically(),t.abrupt("return");case 3:case"end":return t.stop()}}),t)})))},X=function(t,e,n,i){return jA(void 0,void 0,void 0,o().mark((function r(){return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,l.requestAccessToken(t,e,void 0,n,i);case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}}),r)})))},G=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a.clearRefreshTokenTimeout(),t.next=3,c.signOut();case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})))},f=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,c.getSignOutURL();case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},V=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.requestCustomGrant(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},W=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,l.refreshAccessToken();case 3:return t.abrupt("return",t.sent);case 6:return t.prev=6,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 9:case"end":return t.stop()}}),t,null,[[0,6]])})))},v=function(){return c.revokeAccessToken().then((function(){return a.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},C=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getBasicUserInfo());case 1:case"end":return t.stop()}}),t)})))},S=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getDecodedIDToken());case 1:case"end":return t.stop()}}),t)})))},Y=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getIDToken());case 1:case"end":return t.stop()}}),t)})))},R=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t)})))},K=function(){return l.getAccessToken()},N=function(){return l.isAuthenticated()},L=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u.setSessionDataParameter(OA,t);case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))},J=function(t){return jA(void 0,void 0,void 0,o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.updateConfig(t);case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))},x=function(){return jA(void 0,void 0,void 0,o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",u.getConfigData());case 1:case"end":return t.stop()}}),t)})))},n.abrupt("return",{disableHttpHandler:I,enableHttpHandler:Z,getAccessToken:K,getAuthorizationURL:y,getBasicUserInfo:C,getConfigData:x,getDecodedIDToken:S,getIDToken:Y,getOIDCServiceEndpoints:R,getSignOutURL:f,httpRequest:b,httpRequestAll:p,isAuthenticated:N,refreshAccessToken:W,requestAccessToken:X,requestCustomGrant:V,revokeAccessToken:v,setHttpRequestFinishCallback:h,setHttpRequestStartCallback:s,setHttpRequestSuccessCallback:m,setSessionState:L,signOut:G,startAutoRefreshToken:g,updateConfig:J});case 38:case"end":return n.stop()}}),n)})))};t.AUTHORIZATION_CODE=DA,t.AsgardeoAuthClient=aB,t.AsgardeoAuthException=tB,t.AsgardeoSPAClient=oE,t.AuthenticationHelper=Iz,t.AuthenticationUtils=eB,t.CLAIM_VALIDATION_ERROR="ERR_JWT_CLAIM_VALIDATION_FAILED",t.CLIENT_ID_TAG="{{clientID}}",t.CLIENT_SECRET_TAG="{{clientSecret}}",t.DataLayer=cB,t.NBF_CLAIM="nbf",t.OIDC_SCOPE="openid",t.PKCE_CODE_VERIFIER="pkce_code_verifier",t.PKCE_SEPARATOR="#",t.REFRESH_TOKEN_TIMER=PA,t.SCOPE_TAG="{{scope}}",t.SESSION_STATE=OA,t.SIGN_OUT_SUCCESS_PARAM=qA,t.SIGN_OUT_URL=_A,t.SPAHelper=yz,t.SPAUtils=Xz,t.STATE=$A,t.SUPPORTED_SIGNATURE_ALGORITHMS=EA,t.TOKEN_TAG="{{token}}",t.USERNAME_TAG="{{username}}",t.WebWorkerClass=aE,t.workerReceiver=function(t){var e,n=self;n.onmessage=function(n){var a=n.data,l=n.ports;return jA(void 0,void 0,void 0,o().mark((function n(){var u,d,s,m,h,b;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(h=l[0],a.type===ZB||e){n.next=4;break}return h.postMessage(gz.generateFailureMessage(new tB("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."))),n.abrupt("return");case 4:n.t0=a.type,n.next=n.t0===ZB?7:n.t0===KB?22:n.t0===NB?24:n.t0===yB?26:n.t0===gB?28:n.t0===IB?30:n.t0===XB?44:n.t0===GB?46:n.t0===vB?48:n.t0===CB?62:n.t0===SB?76:n.t0===TB?90:n.t0===YB?104:n.t0===RB?107:n.t0===LB?110:n.t0===JB?124:n.t0===xB?138:n.t0===kB?152:n.t0===HB?154:n.t0===UB?168:n.t0===AB?182:196;break;case 7:return n.prev=7,b=Object.assign({},a.data),n.next=11,lE(b,t);case 11:(e=n.sent).setHttpRequestFinishCallback(c),e.setHttpRequestStartCallback(i),e.setHttpRequestSuccessCallback(r),h.postMessage(gz.generateSuccessMessage()),n.next=21;break;case 18:n.prev=18,n.t1=n.catch(7),h.postMessage(gz.generateFailureMessage(n.t1));case 21:return n.abrupt("break",197);case 22:return e.getAuthorizationURL(null==a?void 0:a.data).then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 24:return e.requestAccessToken(null===(u=null==a?void 0:a.data)||void 0===u?void 0:u.code,null===(d=null==a?void 0:a.data)||void 0===d?void 0:d.sessionState,null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.pkce,null===(m=null==a?void 0:a.data)||void 0===m?void 0:m.state).then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 26:return e.httpRequest(a.data).then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 28:return e.httpRequestAll(a.data).then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 30:return n.prev=30,n.t2=h,n.t3=gz,n.next=35,e.signOut();case 35:n.t4=n.sent,n.t5=n.t3.generateSuccessMessage.call(n.t3,n.t4),n.t2.postMessage.call(n.t2,n.t5),n.next=43;break;case 40:n.prev=40,n.t6=n.catch(30),h.postMessage(gz.generateFailureMessage(n.t6));case 43:return n.abrupt("break",197);case 44:return e.requestCustomGrant(a.data).then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 46:return e.revokeAccessToken().then((function(t){h.postMessage(gz.generateSuccessMessage(t))})).catch((function(t){h.postMessage(gz.generateFailureMessage(t))})),n.abrupt("break",197);case 48:return n.prev=48,n.t7=h,n.t8=gz,n.next=53,e.getOIDCServiceEndpoints();case 53:n.t9=n.sent,n.t10=n.t8.generateSuccessMessage.call(n.t8,n.t9),n.t7.postMessage.call(n.t7,n.t10),n.next=61;break;case 58:n.prev=58,n.t11=n.catch(48),h.postMessage(gz.generateFailureMessage(n.t11));case 61:return n.abrupt("break",197);case 62:return n.prev=62,n.t12=h,n.t13=gz,n.next=67,e.getBasicUserInfo();case 67:n.t14=n.sent,n.t15=n.t13.generateSuccessMessage.call(n.t13,n.t14),n.t12.postMessage.call(n.t12,n.t15),n.next=75;break;case 72:n.prev=72,n.t16=n.catch(62),h.postMessage(gz.generateFailureMessage(n.t16));case 75:return n.abrupt("break",197);case 76:return n.prev=76,n.t17=h,n.t18=gz,n.next=81,e.getDecodedIDToken();case 81:n.t19=n.sent,n.t20=n.t18.generateSuccessMessage.call(n.t18,n.t19),n.t17.postMessage.call(n.t17,n.t20),n.next=89;break;case 86:n.prev=86,n.t21=n.catch(76),h.postMessage(gz.generateFailureMessage(n.t21));case 89:return n.abrupt("break",197);case 90:return n.prev=90,n.t22=h,n.t23=gz,n.next=95,e.getIDToken();case 95:n.t24=n.sent,n.t25=n.t23.generateSuccessMessage.call(n.t23,n.t24),n.t22.postMessage.call(n.t22,n.t25),n.next=103;break;case 100:n.prev=100,n.t26=n.catch(90),h.postMessage(gz.generateFailureMessage(n.t26));case 103:return n.abrupt("break",197);case 104:return e.enableHttpHandler(),h.postMessage(gz.generateSuccessMessage()),n.abrupt("break",197);case 107:return e.disableHttpHandler(),h.postMessage(gz.generateSuccessMessage()),n.abrupt("break",197);case 110:return n.prev=110,n.t27=h,n.t28=gz,n.next=115,e.isAuthenticated();case 115:n.t29=n.sent,n.t30=n.t28.generateSuccessMessage.call(n.t28,n.t29),n.t27.postMessage.call(n.t27,n.t30),n.next=123;break;case 120:n.prev=120,n.t31=n.catch(110),h.postMessage(gz.generateFailureMessage(n.t31));case 123:return n.abrupt("break",197);case 124:return n.prev=124,n.t32=h,n.t33=gz,n.next=129,e.getSignOutURL();case 129:n.t34=n.sent,n.t35=n.t33.generateSuccessMessage.call(n.t33,n.t34),n.t32.postMessage.call(n.t32,n.t35),n.next=137;break;case 134:n.prev=134,n.t36=n.catch(124),h.postMessage(gz.generateFailureMessage(n.t36));case 137:return n.abrupt("break",197);case 138:return n.prev=138,n.t37=h,n.t38=gz,n.next=143,e.refreshAccessToken();case 143:n.t39=n.sent,n.t40=n.t38.generateSuccessMessage.call(n.t38,n.t39),n.t37.postMessage.call(n.t37,n.t40),n.next=151;break;case 148:n.prev=148,n.t41=n.catch(138),h.postMessage(gz.generateFailureMessage(n.t41));case 151:return n.abrupt("break",197);case 152:try{h.postMessage(gz.generateSuccessMessage(e.startAutoRefreshToken()))}catch(t){h.postMessage(gz.generateFailureMessage(t))}return n.abrupt("break",197);case 154:return n.prev=154,n.t42=h,n.t43=gz,n.next=159,e.setSessionState(null==a?void 0:a.data);case 159:n.t44=n.sent,n.t45=n.t43.generateSuccessMessage.call(n.t43,n.t44),n.t42.postMessage.call(n.t42,n.t45),n.next=167;break;case 164:n.prev=164,n.t46=n.catch(154),h.postMessage(gz.generateFailureMessage(n.t46));case 167:return n.abrupt("break",197);case 168:return n.prev=168,n.t47=h,n.t48=gz,n.next=173,e.updateConfig(null==a?void 0:a.data);case 173:n.t49=n.sent,n.t50=n.t48.generateSuccessMessage.call(n.t48,n.t49),n.t47.postMessage.call(n.t47,n.t50),n.next=181;break;case 178:n.prev=178,n.t51=n.catch(168),h.postMessage(gz.generateFailureMessage(n.t51));case 181:return n.abrupt("break",197);case 182:return n.prev=182,n.t52=h,n.t53=gz,n.next=187,e.getConfigData();case 187:n.t54=n.sent,n.t55=n.t53.generateSuccessMessage.call(n.t53,n.t54),n.t52.postMessage.call(n.t52,n.t55),n.next=195;break;case 192:n.prev=192,n.t56=n.catch(182),h.postMessage(gz.generateFailureMessage(n.t56));case 195:return n.abrupt("break",197);case 196:null==h||h.postMessage(gz.generateFailureMessage(new tB("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(a.type,", is invalid."))));case 197:case"end":return n.stop()}}),n,null,[[7,18],[30,40],[48,58],[62,72],[76,86],[90,100],[110,120],[124,134],[138,148],[154,164],[168,178],[182,192]])})))};var i=function(){n.postMessage({type:fB})},r=function(t){n.postMessage({data:JSON.stringify(null!=t?t:""),type:VB})},c=function(){n.postMessage({type:WB})}},Object.defineProperty(t,"__esModule",{value:!0})}));
871
873
  //# sourceMappingURL=asgardeo-spa.production.js.map