@asgardeo/auth-spa 0.4.4 → 0.4.7

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 (40) hide show
  1. package/README.md +15 -2
  2. package/dist/asgardeo-spa.production.esm.js +15 -34
  3. package/dist/asgardeo-spa.production.esm.js.map +1 -1
  4. package/dist/asgardeo-spa.production.js +8 -27
  5. package/dist/asgardeo-spa.production.js.map +1 -1
  6. package/dist/asgardeo-spa.production.min.js +1 -1
  7. package/dist/asgardeo-spa.production.min.js.map +1 -1
  8. package/dist/polyfilled/asgardeo-spa.production.esm.js +882 -905
  9. package/dist/polyfilled/asgardeo-spa.production.esm.js.map +1 -1
  10. package/dist/polyfilled/asgardeo-spa.production.js +882 -905
  11. package/dist/polyfilled/asgardeo-spa.production.js.map +1 -1
  12. package/dist/polyfilled/asgardeo-spa.production.min.js +1 -1
  13. package/dist/polyfilled/asgardeo-spa.production.min.js.map +1 -1
  14. package/dist/src/client.d.ts.map +1 -1
  15. package/dist/src/client.js +2 -2
  16. package/dist/src/client.js.map +1 -1
  17. package/dist/src/clients/main-thread-client.d.ts.map +1 -1
  18. package/dist/src/clients/main-thread-client.js +7 -6
  19. package/dist/src/clients/main-thread-client.js.map +1 -1
  20. package/dist/src/helpers/session-management-helper.d.ts.map +1 -1
  21. package/dist/src/helpers/session-management-helper.js +6 -2
  22. package/dist/src/helpers/session-management-helper.js.map +1 -1
  23. package/dist/src/helpers/spa-helper.d.ts +2 -1
  24. package/dist/src/helpers/spa-helper.d.ts.map +1 -1
  25. package/dist/src/helpers/spa-helper.js +15 -3
  26. package/dist/src/helpers/spa-helper.js.map +1 -1
  27. package/dist/src/utils/crypto-utils.d.ts.map +1 -1
  28. package/dist/src/utils/crypto-utils.js +3 -0
  29. package/dist/src/utils/crypto-utils.js.map +1 -1
  30. package/dist/src/worker/worker-core.d.ts.map +1 -1
  31. package/dist/src/worker/worker-core.js +4 -3
  32. package/dist/src/worker/worker-core.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +2 -2
  35. package/src/client.ts +14 -2
  36. package/src/clients/main-thread-client.ts +17 -14
  37. package/src/helpers/session-management-helper.ts +6 -2
  38. package/src/helpers/spa-helper.ts +17 -3
  39. package/src/utils/crypto-utils.ts +7 -1
  40. package/src/worker/worker-core.ts +6 -4
@@ -1,6 +1,4 @@
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 r(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})})),e}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function c(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){h(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function a(){
2
- /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
3
- a=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},i=r.iterator||"@@iterator",c=r.asyncIterator||"@@asyncIterator",o=r.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,r){var i=e&&e.prototype instanceof m?e:m,c=Object.create(i.prototype),a=new W(r||[]);return c._invoke=function(t,e,n){var r="suspendedStart";return function(i,c){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===i)throw c;return C()}for(n.method=i,n.arg=c;;){var a=n.delegate;if(a){var o=G(a,n);if(o){if(o===d)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var l=s(t,e,n);if("normal"===l.type){if(r=n.done?"completed":"suspendedYield",l.arg===d)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r="completed",n.method="throw",n.arg=l.arg)}}}(t,n,a),c}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var d={};function m(){}function h(){}function b(){}var Z={};l(Z,i,(function(){return this}));var p=Object.getPrototypeOf,I=p&&p(p(v([])));I&&I!==e&&n.call(I,i)&&(Z=I);var y=b.prototype=m.prototype=Object.create(Z);function g(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function X(t,e){function r(i,c,a,o){var l=s(t[i],t,c);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"==typeof d&&n.call(d,"__await")?e.resolve(d.__await).then((function(t){r("next",t,a,o)}),(function(t){r("throw",t,a,o)})):e.resolve(d).then((function(t){u.value=t,a(u)}),(function(t){return r("throw",t,a,o)}))}o(l.arg)}var i;this._invoke=function(t,n){function c(){return new e((function(e,i){r(t,n,e,i)}))}return i=i?i.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 d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var r=s(n,t.iterator,e.arg);if("throw"===r.type)return e.method="throw",e.arg=r.arg,e.delegate=null,d;var i=r.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,d):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}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[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,c=function e(){for(;++r<t.length;)if(n.call(t,r))return e.value=t[r],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,o,"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,o,"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,r,i,c){void 0===c&&(c=Promise);var a=new X(u(e,n,r,i),c);return t.isGeneratorFunction(n)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},g(y),l(y,o,"Generator"),l(y,i,(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 r=e.pop();if(r in t)return n.value=r,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 r(n,r){return a.type="throw",a.arg=t,e.next=n,r&&(e.method="next",e.arg=void 0),!!r}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],a=c.completion;if("root"===c.tryLoc)return r("end");if(c.tryLoc<=this.prev){var o=n.call(c,"catchLoc"),l=n.call(c,"finallyLoc");if(o&&l){if(this.prev<c.catchLoc)return r(c.catchLoc,!0);if(this.prev<c.finallyLoc)return r(c.finallyLoc)}else if(o){if(this.prev<c.catchLoc)return r(c.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return r(c.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var c=i;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var a=c?c.completion:{};return a.type=t,a.arg=e,c?(this.method="next",this.next=c.finallyLoc,d):this.complete(a)},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),d},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),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;V(n)}return i}}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),d}},t}function o(t){return o="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},o(t)}function l(t,e,n,r,i,c,a){try{var o=t[c](a),l=o.value}catch(t){return void n(t)}o.done?e(l):Promise.resolve(l).then(r,i)}function u(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var c=t.apply(e,n);function a(t){l(c,r,i,a,o,"next",t)}function o(t){l(c,r,i,a,o,"throw",t)}a(void 0)}))}}function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function d(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function m(t,e,n){return e&&d(t.prototype,e),n&&d(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&&p(t,e)}function Z(t){return Z=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Z(t)}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(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.bind():function(t,e,n){var r=[null];r.push.apply(r,e);var i=new(Function.bind.apply(t,r));return n&&p(i,n.prototype),i},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,r)}function r(){return y(t,arguments,Z(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),p(r,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,r=Z(t);if(e){var i=Z(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.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 r,i,c=[],a=!0,o=!1;try{for(n=n.call(t);!(a=(r=n.next()).done)&&(c.push(r.value),!e||c.length!==e);a=!0);}catch(t){o=!0,i=t}finally{try{a||null==n.return||n.return()}finally{if(o)throw i}}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,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Y(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 r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},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,a=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){o=!0,c=t},f:function(){try{a||null==n.return||n.return()}finally{if(o)throw c}}}}var S=function(t){return t&&t.Math==Math&&t},R=S("object"==("undefined"==typeof globalThis?"undefined":o(globalThis))&&globalThis)||S("object"==("undefined"==typeof window?"undefined":o(window))&&window)||S("object"==("undefined"==typeof self?"undefined":o(self))&&self)||S("object"==o(e)&&e)||function(){return this}()||Function("return this")(),K={},L=function(t){try{return!!t()}catch(t){return!0}},N=!L((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),J=!L((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),H=J,x=Function.prototype.call,k=H?x.bind(x):function(){return x.apply(x,arguments)},U={},T={}.propertyIsEnumerable,w=Object.getOwnPropertyDescriptor,A=w&&!T.call({1:2},1);U.f=A?function(t){var e=w(this,t);return!!e&&e.enumerable}:T;var F,z,B=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=L,et=$,nt=Object,rt=D("".split),it=tt((function(){return!nt("z").propertyIsEnumerable(0)}))?function(t){return"String"==et(t)?rt(t,""):nt(t)}:nt,ct=TypeError,at=function(t){if(null==t)throw ct("Can't call method on "+t);return t},ot=it,lt=at,ut=function(t){return ot(lt(t))},st=function(t){return"function"==typeof t},dt=st,mt=function(t){return"object"==o(t)?null!==t:dt(t)},ht=R,bt=st,Zt=function(t){return bt(t)?t:void 0},pt=function(t,e){return arguments.length<2?Zt(ht[t]):ht[t]&&ht[t][e]},It=D({}.isPrototypeOf),yt=pt("navigator","userAgent")||"",gt=R,Xt=yt,Gt=gt.process,ft=gt.Deno,Vt=Gt&&Gt.versions||ft&&ft.version,Wt=Vt&&Vt.v8;Wt&&(z=(F=Wt.split("."))[0]>0&&F[0]<4?1:+(F[0]+F[1])),!z&&Xt&&(!(F=Xt.match(/Edge\/(\d+)/))||F[1]>=74)&&(F=Xt.match(/Chrome\/(\d+)/))&&(z=+F[1]);var vt=z,Ct=vt,Yt=L,St=!!Object.getOwnPropertySymbols&&!Yt((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&Ct&&Ct<41})),Rt=St&&!Symbol.sham&&"symbol"==o(Symbol.iterator),Kt=pt,Lt=st,Nt=It,Jt=Object,Ht=Rt?function(t){return"symbol"==o(t)}:function(t){var e=Kt("Symbol");return Lt(e)&&Nt(e.prototype,Jt(t))},xt=String,kt=function(t){try{return xt(t)}catch(t){return"Object"}},Ut=st,Tt=kt,wt=TypeError,At=function(t){if(Ut(t))return t;throw wt(Tt(t)+" is not a function")},Ft=At,zt=function(t,e){var n=t[e];return null==n?void 0:Ft(n)},Bt=k,jt=st,Mt=mt,Qt=TypeError,Pt=function(t,e){var n,r;if("string"===e&&jt(n=t.toString)&&!Mt(r=Bt(n,t)))return r;if(jt(n=t.valueOf)&&!Mt(r=Bt(n,t)))return r;if("string"!==e&&jt(n=t.toString)&&!Mt(r=Bt(n,t)))return r;throw Qt("Can't convert object to primitive value")},Et={exports:{}},Dt=R,Ot=Object.defineProperty,_t=function(t,e){try{Ot(Dt,t,{value:e,configurable:!0,writable:!0})}catch(n){Dt[t]=e}return e},qt=_t,$t="__core-js_shared__",te=R[$t]||qt($t,{}),ee=te;(Et.exports=function(t,e){return ee[t]||(ee[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.8",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.8/LICENSE",source:"https://github.com/zloirock/core-js"});var ne=at,re=Object,ie=function(t){return re(ne(t))},ce=ie,ae=D({}.hasOwnProperty),oe=Object.hasOwn||function(t,e){return ae(ce(t),e)},le=D,ue=0,se=Math.random(),de=le(1..toString),me=function(t){return"Symbol("+(void 0===t?"":t)+")_"+de(++ue+se,36)},he=R,be=Et.exports,Ze=oe,pe=me,Ie=St,ye=Rt,ge=be("wks"),Xe=he.Symbol,Ge=Xe&&Xe.for,fe=ye?Xe:Xe&&Xe.withoutSetter||pe,Ve=function(t){if(!Ze(ge,t)||!Ie&&"string"!=typeof ge[t]){var e="Symbol."+t;Ie&&Ze(Xe,t)?ge[t]=Xe[t]:ge[t]=ye&&Ge?Ge(e):fe(e)}return ge[t]},We=k,ve=mt,Ce=Ht,Ye=zt,Se=Pt,Re=TypeError,Ke=Ve("toPrimitive"),Le=function(t,e){if(!ve(t)||Ce(t))return t;var n,r=Ye(t,Ke);if(r){if(void 0===e&&(e="default"),n=We(r,t,e),!ve(n)||Ce(n))return n;throw Re("Can't convert object to primitive value")}return void 0===e&&(e="number"),Se(t,e)},Ne=Le,Je=Ht,He=function(t){var e=Ne(t,"string");return Je(e)?e:e+""},xe=mt,ke=R.document,Ue=xe(ke)&&xe(ke.createElement),Te=function(t){return Ue?ke.createElement(t):{}},we=Te,Ae=!N&&!L((function(){return 7!=Object.defineProperty(we("div"),"a",{get:function(){return 7}}).a})),Fe=N,ze=k,Be=U,je=B,Me=ut,Qe=He,Pe=oe,Ee=Ae,De=Object.getOwnPropertyDescriptor;K.f=Fe?De:function(t,e){if(t=Me(t),e=Qe(e),Ee)try{return De(t,e)}catch(t){}if(Pe(t,e))return je(!ze(Be.f,t,e),t[e])};var Oe={},_e=N&&L((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),qe=mt,$e=String,tn=TypeError,en=function(t){if(qe(t))return t;throw tn($e(t)+" is not an object")},nn=N,rn=Ae,cn=_e,an=en,on=He,ln=TypeError,un=Object.defineProperty,sn=Object.getOwnPropertyDescriptor,dn="enumerable",mn="configurable",hn="writable";Oe.f=nn?cn?function(t,e,n){if(an(t),e=on(e),an(n),"function"==typeof t&&"prototype"===e&&"value"in n&&hn in n&&!n.writable){var r=sn(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:mn in n?n.configurable:r.configurable,enumerable:dn in n?n.enumerable:r.enumerable,writable:!1})}return un(t,e,n)}:un:function(t,e,n){if(an(t),e=on(e),an(n),rn)try{return un(t,e,n)}catch(t){}if("get"in n||"set"in n)throw ln("Accessors not supported");return"value"in n&&(t[e]=n.value),t};var bn=Oe,Zn=B,pn=N?function(t,e,n){return bn.f(t,e,Zn(1,n))}:function(t,e,n){return t[e]=n,t},In={exports:{}},yn=N,gn=oe,Xn=Function.prototype,Gn=yn&&Object.getOwnPropertyDescriptor,fn=gn(Xn,"name"),Vn={EXISTS:fn,PROPER:fn&&"something"===function(){}.name,CONFIGURABLE:fn&&(!yn||yn&&Gn(Xn,"name").configurable)},Wn=st,vn=te,Cn=D(Function.toString);Wn(vn.inspectSource)||(vn.inspectSource=function(t){return Cn(t)});var Yn,Sn,Rn,Kn=vn.inspectSource,Ln=st,Nn=Kn,Jn=R.WeakMap,Hn=Ln(Jn)&&/native code/.test(Nn(Jn)),xn=Et.exports,kn=me,Un=xn("keys"),Tn=function(t){return Un[t]||(Un[t]=kn(t))},wn={},An=Hn,Fn=R,zn=D,Bn=mt,jn=pn,Mn=oe,Qn=te,Pn=Tn,En=wn,Dn="Object already initialized",On=Fn.TypeError,_n=Fn.WeakMap;if(An||Qn.state){var qn=Qn.state||(Qn.state=new _n),$n=zn(qn.get),tr=zn(qn.has),er=zn(qn.set);Yn=function(t,e){if(tr(qn,t))throw new On(Dn);return e.facade=t,er(qn,t,e),e},Sn=function(t){return $n(qn,t)||{}},Rn=function(t){return tr(qn,t)}}else{var nr=Pn("state");En[nr]=!0,Yn=function(t,e){if(Mn(t,nr))throw new On(Dn);return e.facade=t,jn(t,nr,e),e},Sn=function(t){return Mn(t,nr)?t[nr]:{}},Rn=function(t){return Mn(t,nr)}}var rr={set:Yn,get:Sn,has:Rn,enforce:function(t){return Rn(t)?Sn(t):Yn(t,{})},getterFor:function(t){return function(e){var n;if(!Bn(e)||(n=Sn(e)).type!==t)throw On("Incompatible receiver, "+t+" required");return n}}},ir=L,cr=st,ar=oe,or=N,lr=Vn.CONFIGURABLE,ur=Kn,sr=rr.enforce,dr=rr.get,mr=Object.defineProperty,hr=or&&!ir((function(){return 8!==mr((function(){}),"length",{value:8}).length})),br=String(String).split("String"),Zr=In.exports=function(t,e,n){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!ar(t,"name")||lr&&t.name!==e)&&mr(t,"name",{value:e,configurable:!0}),hr&&n&&ar(n,"arity")&&t.length!==n.arity&&mr(t,"length",{value:n.arity});try{n&&ar(n,"constructor")&&n.constructor?or&&mr(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var r=sr(t);return ar(r,"source")||(r.source=br.join("string"==typeof e?e:"")),t};Function.prototype.toString=Zr((function(){return cr(this)&&dr(this).source||ur(this)}),"toString");var pr=st,Ir=pn,yr=In.exports,gr=_t,Xr=function(t,e,n,r){r||(r={});var i=r.enumerable,c=void 0!==r.name?r.name:e;return pr(n)&&yr(n,c,r),r.global?i?t[e]=n:gr(e,n):(r.unsafe?t[e]&&(i=!0):delete t[e],i?t[e]=n:Ir(t,e,n)),t},Gr={},fr=Math.ceil,Vr=Math.floor,Wr=Math.trunc||function(t){var e=+t;return(e>0?Vr:fr)(e)},vr=Wr,Cr=function(t){var e=+t;return e!=e||0===e?0:vr(e)},Yr=Cr,Sr=Math.max,Rr=Math.min,Kr=function(t,e){var n=Yr(t);return n<0?Sr(n+e,0):Rr(n,e)},Lr=Cr,Nr=Math.min,Jr=function(t){return t>0?Nr(Lr(t),9007199254740991):0},Hr=Jr,xr=function(t){return Hr(t.length)},kr=ut,Ur=Kr,Tr=xr,wr=function(t){return function(e,n,r){var i,c=kr(e),a=Tr(c),o=Ur(r,a);if(t&&n!=n){for(;a>o;)if((i=c[o++])!=i)return!0}else for(;a>o;o++)if((t||o in c)&&c[o]===n)return t||o||0;return!t&&-1}},Ar={includes:wr(!0),indexOf:wr(!1)},Fr=oe,zr=ut,Br=Ar.indexOf,jr=wn,Mr=D([].push),Qr=function(t,e){var n,r=zr(t),i=0,c=[];for(n in r)!Fr(jr,n)&&Fr(r,n)&&Mr(c,n);for(;e.length>i;)Fr(r,n=e[i++])&&(~Br(c,n)||Mr(c,n));return c},Pr=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Er=Qr,Dr=Pr.concat("length","prototype");Gr.f=Object.getOwnPropertyNames||function(t){return Er(t,Dr)};var Or={};Or.f=Object.getOwnPropertySymbols;var _r=pt,qr=Gr,$r=Or,ti=en,ei=D([].concat),ni=_r("Reflect","ownKeys")||function(t){var e=qr.f(ti(t)),n=$r.f;return n?ei(e,n(t)):e},ri=oe,ii=ni,ci=K,ai=Oe,oi=function(t,e,n){for(var r=ii(e),i=ai.f,c=ci.f,a=0;a<r.length;a++){var o=r[a];ri(t,o)||n&&ri(n,o)||i(t,o,c(e,o))}},li=L,ui=st,si=/#|\.prototype\./,di=function(t,e){var n=hi[mi(t)];return n==Zi||n!=bi&&(ui(e)?li(e):!!e)},mi=di.normalize=function(t){return String(t).replace(si,".").toLowerCase()},hi=di.data={},bi=di.NATIVE="N",Zi=di.POLYFILL="P",pi=di,Ii=R,yi=K.f,gi=pn,Xi=Xr,Gi=_t,fi=oi,Vi=pi,Wi=function(t,e){var n,r,i,c,a,l=t.target,u=t.global,s=t.stat;if(n=u?Ii:s?Ii[l]||Gi(l,{}):(Ii[l]||{}).prototype)for(r in e){if(c=e[r],i=t.dontCallGetSet?(a=yi(n,r))&&a.value:n[r],!Vi(u?r:l+(s?".":"#")+r,t.forced)&&void 0!==i){if(o(c)==o(i))continue;fi(c,i)}(t.sham||i&&i.sham)&&gi(c,"sham",!0),Xi(n,r,c,t)}},vi={};vi[Ve("toStringTag")]="z";var Ci="[object z]"===String(vi),Yi=Ci,Si=st,Ri=$,Ki=Ve("toStringTag"),Li=Object,Ni="Arguments"==Ri(function(){return arguments}()),Ji=Yi?Ri:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Li(t),Ki))?n:Ni?Ri(e):"Object"==(r=Ri(e))&&Si(e.callee)?"Arguments":r},Hi=Ji,xi=String,ki=function(t){if("Symbol"===Hi(t))throw TypeError("Cannot convert a Symbol value to a string");return xi(t)},Ui={},Ti=Qr,wi=Pr,Ai=Object.keys||function(t){return Ti(t,wi)},Fi=N,zi=_e,Bi=Oe,ji=en,Mi=ut,Qi=Ai;Ui.f=Fi&&!zi?Object.defineProperties:function(t,e){ji(t);for(var n,r=Mi(e),i=Qi(e),c=i.length,a=0;c>a;)Bi.f(t,n=i[a++],r[n]);return t};var Pi,Ei=pt("document","documentElement"),Di=en,Oi=Ui,_i=Pr,qi=wn,$i=Ei,tc=Te,ec=Tn("IE_PROTO"),nc=function(){},rc=function(t){return"<script>"+t+"</"+"script>"},ic=function(t){t.write(rc("")),t.close();var e=t.parentWindow.Object;return t=null,e},cc=function(){try{Pi=new ActiveXObject("htmlfile")}catch(t){}var t,e;cc="undefined"!=typeof document?document.domain&&Pi?ic(Pi):((e=tc("iframe")).style.display="none",$i.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(rc("document.F=Object")),t.close(),t.F):ic(Pi);for(var n=_i.length;n--;)delete cc.prototype[_i[n]];return cc()};qi[ec]=!0;var ac=Object.create||function(t,e){var n;return null!==t?(nc.prototype=Di(t),n=new nc,nc.prototype=null,n[ec]=t):n=cc(),void 0===e?n:Oi.f(n,e)},oc={},lc=He,uc=Oe,sc=B,dc=function(t,e,n){var r=lc(e);r in t?uc.f(t,r,sc(0,n)):t[r]=n},mc=Kr,hc=xr,bc=dc,Zc=Array,pc=Math.max,Ic=function(t,e,n){for(var r=hc(t),i=mc(e,r),c=mc(void 0===n?r:n,r),a=Zc(pc(c-i,0)),o=0;i<c;i++,o++)bc(a,o,t[i]);return a.length=o,a},yc=$,gc=ut,Xc=Gr.f,Gc=Ic,fc="object"==("undefined"==typeof window?"undefined":o(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];oc.f=function(t){return fc&&"Window"==yc(t)?function(t){try{return Xc(t)}catch(t){return Gc(fc)}}(t):Xc(gc(t))};var Vc={},Wc=Ve;Vc.f=Wc;var vc=R,Cc=oe,Yc=Vc,Sc=Oe.f,Rc=function(t){var e=vc.Symbol||(vc.Symbol={});Cc(e,t)||Sc(e,t,{value:Yc.f(t)})},Kc=k,Lc=pt,Nc=Ve,Jc=Xr,Hc=function(){var t=Lc("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,r=Nc("toPrimitive");e&&!e[r]&&Jc(e,r,(function(t){return Kc(n,this)}),{arity:1})},xc=Oe.f,kc=oe,Uc=Ve("toStringTag"),Tc=function(t,e,n){t&&!n&&(t=t.prototype),t&&!kc(t,Uc)&&xc(t,Uc,{configurable:!0,value:e})},wc=At,Ac=J,Fc=D(D.bind),zc=function(t,e){return wc(t),void 0===e?t:Ac?Fc(t,e):function(){return t.apply(e,arguments)}},Bc=$,jc=Array.isArray||function(t){return"Array"==Bc(t)},Mc=D,Qc=L,Pc=st,Ec=Ji,Dc=Kn,Oc=function(){},_c=[],qc=pt("Reflect","construct"),$c=/^\s*(?:class|function)\b/,ta=Mc($c.exec),ea=!$c.exec(Oc),na=function(t){if(!Pc(t))return!1;try{return qc(Oc,_c,t),!0}catch(t){return!1}},ra=function(t){if(!Pc(t))return!1;switch(Ec(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return ea||!!ta($c,Dc(t))}catch(t){return!0}};ra.sham=!0;var ia=!qc||Qc((function(){var t;return na(na.call)||!na(Object)||!na((function(){t=!0}))||t}))?ra:na,ca=jc,aa=ia,oa=mt,la=Ve("species"),ua=Array,sa=function(t){var e;return ca(t)&&(e=t.constructor,(aa(e)&&(e===ua||ca(e.prototype))||oa(e)&&null===(e=e[la]))&&(e=void 0)),void 0===e?ua:e},da=function(t,e){return new(sa(t))(0===e?0:e)},ma=zc,ha=it,ba=ie,Za=xr,pa=da,Ia=D([].push),ya=function(t){var e=1==t,n=2==t,r=3==t,i=4==t,c=6==t,a=7==t,o=5==t||c;return function(l,u,s,d){for(var m,h,b=ba(l),Z=ha(b),p=ma(u,s),I=Za(Z),y=0,g=d||pa,X=e?g(l,I):n||a?g(l,0):void 0;I>y;y++)if((o||y in Z)&&(h=p(m=Z[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:Ia(X,m)}else switch(t){case 4:return!1;case 7:Ia(X,m)}return c?-1:r||i?i:X}},ga={forEach:ya(0),map:ya(1),filter:ya(2),some:ya(3),every:ya(4),find:ya(5),findIndex:ya(6),filterReject:ya(7)},Xa=Wi,Ga=R,fa=k,Va=D,Wa=N,va=St,Ca=L,Ya=oe,Sa=It,Ra=en,Ka=ut,La=He,Na=ki,Ja=B,Ha=ac,xa=Ai,ka=Gr,Ua=oc,Ta=Or,wa=K,Aa=Oe,Fa=Ui,za=U,Ba=Xr,ja=Et.exports,Ma=wn,Qa=me,Pa=Ve,Ea=Vc,Da=Rc,Oa=Hc,_a=Tc,qa=rr,$a=ga.forEach,to=Tn("hidden"),eo="Symbol",no=qa.set,ro=qa.getterFor(eo),io=Object.prototype,co=Ga.Symbol,ao=co&&co.prototype,oo=Ga.TypeError,lo=Ga.QObject,uo=wa.f,so=Aa.f,mo=Ua.f,ho=za.f,bo=Va([].push),Zo=ja("symbols"),po=ja("op-symbols"),Io=ja("wks"),yo=!lo||!lo.prototype||!lo.prototype.findChild,go=Wa&&Ca((function(){return 7!=Ha(so({},"a",{get:function(){return so(this,"a",{value:7}).a}})).a}))?function(t,e,n){var r=uo(io,e);r&&delete io[e],so(t,e,n),r&&t!==io&&so(io,e,r)}:so,Xo=function(t,e){var n=Zo[t]=Ha(ao);return no(n,{type:eo,tag:t,description:e}),Wa||(n.description=e),n},Go=function(t,e,n){t===io&&Go(po,e,n),Ra(t);var r=La(e);return Ra(n),Ya(Zo,r)?(n.enumerable?(Ya(t,to)&&t[to][r]&&(t[to][r]=!1),n=Ha(n,{enumerable:Ja(0,!1)})):(Ya(t,to)||so(t,to,Ja(1,{})),t[to][r]=!0),go(t,r,n)):so(t,r,n)},fo=function(t,e){Ra(t);var n=Ka(e),r=xa(n).concat(Co(n));return $a(r,(function(e){Wa&&!fa(Vo,n,e)||Go(t,e,n[e])})),t},Vo=function(t){var e=La(t),n=fa(ho,this,e);return!(this===io&&Ya(Zo,e)&&!Ya(po,e))&&(!(n||!Ya(this,e)||!Ya(Zo,e)||Ya(this,to)&&this[to][e])||n)},Wo=function(t,e){var n=Ka(t),r=La(e);if(n!==io||!Ya(Zo,r)||Ya(po,r)){var i=uo(n,r);return!i||!Ya(Zo,r)||Ya(n,to)&&n[to][r]||(i.enumerable=!0),i}},vo=function(t){var e=mo(Ka(t)),n=[];return $a(e,(function(t){Ya(Zo,t)||Ya(Ma,t)||bo(n,t)})),n},Co=function(t){var e=t===io,n=mo(e?po:Ka(t)),r=[];return $a(n,(function(t){!Ya(Zo,t)||e&&!Ya(io,t)||bo(r,Zo[t])})),r};va||(co=function(){if(Sa(ao,this))throw oo("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?Na(arguments[0]):void 0,e=Qa(t),n=function t(n){this===io&&fa(t,po,n),Ya(this,to)&&Ya(this[to],e)&&(this[to][e]=!1),go(this,e,Ja(1,n))};return Wa&&yo&&go(io,e,{configurable:!0,set:n}),Xo(e,t)},Ba(ao=co.prototype,"toString",(function(){return ro(this).tag})),Ba(co,"withoutSetter",(function(t){return Xo(Qa(t),t)})),za.f=Vo,Aa.f=Go,Fa.f=fo,wa.f=Wo,ka.f=Ua.f=vo,Ta.f=Co,Ea.f=function(t){return Xo(Pa(t),t)},Wa&&(so(ao,"description",{configurable:!0,get:function(){return ro(this).description}}),Ba(io,"propertyIsEnumerable",Vo,{unsafe:!0}))),Xa({global:!0,constructor:!0,wrap:!0,forced:!va,sham:!va},{Symbol:co}),$a(xa(Io),(function(t){Da(t)})),Xa({target:eo,stat:!0,forced:!va},{useSetter:function(){yo=!0},useSimple:function(){yo=!1}}),Xa({target:"Object",stat:!0,forced:!va,sham:!Wa},{create:function(t,e){return void 0===e?Ha(t):fo(Ha(t),e)},defineProperty:Go,defineProperties:fo,getOwnPropertyDescriptor:Wo}),Xa({target:"Object",stat:!0,forced:!va},{getOwnPropertyNames:vo}),Oa(),_a(co,eo),Ma[to]=!0;var Yo=St&&!!Symbol.for&&!!Symbol.keyFor,So=Wi,Ro=pt,Ko=oe,Lo=ki,No=Et.exports,Jo=Yo,Ho=No("string-to-symbol-registry"),xo=No("symbol-to-string-registry");So({target:"Symbol",stat:!0,forced:!Jo},{for:function(t){var e=Lo(t);if(Ko(Ho,e))return Ho[e];var n=Ro("Symbol")(e);return Ho[e]=n,xo[n]=e,n}});var ko=Wi,Uo=oe,To=Ht,wo=kt,Ao=Yo,Fo=(0,Et.exports)("symbol-to-string-registry");ko({target:"Symbol",stat:!0,forced:!Ao},{keyFor:function(t){if(!To(t))throw TypeError(wo(t)+" is not a symbol");if(Uo(Fo,t))return Fo[t]}});var zo=J,Bo=Function.prototype,jo=Bo.apply,Mo=Bo.call,Qo="object"==("undefined"==typeof Reflect?"undefined":o(Reflect))&&Reflect.apply||(zo?Mo.bind(jo):function(){return Mo.apply(jo,arguments)}),Po=D([].slice),Eo=Wi,Do=pt,Oo=Qo,_o=k,qo=D,$o=L,tl=jc,el=st,nl=mt,rl=Ht,il=Po,cl=St,al=Do("JSON","stringify"),ol=qo(/./.exec),ll=qo("".charAt),ul=qo("".charCodeAt),sl=qo("".replace),dl=qo(1..toString),ml=/[\uD800-\uDFFF]/g,hl=/^[\uD800-\uDBFF]$/,bl=/^[\uDC00-\uDFFF]$/,Zl=!cl||$o((function(){var t=Do("Symbol")();return"[null]"!=al([t])||"{}"!=al({a:t})||"{}"!=al(Object(t))})),pl=$o((function(){return'"\\udf06\\ud834"'!==al("\udf06\ud834")||'"\\udead"'!==al("\udead")})),Il=function(t,e){var n=il(arguments),r=e;if((nl(e)||void 0!==t)&&!rl(t))return tl(e)||(e=function(t,e){if(el(r)&&(e=_o(r,this,t,e)),!rl(e))return e}),n[1]=e,Oo(al,null,n)},yl=function(t,e,n){var r=ll(n,e-1),i=ll(n,e+1);return ol(hl,t)&&!ol(bl,i)||ol(bl,t)&&!ol(hl,r)?"\\u"+dl(ul(t,0),16):t};al&&Eo({target:"JSON",stat:!0,arity:3,forced:Zl||pl},{stringify:function(t,e,n){var r=il(arguments),i=Oo(Zl?Il:al,null,r);return pl&&"string"==typeof i?sl(i,ml,yl):i}});var gl=Or,Xl=ie;Wi({target:"Object",stat:!0,forced:!St||L((function(){gl.f(1)}))},{getOwnPropertySymbols:function(t){var e=gl.f;return e?e(Xl(t)):[]}});var Gl=Wi,fl=N,Vl=R,Wl=D,vl=oe,Cl=st,Yl=It,Sl=ki,Rl=Oe.f,Kl=oi,Ll=Vl.Symbol,Nl=Ll&&Ll.prototype;if(fl&&Cl(Ll)&&(!("description"in Nl)||void 0!==Ll().description)){var Jl={},Hl=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:Sl(arguments[0]),e=Yl(Nl,this)?new Ll(t):void 0===t?Ll():Ll(t);return""===t&&(Jl[e]=!0),e};Kl(Hl,Ll),Hl.prototype=Nl,Nl.constructor=Hl;var xl="Symbol(test)"==String(Ll("test")),kl=Wl(Nl.toString),Ul=Wl(Nl.valueOf),Tl=/^Symbol\((.*)\)[^)]+$/,wl=Wl("".replace),Al=Wl("".slice);Rl(Nl,"description",{configurable:!0,get:function(){var t=Ul(this),e=kl(t);if(vl(Jl,t))return"";var n=xl?Al(e,7,-1):wl(e,Tl,"$1");return""===n?void 0:n}}),Gl({global:!0,constructor:!0,forced:!0},{Symbol:Hl})}Rc("asyncIterator"),Rc("hasInstance"),Rc("isConcatSpreadable"),Rc("iterator"),Rc("match"),Rc("matchAll"),Rc("replace"),Rc("search"),Rc("species"),Rc("split");var Fl=Hc;Rc("toPrimitive"),Fl();var zl=pt,Bl=Tc;Rc("toStringTag"),Bl(zl("Symbol"),"Symbol"),Rc("unscopables");var jl=TypeError,Ml=function(t){if(t>9007199254740991)throw jl("Maximum allowed index exceeded");return t},Ql=L,Pl=vt,El=Ve("species"),Dl=function(t){return Pl>=51||!Ql((function(){var e=[];return(e.constructor={})[El]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Ol=Wi,_l=L,ql=jc,$l=mt,tu=ie,eu=xr,nu=Ml,ru=dc,iu=da,cu=Dl,au=vt,ou=Ve("isConcatSpreadable"),lu=au>=51||!_l((function(){var t=[];return t[ou]=!1,t.concat()[0]!==t})),uu=cu("concat"),su=function(t){if(!$l(t))return!1;var e=t[ou];return void 0!==e?!!e:ql(t)};Ol({target:"Array",proto:!0,arity:1,forced:!lu||!uu},{concat:function(t){var e,n,r,i,c,a=tu(this),o=iu(a,0),l=0;for(e=-1,r=arguments.length;e<r;e++)if(su(c=-1===e?a:arguments[e]))for(i=eu(c),nu(l+i),n=0;n<i;n++,l++)n in c&&ru(o,l,c[n]);else nu(l+1),ru(o,l++,c);return o.length=l,o}});var du=kt,mu=TypeError,hu=function(t,e){if(!delete t[e])throw mu("Cannot delete property "+du(e)+" of "+du(t))},bu=ie,Zu=Kr,pu=xr,Iu=hu,yu=Math.min,gu=[].copyWithin||function(t,e){var n=bu(this),r=pu(n),i=Zu(t,r),c=Zu(e,r),a=arguments.length>2?arguments[2]:void 0,o=yu((void 0===a?r:Zu(a,r))-c,r-i),l=1;for(c<i&&i<c+o&&(l=-1,c+=o-1,i+=o-1);o-- >0;)c in n?n[i]=n[c]:Iu(n,i),i+=l,c+=l;return n},Xu=Ve,Gu=ac,fu=Oe.f,Vu=Xu("unscopables"),Wu=Array.prototype;null==Wu[Vu]&&fu(Wu,Vu,{configurable:!0,value:Gu(null)});var vu=function(t){Wu[Vu][t]=!0},Cu=vu;Wi({target:"Array",proto:!0},{copyWithin:gu}),Cu("copyWithin");var Yu=ie,Su=Kr,Ru=xr,Ku=function(t){for(var e=Yu(this),n=Ru(e),r=arguments.length,i=Su(r>1?arguments[1]:void 0,n),c=r>2?arguments[2]:void 0,a=void 0===c?n:Su(c,n);a>i;)e[i++]=t;return e},Lu=vu;Wi({target:"Array",proto:!0},{fill:Ku}),Lu("fill");var Nu=ga.filter;Wi({target:"Array",proto:!0,forced:!Dl("filter")},{filter:function(t){return Nu(this,t,arguments.length>1?arguments[1]:void 0)}});var Ju=Wi,Hu=ga.find,xu=vu,ku="find",Uu=!0;ku in[]&&Array(1).find((function(){Uu=!1})),Ju({target:"Array",proto:!0,forced:Uu},{find:function(t){return Hu(this,t,arguments.length>1?arguments[1]:void 0)}}),xu(ku);var Tu=Wi,wu=ga.findIndex,Au=vu,Fu="findIndex",zu=!0;Fu in[]&&Array(1).findIndex((function(){zu=!1})),Tu({target:"Array",proto:!0,forced:zu},{findIndex:function(t){return wu(this,t,arguments.length>1?arguments[1]:void 0)}}),Au(Fu);var Bu=jc,ju=xr,Mu=Ml,Qu=zc,Pu=function t(e,n,r,i,c,a,o,l){for(var u,s=c,d=0,m=!!o&&Qu(o,l);d<i;)d in r&&(u=m?m(r[d],d,n):r[d],a>0&&Bu(u)?s=t(e,n,u,ju(u),s,a-1)-1:(Mu(s+1),e[s]=u),s++),d++;return s},Eu=Pu,Du=ie,Ou=xr,_u=Cr,qu=da;Wi({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=Du(this),n=Ou(e),r=qu(e,0);return r.length=Eu(r,e,e,n,0,void 0===t?1:_u(t)),r}});var $u=Pu,ts=At,es=ie,ns=xr,rs=da;Wi({target:"Array",proto:!0},{flatMap:function(t){var e,n=es(this),r=ns(n);return ts(t),(e=rs(n,0)).length=$u(e,n,n,r,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var is=k,cs=en,as=zt,os=function(t,e,n){var r,i;cs(t);try{if(!(r=as(t,"return"))){if("throw"===e)throw n;return n}r=is(r,t)}catch(t){i=!0,r=t}if("throw"===e)throw n;if(i)throw r;return cs(r),n},ls=en,us=os,ss={},ds=ss,ms=Ve("iterator"),hs=Array.prototype,bs=function(t){return void 0!==t&&(ds.Array===t||hs[ms]===t)},Zs=Ji,ps=zt,Is=ss,ys=Ve("iterator"),gs=function(t){if(null!=t)return ps(t,ys)||ps(t,"@@iterator")||Is[Zs(t)]},Xs=k,Gs=At,fs=en,Vs=kt,Ws=gs,vs=TypeError,Cs=function(t,e){var n=arguments.length<2?Ws(t):e;if(Gs(n))return fs(Xs(n,t));throw vs(Vs(t)+" is not iterable")},Ys=zc,Ss=k,Rs=ie,Ks=function(t,e,n,r){try{return r?e(ls(n)[0],n[1]):e(n)}catch(e){us(t,"throw",e)}},Ls=bs,Ns=ia,Js=xr,Hs=dc,xs=Cs,ks=gs,Us=Array,Ts=function(t){var e=Rs(t),n=Ns(this),r=arguments.length,i=r>1?arguments[1]:void 0,c=void 0!==i;c&&(i=Ys(i,r>2?arguments[2]:void 0));var a,o,l,u,s,d,m=ks(e),h=0;if(!m||this===Us&&Ls(m))for(a=Js(e),o=n?new this(a):Us(a);a>h;h++)d=c?i(e[h],h):e[h],Hs(o,h,d);else for(s=(u=xs(e,m)).next,o=n?new this:[];!(l=Ss(s,u)).done;h++)d=c?Ks(u,i,[l.value,h],!0):l.value,Hs(o,h,d);return o.length=h,o},ws=Ve("iterator"),As=!1;try{var Fs=0,zs={next:function(){return{done:!!Fs++}},return:function(){As=!0}};zs[ws]=function(){return this},Array.from(zs,(function(){throw 2}))}catch(t){}var Bs=function(t,e){if(!e&&!As)return!1;var n=!1;try{var r={};r[ws]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(t){}return n},js=Ts;Wi({target:"Array",stat:!0,forced:!Bs((function(t){Array.from(t)}))},{from:js});var Ms=Ar.includes,Qs=vu;Wi({target:"Array",proto:!0,forced:L((function(){return!Array(1).includes()}))},{includes:function(t){return Ms(this,t,arguments.length>1?arguments[1]:void 0)}}),Qs("includes");var Ps,Es,Ds,Os=!L((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),_s=oe,qs=st,$s=ie,td=Os,ed=Tn("IE_PROTO"),nd=Object,rd=nd.prototype,id=td?nd.getPrototypeOf:function(t){var e=$s(t);if(_s(e,ed))return e[ed];var n=e.constructor;return qs(n)&&e instanceof n?n.prototype:e instanceof nd?rd:null},cd=L,ad=st,od=id,ld=Xr,ud=Ve("iterator"),sd=!1;[].keys&&("next"in(Ds=[].keys())?(Es=od(od(Ds)))!==Object.prototype&&(Ps=Es):sd=!0);var dd=null==Ps||cd((function(){var t={};return Ps[ud].call(t)!==t}));dd&&(Ps={}),ad(Ps[ud])||ld(Ps,ud,(function(){return this}));var md={IteratorPrototype:Ps,BUGGY_SAFARI_ITERATORS:sd},hd=md.IteratorPrototype,bd=ac,Zd=B,pd=Tc,Id=ss,yd=function(){return this},gd=function(t,e,n,r){var i=e+" Iterator";return t.prototype=bd(hd,{next:Zd(+!r,n)}),pd(t,i,!1),Id[i]=yd,t},Xd=st,Gd=String,fd=TypeError,Vd=function(t){if("object"==o(t)||Xd(t))return t;throw fd("Can't set "+Gd(t)+" as a prototype")},Wd=D,vd=en,Cd=Vd,Yd=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Wd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,r){return vd(n),Cd(r),e?t(n,r):n.__proto__=r,n}}():void 0),Sd=Wi,Rd=k,Kd=st,Ld=gd,Nd=id,Jd=Yd,Hd=Tc,xd=pn,kd=Xr,Ud=ss,Td=Vn.PROPER,wd=Vn.CONFIGURABLE,Ad=md.IteratorPrototype,Fd=md.BUGGY_SAFARI_ITERATORS,zd=Ve("iterator"),Bd="keys",jd="values",Md="entries",Qd=function(){return this},Pd=function(t,e,n,r,i,c,a){Ld(n,e,r);var o,l,u,s=function(t){if(t===i&&Z)return Z;if(!Fd&&t in h)return h[t];switch(t){case Bd:case jd:case Md:return function(){return new n(this,t)}}return function(){return new n(this)}},d=e+" Iterator",m=!1,h=t.prototype,b=h[zd]||h["@@iterator"]||i&&h[i],Z=!Fd&&b||s(i),p="Array"==e&&h.entries||b;if(p&&(o=Nd(p.call(new t)))!==Object.prototype&&o.next&&(Nd(o)!==Ad&&(Jd?Jd(o,Ad):Kd(o[zd])||kd(o,zd,Qd)),Hd(o,d,!0)),Td&&i==jd&&b&&b.name!==jd&&(wd?xd(h,"name",jd):(m=!0,Z=function(){return Rd(b,this)})),i)if(l={values:s(jd),keys:c?Z:s(Bd),entries:s(Md)},a)for(u in l)(Fd||m||!(u in h))&&kd(h,u,l[u]);else Sd({target:e,proto:!0,forced:Fd||m},l);return h[zd]!==Z&&kd(h,zd,Z,{name:i}),Ud[e]=Z,l},Ed=ut,Dd=vu,Od=ss,_d=rr,qd=Oe.f,$d=Pd,tm=N,em="Array Iterator",nm=_d.set,rm=_d.getterFor(em),im=$d(Array,"Array",(function(t,e){nm(this,{type:em,target:Ed(t),index:0,kind:e})}),(function(){var t=rm(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),cm=Od.Arguments=Od.Array;if(Dd("keys"),Dd("values"),Dd("entries"),tm&&"values"!==cm.name)try{qd(cm,"name",{value:"values"})}catch(t){}var am=L,om=function(t,e){var n=[][t];return!!n&&am((function(){n.call(null,e||function(){return 1},1)}))},lm=Wi,um=it,sm=ut,dm=om,mm=D([].join),hm=um!=Object,bm=dm("join",",");lm({target:"Array",proto:!0,forced:hm||!bm},{join:function(t){return mm(sm(this),void 0===t?",":t)}});var Zm=ga.map;Wi({target:"Array",proto:!0,forced:!Dl("map")},{map:function(t){return Zm(this,t,arguments.length>1?arguments[1]:void 0)}});var pm=ia,Im=dc,ym=Array;Wi({target:"Array",stat:!0,forced:L((function(){function t(){}return!(ym.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new(pm(this)?this:ym)(e);e>t;)Im(n,t,arguments[t++]);return n.length=e,n}});var gm=Wi,Xm=jc,Gm=ia,fm=mt,Vm=Kr,Wm=xr,vm=ut,Cm=dc,Ym=Ve,Sm=Po,Rm=Dl("slice"),Km=Ym("species"),Lm=Array,Nm=Math.max;gm({target:"Array",proto:!0,forced:!Rm},{slice:function(t,e){var n,r,i,c=vm(this),a=Wm(c),o=Vm(t,a),l=Vm(void 0===e?a:e,a);if(Xm(c)&&(n=c.constructor,(Gm(n)&&(n===Lm||Xm(n.prototype))||fm(n)&&null===(n=n[Km]))&&(n=void 0),n===Lm||void 0===n))return Sm(c,o,l);for(r=new(void 0===n?Lm:n)(Nm(l-o,0)),i=0;o<l;o++,i++)o in c&&Cm(r,i,c[o]);return r.length=i,r}});var Jm=Ic,Hm=Math.floor,xm=function(t,e){for(var n,r,i=t.length,c=1;c<i;){for(r=c,n=t[c];r&&e(t[r-1],n)>0;)t[r]=t[--r];r!==c++&&(t[r]=n)}return t},km=function(t,e,n,r){for(var i=e.length,c=n.length,a=0,o=0;a<i||o<c;)t[a+o]=a<i&&o<c?r(e[a],n[o])<=0?e[a++]:n[o++]:a<i?e[a++]:n[o++];return t},Um=function t(e,n){var r=e.length,i=Hm(r/2);return r<8?xm(e,n):km(e,t(Jm(e,0,i),n),t(Jm(e,i),n),n)},Tm=yt.match(/firefox\/(\d+)/i),wm=!!Tm&&+Tm[1],Am=/MSIE|Trident/.test(yt),Fm=yt.match(/AppleWebKit\/(\d+)\./),zm=!!Fm&&+Fm[1],Bm=Wi,jm=D,Mm=At,Qm=ie,Pm=xr,Em=hu,Dm=ki,Om=L,_m=Um,qm=om,$m=wm,th=Am,eh=vt,nh=zm,rh=[],ih=jm(rh.sort),ch=jm(rh.push),ah=Om((function(){rh.sort(void 0)})),oh=Om((function(){rh.sort(null)})),lh=qm("sort"),uh=!Om((function(){if(eh)return eh<70;if(!($m&&$m>3)){if(th)return!0;if(nh)return nh<603;var t,e,n,r,i="";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(r=0;r<47;r++)rh.push({k:e+r,v:n})}for(rh.sort((function(t,e){return e.v-t.v})),r=0;r<rh.length;r++)e=rh[r].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));Bm({target:"Array",proto:!0,forced:ah||!oh||!lh||!uh},{sort:function(t){void 0!==t&&Mm(t);var e=Qm(this);if(uh)return void 0===t?ih(e):ih(e,t);var n,r,i=[],c=Pm(e);for(r=0;r<c;r++)r in e&&ch(i,e[r]);for(_m(i,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:Dm(e)>Dm(n)?1:-1}}(t)),n=i.length,r=0;r<n;)e[r]=i[r++];for(;r<c;)Em(e,r++);return e}});var sh=pt,dh=Oe,mh=N,hh=Ve("species"),bh=function(t){var e=sh(t),n=dh.f;mh&&e&&!e[hh]&&n(e,hh,{configurable:!0,get:function(){return this}})};bh("Array");var Zh=Wi,ph=ie,Ih=Kr,yh=Cr,gh=xr,Xh=Ml,Gh=da,fh=dc,Vh=hu,Wh=Dl("splice"),vh=Math.max,Ch=Math.min;Zh({target:"Array",proto:!0,forced:!Wh},{splice:function(t,e){var n,r,i,c,a,o,l=ph(this),u=gh(l),s=Ih(t,u),d=arguments.length;for(0===d?n=r=0:1===d?(n=0,r=u-s):(n=d-2,r=Ch(vh(yh(e),0),u-s)),Xh(u+n-r),i=Gh(l,r),c=0;c<r;c++)(a=s+c)in l&&fh(i,c,l[a]);if(i.length=r,n<r){for(c=s;c<u-r;c++)o=c+n,(a=c+r)in l?l[o]=l[a]:Vh(l,o);for(c=u;c>u-r+n;c--)Vh(l,c-1)}else if(n>r)for(c=u-r;c>s;c--)o=c+n-1,(a=c+r-1)in l?l[o]=l[a]:Vh(l,o);for(c=0;c<n;c++)l[c+s]=arguments[c+2];return l.length=u-r+n,i}}),vu("flat"),vu("flatMap");var Yh="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Sh=Xr,Rh=function(t,e,n){for(var r in e)Sh(t,r,e[r],n);return t},Kh=It,Lh=TypeError,Nh=function(t,e){if(Kh(e,t))return t;throw Lh("Incorrect invocation")},Jh=Cr,Hh=Jr,xh=RangeError,kh=function(t){if(void 0===t)return 0;var e=Jh(t),n=Hh(e);if(e!==n)throw xh("Wrong length or index");return n},Uh=Array,Th=Math.abs,wh=Math.pow,Ah=Math.floor,Fh=Math.log,zh=Math.LN2,Bh={pack:function(t,e,n){var r,i,c,a=Uh(n),o=8*n-e-1,l=(1<<o)-1,u=l>>1,s=23===e?wh(2,-24)-wh(2,-77):0,d=t<0||0===t&&1/t<0?1:0,m=0;for((t=Th(t))!=t||t===1/0?(i=t!=t?1:0,r=l):(r=Ah(Fh(t)/zh),t*(c=wh(2,-r))<1&&(r--,c*=2),(t+=r+u>=1?s/c:s*wh(2,1-u))*c>=2&&(r++,c/=2),r+u>=l?(i=0,r=l):r+u>=1?(i=(t*c-1)*wh(2,e),r+=u):(i=t*wh(2,u-1)*wh(2,e),r=0));e>=8;)a[m++]=255&i,i/=256,e-=8;for(r=r<<e|i,o+=e;o>0;)a[m++]=255&r,r/=256,o-=8;return a[--m]|=128*d,a},unpack:function(t,e){var n,r=t.length,i=8*r-e-1,c=(1<<i)-1,a=c>>1,o=i-7,l=r-1,u=t[l--],s=127&u;for(u>>=7;o>0;)s=256*s+t[l--],o-=8;for(n=s&(1<<-o)-1,s>>=-o,o+=e;o>0;)n=256*n+t[l--],o-=8;if(0===s)s=1-a;else{if(s===c)return n?NaN:u?-1/0:1/0;n+=wh(2,e),s-=a}return(u?-1:1)*n*wh(2,s-e)}},jh=R,Mh=D,Qh=N,Ph=Yh,Eh=Vn,Dh=pn,Oh=Rh,_h=L,qh=Nh,$h=Cr,tb=Jr,eb=kh,nb=Bh,rb=id,ib=Yd,cb=Gr.f,ab=Oe.f,ob=Ku,lb=Ic,ub=Tc,sb=Eh.PROPER,db=Eh.CONFIGURABLE,mb=rr.get,hb=rr.set,bb="ArrayBuffer",Zb="DataView",pb="Wrong index",Ib=jh.ArrayBuffer,yb=Ib,gb=yb&&yb.prototype,Xb=jh.DataView,Gb=Xb&&Xb.prototype,fb=Object.prototype,Vb=jh.Array,Wb=jh.RangeError,vb=Mh(ob),Cb=Mh([].reverse),Yb=nb.pack,Sb=nb.unpack,Rb=function(t){return[255&t]},Kb=function(t){return[255&t,t>>8&255]},Lb=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},Nb=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Jb=function(t){return Yb(t,23,4)},Hb=function(t){return Yb(t,52,8)},xb=function(t,e){ab(t.prototype,e,{get:function(){return mb(this)[e]}})},kb=function(t,e,n,r){var i=eb(n),c=mb(t);if(i+e>c.byteLength)throw Wb(pb);var a=mb(c.buffer).bytes,o=i+c.byteOffset,l=lb(a,o,o+e);return r?l:Cb(l)},Ub=function(t,e,n,r,i,c){var a=eb(n),o=mb(t);if(a+e>o.byteLength)throw Wb(pb);for(var l=mb(o.buffer).bytes,u=a+o.byteOffset,s=r(+i),d=0;d<e;d++)l[u+d]=s[c?d:e-d-1]};if(Ph){var Tb=sb&&Ib.name!==bb;if(_h((function(){Ib(1)}))&&_h((function(){new Ib(-1)}))&&!_h((function(){return new Ib,new Ib(1.5),new Ib(NaN),Tb&&!db})))Tb&&db&&Dh(Ib,"name",bb);else{(yb=function(t){return qh(this,gb),new Ib(eb(t))}).prototype=gb;for(var wb,Ab=cb(Ib),Fb=0;Ab.length>Fb;)(wb=Ab[Fb++])in yb||Dh(yb,wb,Ib[wb]);gb.constructor=yb}ib&&rb(Gb)!==fb&&ib(Gb,fb);var zb=new Xb(new yb(2)),Bb=Mh(Gb.setInt8);zb.setInt8(0,2147483648),zb.setInt8(1,2147483649),!zb.getInt8(0)&&zb.getInt8(1)||Oh(Gb,{setInt8:function(t,e){Bb(this,t,e<<24>>24)},setUint8:function(t,e){Bb(this,t,e<<24>>24)}},{unsafe:!0})}else yb=function(t){qh(this,gb);var e=eb(t);hb(this,{bytes:vb(Vb(e),0),byteLength:e}),Qh||(this.byteLength=e)},gb=yb.prototype,Xb=function(t,e,n){qh(this,Gb),qh(t,gb);var r=mb(t).byteLength,i=$h(e);if(i<0||i>r)throw Wb("Wrong offset");if(i+(n=void 0===n?r-i:tb(n))>r)throw Wb("Wrong length");hb(this,{buffer:t,byteLength:n,byteOffset:i}),Qh||(this.buffer=t,this.byteLength=n,this.byteOffset=i)},Gb=Xb.prototype,Qh&&(xb(yb,"byteLength"),xb(Xb,"buffer"),xb(Xb,"byteLength"),xb(Xb,"byteOffset")),Oh(Gb,{getInt8:function(t){return kb(this,1,t)[0]<<24>>24},getUint8:function(t){return kb(this,1,t)[0]},getInt16:function(t){var e=kb(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=kb(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return Nb(kb(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return Nb(kb(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Sb(kb(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Sb(kb(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){Ub(this,1,t,Rb,e)},setUint8:function(t,e){Ub(this,1,t,Rb,e)},setInt16:function(t,e){Ub(this,2,t,Kb,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){Ub(this,2,t,Kb,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){Ub(this,4,t,Lb,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){Ub(this,4,t,Lb,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){Ub(this,4,t,Jb,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){Ub(this,8,t,Hb,e,arguments.length>2?arguments[2]:void 0)}});ub(yb,bb),ub(Xb,Zb);var jb={ArrayBuffer:yb,DataView:Xb},Mb=bh,Qb="ArrayBuffer",Pb=jb.ArrayBuffer;Wi({global:!0,constructor:!0,forced:R.ArrayBuffer!==Pb},{ArrayBuffer:Pb}),Mb(Qb);var Eb=en,Db=Pt,Ob=TypeError,_b=oe,qb=Xr,$b=function(t){if(Eb(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw Ob("Incorrect hint");return Db(this,t)},tZ=Ve("toPrimitive"),eZ=Date.prototype;_b(eZ,tZ)||qb(eZ,tZ,$b);var nZ=st,rZ=mt,iZ=Oe,cZ=id,aZ=Ve,oZ=In.exports,lZ=aZ("hasInstance"),uZ=Function.prototype;lZ in uZ||iZ.f(uZ,lZ,{value:oZ((function(t){if(!nZ(this)||!rZ(t))return!1;var e=this.prototype;if(!rZ(e))return t instanceof this;for(;t=cZ(t);)if(e===t)return!0;return!1}),lZ)});var sZ=N,dZ=Vn.EXISTS,mZ=D,hZ=Oe.f,bZ=Function.prototype,ZZ=mZ(bZ.toString),pZ=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,IZ=mZ(pZ.exec);sZ&&!dZ&&hZ(bZ,"name",{configurable:!0,get:function(){try{return IZ(pZ,ZZ(this))[1]}catch(t){return""}}}),Wi({global:!0},{globalThis:R}),Tc(R.JSON,"JSON",!0);var yZ={exports:{}},gZ=L((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}})),XZ=L,GZ=mt,fZ=$,VZ=gZ,WZ=Object.isExtensible,vZ=XZ((function(){WZ(1)}))||VZ?function(t){return!!GZ(t)&&((!VZ||"ArrayBuffer"!=fZ(t))&&(!WZ||WZ(t)))}:WZ,CZ=!L((function(){return Object.isExtensible(Object.preventExtensions({}))})),YZ=Wi,SZ=D,RZ=wn,KZ=mt,LZ=oe,NZ=Oe.f,JZ=Gr,HZ=oc,xZ=vZ,kZ=CZ,UZ=!1,TZ=me("meta"),wZ=0,AZ=function(t){NZ(t,TZ,{value:{objectID:"O"+wZ++,weakData:{}}})},FZ=yZ.exports={enable:function(){FZ.enable=function(){},UZ=!0;var t=JZ.f,e=SZ([].splice),n={};n[TZ]=1,t(n).length&&(JZ.f=function(n){for(var r=t(n),i=0,c=r.length;i<c;i++)if(r[i]===TZ){e(r,i,1);break}return r},YZ({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:HZ.f}))},fastKey:function(t,e){if(!KZ(t))return"symbol"==o(t)?t:("string"==typeof t?"S":"P")+t;if(!LZ(t,TZ)){if(!xZ(t))return"F";if(!e)return"E";AZ(t)}return t[TZ].objectID},getWeakData:function(t,e){if(!LZ(t,TZ)){if(!xZ(t))return!0;if(!e)return!1;AZ(t)}return t[TZ].weakData},onFreeze:function(t){return kZ&&UZ&&xZ(t)&&!LZ(t,TZ)&&AZ(t),t}};RZ[TZ]=!0;var zZ=zc,BZ=k,jZ=en,MZ=kt,QZ=bs,PZ=xr,EZ=It,DZ=Cs,OZ=gs,_Z=os,qZ=TypeError,$Z=function(t,e){this.stopped=t,this.result=e},tp=$Z.prototype,ep=function(t,e,n){var r,i,c,a,l,u,s,d=n&&n.that,m=!(!n||!n.AS_ENTRIES),h=!(!n||!n.IS_ITERATOR),b=!(!n||!n.INTERRUPTED),Z=zZ(e,d),p=function(t){return r&&_Z(r,"normal",t),new $Z(!0,t)},I=function(t){return m?(jZ(t),b?Z(t[0],t[1],p):Z(t[0],t[1])):b?Z(t,p):Z(t)};if(h)r=t;else{if(!(i=OZ(t)))throw qZ(MZ(t)+" is not iterable");if(QZ(i)){for(c=0,a=PZ(t);a>c;c++)if((l=I(t[c]))&&EZ(tp,l))return l;return new $Z(!1)}r=DZ(t,i)}for(u=r.next;!(s=BZ(u,r)).done;){try{l=I(s.value)}catch(t){_Z(r,"throw",t)}if("object"==o(l)&&l&&EZ(tp,l))return l}return new $Z(!1)},np=st,rp=mt,ip=Yd,cp=function(t,e,n){var r,i;return ip&&np(r=e.constructor)&&r!==n&&rp(i=r.prototype)&&i!==n.prototype&&ip(t,i),t},ap=Wi,op=R,lp=D,up=pi,sp=Xr,dp=yZ.exports,mp=ep,hp=Nh,bp=st,Zp=mt,pp=L,Ip=Bs,yp=Tc,gp=cp,Xp=function(t,e,n){var r=-1!==t.indexOf("Map"),i=-1!==t.indexOf("Weak"),c=r?"set":"add",a=op[t],o=a&&a.prototype,l=a,u={},s=function(t){var e=lp(o[t]);sp(o,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(i&&!Zp(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return i&&!Zp(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(i&&!Zp(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(up(t,!bp(a)||!(i||o.forEach&&!pp((function(){(new a).entries().next()})))))l=n.getConstructor(e,t,r,c),dp.enable();else if(up(t,!0)){var d=new l,m=d[c](i?{}:-0,1)!=d,h=pp((function(){d.has(1)})),b=Ip((function(t){new a(t)})),Z=!i&&pp((function(){for(var t=new a,e=5;e--;)t[c](e,e);return!t.has(-0)}));b||((l=e((function(t,e){hp(t,o);var n=gp(new a,t,l);return null!=e&&mp(e,n[c],{that:n,AS_ENTRIES:r}),n}))).prototype=o,o.constructor=l),(h||Z)&&(s("delete"),s("has"),r&&s("get")),(Z||m)&&s(c),i&&o.clear&&delete o.clear}return u[t]=l,ap({global:!0,constructor:!0,forced:l!=a},u),yp(l,t),i||n.setStrong(l,t,r),l},Gp=Oe.f,fp=ac,Vp=Rh,Wp=zc,vp=Nh,Cp=ep,Yp=Pd,Sp=bh,Rp=N,Kp=yZ.exports.fastKey,Lp=rr.set,Np=rr.getterFor,Jp={getConstructor:function(t,e,n,r){var i=t((function(t,i){vp(t,c),Lp(t,{type:e,index:fp(null),first:void 0,last:void 0,size:0}),Rp||(t.size=0),null!=i&&Cp(i,t[r],{that:t,AS_ENTRIES:n})})),c=i.prototype,a=Np(e),o=function(t,e,n){var r,i,c=a(t),o=l(t,e);return o?o.value=n:(c.last=o={index:i=Kp(e,!0),key:e,value:n,previous:r=c.last,next:void 0,removed:!1},c.first||(c.first=o),r&&(r.next=o),Rp?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},l=function(t,e){var n,r=a(t),i=Kp(e);if("F"!==i)return r.index[i];for(n=r.first;n;n=n.next)if(n.key==e)return n};return Vp(c,{clear:function(){for(var t=a(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,Rp?t.size=0:this.size=0},delete:function(t){var e=this,n=a(e),r=l(e,t);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),Rp?n.size--:e.size--}return!!r},forEach:function(t){for(var e,n=a(this),r=Wp(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(r(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!l(this,t)}}),Vp(c,n?{get:function(t){var e=l(this,t);return e&&e.value},set:function(t,e){return o(this,0===t?0:t,e)}}:{add:function(t){return o(this,t=0===t?0:t,t)}}),Rp&&Gp(c,"size",{get:function(){return a(this).size}}),i},setStrong:function(t,e,n){var r=e+" Iterator",i=Np(e),c=Np(r);Yp(t,e,(function(t,e){Lp(this,{type:r,target:t,state:i(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),Sp(e)}};Xp("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),Jp);var Hp=Math.log,xp=Math.log1p||function(t){var e=+t;return e>-1e-8&&e<1e-8?e-e*e/2:Hp(1+e)},kp=Wi,Up=xp,Tp=Math.acosh,wp=Math.log,Ap=Math.sqrt,Fp=Math.LN2;kp({target:"Math",stat:!0,forced:!Tp||710!=Math.floor(Tp(Number.MAX_VALUE))||Tp(1/0)!=1/0},{acosh:function(t){var e=+t;return e<1?NaN:e>94906265.62425156?wp(e)+Fp:Up(e-1+Ap(e-1)*Ap(e+1))}});var zp=Wi,Bp=Math.asinh,jp=Math.log,Mp=Math.sqrt;zp({target:"Math",stat:!0,forced:!(Bp&&1/Bp(0)>0)},{asinh:function t(e){var n=+e;return isFinite(n)&&0!=n?n<0?-t(-n):jp(n+Mp(n*n+1)):n}});var Qp=Wi,Pp=Math.atanh,Ep=Math.log;Qp({target:"Math",stat:!0,forced:!(Pp&&1/Pp(-0)<0)},{atanh:function(t){var e=+t;return 0==e?e:Ep((1+e)/(1-e))/2}});var Dp=Math.sign||function(t){var e=+t;return 0==e||e!=e?e:e<0?-1:1},Op=Wi,_p=Dp,qp=Math.abs,$p=Math.pow;Op({target:"Math",stat:!0},{cbrt:function(t){var e=+t;return _p(e)*$p(qp(e),1/3)}});var tI=Wi,eI=Math.floor,nI=Math.log,rI=Math.LOG2E;tI({target:"Math",stat:!0},{clz32:function(t){var e=t>>>0;return e?31-eI(nI(e+.5)*rI):32}});var iI=Math.expm1,cI=Math.exp,aI=!iI||iI(10)>22025.465794806718||iI(10)<22025.465794806718||-2e-17!=iI(-2e-17)?function(t){var e=+t;return 0==e?e:e>-1e-6&&e<1e-6?e+e*e/2:cI(e)-1}:iI,oI=Wi,lI=aI,uI=Math.cosh,sI=Math.abs,dI=Math.E;oI({target:"Math",stat:!0,forced:!uI||uI(710)===1/0},{cosh:function(t){var e=lI(sI(t)-1)+1;return(e+1/(e*dI*dI))*(dI/2)}});var mI=aI;Wi({target:"Math",stat:!0,forced:mI!=Math.expm1},{expm1:mI});var hI=Dp,bI=Math.abs,ZI=Math.pow,pI=ZI(2,-52),II=ZI(2,-23),yI=ZI(2,127)*(2-II),gI=ZI(2,-126),XI=Math.fround||function(t){var e,n,r=+t,i=bI(r),c=hI(r);return i<gI?c*function(t){return t+1/pI-1/pI}(i/gI/II)*gI*II:(n=(e=(1+II/pI)*i)-(e-i))>yI||n!=n?c*(1/0):c*n};Wi({target:"Math",stat:!0},{fround:XI});var GI=Wi,fI=Math.hypot,VI=Math.abs,WI=Math.sqrt;GI({target:"Math",stat:!0,arity:2,forced:!!fI&&fI(1/0,NaN)!==1/0},{hypot:function(t,e){for(var n,r,i=0,c=0,a=arguments.length,o=0;c<a;)o<(n=VI(arguments[c++]))?(i=i*(r=o/n)*r+1,o=n):i+=n>0?(r=n/o)*r:n;return o===1/0?1/0:o*WI(i)}});var vI=Wi,CI=L,YI=Math.imul;vI({target:"Math",stat:!0,forced:CI((function(){return-5!=YI(4294967295,5)||2!=YI.length}))},{imul:function(t,e){var n=65535,r=+t,i=+e,c=n&r,a=n&i;return 0|c*a+((n&r>>>16)*a+c*(n&i>>>16)<<16>>>0)}});var SI=Math.log,RI=Math.LOG10E;Wi({target:"Math",stat:!0},{log10:Math.log10||function(t){return SI(t)*RI}}),Wi({target:"Math",stat:!0},{log1p:xp});var KI=Wi,LI=Math.log,NI=Math.LN2;KI({target:"Math",stat:!0},{log2:function(t){return LI(t)/NI}}),Wi({target:"Math",stat:!0},{sign:Dp});var JI=Wi,HI=L,xI=aI,kI=Math.abs,UI=Math.exp,TI=Math.E;JI({target:"Math",stat:!0,forced:HI((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){var e=+t;return kI(e)<1?(xI(e)-xI(-e))/2:(UI(e-1)-UI(-e-1))*(TI/2)}});var wI=Wi,AI=aI,FI=Math.exp;wI({target:"Math",stat:!0},{tanh:function(t){var e=+t,n=AI(e),r=AI(-e);return n==1/0?1:r==1/0?-1:(n-r)/(FI(e)+FI(-e))}}),Tc(Math,"Math",!0),Wi({target:"Math",stat:!0},{trunc:Wr});var zI=D(1..valueOf),BI="\t\n\v\f\r                 \u2028\u2029\ufeff",jI=at,MI=ki,QI=D("".replace),PI="[\t\n\v\f\r                 \u2028\u2029\ufeff]",EI=RegExp("^"+PI+PI+"*"),DI=RegExp(PI+PI+"*$"),OI=function(t){return function(e){var n=MI(jI(e));return 1&t&&(n=QI(n,EI,"")),2&t&&(n=QI(n,DI,"")),n}},_I={start:OI(1),end:OI(2),trim:OI(3)},qI=N,$I=R,ty=D,ey=pi,ny=Xr,ry=oe,iy=cp,cy=It,ay=Ht,oy=Le,ly=L,uy=Gr.f,sy=K.f,dy=Oe.f,my=zI,hy=_I.trim,by="Number",Zy=$I.Number,py=Zy.prototype,Iy=$I.TypeError,yy=ty("".slice),gy=ty("".charCodeAt),Xy=function(t){var e=oy(t,"number");return"bigint"==typeof e?e:Gy(e)},Gy=function(t){var e,n,r,i,c,a,o,l,u=oy(t,"number");if(ay(u))throw Iy("Cannot convert a Symbol value to a number");if("string"==typeof u&&u.length>2)if(u=hy(u),43===(e=gy(u,0))||45===e){if(88===(n=gy(u,2))||120===n)return NaN}else if(48===e){switch(gy(u,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+u}for(a=(c=yy(u,2)).length,o=0;o<a;o++)if((l=gy(c,o))<48||l>i)return NaN;return parseInt(c,r)}return+u};if(ey(by,!Zy(" 0o1")||!Zy("0b1")||Zy("+0x1"))){for(var fy,Vy=function(t){var e=arguments.length<1?0:Zy(Xy(t)),n=this;return cy(py,n)&&ly((function(){my(n)}))?iy(Object(e),n,Vy):e},Wy=qI?uy(Zy):"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(","),vy=0;Wy.length>vy;vy++)ry(Zy,fy=Wy[vy])&&!ry(Vy,fy)&&dy(Vy,fy,sy(Zy,fy));Vy.prototype=py,py.constructor=Vy,ny($I,by,Vy,{constructor:!0})}Wi({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var Cy=R.isFinite;Wi({target:"Number",stat:!0},{isFinite:Number.isFinite||function(t){return"number"==typeof t&&Cy(t)}});var Yy=mt,Sy=Math.floor,Ry=Number.isInteger||function(t){return!Yy(t)&&isFinite(t)&&Sy(t)===t};Wi({target:"Number",stat:!0},{isInteger:Ry}),Wi({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var Ky=Wi,Ly=Ry,Ny=Math.abs;Ky({target:"Number",stat:!0},{isSafeInteger:function(t){return Ly(t)&&Ny(t)<=9007199254740991}}),Wi({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),Wi({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var Jy=R,Hy=L,xy=ki,ky=_I.trim,Uy=D("".charAt),Ty=Jy.parseFloat,wy=Jy.Symbol,Ay=wy&&wy.iterator,Fy=1/Ty("\t\n\v\f\r                 \u2028\u2029\ufeff-0")!=-1/0||Ay&&!Hy((function(){Ty(Object(Ay))}))?function(t){var e=ky(xy(t)),n=Ty(e);return 0===n&&"-"==Uy(e,0)?-0:n}:Ty;Wi({target:"Number",stat:!0,forced:Number.parseFloat!=Fy},{parseFloat:Fy});var zy=R,By=L,jy=D,My=ki,Qy=_I.trim,Py=BI,Ey=zy.parseInt,Dy=zy.Symbol,Oy=Dy&&Dy.iterator,_y=/^[+-]?0x/i,qy=jy(_y.exec),$y=8!==Ey(Py+"08")||22!==Ey(Py+"0x16")||Oy&&!By((function(){Ey(Object(Oy))}))?function(t,e){var n=Qy(My(t));return Ey(n,e>>>0||(qy(_y,n)?16:10))}:Ey,tg=$y;Wi({target:"Number",stat:!0,forced:Number.parseInt!=tg},{parseInt:tg});var eg=Cr,ng=ki,rg=at,ig=RangeError,cg=function(t){var e=ng(rg(this)),n="",r=eg(t);if(r<0||r==1/0)throw ig("Wrong number of repetitions");for(;r>0;(r>>>=1)&&(e+=e))1&r&&(n+=e);return n},ag=Wi,og=D,lg=Cr,ug=zI,sg=cg,dg=L,mg=RangeError,hg=String,bg=Math.floor,Zg=og(sg),pg=og("".slice),Ig=og(1..toFixed),yg=function t(e,n,r){return 0===n?r:n%2==1?t(e,n-1,r*e):t(e*e,n/2,r)},gg=function(t,e,n){for(var r=-1,i=n;++r<6;)i+=e*t[r],t[r]=i%1e7,i=bg(i/1e7)},Xg=function(t,e){for(var n=6,r=0;--n>=0;)r+=t[n],t[n]=bg(r/e),r=r%e*1e7},Gg=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var r=hg(t[e]);n=""===n?r:n+Zg("0",7-r.length)+r}return n};ag({target:"Number",proto:!0,forced:dg((function(){return"0.000"!==Ig(8e-5,3)||"1"!==Ig(.9,0)||"1.25"!==Ig(1.255,2)||"1000000000000000128"!==Ig(0xde0b6b3a7640080,0)}))||!dg((function(){Ig({})}))},{toFixed:function(t){var e,n,r,i,c=ug(this),a=lg(t),o=[0,0,0,0,0,0],l="",u="0";if(a<0||a>20)throw mg("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return hg(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(gg(o,0,n),r=a;r>=7;)gg(o,1e7,0),r-=7;for(gg(o,yg(10,r,1),0),r=e-1;r>=23;)Xg(o,1<<23),r-=23;Xg(o,1<<r),gg(o,1,1),Xg(o,2),u=Gg(o)}else gg(o,0,n),gg(o,1<<-e,0),u=Gg(o)+Zg("0",a);return u=a>0?l+((i=u.length)<=a?"0."+Zg("0",a-i)+u:pg(u,0,i-a)+"."+pg(u,i-a)):l+u}});var fg=N,Vg=D,Wg=k,vg=L,Cg=Ai,Yg=Or,Sg=U,Rg=ie,Kg=it,Lg=Object.assign,Ng=Object.defineProperty,Jg=Vg([].concat),Hg=!Lg||vg((function(){if(fg&&1!==Lg({b:1},Lg(Ng({},"a",{enumerable:!0,get:function(){Ng(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=Lg({},t)[n]||Cg(Lg({},e)).join("")!=r}))?function(t,e){for(var n=Rg(t),r=arguments.length,i=1,c=Yg.f,a=Sg.f;r>i;)for(var o,l=Kg(arguments[i++]),u=c?Jg(Cg(l),c(l)):Cg(l),s=u.length,d=0;s>d;)o=u[d++],fg&&!Wg(a,l,o)||(n[o]=l[o]);return n}:Lg,xg=Hg;Wi({target:"Object",stat:!0,arity:2,forced:Object.assign!==xg},{assign:xg});var kg=R,Ug=zm,Tg=!L((function(){if(!(Ug&&Ug<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete kg[t]}})),wg=At,Ag=ie,Fg=Oe;N&&Wi({target:"Object",proto:!0,forced:Tg},{__defineGetter__:function(t,e){Fg.f(Ag(this),t,{get:wg(e),enumerable:!0,configurable:!0})}});var zg=At,Bg=ie,jg=Oe;N&&Wi({target:"Object",proto:!0,forced:Tg},{__defineSetter__:function(t,e){jg.f(Bg(this),t,{set:zg(e),enumerable:!0,configurable:!0})}});var Mg=N,Qg=D,Pg=Ai,Eg=ut,Dg=Qg(U.f),Og=Qg([].push),_g=function(t){return function(e){for(var n,r=Eg(e),i=Pg(r),c=i.length,a=0,o=[];c>a;)n=i[a++],Mg&&!Dg(r,n)||Og(o,t?[n,r[n]]:r[n]);return o}},qg={entries:_g(!0),values:_g(!1)},$g=qg.entries;Wi({target:"Object",stat:!0},{entries:function(t){return $g(t)}});var tX=Wi,eX=CZ,nX=L,rX=mt,iX=yZ.exports.onFreeze,cX=Object.freeze;tX({target:"Object",stat:!0,forced:nX((function(){cX(1)})),sham:!eX},{freeze:function(t){return cX&&rX(t)?cX(iX(t)):t}});var aX=ep,oX=dc;Wi({target:"Object",stat:!0},{fromEntries:function(t){var e={};return aX(t,(function(t,n){oX(e,t,n)}),{AS_ENTRIES:!0}),e}});var lX=Wi,uX=L,sX=ut,dX=K.f,mX=N,hX=uX((function(){dX(1)}));lX({target:"Object",stat:!0,forced:!mX||hX,sham:!mX},{getOwnPropertyDescriptor:function(t,e){return dX(sX(t),e)}});var bX=ni,ZX=ut,pX=K,IX=dc;Wi({target:"Object",stat:!0,sham:!N},{getOwnPropertyDescriptors:function(t){for(var e,n,r=ZX(t),i=pX.f,c=bX(r),a={},o=0;c.length>o;)void 0!==(n=i(r,e=c[o++]))&&IX(a,e,n);return a}});var yX=Wi,gX=L,XX=oc.f;yX({target:"Object",stat:!0,forced:gX((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:XX});var GX=ie,fX=id,VX=Os;Wi({target:"Object",stat:!0,forced:L((function(){fX(1)})),sham:!VX},{getPrototypeOf:function(t){return fX(GX(t))}});var WX=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};Wi({target:"Object",stat:!0},{is:WX});var vX=vZ;Wi({target:"Object",stat:!0,forced:Object.isExtensible!==vX},{isExtensible:vX});var CX=Wi,YX=L,SX=mt,RX=$,KX=gZ,LX=Object.isFrozen;CX({target:"Object",stat:!0,forced:YX((function(){LX(1)}))||KX},{isFrozen:function(t){return!SX(t)||(!(!KX||"ArrayBuffer"!=RX(t))||!!LX&&LX(t))}});var NX=Wi,JX=L,HX=mt,xX=$,kX=gZ,UX=Object.isSealed;NX({target:"Object",stat:!0,forced:JX((function(){UX(1)}))||kX},{isSealed:function(t){return!HX(t)||(!(!kX||"ArrayBuffer"!=xX(t))||!!UX&&UX(t))}});var TX=ie,wX=Ai;Wi({target:"Object",stat:!0,forced:L((function(){wX(1)}))},{keys:function(t){return wX(TX(t))}});var AX=Wi,FX=N,zX=Tg,BX=ie,jX=He,MX=id,QX=K.f;FX&&AX({target:"Object",proto:!0,forced:zX},{__lookupGetter__:function(t){var e,n=BX(this),r=jX(t);do{if(e=QX(n,r))return e.get}while(n=MX(n))}});var PX=Wi,EX=N,DX=Tg,OX=ie,_X=He,qX=id,$X=K.f;EX&&PX({target:"Object",proto:!0,forced:DX},{__lookupSetter__:function(t){var e,n=OX(this),r=_X(t);do{if(e=$X(n,r))return e.set}while(n=qX(n))}});var tG=Wi,eG=mt,nG=yZ.exports.onFreeze,rG=CZ,iG=L,cG=Object.preventExtensions;tG({target:"Object",stat:!0,forced:iG((function(){cG(1)})),sham:!rG},{preventExtensions:function(t){return cG&&eG(t)?cG(nG(t)):t}});var aG=Wi,oG=mt,lG=yZ.exports.onFreeze,uG=CZ,sG=L,dG=Object.seal;aG({target:"Object",stat:!0,forced:sG((function(){dG(1)})),sham:!uG},{seal:function(t){return dG&&oG(t)?dG(lG(t)):t}});var mG=Ji,hG=Ci?{}.toString:function(){return"[object "+mG(this)+"]"};Ci||Xr(Object.prototype,"toString",hG,{unsafe:!0});var bG=qg.values;Wi({target:"Object",stat:!0},{values:function(t){return bG(t)}});var ZG,pG,IG,yG,gG="process"==$(R.process),XG=ia,GG=kt,fG=TypeError,VG=function(t){if(XG(t))return t;throw fG(GG(t)+" is not a constructor")},WG=en,vG=VG,CG=Ve("species"),YG=function(t,e){var n,r=WG(t).constructor;return void 0===r||null==(n=WG(r)[CG])?e:vG(n)},SG=TypeError,RG=function(t,e){if(t<e)throw SG("Not enough arguments");return t},KG=/(?:ipad|iphone|ipod).*applewebkit/i.test(yt),LG=R,NG=Qo,JG=zc,HG=st,xG=oe,kG=L,UG=Ei,TG=Po,wG=Te,AG=RG,FG=KG,zG=gG,BG=LG.setImmediate,jG=LG.clearImmediate,MG=LG.process,QG=LG.Dispatch,PG=LG.Function,EG=LG.MessageChannel,DG=LG.String,OG=0,_G={},qG="onreadystatechange";try{ZG=LG.location}catch(t){}var $G=function(t){if(xG(_G,t)){var e=_G[t];delete _G[t],e()}},tf=function(t){return function(){$G(t)}},ef=function(t){$G(t.data)},nf=function(t){LG.postMessage(DG(t),ZG.protocol+"//"+ZG.host)};BG&&jG||(BG=function(t){AG(arguments.length,1);var e=HG(t)?t:PG(t),n=TG(arguments,1);return _G[++OG]=function(){NG(e,void 0,n)},pG(OG),OG},jG=function(t){delete _G[t]},zG?pG=function(t){MG.nextTick(tf(t))}:QG&&QG.now?pG=function(t){QG.now(tf(t))}:EG&&!FG?(yG=(IG=new EG).port2,IG.port1.onmessage=ef,pG=JG(yG.postMessage,yG)):LG.addEventListener&&HG(LG.postMessage)&&!LG.importScripts&&ZG&&"file:"!==ZG.protocol&&!kG(nf)?(pG=nf,LG.addEventListener("message",ef,!1)):pG=qG in wG("script")?function(t){UG.appendChild(wG("script")).onreadystatechange=function(){UG.removeChild(this),$G(t)}}:function(t){setTimeout(tf(t),0)});var rf,cf,af,of,lf,uf,sf,df,mf={set:BG,clear:jG},hf=R,bf=/ipad|iphone|ipod/i.test(yt)&&void 0!==hf.Pebble,Zf=/web0s(?!.*chrome)/i.test(yt),pf=R,If=zc,yf=K.f,gf=mf.set,Xf=KG,Gf=bf,ff=Zf,Vf=gG,Wf=pf.MutationObserver||pf.WebKitMutationObserver,vf=pf.document,Cf=pf.process,Yf=pf.Promise,Sf=yf(pf,"queueMicrotask"),Rf=Sf&&Sf.value;Rf||(rf=function(){var t,e;for(Vf&&(t=Cf.domain)&&t.exit();cf;){e=cf.fn,cf=cf.next;try{e()}catch(t){throw cf?of():af=void 0,t}}af=void 0,t&&t.enter()},Xf||Vf||ff||!Wf||!vf?!Gf&&Yf&&Yf.resolve?((sf=Yf.resolve(void 0)).constructor=Yf,df=If(sf.then,sf),of=function(){df(rf)}):Vf?of=function(){Cf.nextTick(rf)}:(gf=If(gf,pf),of=function(){gf(rf)}):(lf=!0,uf=vf.createTextNode(""),new Wf(rf).observe(uf,{characterData:!0}),of=function(){uf.data=lf=!lf}));var Kf=Rf||function(t){var e={fn:t,next:void 0};af&&(af.next=e),cf||(cf=e,of()),af=e},Lf=R,Nf=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},Jf=function(){this.head=null,this.tail=null};Jf.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 Hf=Jf,xf=R.Promise,kf="object"==("undefined"==typeof window?"undefined":o(window))&&"object"!=("undefined"==typeof Deno?"undefined":o(Deno)),Uf=R,Tf=xf,wf=st,Af=pi,Ff=Kn,zf=Ve,Bf=kf,jf=vt;Tf&&Tf.prototype;var Mf=zf("species"),Qf=!1,Pf=wf(Uf.PromiseRejectionEvent),Ef=Af("Promise",(function(){var t=Ff(Tf),e=t!==String(Tf);if(!e&&66===jf)return!0;if(jf>=51&&/native code/.test(t))return!1;var n=new Tf((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))};return(n.constructor={})[Mf]=r,!(Qf=n.then((function(){}))instanceof r)||!e&&Bf&&!Pf})),Df={CONSTRUCTOR:Ef,REJECTION_EVENT:Pf,SUBCLASSING:Qf},Of={},_f=At,qf=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=_f(e),this.reject=_f(n)};Of.f=function(t){return new qf(t)};var $f,tV,eV,nV=Wi,rV=gG,iV=R,cV=k,aV=Xr,oV=Yd,lV=Tc,uV=bh,sV=At,dV=st,mV=mt,hV=Nh,bV=YG,ZV=mf.set,pV=Kf,IV=function(t,e){var n=Lf.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))},yV=Nf,gV=Hf,XV=rr,GV=xf,fV=Of,VV="Promise",WV=Df.CONSTRUCTOR,vV=Df.REJECTION_EVENT,CV=Df.SUBCLASSING,YV=XV.getterFor(VV),SV=XV.set,RV=GV&&GV.prototype,KV=GV,LV=RV,NV=iV.TypeError,JV=iV.document,HV=iV.process,xV=fV.f,kV=xV,UV=!!(JV&&JV.createEvent&&iV.dispatchEvent),TV="unhandledrejection",wV=function(t){var e;return!(!mV(t)||!dV(e=t.then))&&e},AV=function(t,e){var n,r,i,c=e.value,a=1==e.state,o=a?t.ok:t.fail,l=t.resolve,u=t.reject,s=t.domain;try{o?(a||(2===e.rejection&&MV(e),e.rejection=1),!0===o?n=c:(s&&s.enter(),n=o(c),s&&(s.exit(),i=!0)),n===t.promise?u(NV("Promise-chain cycle")):(r=wV(n))?cV(r,n,l,u):l(n)):u(c)}catch(t){s&&!i&&s.exit(),u(t)}},FV=function(t,e){t.notified||(t.notified=!0,pV((function(){for(var n,r=t.reactions;n=r.get();)AV(n,t);t.notified=!1,e&&!t.rejection&&BV(t)})))},zV=function(t,e,n){var r,i;UV?((r=JV.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),iV.dispatchEvent(r)):r={promise:e,reason:n},!vV&&(i=iV["on"+t])?i(r):t===TV&&IV("Unhandled promise rejection",n)},BV=function(t){cV(ZV,iV,(function(){var e,n=t.facade,r=t.value;if(jV(t)&&(e=yV((function(){rV?HV.emit("unhandledRejection",r,n):zV(TV,n,r)})),t.rejection=rV||jV(t)?2:1,e.error))throw e.value}))},jV=function(t){return 1!==t.rejection&&!t.parent},MV=function(t){cV(ZV,iV,(function(){var e=t.facade;rV?HV.emit("rejectionHandled",e):zV("rejectionhandled",e,t.value)}))},QV=function(t,e,n){return function(r){t(e,r,n)}},PV=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,FV(t,!0))},EV=function t(e,n,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===n)throw NV("Promise can't be resolved itself");var i=wV(n);i?pV((function(){var r={done:!1};try{cV(i,n,QV(t,r,e),QV(PV,r,e))}catch(t){PV(r,t,e)}})):(e.value=n,e.state=1,FV(e,!1))}catch(t){PV({done:!1},t,e)}}};if(WV&&(LV=(KV=function(t){hV(this,LV),sV(t),cV($f,this);var e=YV(this);try{t(QV(EV,e),QV(PV,e))}catch(t){PV(e,t)}}).prototype,($f=function(t){SV(this,{type:VV,done:!1,notified:!1,parent:!1,reactions:new gV,rejection:!1,state:0,value:void 0})}).prototype=aV(LV,"then",(function(t,e){var n=YV(this),r=xV(bV(this,KV));return n.parent=!0,r.ok=!dV(t)||t,r.fail=dV(e)&&e,r.domain=rV?HV.domain:void 0,0==n.state?n.reactions.add(r):pV((function(){AV(r,n)})),r.promise})),tV=function(){var t=new $f,e=YV(t);this.promise=t,this.resolve=QV(EV,e),this.reject=QV(PV,e)},fV.f=xV=function(t){return t===KV||undefined===t?new tV(t):kV(t)},dV(GV)&&RV!==Object.prototype)){eV=RV.then,CV||aV(RV,"then",(function(t,e){var n=this;return new KV((function(t,e){cV(eV,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete RV.constructor}catch(t){}oV&&oV(RV,LV)}nV({global:!0,constructor:!0,wrap:!0,forced:WV},{Promise:KV}),lV(KV,VV,!1),uV(VV);var DV=xf,OV=Df.CONSTRUCTOR||!Bs((function(t){DV.all(t).then(void 0,(function(){}))})),_V=k,qV=At,$V=Of,tW=Nf,eW=ep;Wi({target:"Promise",stat:!0,forced:OV},{all:function(t){var e=this,n=$V.f(e),r=n.resolve,i=n.reject,c=tW((function(){var n=qV(e.resolve),c=[],a=0,o=1;eW(t,(function(t){var l=a++,u=!1;o++,_V(n,e,t).then((function(t){u||(u=!0,c[l]=t,--o||r(c))}),i)})),--o||r(c)}));return c.error&&i(c.value),n.promise}});var nW=Wi,rW=Df.CONSTRUCTOR,iW=xf,cW=pt,aW=st,oW=Xr,lW=iW&&iW.prototype;if(nW({target:"Promise",proto:!0,forced:rW,real:!0},{catch:function(t){return this.then(void 0,t)}}),aW(iW)){var uW=cW("Promise").prototype.catch;lW.catch!==uW&&oW(lW,"catch",uW,{unsafe:!0})}var sW=k,dW=At,mW=Of,hW=Nf,bW=ep;Wi({target:"Promise",stat:!0,forced:OV},{race:function(t){var e=this,n=mW.f(e),r=n.reject,i=hW((function(){var i=dW(e.resolve);bW(t,(function(t){sW(i,e,t).then(n.resolve,r)}))}));return i.error&&r(i.value),n.promise}});var ZW=k,pW=Of;Wi({target:"Promise",stat:!0,forced:Df.CONSTRUCTOR},{reject:function(t){var e=pW.f(this);return ZW(e.reject,void 0,t),e.promise}});var IW=en,yW=mt,gW=Of,XW=function(t,e){if(IW(t),yW(e)&&e.constructor===t)return e;var n=gW.f(t);return(0,n.resolve)(e),n.promise},GW=Wi,fW=Df.CONSTRUCTOR,VW=XW;pt("Promise"),GW({target:"Promise",stat:!0,forced:fW},{resolve:function(t){return VW(this,t)}});var WW=k,vW=At,CW=Of,YW=Nf,SW=ep;Wi({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=CW.f(e),r=n.resolve,i=n.reject,c=YW((function(){var n=vW(e.resolve),i=[],c=0,a=1;SW(t,(function(t){var o=c++,l=!1;a++,WW(n,e,t).then((function(t){l||(l=!0,i[o]={status:"fulfilled",value:t},--a||r(i))}),(function(t){l||(l=!0,i[o]={status:"rejected",reason:t},--a||r(i))}))})),--a||r(i)}));return c.error&&i(c.value),n.promise}});var RW=Wi,KW=xf,LW=L,NW=pt,JW=st,HW=YG,xW=XW,kW=Xr,UW=KW&&KW.prototype;if(RW({target:"Promise",proto:!0,real:!0,forced:!!KW&&LW((function(){UW.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=HW(this,NW("Promise")),n=JW(t);return this.then(n?function(n){return xW(e,t()).then((function(){return n}))}:t,n?function(n){return xW(e,t()).then((function(){throw n}))}:t)}}),JW(KW)){var TW=NW("Promise").prototype.finally;UW.finally!==TW&&kW(UW,"finally",TW,{unsafe:!0})}var wW=Qo,AW=At,FW=en;Wi({target:"Reflect",stat:!0,forced:!L((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,n){return wW(AW(t),e,FW(n))}});var zW=D,BW=At,jW=mt,MW=oe,QW=Po,PW=J,EW=Function,DW=zW([].concat),OW=zW([].join),_W={},qW=function(t,e,n){if(!MW(_W,e)){for(var r=[],i=0;i<e;i++)r[i]="a["+i+"]";_W[e]=EW("C,a","return new C("+OW(r,",")+")")}return _W[e](t,n)},$W=PW?EW.bind:function(t){var e=BW(this),n=e.prototype,r=QW(arguments,1),i=function(){var n=DW(r,QW(arguments));return this instanceof i?qW(e,n.length,n):e.apply(t,n)};return jW(n)&&(i.prototype=n),i},tv=Wi,ev=Qo,nv=$W,rv=VG,iv=en,cv=mt,av=ac,ov=L,lv=pt("Reflect","construct"),uv=Object.prototype,sv=[].push,dv=ov((function(){function t(){}return!(lv((function(){}),[],t)instanceof t)})),mv=!ov((function(){lv((function(){}))})),hv=dv||mv;tv({target:"Reflect",stat:!0,forced:hv,sham:hv},{construct:function(t,e){rv(t),iv(e);var n=arguments.length<3?t:rv(arguments[2]);if(mv&&!dv)return lv(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 r=[null];return ev(sv,r,e),new(ev(nv,t,r))}var i=n.prototype,c=av(cv(i)?i:uv),a=ev(t,c,e);return cv(a)?a:c}});var bv=N,Zv=en,pv=He,Iv=Oe;Wi({target:"Reflect",stat:!0,forced:L((function(){Reflect.defineProperty(Iv.f({},1,{value:1}),1,{value:2})})),sham:!bv},{defineProperty:function(t,e,n){Zv(t);var r=pv(e);Zv(n);try{return Iv.f(t,r,n),!0}catch(t){return!1}}});var yv=Wi,gv=en,Xv=K.f;yv({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=Xv(gv(t),e);return!(n&&!n.configurable)&&delete t[e]}});var Gv=oe,fv=function(t){return void 0!==t&&(Gv(t,"value")||Gv(t,"writable"))},Vv=k,Wv=mt,vv=en,Cv=fv,Yv=K,Sv=id;Wi({target:"Reflect",stat:!0},{get:function t(e,n){var r,i,c=arguments.length<3?e:arguments[2];return vv(e)===c?e[n]:(r=Yv.f(e,n))?Cv(r)?r.value:void 0===r.get?void 0:Vv(r.get,c):Wv(i=Sv(e))?t(i,n,c):void 0}});var Rv=en,Kv=K;Wi({target:"Reflect",stat:!0,sham:!N},{getOwnPropertyDescriptor:function(t,e){return Kv.f(Rv(t),e)}});var Lv=en,Nv=id;Wi({target:"Reflect",stat:!0,sham:!Os},{getPrototypeOf:function(t){return Nv(Lv(t))}}),Wi({target:"Reflect",stat:!0},{has:function(t,e){return e in t}});var Jv=en,Hv=vZ;Wi({target:"Reflect",stat:!0},{isExtensible:function(t){return Jv(t),Hv(t)}}),Wi({target:"Reflect",stat:!0},{ownKeys:ni});var xv=pt,kv=en;Wi({target:"Reflect",stat:!0,sham:!CZ},{preventExtensions:function(t){kv(t);try{var e=xv("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}});var Uv=Wi,Tv=k,wv=en,Av=mt,Fv=fv,zv=Oe,Bv=K,jv=id,Mv=B;var Qv=L((function(){var t=function(){},e=zv.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}));Uv({target:"Reflect",stat:!0,forced:Qv},{set:function t(e,n,r){var i,c,a,o=arguments.length<4?e:arguments[3],l=Bv.f(wv(e),n);if(!l){if(Av(c=jv(e)))return t(c,n,r,o);l=Mv(0)}if(Fv(l)){if(!1===l.writable||!Av(o))return!1;if(i=Bv.f(o,n)){if(i.get||i.set||!1===i.writable)return!1;i.value=r,zv.f(o,n,i)}else zv.f(o,n,Mv(0,r))}else{if(void 0===(a=l.set))return!1;Tv(a,o,r)}return!0}});var Pv=en,Ev=Vd,Dv=Yd;Dv&&Wi({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){Pv(t),Ev(e);try{return Dv(t,e),!0}catch(t){return!1}}});var Ov=mt,_v=$,qv=Ve("match"),$v=function(t){var e;return Ov(t)&&(void 0!==(e=t[qv])?!!e:"RegExp"==_v(t))},tC=en,eC=function(){var t=tC(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},nC=k,rC=oe,iC=It,cC=eC,aC=RegExp.prototype,oC=function(t){var e=t.flags;return void 0!==e||"flags"in aC||rC(t,"flags")||!iC(aC,t)?e:nC(cC,t)},lC=L,uC=R.RegExp,sC=lC((function(){var t=uC("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),dC=sC||lC((function(){return!uC("a","y").sticky})),mC=sC||lC((function(){var t=uC("^r","gy");return t.lastIndex=2,null!=t.exec("str")})),hC={BROKEN_CARET:mC,MISSED_STICKY:dC,UNSUPPORTED_Y:sC},bC=Oe.f,ZC=L,pC=R.RegExp,IC=ZC((function(){var t=pC(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)})),yC=L,gC=R.RegExp,XC=yC((function(){var t=gC("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")})),GC=N,fC=R,VC=D,WC=pi,vC=cp,CC=pn,YC=Gr.f,SC=It,RC=$v,KC=ki,LC=oC,NC=hC,JC=function(t,e,n){n in t||bC(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})},HC=Xr,xC=L,kC=oe,UC=rr.enforce,TC=bh,wC=IC,AC=XC,FC=Ve("match"),zC=fC.RegExp,BC=zC.prototype,jC=fC.SyntaxError,MC=VC(BC.exec),QC=VC("".charAt),PC=VC("".replace),EC=VC("".indexOf),DC=VC("".slice),OC=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,_C=/a/g,qC=/a/g,$C=new zC(_C)!==_C,tY=NC.MISSED_STICKY,eY=NC.UNSUPPORTED_Y,nY=GC&&(!$C||tY||wC||AC||xC((function(){return qC[FC]=!1,zC(_C)!=_C||zC(qC)==qC||"/a/i"!=zC(_C,"i")})));if(WC("RegExp",nY)){for(var rY=function(t,e){var n,r,i,c,a,o,l=SC(BC,this),u=RC(t),s=void 0===e,d=[],m=t;if(!l&&u&&s&&t.constructor===rY)return t;if((u||SC(BC,t))&&(t=t.source,s&&(e=LC(m))),t=void 0===t?"":KC(t),e=void 0===e?"":KC(e),m=t,wC&&"dotAll"in _C&&(r=!!e&&EC(e,"s")>-1)&&(e=PC(e,/s/g,"")),n=e,tY&&"sticky"in _C&&(i=!!e&&EC(e,"y")>-1)&&eY&&(e=PC(e,/y/g,"")),AC&&(c=function(t){for(var e,n=t.length,r=0,i="",c=[],a={},o=!1,l=!1,u=0,s="";r<=n;r++){if("\\"===(e=QC(t,r)))e+=QC(t,++r);else if("]"===e)o=!1;else if(!o)switch(!0){case"["===e:o=!0;break;case"("===e:MC(OC,DC(t,r+1))&&(r+=2,l=!0),i+=e,u++;continue;case">"===e&&l:if(""===s||kC(a,s))throw new jC("Invalid capture group name");a[s]=!0,c[c.length]=[s,u],l=!1,s="";continue}l?s+=e:i+=e}return[i,c]}(t),t=c[0],d=c[1]),a=vC(zC(t,e),l?this:BC,rY),(r||i||d.length)&&(o=UC(a),r&&(o.dotAll=!0,o.raw=rY(function(t){for(var e,n=t.length,r=0,i="",c=!1;r<=n;r++)"\\"!==(e=QC(t,r))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+QC(t,++r);return i}(t),n)),i&&(o.sticky=!0),d.length&&(o.groups=d)),t!==m)try{CC(a,"source",""===m?"(?:)":m)}catch(t){}return a},iY=YC(zC),cY=0;iY.length>cY;)JC(rY,zC,iY[cY++]);BC.constructor=rY,rY.prototype=BC,HC(fC,"RegExp",rY,{constructor:!0})}TC("RegExp");var aY=k,oY=D,lY=ki,uY=eC,sY=hC,dY=Et.exports,mY=ac,hY=rr.get,bY=IC,ZY=XC,pY=dY("native-string-replace",String.prototype.replace),IY=RegExp.prototype.exec,yY=IY,gY=oY("".charAt),XY=oY("".indexOf),GY=oY("".replace),fY=oY("".slice),VY=function(){var t=/a/,e=/b*/g;return aY(IY,t,"a"),aY(IY,e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),WY=sY.BROKEN_CARET,vY=void 0!==/()??/.exec("")[1];(VY||vY||WY||bY||ZY)&&(yY=function(t){var e,n,r,i,c,a,o,l=this,u=hY(l),s=lY(t),d=u.raw;if(d)return d.lastIndex=l.lastIndex,e=aY(yY,d,s),l.lastIndex=d.lastIndex,e;var m=u.groups,h=WY&&l.sticky,b=aY(uY,l),Z=l.source,p=0,I=s;if(h&&(b=GY(b,"y",""),-1===XY(b,"g")&&(b+="g"),I=fY(s,l.lastIndex),l.lastIndex>0&&(!l.multiline||l.multiline&&"\n"!==gY(s,l.lastIndex-1))&&(Z="(?: "+Z+")",I=" "+I,p++),n=new RegExp("^(?:"+Z+")",b)),vY&&(n=new RegExp("^"+Z+"$(?!\\s)",b)),VY&&(r=l.lastIndex),i=aY(IY,h?n:l,I),h?i?(i.input=fY(i.input,p),i[0]=fY(i[0],p),i.index=l.lastIndex,l.lastIndex+=i[0].length):l.lastIndex=0:VY&&i&&(l.lastIndex=l.global?i.index+i[0].length:r),vY&&i&&i.length>1&&aY(pY,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=a=mY(null),c=0;c<m.length;c++)a[(o=m[c])[0]]=i[o[1]];return i});var CY=yY;Wi({target:"RegExp",proto:!0,forced:/./.exec!==CY},{exec:CY});var YY=In.exports,SY=Oe,RY=function(t,e,n){return n.get&&YY(n.get,e,{getter:!0}),n.set&&YY(n.set,e,{setter:!0}),SY.f(t,e,n)},KY=N,LY=RY,NY=eC,JY=L,HY=RegExp.prototype;KY&&JY((function(){return"sy"!==Object.getOwnPropertyDescriptor(HY,"flags").get.call({dotAll:!0,sticky:!0})}))&&LY(HY,"flags",{configurable:!0,get:NY});var xY=N,kY=hC.MISSED_STICKY,UY=$,TY=RY,wY=rr.get,AY=RegExp.prototype,FY=TypeError;xY&&kY&&TY(AY,"sticky",{configurable:!0,get:function(){if(this!==AY){if("RegExp"===UY(this))return!!wY(this).sticky;throw FY("Incompatible receiver, RegExp required")}}});var zY,BY,jY=Wi,MY=k,QY=D,PY=st,EY=mt,DY=(zY=!1,(BY=/[ac]/).exec=function(){return zY=!0,/./.exec.apply(this,arguments)},!0===BY.test("abc")&&zY),OY=TypeError,_Y=QY(/./.test);jY({target:"RegExp",proto:!0,forced:!DY},{test:function(t){var e=this.exec;if(!PY(e))return _Y(this,t);var n=MY(e,this,t);if(null!==n&&!EY(n))throw new OY("RegExp exec method returned something other than an Object or null");return!!n}});var qY=Vn.PROPER,$Y=Xr,tS=en,eS=ki,nS=L,rS=oC,iS="toString",cS=RegExp.prototype.toString,aS=nS((function(){return"/a/b"!=cS.call({source:"a",flags:"b"})})),oS=qY&&cS.name!=iS;(aS||oS)&&$Y(RegExp.prototype,iS,(function(){var t=tS(this);return"/"+eS(t.source)+"/"+eS(rS(t))}),{unsafe:!0}),Xp("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),Jp);var lS=D,uS=Cr,sS=ki,dS=at,mS=lS("".charAt),hS=lS("".charCodeAt),bS=lS("".slice),ZS=function(t){return function(e,n){var r,i,c=sS(dS(e)),a=uS(n),o=c.length;return a<0||a>=o?t?"":void 0:(r=hS(c,a))<55296||r>56319||a+1===o||(i=hS(c,a+1))<56320||i>57343?t?mS(c,a):r:t?bS(c,a,a+2):i-56320+(r-55296<<10)+65536}},pS={codeAt:ZS(!1),charAt:ZS(!0)},IS=pS.codeAt;Wi({target:"String",proto:!0},{codePointAt:function(t){return IS(this,t)}});var yS,gS=$v,XS=TypeError,GS=function(t){if(gS(t))throw XS("The method doesn't accept regular expressions");return t},fS=Ve("match"),VS=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[fS]=!1,"/./"[t](e)}catch(t){}}return!1},WS=Wi,vS=D,CS=K.f,YS=Jr,SS=ki,RS=GS,KS=at,LS=VS,NS=vS("".endsWith),JS=vS("".slice),HS=Math.min,xS=LS("endsWith");WS({target:"String",proto:!0,forced:!!(xS||(yS=CS(String.prototype,"endsWith"),!yS||yS.writable))&&!xS},{endsWith:function(t){var e=SS(KS(this));RS(t);var n=arguments.length>1?arguments[1]:void 0,r=e.length,i=void 0===n?r:HS(YS(n),r),c=SS(t);return NS?NS(e,c,i):JS(e,i-c.length,i)===c}});var kS=Wi,US=D,TS=Kr,wS=RangeError,AS=String.fromCharCode,FS=String.fromCodePoint,zS=US([].join);kS({target:"String",stat:!0,arity:1,forced:!!FS&&1!=FS.length},{fromCodePoint:function(t){for(var e,n=[],r=arguments.length,i=0;r>i;){if(e=+arguments[i++],TS(e,1114111)!==e)throw wS(e+" is not a valid code point");n[i]=e<65536?AS(e):AS(55296+((e-=65536)>>10),e%1024+56320)}return zS(n,"")}});var BS=Wi,jS=GS,MS=at,QS=ki,PS=VS,ES=D("".indexOf);BS({target:"String",proto:!0,forced:!PS("includes")},{includes:function(t){return!!~ES(QS(MS(this)),QS(jS(t)),arguments.length>1?arguments[1]:void 0)}});var DS=pS.charAt,OS=ki,_S=rr,qS=Pd,$S="String Iterator",tR=_S.set,eR=_S.getterFor($S);qS(String,"String",(function(t){tR(this,{type:$S,string:OS(t),index:0})}),(function(){var t,e=eR(this),n=e.string,r=e.index;return r>=n.length?{value:void 0,done:!0}:(t=DS(n,r),e.index+=t.length,{value:t,done:!1})}));var nR=D,rR=Xr,iR=CY,cR=L,aR=Ve,oR=pn,lR=aR("species"),uR=RegExp.prototype,sR=function(t,e,n,r){var i=aR(t),c=!cR((function(){var e={};return e[i]=function(){return 7},7!=""[t](e)})),a=c&&!cR((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[lR]=function(){return n},n.flags="",n[i]=/./[i]),n.exec=function(){return e=!0,null},n[i](""),!e}));if(!c||!a||n){var o=nR(/./[i]),l=e(i,""[t],(function(t,e,n,r,i){var a=nR(t),l=e.exec;return l===iR||l===uR.exec?c&&!i?{done:!0,value:o(e,n,r)}:{done:!0,value:a(n,e,r)}:{done:!1}}));rR(String.prototype,t,l[0]),rR(uR,i,l[1])}r&&oR(uR[i],"sham",!0)},dR=pS.charAt,mR=function(t,e,n){return e+(n?dR(t,e).length:1)},hR=k,bR=en,ZR=st,pR=$,IR=CY,yR=TypeError,gR=function(t,e){var n=t.exec;if(ZR(n)){var r=hR(n,t,e);return null!==r&&bR(r),r}if("RegExp"===pR(t))return hR(IR,t,e);throw yR("RegExp#exec called on incompatible receiver")},XR=k,GR=en,fR=Jr,VR=ki,WR=at,vR=zt,CR=mR,YR=gR;sR("match",(function(t,e,n){return[function(e){var n=WR(this),r=null==e?void 0:vR(e,t);return r?XR(r,e,n):new RegExp(e)[t](VR(n))},function(t){var r=GR(this),i=VR(t),c=n(e,r,i);if(c.done)return c.value;if(!r.global)return YR(r,i);var a=r.unicode;r.lastIndex=0;for(var o,l=[],u=0;null!==(o=YR(r,i));){var s=VR(o[0]);l[u]=s,""===s&&(r.lastIndex=CR(i,fR(r.lastIndex),a)),u++}return 0===u?null:l}]}));var SR=Wi,RR=k,KR=D,LR=gd,NR=at,JR=Jr,HR=ki,xR=en,kR=$v,UR=oC,TR=zt,wR=Xr,AR=L,FR=YG,zR=mR,BR=gR,jR=rr,MR=Ve("matchAll"),QR="RegExp String",PR="RegExp String Iterator",ER=jR.set,DR=jR.getterFor(PR),OR=RegExp.prototype,_R=TypeError,qR=KR("".indexOf),$R=KR("".matchAll),tK=!!$R&&!AR((function(){$R("a",/./)})),eK=LR((function(t,e,n,r){ER(this,{type:PR,regexp:t,string:e,global:n,unicode:r,done:!1})}),QR,(function(){var t=DR(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,r=BR(e,n);return null===r?{value:void 0,done:t.done=!0}:t.global?(""===HR(r[0])&&(e.lastIndex=zR(n,JR(e.lastIndex),t.unicode)),{value:r,done:!1}):(t.done=!0,{value:r,done:!1})})),nK=function(t){var e,n,r,i=xR(this),c=HR(t),a=FR(i,RegExp),o=HR(UR(i));return e=new a(a===RegExp?i.source:i,o),n=!!~qR(o,"g"),r=!!~qR(o,"u"),e.lastIndex=JR(i.lastIndex),new eK(e,c,n,r)};SR({target:"String",proto:!0,forced:tK},{matchAll:function(t){var e,n,r,i=NR(this);if(null!=t){if(kR(t)&&(e=HR(NR(UR(t))),!~qR(e,"g")))throw _R("`.matchAll` does not allow non-global regexes");if(tK)return $R(i,t);if(r=TR(t,MR))return RR(r,t,i)}else if(tK)return $R(i,t);return n=HR(i),new RegExp(t,"g")[MR](n)}}),MR in OR||wR(OR,MR,nK);var rK=D,iK=Jr,cK=ki,aK=at,oK=rK(cg),lK=rK("".slice),uK=Math.ceil,sK=function(t){return function(e,n,r){var i,c,a=cK(aK(e)),o=iK(n),l=a.length,u=void 0===r?" ":cK(r);return o<=l||""==u?a:((c=oK(u,uK((i=o-l)/u.length))).length>i&&(c=lK(c,0,i)),t?a+c:c+a)}},dK={start:sK(!1),end:sK(!0)},mK=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(yt),hK=dK.end;Wi({target:"String",proto:!0,forced:mK},{padEnd:function(t){return hK(this,t,arguments.length>1?arguments[1]:void 0)}});var bK=dK.start;Wi({target:"String",proto:!0,forced:mK},{padStart:function(t){return bK(this,t,arguments.length>1?arguments[1]:void 0)}});var ZK=Wi,pK=D,IK=ut,yK=ie,gK=ki,XK=xr,GK=pK([].push),fK=pK([].join);ZK({target:"String",stat:!0},{raw:function(t){for(var e=IK(yK(t).raw),n=XK(e),r=arguments.length,i=[],c=0;n>c;){if(GK(i,gK(e[c++])),c===n)return fK(i,"");c<r&&GK(i,gK(arguments[c]))}}}),Wi({target:"String",proto:!0},{repeat:cg});var VK=D,WK=ie,vK=Math.floor,CK=VK("".charAt),YK=VK("".replace),SK=VK("".slice),RK=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,KK=/\$([$&'`]|\d{1,2})/g,LK=Qo,NK=k,JK=D,HK=sR,xK=L,kK=en,UK=st,TK=Cr,wK=Jr,AK=ki,FK=at,zK=mR,BK=zt,jK=function(t,e,n,r,i,c){var a=n+t.length,o=r.length,l=KK;return void 0!==i&&(i=WK(i),l=RK),YK(c,l,(function(c,l){var u;switch(CK(l,0)){case"$":return"$";case"&":return t;case"`":return SK(e,0,n);case"'":return SK(e,a);case"<":u=i[SK(l,1,-1)];break;default:var s=+l;if(0===s)return c;if(s>o){var d=vK(s/10);return 0===d?c:d<=o?void 0===r[d-1]?CK(l,1):r[d-1]+CK(l,1):c}u=r[s-1]}return void 0===u?"":u}))},MK=gR,QK=Ve("replace"),PK=Math.max,EK=Math.min,DK=JK([].concat),OK=JK([].push),_K=JK("".indexOf),qK=JK("".slice),$K="$0"==="a".replace(/./,"$0"),tL=!!/./[QK]&&""===/./[QK]("a","$0"),eL=!xK((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}));HK("replace",(function(t,e,n){var r=tL?"$":"$0";return[function(t,n){var r=FK(this),i=null==t?void 0:BK(t,QK);return i?NK(i,t,r,n):NK(e,AK(r),t,n)},function(t,i){var c=kK(this),a=AK(t);if("string"==typeof i&&-1===_K(i,r)&&-1===_K(i,"$<")){var o=n(e,c,a,i);if(o.done)return o.value}var l=UK(i);l||(i=AK(i));var u=c.global;if(u){var s=c.unicode;c.lastIndex=0}for(var d=[];;){var m=MK(c,a);if(null===m)break;if(OK(d,m),!u)break;""===AK(m[0])&&(c.lastIndex=zK(a,wK(c.lastIndex),s))}for(var h,b="",Z=0,p=0;p<d.length;p++){for(var I=AK((m=d[p])[0]),y=PK(EK(TK(m.index),a.length),0),g=[],X=1;X<m.length;X++)OK(g,void 0===(h=m[X])?h:String(h));var G=m.groups;if(l){var f=DK([I],g,y,a);void 0!==G&&OK(f,G);var V=AK(LK(i,void 0,f))}else V=jK(I,a,y,g,G,i);y>=Z&&(b+=qK(a,Z,y)+V,Z=y+I.length)}return b+qK(a,Z)}]}),!eL||!$K||tL);var nL=k,rL=en,iL=at,cL=WX,aL=ki,oL=zt,lL=gR;sR("search",(function(t,e,n){return[function(e){var n=iL(this),r=null==e?void 0:oL(e,t);return r?nL(r,e,n):new RegExp(e)[t](aL(n))},function(t){var r=rL(this),i=aL(t),c=n(e,r,i);if(c.done)return c.value;var a=r.lastIndex;cL(a,0)||(r.lastIndex=0);var o=lL(r,i);return cL(r.lastIndex,a)||(r.lastIndex=a),null===o?-1:o.index}]}));var uL=Qo,sL=k,dL=D,mL=sR,hL=$v,bL=en,ZL=at,pL=YG,IL=mR,yL=Jr,gL=ki,XL=zt,GL=Ic,fL=gR,VL=CY,WL=L,vL=hC.UNSUPPORTED_Y,CL=4294967295,YL=Math.min,SL=[].push,RL=dL(/./.exec),KL=dL(SL),LL=dL("".slice),NL=!WL((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]}));mL("split",(function(t,e,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(t,n){var r=gL(ZL(this)),i=void 0===n?CL:n>>>0;if(0===i)return[];if(void 0===t)return[r];if(!hL(t))return sL(e,r,t,i);for(var c,a,o,l=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),s=0,d=new RegExp(t.source,u+"g");(c=sL(VL,d,r))&&!((a=d.lastIndex)>s&&(KL(l,LL(r,s,c.index)),c.length>1&&c.index<r.length&&uL(SL,l,GL(c,1)),o=c[0].length,s=a,l.length>=i));)d.lastIndex===c.index&&d.lastIndex++;return s===r.length?!o&&RL(d,"")||KL(l,""):KL(l,LL(r,s)),l.length>i?GL(l,0,i):l}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:sL(e,this,t,n)}:e,[function(e,n){var i=ZL(this),c=null==e?void 0:XL(e,t);return c?sL(c,e,i,n):sL(r,gL(i),e,n)},function(t,i){var c=bL(this),a=gL(t),o=n(r,c,a,i,r!==e);if(o.done)return o.value;var l=pL(c,RegExp),u=c.unicode,s=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(vL?"g":"y"),d=new l(vL?"^(?:"+c.source+")":c,s),m=void 0===i?CL:i>>>0;if(0===m)return[];if(0===a.length)return null===fL(d,a)?[a]:[];for(var h=0,b=0,Z=[];b<a.length;){d.lastIndex=vL?0:b;var p,I=fL(d,vL?LL(a,b):a);if(null===I||(p=YL(yL(d.lastIndex+(vL?b:0)),a.length))===h)b=IL(a,b,u);else{if(KL(Z,LL(a,h,b)),Z.length===m)return Z;for(var y=1;y<=I.length-1;y++)if(KL(Z,I[y]),Z.length===m)return Z;b=h=p}}return KL(Z,LL(a,h)),Z}]}),!NL,vL);var JL=Wi,HL=D,xL=K.f,kL=Jr,UL=ki,TL=GS,wL=at,AL=VS,FL=HL("".startsWith),zL=HL("".slice),BL=Math.min,jL=AL("startsWith"),ML=!jL&&!!function(){var t=xL(String.prototype,"startsWith");return t&&!t.writable}();JL({target:"String",proto:!0,forced:!ML&&!jL},{startsWith:function(t){var e=UL(wL(this));TL(t);var n=kL(BL(arguments.length>1?arguments[1]:void 0,e.length)),r=UL(t);return FL?FL(e,r,n):zL(e,n,n+r.length)===r}});var QL=Vn.PROPER,PL=L,EL=BI,DL=function(t){return PL((function(){return!!EL[t]()||"​…᠎"!=="​…᠎"[t]()||QL&&EL[t].name!==t}))},OL=_I.trim;Wi({target:"String",proto:!0,forced:DL("trim")},{trim:function(){return OL(this)}});var _L=_I.end,qL=DL("trimEnd")?function(){return _L(this)}:"".trimEnd;Wi({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==qL},{trimRight:qL});Wi({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==qL},{trimEnd:qL});var $L=_I.start,tN=DL("trimStart")?function(){return $L(this)}:"".trimStart;Wi({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==tN},{trimLeft:tN});Wi({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==tN},{trimStart:tN});var eN=at,nN=ki,rN=/"/g,iN=D("".replace),cN=function(t,e,n,r){var i=nN(eN(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+iN(nN(r),rN,"&quot;")+'"'),c+">"+i+"</"+e+">"},aN=L,oN=function(t){return aN((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))},lN=cN;Wi({target:"String",proto:!0,forced:oN("anchor")},{anchor:function(t){return lN(this,"a","name",t)}});var uN=cN;Wi({target:"String",proto:!0,forced:oN("big")},{big:function(){return uN(this,"big","","")}});var sN=cN;Wi({target:"String",proto:!0,forced:oN("blink")},{blink:function(){return sN(this,"blink","","")}});var dN=cN;Wi({target:"String",proto:!0,forced:oN("bold")},{bold:function(){return dN(this,"b","","")}});var mN=cN;Wi({target:"String",proto:!0,forced:oN("fixed")},{fixed:function(){return mN(this,"tt","","")}});var hN=cN;Wi({target:"String",proto:!0,forced:oN("fontcolor")},{fontcolor:function(t){return hN(this,"font","color",t)}});var bN=cN;Wi({target:"String",proto:!0,forced:oN("fontsize")},{fontsize:function(t){return bN(this,"font","size",t)}});var ZN=cN;Wi({target:"String",proto:!0,forced:oN("italics")},{italics:function(){return ZN(this,"i","","")}});var pN=cN;Wi({target:"String",proto:!0,forced:oN("link")},{link:function(t){return pN(this,"a","href",t)}});var IN=cN;Wi({target:"String",proto:!0,forced:oN("small")},{small:function(){return IN(this,"small","","")}});var yN=cN;Wi({target:"String",proto:!0,forced:oN("strike")},{strike:function(){return yN(this,"strike","","")}});var gN=cN;Wi({target:"String",proto:!0,forced:oN("sub")},{sub:function(){return gN(this,"sub","","")}});var XN=cN;Wi({target:"String",proto:!0,forced:oN("sup")},{sup:function(){return XN(this,"sup","","")}});var GN,fN,VN,WN={exports:{}},vN=Yh,CN=N,YN=R,SN=st,RN=mt,KN=oe,LN=Ji,NN=kt,JN=pn,HN=Xr,xN=Oe.f,kN=It,UN=id,TN=Yd,wN=Ve,AN=me,FN=YN.Int8Array,zN=FN&&FN.prototype,BN=YN.Uint8ClampedArray,jN=BN&&BN.prototype,MN=FN&&UN(FN),QN=zN&&UN(zN),PN=Object.prototype,EN=YN.TypeError,DN=wN("toStringTag"),ON=AN("TYPED_ARRAY_TAG"),_N=AN("TYPED_ARRAY_CONSTRUCTOR"),qN=vN&&!!TN&&"Opera"!==LN(YN.opera),$N=!1,tJ={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},eJ={BigInt64Array:8,BigUint64Array:8},nJ=function(t){if(!RN(t))return!1;var e=LN(t);return KN(tJ,e)||KN(eJ,e)};for(GN in tJ)(VN=(fN=YN[GN])&&fN.prototype)?JN(VN,_N,fN):qN=!1;for(GN in eJ)(VN=(fN=YN[GN])&&fN.prototype)&&JN(VN,_N,fN);if((!qN||!SN(MN)||MN===Function.prototype)&&(MN=function(){throw EN("Incorrect invocation")},qN))for(GN in tJ)YN[GN]&&TN(YN[GN],MN);if((!qN||!QN||QN===PN)&&(QN=MN.prototype,qN))for(GN in tJ)YN[GN]&&TN(YN[GN].prototype,QN);if(qN&&UN(jN)!==QN&&TN(jN,QN),CN&&!KN(QN,DN))for(GN in $N=!0,xN(QN,DN,{get:function(){return RN(this)?this[ON]:void 0}}),tJ)YN[GN]&&JN(YN[GN],ON,GN);var rJ={NATIVE_ARRAY_BUFFER_VIEWS:qN,TYPED_ARRAY_CONSTRUCTOR:_N,TYPED_ARRAY_TAG:$N&&ON,aTypedArray:function(t){if(nJ(t))return t;throw EN("Target is not a typed array")},aTypedArrayConstructor:function(t){if(SN(t)&&(!TN||kN(MN,t)))return t;throw EN(NN(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,r){if(CN){if(n)for(var i in tJ){var c=YN[i];if(c&&KN(c.prototype,t))try{delete c.prototype[t]}catch(n){try{c.prototype[t]=e}catch(t){}}}QN[t]&&!n||HN(QN,t,n?e:qN&&zN[t]||e,r)}},exportTypedArrayStaticMethod:function(t,e,n){var r,i;if(CN){if(TN){if(n)for(r in tJ)if((i=YN[r])&&KN(i,t))try{delete i[t]}catch(t){}if(MN[t]&&!n)return;try{return HN(MN,t,n?e:qN&&MN[t]||e)}catch(t){}}for(r in tJ)!(i=YN[r])||i[t]&&!n||HN(i,t,e)}},isView:function(t){if(!RN(t))return!1;var e=LN(t);return"DataView"===e||KN(tJ,e)||KN(eJ,e)},isTypedArray:nJ,TypedArray:MN,TypedArrayPrototype:QN},iJ=R,cJ=L,aJ=Bs,oJ=rJ.NATIVE_ARRAY_BUFFER_VIEWS,lJ=iJ.ArrayBuffer,uJ=iJ.Int8Array,sJ=!oJ||!cJ((function(){uJ(1)}))||!cJ((function(){new uJ(-1)}))||!aJ((function(t){new uJ,new uJ(null),new uJ(1.5),new uJ(t)}),!0)||cJ((function(){return 1!==new uJ(new lJ(2),1,void 0).length})),dJ=Cr,mJ=RangeError,hJ=function(t){var e=dJ(t);if(e<0)throw mJ("The argument can't be less than 0");return e},bJ=RangeError,ZJ=function(t,e){var n=hJ(t);if(n%e)throw bJ("Wrong offset");return n},pJ=zc,IJ=k,yJ=VG,gJ=ie,XJ=xr,GJ=Cs,fJ=gs,VJ=bs,WJ=rJ.aTypedArrayConstructor,vJ=function(t){var e,n,r,i,c,a,o=yJ(this),l=gJ(t),u=arguments.length,s=u>1?arguments[1]:void 0,d=void 0!==s,m=fJ(l);if(m&&!VJ(m))for(a=(c=GJ(l,m)).next,l=[];!(i=IJ(a,c)).done;)l.push(i.value);for(d&&u>2&&(s=pJ(s,arguments[2])),n=XJ(l),r=new(WJ(o))(n),e=0;n>e;e++)r[e]=d?s(l[e],e):l[e];return r},CJ=Wi,YJ=R,SJ=k,RJ=N,KJ=sJ,LJ=rJ,NJ=jb,JJ=Nh,HJ=B,xJ=pn,kJ=Ry,UJ=Jr,TJ=kh,wJ=ZJ,AJ=He,FJ=oe,zJ=Ji,BJ=mt,jJ=Ht,MJ=ac,QJ=It,PJ=Yd,EJ=Gr.f,DJ=vJ,OJ=ga.forEach,_J=bh,qJ=Oe,$J=K,tH=cp,eH=rr.get,nH=rr.set,rH=qJ.f,iH=$J.f,cH=Math.round,aH=YJ.RangeError,oH=NJ.ArrayBuffer,lH=oH.prototype,uH=NJ.DataView,sH=LJ.NATIVE_ARRAY_BUFFER_VIEWS,dH=LJ.TYPED_ARRAY_CONSTRUCTOR,mH=LJ.TYPED_ARRAY_TAG,hH=LJ.TypedArray,bH=LJ.TypedArrayPrototype,ZH=LJ.aTypedArrayConstructor,pH=LJ.isTypedArray,IH="BYTES_PER_ELEMENT",yH="Wrong length",gH=function(t,e){ZH(t);for(var n=0,r=e.length,i=new t(r);r>n;)i[n]=e[n++];return i},XH=function(t,e){rH(t,e,{get:function(){return eH(this)[e]}})},GH=function(t){var e;return QJ(lH,t)||"ArrayBuffer"==(e=zJ(t))||"SharedArrayBuffer"==e},fH=function(t,e){return pH(t)&&!jJ(e)&&e in t&&kJ(+e)&&e>=0},VH=function(t,e){return e=AJ(e),fH(t,e)?HJ(2,t[e]):iH(t,e)},WH=function(t,e,n){return e=AJ(e),!(fH(t,e)&&BJ(n)&&FJ(n,"value"))||FJ(n,"get")||FJ(n,"set")||n.configurable||FJ(n,"writable")&&!n.writable||FJ(n,"enumerable")&&!n.enumerable?rH(t,e,n):(t[e]=n.value,t)};RJ?(sH||($J.f=VH,qJ.f=WH,XH(bH,"buffer"),XH(bH,"byteOffset"),XH(bH,"byteLength"),XH(bH,"length")),CJ({target:"Object",stat:!0,forced:!sH},{getOwnPropertyDescriptor:VH,defineProperty:WH}),WN.exports=function(t,e,n){var r=t.match(/\d+$/)[0]/8,i=t+(n?"Clamped":"")+"Array",c="get"+t,a="set"+t,o=YJ[i],l=o,u=l&&l.prototype,s={},d=function(t,e){rH(t,e,{get:function(){return function(t,e){var n=eH(t);return n.view[c](e*r+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,i){var c=eH(t);n&&(i=(i=cH(i))<0?0:i>255?255:255&i),c.view[a](e*r+c.byteOffset,i,!0)}(this,e,t)},enumerable:!0})};sH?KJ&&(l=e((function(t,e,n,i){return JJ(t,u),tH(BJ(e)?GH(e)?void 0!==i?new o(e,wJ(n,r),i):void 0!==n?new o(e,wJ(n,r)):new o(e):pH(e)?gH(l,e):SJ(DJ,l,e):new o(TJ(e)),t,l)})),PJ&&PJ(l,hH),OJ(EJ(o),(function(t){t in l||xJ(l,t,o[t])})),l.prototype=u):(l=e((function(t,e,n,i){JJ(t,u);var c,a,o,s=0,m=0;if(BJ(e)){if(!GH(e))return pH(e)?gH(l,e):SJ(DJ,l,e);c=e,m=wJ(n,r);var h=e.byteLength;if(void 0===i){if(h%r)throw aH(yH);if((a=h-m)<0)throw aH(yH)}else if((a=UJ(i)*r)+m>h)throw aH(yH);o=a/r}else o=TJ(e),c=new oH(a=o*r);for(nH(t,{buffer:c,byteOffset:m,byteLength:a,length:o,view:new uH(c)});s<o;)d(t,s++)})),PJ&&PJ(l,hH),u=l.prototype=MJ(bH)),u.constructor!==l&&xJ(u,"constructor",l),xJ(u,dH,l),mH&&xJ(u,mH,i);var m=l!=o;s[i]=l,CJ({global:!0,constructor:!0,forced:m,sham:!sH},s),IH in l||xJ(l,IH,r),IH in u||xJ(u,IH,r),_J(i)}):WN.exports=function(){},(0,WN.exports)("Float32",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Float64",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Int8",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Int16",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Int32",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Uint8",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Uint8",(function(t){return function(e,n,r){return t(this,e,n,r)}}),!0),(0,WN.exports)("Uint16",(function(t){return function(e,n,r){return t(this,e,n,r)}})),(0,WN.exports)("Uint32",(function(t){return function(e,n,r){return t(this,e,n,r)}}));var vH=rJ,CH=D(gu),YH=vH.aTypedArray;(0,vH.exportTypedArrayMethod)("copyWithin",(function(t,e){return CH(YH(this),t,e,arguments.length>2?arguments[2]:void 0)}));var SH=ga.every,RH=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("every",(function(t){return SH(RH(this),t,arguments.length>1?arguments[1]:void 0)}));var KH=Le,LH=TypeError,NH=Ku,JH=function(t){var e=KH(t,"number");if("number"==typeof e)throw LH("Can't convert number to bigint");return BigInt(e)},HH=Ji,xH=k,kH=L,UH=rJ.aTypedArray,TH=rJ.exportTypedArrayMethod,wH=D("".slice);TH("fill",(function(t){var e=arguments.length;UH(this);var n="Big"===wH(HH(this),0,3)?JH(t):+t;return xH(NH,this,n,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}),kH((function(){var t=0;return new Int8Array(2).fill({valueOf:function(){return t++}}),1!==t})));var AH=xr,FH=YG,zH=rJ.TYPED_ARRAY_CONSTRUCTOR,BH=rJ.aTypedArrayConstructor,jH=function(t){return BH(FH(t,t[zH]))},MH=function(t,e){for(var n=0,r=AH(e),i=new t(r);r>n;)i[n]=e[n++];return i},QH=jH,PH=ga.filter,EH=function(t,e){return MH(QH(t),e)},DH=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("filter",(function(t){var e=PH(DH(this),t,arguments.length>1?arguments[1]:void 0);return EH(this,e)}));var OH=ga.find,_H=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("find",(function(t){return OH(_H(this),t,arguments.length>1?arguments[1]:void 0)}));var qH=ga.findIndex,$H=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("findIndex",(function(t){return qH($H(this),t,arguments.length>1?arguments[1]:void 0)}));var tx=ga.forEach,ex=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("forEach",(function(t){tx(ex(this),t,arguments.length>1?arguments[1]:void 0)})),(0,rJ.exportTypedArrayStaticMethod)("from",vJ,sJ);var nx=Ar.includes,rx=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("includes",(function(t){return nx(rx(this),t,arguments.length>1?arguments[1]:void 0)}));var ix=Ar.indexOf,cx=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("indexOf",(function(t){return ix(cx(this),t,arguments.length>1?arguments[1]:void 0)}));var ax=R,ox=L,lx=D,ux=rJ,sx=im,dx=Ve("iterator"),mx=ax.Uint8Array,hx=lx(sx.values),bx=lx(sx.keys),Zx=lx(sx.entries),px=ux.aTypedArray,Ix=ux.exportTypedArrayMethod,yx=mx&&mx.prototype,gx=!ox((function(){yx[dx].call([1])})),Xx=!!yx&&yx.values&&yx[dx]===yx.values&&"values"===yx.values.name,Gx=function(){return hx(px(this))};Ix("entries",(function(){return Zx(px(this))}),gx),Ix("keys",(function(){return bx(px(this))}),gx),Ix("values",Gx,gx||!Xx,{name:"values"}),Ix(dx,Gx,gx||!Xx,{name:"values"});var fx=rJ.aTypedArray,Vx=rJ.exportTypedArrayMethod,Wx=D([].join);Vx("join",(function(t){return Wx(fx(this),t)}));var vx=Qo,Cx=ut,Yx=Cr,Sx=xr,Rx=om,Kx=Math.min,Lx=[].lastIndexOf,Nx=!!Lx&&1/[1].lastIndexOf(1,-0)<0,Jx=Rx("lastIndexOf"),Hx=Nx||!Jx?function(t){if(Nx)return vx(Lx,this,arguments)||0;var e=Cx(this),n=Sx(e),r=n-1;for(arguments.length>1&&(r=Kx(r,Yx(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}:Lx,xx=Qo,kx=Hx,Ux=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return xx(kx,Ux(this),e>1?[t,arguments[1]]:[t])}));var Tx=ga.map,wx=jH,Ax=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("map",(function(t){return Tx(Ax(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(wx(t))(e)}))}));var Fx=rJ.aTypedArrayConstructor;(0,rJ.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(Fx(this))(e);e>t;)n[t]=arguments[t++];return n}),sJ);var zx=At,Bx=ie,jx=it,Mx=xr,Qx=TypeError,Px=function(t){return function(e,n,r,i){zx(n);var c=Bx(e),a=jx(c),o=Mx(c),l=t?o-1:0,u=t?-1:1;if(r<2)for(;;){if(l in a){i=a[l],l+=u;break}if(l+=u,t?l<0:o<=l)throw Qx("Reduce of empty array with no initial value")}for(;t?l>=0:o>l;l+=u)l in a&&(i=n(i,a[l],l,c));return i}},Ex={left:Px(!1),right:Px(!0)},Dx=Ex.left,Ox=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return Dx(Ox(this),t,e,e>1?arguments[1]:void 0)}));var _x=Ex.right,qx=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return _x(qx(this),t,e,e>1?arguments[1]:void 0)}));var $x=rJ.aTypedArray,tk=rJ.exportTypedArrayMethod,ek=Math.floor;tk("reverse",(function(){for(var t,e=this,n=$x(e).length,r=ek(n/2),i=0;i<r;)t=e[i],e[i++]=e[--n],e[n]=t;return e}));var nk=R,rk=k,ik=rJ,ck=xr,ak=ZJ,ok=ie,lk=L,uk=nk.RangeError,sk=nk.Int8Array,dk=sk&&sk.prototype,mk=dk&&dk.set,hk=ik.aTypedArray,bk=ik.exportTypedArrayMethod,Zk=!lk((function(){var t=new Uint8ClampedArray(2);return rk(mk,t,{length:1,0:3},1),3!==t[1]})),pk=Zk&&ik.NATIVE_ARRAY_BUFFER_VIEWS&&lk((function(){var t=new sk(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));bk("set",(function(t){hk(this);var e=ak(arguments.length>1?arguments[1]:void 0,1),n=ok(t);if(Zk)return rk(mk,this,n,e);var r=this.length,i=ck(n),c=0;if(i+e>r)throw uk("Wrong length");for(;c<i;)this[e+c]=n[c++]}),!Zk||pk);var Ik=jH,yk=Po,gk=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("slice",(function(t,e){for(var n=yk(gk(this),t,e),r=Ik(this),i=0,c=n.length,a=new r(c);c>i;)a[i]=n[i++];return a}),L((function(){new Int8Array(1).slice()})));var Xk=ga.some,Gk=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("some",(function(t){return Xk(Gk(this),t,arguments.length>1?arguments[1]:void 0)}));var fk=D,Vk=L,Wk=At,vk=Um,Ck=wm,Yk=Am,Sk=vt,Rk=zm,Kk=rJ.aTypedArray,Lk=rJ.exportTypedArrayMethod,Nk=R.Uint16Array,Jk=Nk&&fk(Nk.prototype.sort),Hk=!(!Jk||Vk((function(){Jk(new Nk(2),null)}))&&Vk((function(){Jk(new Nk(2),{})}))),xk=!!Jk&&!Vk((function(){if(Sk)return Sk<74;if(Ck)return Ck<67;if(Yk)return!0;if(Rk)return Rk<602;var t,e,n=new Nk(516),r=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,r[t]=t-2*e+3;for(Jk(n,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==r[t])return!0}));Lk("sort",(function(t){return void 0!==t&&Wk(t),xk?Jk(this,t):vk(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))}),!xk||Hk);var kk=Jr,Uk=Kr,Tk=jH,wk=rJ.aTypedArray;(0,rJ.exportTypedArrayMethod)("subarray",(function(t,e){var n=wk(this),r=n.length,i=Uk(t,r);return new(Tk(n))(n.buffer,n.byteOffset+i*n.BYTES_PER_ELEMENT,kk((void 0===e?r:Uk(e,r))-i))}));var Ak=Qo,Fk=rJ,zk=L,Bk=Po,jk=R.Int8Array,Mk=Fk.aTypedArray,Qk=Fk.exportTypedArrayMethod,Pk=[].toLocaleString,Ek=!!jk&&zk((function(){Pk.call(new jk(1))}));Qk("toLocaleString",(function(){return Ak(Pk,Ek?Bk(Mk(this)):Mk(this),Bk(arguments))}),zk((function(){return[1,2].toLocaleString()!=new jk([1,2]).toLocaleString()}))||!zk((function(){jk.prototype.toLocaleString.call([1,2])})));var Dk=rJ.exportTypedArrayMethod,Ok=L,_k=D,qk=R.Uint8Array,$k=qk&&qk.prototype||{},tU=[].toString,eU=_k([].join);Ok((function(){tU.call({})}))&&(tU=function(){return eU(this)});var nU=$k.toString!=tU;Dk("toString",tU,nU);var rU=D,iU=Rh,cU=yZ.exports.getWeakData,aU=en,oU=mt,lU=Nh,uU=ep,sU=oe,dU=rr.set,mU=rr.getterFor,hU=ga.find,bU=ga.findIndex,ZU=rU([].splice),pU=0,IU=function(t){return t.frozen||(t.frozen=new yU)},yU=function(){this.entries=[]},gU=function(t,e){return hU(t.entries,(function(t){return t[0]===e}))};yU.prototype={get:function(t){var e=gU(this,t);if(e)return e[1]},has:function(t){return!!gU(this,t)},set:function(t,e){var n=gU(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=bU(this.entries,(function(e){return e[0]===t}));return~e&&ZU(this.entries,e,1),!!~e}};var XU,GU={getConstructor:function(t,e,n,r){var i=t((function(t,i){lU(t,c),dU(t,{type:e,id:pU++,frozen:void 0}),null!=i&&uU(i,t[r],{that:t,AS_ENTRIES:n})})),c=i.prototype,a=mU(e),o=function(t,e,n){var r=a(t),i=cU(aU(e),!0);return!0===i?IU(r).set(e,n):i[r.id]=n,t};return iU(c,{delete:function(t){var e=a(this);if(!oU(t))return!1;var n=cU(t);return!0===n?IU(e).delete(t):n&&sU(n,e.id)&&delete n[e.id]},has:function(t){var e=a(this);if(!oU(t))return!1;var n=cU(t);return!0===n?IU(e).has(t):n&&sU(n,e.id)}}),iU(c,n?{get:function(t){var e=a(this);if(oU(t)){var n=cU(t);return!0===n?IU(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return o(this,t,e)}}:{add:function(t){return o(this,t,!0)}}),i}},fU=R,VU=D,WU=Rh,vU=yZ.exports,CU=Xp,YU=GU,SU=mt,RU=vZ,KU=rr.enforce,LU=Hn,NU=!fU.ActiveXObject&&"ActiveXObject"in fU,JU=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},HU=CU("WeakMap",JU,YU);if(LU&&NU){XU=YU.getConstructor(JU,"WeakMap",!0),vU.enable();var xU=HU.prototype,kU=VU(xU.delete),UU=VU(xU.has),TU=VU(xU.get),wU=VU(xU.set);WU(xU,{delete:function(t){if(SU(t)&&!RU(t)){var e=KU(this);return e.frozen||(e.frozen=new XU),kU(this,t)||e.frozen.delete(t)}return kU(this,t)},has:function(t){if(SU(t)&&!RU(t)){var e=KU(this);return e.frozen||(e.frozen=new XU),UU(this,t)||e.frozen.has(t)}return UU(this,t)},get:function(t){if(SU(t)&&!RU(t)){var e=KU(this);return e.frozen||(e.frozen=new XU),UU(this,t)?TU(this,t):e.frozen.get(t)}return TU(this,t)},set:function(t,e){if(SU(t)&&!RU(t)){var n=KU(this);n.frozen||(n.frozen=new XU),UU(this,t)?wU(this,t,e):n.frozen.set(t,e)}else wU(this,t,e);return this}})}Xp("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),GU);var AU={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},FU=Te("span").classList,zU=FU&&FU.constructor&&FU.constructor.prototype,BU=zU===Object.prototype?void 0:zU,jU=ga.forEach,MU=om("forEach")?[].forEach:function(t){return jU(this,t,arguments.length>1?arguments[1]:void 0)},QU=R,PU=AU,EU=BU,DU=MU,OU=pn,_U=function(t){if(t&&t.forEach!==DU)try{OU(t,"forEach",DU)}catch(e){t.forEach=DU}};for(var qU in PU)PU[qU]&&_U(QU[qU]&&QU[qU].prototype);_U(EU);var $U=R,tT=AU,eT=BU,nT=im,rT=pn,iT=Ve,cT=iT("iterator"),aT=iT("toStringTag"),oT=nT.values,lT=function(t,e){if(t){if(t[cT]!==oT)try{rT(t,cT,oT)}catch(e){t[cT]=oT}if(t[aT]||rT(t,aT,e),tT[e])for(var n in nT)if(t[n]!==nT[n])try{rT(t,n,nT[n])}catch(e){t[n]=nT[n]}}};for(var uT in tT)lT($U[uT]&&$U[uT].prototype,uT);lT(eT,"DOMTokenList");var sT=mf.clear;Wi({global:!0,bind:!0,enumerable:!0,forced:R.clearImmediate!==sT},{clearImmediate:sT});var dT=mf.set;Wi({global:!0,bind:!0,enumerable:!0,forced:R.setImmediate!==dT},{setImmediate:dT});var mT=Wi,hT=Kf,bT=At,ZT=RG,pT=gG,IT=R.process;mT({global:!0,enumerable:!0,dontCallGetSet:!0},{queueMicrotask:function(t){ZT(arguments.length,1),bT(t);var e=pT&&IT.domain;hT(e?e.bind(t):t)}});var yT=L,gT=Ve("iterator"),XT=!yT((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,r){e.delete("b"),n+=r+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[gT]||"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})),GT=D,fT=2147483647,VT=/[^\0-\u007E]/,WT=/[.\u3002\uFF0E\uFF61]/g,vT="Overflow: input needs wider integers to process",CT=RangeError,YT=GT(WT.exec),ST=Math.floor,RT=String.fromCharCode,KT=GT("".charCodeAt),LT=GT([].join),NT=GT([].push),JT=GT("".replace),HT=GT("".split),xT=GT("".toLowerCase),kT=function(t){return t+22+75*(t<26)},UT=function(t,e,n){var r=0;for(t=n?ST(t/700):t>>1,t+=ST(t/e);t>455;)t=ST(t/35),r+=36;return ST(r+36*t/(t+38))},TT=function(t){var e=[];t=function(t){for(var e=[],n=0,r=t.length;n<r;){var i=KT(t,n++);if(i>=55296&&i<=56319&&n<r){var c=KT(t,n++);56320==(64512&c)?NT(e,((1023&i)<<10)+(1023&c)+65536):(NT(e,i),n--)}else NT(e,i)}return e}(t);var n,r,i=t.length,c=128,a=0,o=72;for(n=0;n<t.length;n++)(r=t[n])<128&&NT(e,RT(r));var l=e.length,u=l;for(l&&NT(e,"-");u<i;){var s=fT;for(n=0;n<t.length;n++)(r=t[n])>=c&&r<s&&(s=r);var d=u+1;if(s-c>ST((fT-a)/d))throw CT(vT);for(a+=(s-c)*d,c=s,n=0;n<t.length;n++){if((r=t[n])<c&&++a>fT)throw CT(vT);if(r==c){for(var m=a,h=36;;){var b=h<=o?1:h>=o+26?26:h-o;if(m<b)break;var Z=m-b,p=36-b;NT(e,RT(kT(b+Z%p))),m=ST(Z/p),h+=36}NT(e,RT(kT(m))),o=UT(a,d,u==l),a=0,u++}}a++,c++}return LT(e,"")},wT=Wi,AT=R,FT=k,zT=D,BT=N,jT=XT,MT=Xr,QT=Rh,PT=Tc,ET=gd,DT=rr,OT=Nh,_T=st,qT=oe,$T=zc,tw=Ji,ew=en,nw=mt,rw=ki,iw=ac,cw=B,aw=Cs,ow=gs,lw=RG,uw=Um,sw=Ve("iterator"),dw="URLSearchParams",mw="URLSearchParamsIterator",hw=DT.set,bw=DT.getterFor(dw),Zw=DT.getterFor(mw),pw=Object.getOwnPropertyDescriptor,Iw=function(t){if(!BT)return AT[t];var e=pw(AT,t);return e&&e.value},yw=Iw("fetch"),gw=Iw("Request"),Xw=Iw("Headers"),Gw=gw&&gw.prototype,fw=Xw&&Xw.prototype,Vw=AT.RegExp,Ww=AT.TypeError,vw=AT.decodeURIComponent,Cw=AT.encodeURIComponent,Yw=zT("".charAt),Sw=zT([].join),Rw=zT([].push),Kw=zT("".replace),Lw=zT([].shift),Nw=zT([].splice),Jw=zT("".split),Hw=zT("".slice),xw=/\+/g,kw=Array(4),Uw=function(t){return kw[t-1]||(kw[t-1]=Vw("((?:%[\\da-f]{2}){"+t+"})","gi"))},Tw=function(t){try{return vw(t)}catch(e){return t}},ww=function(t){var e=Kw(t,xw," "),n=4;try{return vw(e)}catch(t){for(;n;)e=Kw(e,Uw(n--),Tw);return e}},Aw=/[!'()~]|%20/g,Fw={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},zw=function(t){return Fw[t]},Bw=function(t){return Kw(Cw(t),Aw,zw)},jw=ET((function(t,e){hw(this,{type:mw,iterator:aw(bw(t).entries),kind:e})}),"Iterator",(function(){var t=Zw(this),e=t.kind,n=t.iterator.next(),r=n.value;return n.done||(n.value="keys"===e?r.key:"values"===e?r.value:[r.key,r.value]),n}),!0),Mw=function(t){this.entries=[],this.url=null,void 0!==t&&(nw(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===Yw(t,0)?Hw(t,1):t:rw(t)))};Mw.prototype={type:dw,bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,r,i,c,a,o,l=ow(t);if(l)for(n=(e=aw(t,l)).next;!(r=FT(n,e)).done;){if(c=(i=aw(ew(r.value))).next,(a=FT(c,i)).done||(o=FT(c,i)).done||!FT(c,i).done)throw Ww("Expected sequence with length 2");Rw(this.entries,{key:rw(a.value),value:rw(o.value)})}else for(var u in t)qT(t,u)&&Rw(this.entries,{key:u,value:rw(t[u])})},parseQuery:function(t){if(t)for(var e,n,r=Jw(t,"&"),i=0;i<r.length;)(e=r[i++]).length&&(n=Jw(e,"="),Rw(this.entries,{key:ww(Lw(n)),value:ww(Sw(n,"="))}))},serialize:function(){for(var t,e=this.entries,n=[],r=0;r<e.length;)t=e[r++],Rw(n,Bw(t.key)+"="+Bw(t.value));return Sw(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var Qw=function(){OT(this,Pw);var t=arguments.length>0?arguments[0]:void 0;hw(this,new Mw(t))},Pw=Qw.prototype;if(QT(Pw,{append:function(t,e){lw(arguments.length,2);var n=bw(this);Rw(n.entries,{key:rw(t),value:rw(e)}),n.updateURL()},delete:function(t){lw(arguments.length,1);for(var e=bw(this),n=e.entries,r=rw(t),i=0;i<n.length;)n[i].key===r?Nw(n,i,1):i++;e.updateURL()},get:function(t){lw(arguments.length,1);for(var e=bw(this).entries,n=rw(t),r=0;r<e.length;r++)if(e[r].key===n)return e[r].value;return null},getAll:function(t){lw(arguments.length,1);for(var e=bw(this).entries,n=rw(t),r=[],i=0;i<e.length;i++)e[i].key===n&&Rw(r,e[i].value);return r},has:function(t){lw(arguments.length,1);for(var e=bw(this).entries,n=rw(t),r=0;r<e.length;)if(e[r++].key===n)return!0;return!1},set:function(t,e){lw(arguments.length,1);for(var n,r=bw(this),i=r.entries,c=!1,a=rw(t),o=rw(e),l=0;l<i.length;l++)(n=i[l]).key===a&&(c?Nw(i,l--,1):(c=!0,n.value=o));c||Rw(i,{key:a,value:o}),r.updateURL()},sort:function(){var t=bw(this);uw(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=bw(this).entries,r=$T(t,arguments.length>1?arguments[1]:void 0),i=0;i<n.length;)r((e=n[i++]).value,e.key,this)},keys:function(){return new jw(this,"keys")},values:function(){return new jw(this,"values")},entries:function(){return new jw(this,"entries")}},{enumerable:!0}),MT(Pw,sw,Pw.entries,{name:"entries"}),MT(Pw,"toString",(function(){return bw(this).serialize()}),{enumerable:!0}),PT(Qw,dw),wT({global:!0,constructor:!0,forced:!jT},{URLSearchParams:Qw}),!jT&&_T(Xw)){var Ew=zT(fw.has),Dw=zT(fw.set),Ow=function(t){if(nw(t)){var e,n=t.body;if(tw(n)===dw)return e=t.headers?new Xw(t.headers):new Xw,Ew(e,"content-type")||Dw(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),iw(t,{body:cw(0,rw(n)),headers:cw(0,e)})}return t};if(_T(yw)&&wT({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(t){return yw(t,arguments.length>1?Ow(arguments[1]):{})}}),_T(gw)){var _w=function(t){return OT(this,Gw),new gw(t,arguments.length>1?Ow(arguments[1]):{})};Gw.constructor=_w,_w.prototype=Gw,wT({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:_w})}}var qw,$w=Wi,tA=N,eA=XT,nA=R,rA=zc,iA=D,cA=Xr,aA=RY,oA=Nh,lA=oe,uA=Hg,sA=Ts,dA=Ic,mA=pS.codeAt,hA=function(t){var e,n,r=[],i=HT(JT(xT(t),WT,"."),".");for(e=0;e<i.length;e++)n=i[e],NT(r,YT(VT,n)?"xn--"+TT(n):n);return LT(r,".")},bA=ki,ZA=Tc,pA=RG,IA={URLSearchParams:Qw,getState:bw},yA=rr,gA=yA.set,XA=yA.getterFor("URL"),GA=IA.URLSearchParams,fA=IA.getState,VA=nA.URL,WA=nA.TypeError,vA=nA.parseInt,CA=Math.floor,YA=Math.pow,SA=iA("".charAt),RA=iA(/./.exec),KA=iA([].join),LA=iA(1..toString),NA=iA([].pop),JA=iA([].push),HA=iA("".replace),xA=iA([].shift),kA=iA("".split),UA=iA("".slice),TA=iA("".toLowerCase),wA=iA([].unshift),AA="Invalid scheme",FA="Invalid host",zA="Invalid port",BA=/[a-z]/i,jA=/[\d+-.a-z]/i,MA=/\d/,QA=/^0x/i,PA=/^[0-7]+$/,EA=/^\d+$/,DA=/^[\da-f]+$/i,OA=/[\0\t\n\r #%/:<>?@[\\\]^|]/,_A=/[\0\t\n\r #/:<>?@[\\\]^|]/,qA=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,$A=/[\t\n\r]/g,tF=function(t){var e,n,r,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)wA(e,t%256),t=CA(t/256);return KA(e,".")}if("object"==o(t)){for(e="",r=function(t){for(var e=null,n=1,r=null,i=0,c=0;c<8;c++)0!==t[c]?(i>n&&(e=r,n=i),r=null,i=0):(null===r&&(r=c),++i);return i>n&&(e=r,n=i),e}(t),n=0;n<8;n++)i&&0===t[n]||(i&&(i=!1),r===n?(e+=n?":":"::",i=!0):(e+=LA(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},eF={},nF=uA({},eF,{" ":1,'"':1,"<":1,">":1,"`":1}),rF=uA({},nF,{"#":1,"?":1,"{":1,"}":1}),iF=uA({},rF,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),cF=function(t,e){var n=mA(t,0);return n>32&&n<127&&!lA(e,t)?t:encodeURIComponent(t)},aF={ftp:21,file:null,http:80,https:443,ws:80,wss:443},oF=function(t,e){var n;return 2==t.length&&RA(BA,SA(t,0))&&(":"==(n=SA(t,1))||!e&&"|"==n)},lF=function(t){var e;return t.length>1&&oF(UA(t,0,2))&&(2==t.length||"/"===(e=SA(t,2))||"\\"===e||"?"===e||"#"===e)},uF=function(t){return"."===t||"%2e"===TA(t)},sF={},dF={},mF={},hF={},bF={},ZF={},pF={},IF={},yF={},gF={},XF={},GF={},fF={},VF={},WF={},vF={},CF={},YF={},SF={},RF={},KF={},LF=function t(e,n,r){var i,c,a,o=bA(e);if(n){if(c=this.parse(o))throw WA(c);this.searchParams=null}else{if(void 0!==r&&(i=new t(r,!0)),c=this.parse(o,null,i))throw WA(c);(a=fA(new GA)).bindURL(this),this.searchParams=a}};LF.prototype={type:"URL",parse:function(t,e,n){var r,i,c,a,o,l=this,u=e||sF,s=0,d="",m=!1,h=!1,b=!1;for(t=bA(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=HA(t,qA,"")),t=HA(t,$A,""),r=sA(t);s<=r.length;){switch(i=r[s],u){case sF:if(!i||!RA(BA,i)){if(e)return AA;u=mF;continue}d+=TA(i),u=dF;break;case dF:if(i&&(RA(jA,i)||"+"==i||"-"==i||"."==i))d+=TA(i);else{if(":"!=i){if(e)return AA;d="",u=mF,s=0;continue}if(e&&(l.isSpecial()!=lA(aF,d)||"file"==d&&(l.includesCredentials()||null!==l.port)||"file"==l.scheme&&!l.host))return;if(l.scheme=d,e)return void(l.isSpecial()&&aF[l.scheme]==l.port&&(l.port=null));d="","file"==l.scheme?u=VF:l.isSpecial()&&n&&n.scheme==l.scheme?u=hF:l.isSpecial()?u=IF:"/"==r[s+1]?(u=bF,s++):(l.cannotBeABaseURL=!0,JA(l.path,""),u=SF)}break;case mF:if(!n||n.cannotBeABaseURL&&"#"!=i)return AA;if(n.cannotBeABaseURL&&"#"==i){l.scheme=n.scheme,l.path=dA(n.path),l.query=n.query,l.fragment="",l.cannotBeABaseURL=!0,u=KF;break}u="file"==n.scheme?VF:ZF;continue;case hF:if("/"!=i||"/"!=r[s+1]){u=ZF;continue}u=yF,s++;break;case bF:if("/"==i){u=gF;break}u=YF;continue;case ZF:if(l.scheme=n.scheme,i==qw)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=dA(n.path),l.query=n.query;else if("/"==i||"\\"==i&&l.isSpecial())u=pF;else if("?"==i)l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=dA(n.path),l.query="",u=RF;else{if("#"!=i){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=dA(n.path),l.path.length--,u=YF;continue}l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,l.path=dA(n.path),l.query=n.query,l.fragment="",u=KF}break;case pF:if(!l.isSpecial()||"/"!=i&&"\\"!=i){if("/"!=i){l.username=n.username,l.password=n.password,l.host=n.host,l.port=n.port,u=YF;continue}u=gF}else u=yF;break;case IF:if(u=yF,"/"!=i||"/"!=SA(d,s+1))continue;s++;break;case yF:if("/"!=i&&"\\"!=i){u=gF;continue}break;case gF:if("@"==i){m&&(d="%40"+d),m=!0,c=sA(d);for(var Z=0;Z<c.length;Z++){var p=c[Z];if(":"!=p||b){var I=cF(p,iF);b?l.password+=I:l.username+=I}else b=!0}d=""}else if(i==qw||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(m&&""==d)return"Invalid authority";s-=sA(d).length+1,d="",u=XF}else d+=i;break;case XF:case GF:if(e&&"file"==l.scheme){u=vF;continue}if(":"!=i||h){if(i==qw||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(l.isSpecial()&&""==d)return FA;if(e&&""==d&&(l.includesCredentials()||null!==l.port))return;if(a=l.parseHost(d))return a;if(d="",u=CF,e)return;continue}"["==i?h=!0:"]"==i&&(h=!1),d+=i}else{if(""==d)return FA;if(a=l.parseHost(d))return a;if(d="",u=fF,e==GF)return}break;case fF:if(!RA(MA,i)){if(i==qw||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()||e){if(""!=d){var y=vA(d,10);if(y>65535)return zA;l.port=l.isSpecial()&&y===aF[l.scheme]?null:y,d=""}if(e)return;u=CF;continue}return zA}d+=i;break;case VF:if(l.scheme="file","/"==i||"\\"==i)u=WF;else{if(!n||"file"!=n.scheme){u=YF;continue}if(i==qw)l.host=n.host,l.path=dA(n.path),l.query=n.query;else if("?"==i)l.host=n.host,l.path=dA(n.path),l.query="",u=RF;else{if("#"!=i){lF(KA(dA(r,s),""))||(l.host=n.host,l.path=dA(n.path),l.shortenPath()),u=YF;continue}l.host=n.host,l.path=dA(n.path),l.query=n.query,l.fragment="",u=KF}}break;case WF:if("/"==i||"\\"==i){u=vF;break}n&&"file"==n.scheme&&!lF(KA(dA(r,s),""))&&(oF(n.path[0],!0)?JA(l.path,n.path[0]):l.host=n.host),u=YF;continue;case vF:if(i==qw||"/"==i||"\\"==i||"?"==i||"#"==i){if(!e&&oF(d))u=YF;else if(""==d){if(l.host="",e)return;u=CF}else{if(a=l.parseHost(d))return a;if("localhost"==l.host&&(l.host=""),e)return;d="",u=CF}continue}d+=i;break;case CF:if(l.isSpecial()){if(u=YF,"/"!=i&&"\\"!=i)continue}else if(e||"?"!=i)if(e||"#"!=i){if(i!=qw&&(u=YF,"/"!=i))continue}else l.fragment="",u=KF;else l.query="",u=RF;break;case YF:if(i==qw||"/"==i||"\\"==i&&l.isSpecial()||!e&&("?"==i||"#"==i)){if(".."===(o=TA(o=d))||"%2e."===o||".%2e"===o||"%2e%2e"===o?(l.shortenPath(),"/"==i||"\\"==i&&l.isSpecial()||JA(l.path,"")):uF(d)?"/"==i||"\\"==i&&l.isSpecial()||JA(l.path,""):("file"==l.scheme&&!l.path.length&&oF(d)&&(l.host&&(l.host=""),d=SA(d,0)+":"),JA(l.path,d)),d="","file"==l.scheme&&(i==qw||"?"==i||"#"==i))for(;l.path.length>1&&""===l.path[0];)xA(l.path);"?"==i?(l.query="",u=RF):"#"==i&&(l.fragment="",u=KF)}else d+=cF(i,rF);break;case SF:"?"==i?(l.query="",u=RF):"#"==i?(l.fragment="",u=KF):i!=qw&&(l.path[0]+=cF(i,eF));break;case RF:e||"#"!=i?i!=qw&&("'"==i&&l.isSpecial()?l.query+="%27":l.query+="#"==i?"%23":cF(i,eF)):(l.fragment="",u=KF);break;case KF:i!=qw&&(l.fragment+=cF(i,nF))}s++}},parseHost:function(t){var e,n,r;if("["==SA(t,0)){if("]"!=SA(t,t.length-1))return FA;if(e=function(t){var e,n,r,i,c,a,o,l=[0,0,0,0,0,0,0,0],u=0,s=null,d=0,m=function(){return SA(t,d)};if(":"==m()){if(":"!=SA(t,1))return;d+=2,s=++u}for(;m();){if(8==u)return;if(":"!=m()){for(e=n=0;n<4&&RA(DA,m());)e=16*e+vA(m(),16),d++,n++;if("."==m()){if(0==n)return;if(d-=n,u>6)return;for(r=0;m();){if(i=null,r>0){if(!("."==m()&&r<4))return;d++}if(!RA(MA,m()))return;for(;RA(MA,m());){if(c=vA(m(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;d++}l[u]=256*l[u]+i,2!=++r&&4!=r||u++}if(4!=r)return;break}if(":"==m()){if(d++,!m())return}else if(m())return;l[u++]=e}else{if(null!==s)return;d++,s=++u}}if(null!==s)for(a=u-s,u=7;0!=u&&a>0;)o=l[u],l[u--]=l[s+a-1],l[s+--a]=o;else if(8!=u)return;return l}(UA(t,1,-1)),!e)return FA;this.host=e}else if(this.isSpecial()){if(t=hA(t),RA(OA,t))return FA;if(e=function(t){var e,n,r,i,c,a,o,l=kA(t,".");if(l.length&&""==l[l.length-1]&&l.length--,(e=l.length)>4)return t;for(n=[],r=0;r<e;r++){if(""==(i=l[r]))return t;if(c=10,i.length>1&&"0"==SA(i,0)&&(c=RA(QA,i)?16:8,i=UA(i,8==c?1:2)),""===i)a=0;else{if(!RA(10==c?EA:8==c?PA:DA,i))return t;a=vA(i,c)}JA(n,a)}for(r=0;r<e;r++)if(a=n[r],r==e-1){if(a>=YA(256,5-e))return null}else if(a>255)return null;for(o=NA(n),r=0;r<n.length;r++)o+=n[r]*YA(256,3-r);return o}(t),null===e)return FA;this.host=e}else{if(RA(_A,t))return FA;for(e="",n=sA(t),r=0;r<n.length;r++)e+=cF(n[r],eF);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return lA(aF,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&oF(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,n=t.username,r=t.password,i=t.host,c=t.port,a=t.path,o=t.query,l=t.fragment,u=e+":";return null!==i?(u+="//",t.includesCredentials()&&(u+=n+(r?":"+r:"")+"@"),u+=tF(i),null!==c&&(u+=":"+c)):"file"==e&&(u+="//"),u+=t.cannotBeABaseURL?a[0]:a.length?"/"+KA(a,"/"):"",null!==o&&(u+="?"+o),null!==l&&(u+="#"+l),u},setHref:function(t){var e=this.parse(t);if(e)throw WA(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new NF(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+tF(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(bA(t)+":",sF)},getUsername:function(){return this.username},setUsername:function(t){var e=sA(bA(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<e.length;n++)this.username+=cF(e[n],iF)}},getPassword:function(){return this.password},setPassword:function(t){var e=sA(bA(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<e.length;n++)this.password+=cF(e[n],iF)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?tF(t):tF(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,XF)},getHostname:function(){var t=this.host;return null===t?"":tF(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,GF)},getPort:function(){var t=this.port;return null===t?"":bA(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=bA(t))?this.port=null:this.parse(t,fF))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+KA(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,CF))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=bA(t))?this.query=null:("?"==SA(t,0)&&(t=UA(t,1)),this.query="",this.parse(t,RF)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=bA(t))?("#"==SA(t,0)&&(t=UA(t,1)),this.fragment="",this.parse(t,KF)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var NF=function(t){var e=oA(this,JF),n=pA(arguments.length,1)>1?arguments[1]:void 0,r=gA(e,new LF(t,!1,n));tA||(e.href=r.serialize(),e.origin=r.getOrigin(),e.protocol=r.getProtocol(),e.username=r.getUsername(),e.password=r.getPassword(),e.host=r.getHost(),e.hostname=r.getHostname(),e.port=r.getPort(),e.pathname=r.getPathname(),e.search=r.getSearch(),e.searchParams=r.getSearchParams(),e.hash=r.getHash())},JF=NF.prototype,HF=function(t,e){return{get:function(){return XA(this)[t]()},set:e&&function(t){return XA(this)[e](t)},configurable:!0,enumerable:!0}};if(tA&&(aA(JF,"href",HF("serialize","setHref")),aA(JF,"origin",HF("getOrigin")),aA(JF,"protocol",HF("getProtocol","setProtocol")),aA(JF,"username",HF("getUsername","setUsername")),aA(JF,"password",HF("getPassword","setPassword")),aA(JF,"host",HF("getHost","setHost")),aA(JF,"hostname",HF("getHostname","setHostname")),aA(JF,"port",HF("getPort","setPort")),aA(JF,"pathname",HF("getPathname","setPathname")),aA(JF,"search",HF("getSearch","setSearch")),aA(JF,"searchParams",HF("getSearchParams")),aA(JF,"hash",HF("getHash","setHash"))),cA(JF,"toJSON",(function(){return XA(this).serialize()}),{enumerable:!0}),cA(JF,"toString",(function(){return XA(this).serialize()}),{enumerable:!0}),VA){var xF=VA.createObjectURL,kF=VA.revokeObjectURL;xF&&cA(NF,"createObjectURL",rA(xF,VA)),kF&&cA(NF,"revokeObjectURL",rA(kF,VA))}ZA(NF,"URL"),$w({global:!0,constructor:!0,forced:!eA,sham:!tA},{URL:NF});var UF=k;function TF(t,e,n,r){return new(n||(n=Promise))((function(i,c){function a(t){try{l(r.next(t))}catch(t){c(t)}}function o(t){try{l(r.throw(t))}catch(t){c(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,o)}l((r=r.apply(t,e||[])).next())}))}function wF(t,e,n,r){return new(n||(n=Promise))((function(i,c){function a(t){try{l(r.next(t))}catch(t){c(t)}}function o(t){try{l(r.throw(t))}catch(t){c(t)}}function l(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,o)}l((r=r.apply(t,e||[])).next())}))}Wi({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return UF(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 AF,FF="refresh_token_timer",zF=["RS256","RS512","RS384","PS256"],BF="code",jF="session_state",MF="sign_out_url",QF="sign_out_success",PF="state";!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(AF||(AF={}));var EF=m((function t(e,n,r){s(this,t),this.message=r,this.name=n,this.code=e,Object.setPrototypeOf(this,(this instanceof t?this.constructor:void 0).prototype)})),DF=function(){function t(){s(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),r=e[0],i=e[1],c=r.split("_").map((function(t,e){return 0===e?t:[t[0].toUpperCase()].concat(W(t.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(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}();DF.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 OF=function(){function t(e,n){var r=this;s(this,t),this._dataLayer=e,this._config=function(){return wF(r,void 0,void 0,a().mark((function t(){return a().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 wF(r,void 0,void 0,a().mark((function t(){return a().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 wF(this,void 0,void 0,a().mark((function e(){var n,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.next=3,this._config();case 3:return r=e.sent,e.abrupt("return",(r.endpoints&&Object.keys(r.endpoints).forEach((function(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));n[e]=(null==r?void 0:r.endpoints)?r.endpoints[t]:""})),Object.assign(Object.assign({},t),n)));case 5:case"end":return e.stop()}}),e,this)})))}},{key:"resolveEndpointsExplicitly",value:function(){return wF(this,void 0,void 0,a().mark((function t(){var e,n,r;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:if(n=t.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(t){var e=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));return r.includes(e)}))){t.next=7;break}throw new EF("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 r=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[r]=(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 wF(this,void 0,void 0,a().mark((function t(){var e,n,r,i;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={},t.next=3,this._config();case 3:if(n=t.sent,r=n.baseUrl){t.next=7;break}throw new EF("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 r=t.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())}));e[r]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""})),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")},t.abrupt("return",Object.assign(Object.assign({},i),e));case 10:case"end":return t.stop()}}),t,this)})))}},{key:"validateIdToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){var n,r,i,c,o,l,u;return a().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(r=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new EF("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:r.sendCookiesInRequests?AF.Include:AF.SameOrigin});case 11:i=e.sent,e.next=17;break;case 14:throw e.prev=14,e.t0=e.catch(8),new EF("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===i.status&&i.ok){e.next=24;break}return e.t1=EF,e.t2="Invalid response status received for jwks request (".concat(i.statusText,")."),e.next=22,i.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,i.json();case 29:return o=e.sent,l=o.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,r,i,c=this._cryptoHelper.decodeIDToken(t),a=DF.getTenantDomainFromIdTokenPayload(c),o=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",l=null!==(n=c.given_name)&&void 0!==n?n:"",u=null!==(r=c.family_name)&&void 0!==r?r:"",s=l&&u?"".concat(l," ").concat(u):l||u||"",d=null!==(i=c.preferred_username)&&void 0!==i?i:s;return Object.assign({displayName:d,tenantDomain:a,username:o},DF.filterClaimsFromIDTokenPayload(c))}},{key:"replaceCustomGrantTemplateTags",value:function(t,e){var n;return wF(this,void 0,void 0,a().mark((function r(){var i,c,o;return a().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(e);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(" ")),t.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(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function n(){var r,i,c=this;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(200===t.status&&t.ok){n.next=7;break}return n.t0=EF,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(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 wF(c,void 0,void 0,a().mark((function t(){var n;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.setSessionData(r,e);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},t.abrupt("return",Promise.resolve(n));case 4:case"end":return t.stop()}}),t,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,e);case 18:return n.abrupt("return",Promise.resolve(i));case 19:case"end":return n.stop()}}),n,this)})))}},{key:"generatePKCEKey",value:function(t){var e;return wF(this,void 0,void 0,a().mark((function n(){var r,i,c;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryData(t);case 2:return r=n.sent,i=[],Object.keys(r).forEach((function(t){t.startsWith("pkce_code_verifier")&&i.push(t)})),c=i.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}(),_F=function(){function t(e){s(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,r=JSON.parse(this._cryptoUtils.base64URLDecode(t)),i=Y(e);try{for(i.s();!(n=i.n()).done;){var c=n.value;if(r.kid===c.kid)return c}}catch(t){i.e(t)}finally{i.f()}throw new EF("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: "+e.map((function(t){return t.kid})).join(", "))}},{key:"isValidIdToken",value:function(t,e,n,r,i,c){return this._cryptoUtils.verifyJwt(t,e,zF,n,r,i,c).then((function(t){return t?Promise.resolve(!0):Promise.reject(new EF("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 EF("JS-CRYPTO_UTILS-IVIT-IV02","JWT NBF CLAIM VALIDATION FAILED","JWT NBF claim validation has been failed")):Promise.reject(new EF("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 EF("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}]),t}(),qF=function(){function t(e,n){var r=this;s(this,t),this._cryptoUtils=n,this._cryptoHelper=new _F(n),this._authenticationHelper=new OF(e,this._cryptoHelper),this._dataLayer=e,this._config=function(){return wF(r,void 0,void 0,a().mark((function t(){return a().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 wF(r,void 0,void 0,a().mark((function t(){return a().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,r,i;return wF(this,void 0,void 0,a().mark((function c(){var o,l,u,s,d,m,h,b,Z,p,I,y,g,X,G,f,W,v,C,S;return a().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(l=c.sent,o&&0!==o.trim().length){c.next=8;break}throw new EF("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(o),(s=new Map).set("response_type","code"),s.set("client_id",l.clientID),d="openid",l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),d=l.scope.join(" ")),s.set("scope",d),s.set("redirect_uri",l.signInRedirectURL),l.responseMode&&s.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===(r=this._cryptoHelper)||void 0===r?void 0:r.getCodeChallenge(h),c.next=19,this._dataLayer.setTemporaryDataParameter(m,h,e);case 19:s.set("code_challenge_method","S256"),s.set("code_challenge",b);case 21:if(l.prompt&&s.set("prompt",l.prompt),Z=t)for(p=0,I=Object.entries(Z);p<I.length;p++)y=V(I[p],2),g=y[0],X=y[1],""!=g&&""!=X&&"state"!==g&&(G=g.replace(/[A-Z]/g,(function(t){return"_".concat(t.toLowerCase())})),s.set(G,X.toString()));s.set("state",DF.generateStateParamForRequestCorrelation(m,Z?null===(i=Z.state)||void 0===i?void 0:i.toString():"")),f=Y(s.entries());try{for(f.s();!(W=f.n()).done;)v=V(W.value,2),C=v[0],S=v[1],u.searchParams.append(C,S)}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,r){return wF(this,void 0,void 0,a().mark((function i(){var c,o,l,u,s;return a().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 EF("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=e,!i.t0){i.next=12;break}return i.next=12,this._dataLayer.setSessionDataParameter("session_state",e,r);case 12:if((l=[]).push("client_id=".concat(o.clientID)),o.clientSecret&&o.clientSecret.trim().length>0&&l.push("client_secret=".concat(o.clientSecret)),u=t,l.push("code=".concat(u)),l.push("grant_type=authorization_code"),l.push("redirect_uri=".concat(o.signInRedirectURL)),i.t1=o.enablePKCE,!i.t1){i.next=29;break}return i.t2=l,i.t3="code_verifier=",i.next=24,this._dataLayer.getTemporaryDataParameter(DF.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(DF.extractPKCEKeyFromStateParam(n),r);case 29:return i.prev=29,i.next=32,fetch(c,{body:l.join("&"),credentials:o.sendCookiesInRequests?AF.Include:AF.SameOrigin,headers:new Headers(DF.getTokenRequestHeaders()),method:"POST"});case 32:s=i.sent,i.next=38;break;case 35:throw i.prev=35,i.t6=i.catch(29),new EF("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(s.ok){i.next=45;break}return i.t7=EF,i.t8="Requesting access token failed with ".concat(s.statusText),i.next=43,s.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(s,r);case 47:return i.abrupt("return",i.sent);case 48:case"end":return i.stop()}}),i,this,[[29,35]])})))}},{key:"refreshAccessToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){var n,r,i,c,o;return a().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 r=e.sent,e.next=8,this._dataLayer.getSessionData(t);case 8:if((i=e.sent).refresh_token){e.next=11;break}throw new EF("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 EF("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)),e.prev=15,e.next=18,fetch(n,{body:c.join("&"),credentials:r.sendCookiesInRequests?AF.Include:AF.SameOrigin,headers:new Headers(DF.getTokenRequestHeaders()),method:"POST"});case 18:o=e.sent,e.next=24;break;case 21:throw e.prev=21,e.t0=e.catch(15),new EF("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(o.ok){e.next=31;break}return e.t1=EF,e.t2="Refreshing access token failed with ".concat(o.statusText),e.next=29,o.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(o,t));case 32:case"end":return e.stop()}}),e,this,[[15,21]])})))}},{key:"revokeAccessToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){var n,r,i,c;return a().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(r=e.sent,n&&0!==n.trim().length){e.next=8;break}throw new EF("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)),e.t0=i,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),i.push("token_type_hint=access_token"),e.prev=18,e.next=21,fetch(n,{body:i.join("&"),credentials:r.sendCookiesInRequests?AF.Include:AF.SameOrigin,headers:new Headers(DF.getTokenRequestHeaders()),method:"POST"});case 21:c=e.sent,e.next=27;break;case 24:throw e.prev=24,e.t4=e.catch(18),new EF("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=EF,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 wF(this,void 0,void 0,a().mark((function n(){var r,i,c,o,l,u,s,d=this;return a().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=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:r.token_endpoint)&&0!==c.trim().length){n.next=8;break}throw new EF("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),r=n[0],i=n[1];return wF(d,void 0,void 0,a().mark((function t(){var n;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._authenticationHelper.replaceCustomGrantTemplateTags(i,e);case 2:return n=t.sent,t.abrupt("return","".concat(r,"=").concat(n));case 4:case"end":return t.stop()}}),t,this)})))})));case 10:if(o=n.sent,l=Object.assign({},DF.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:o.join("&"),credentials:i.sendCookiesInRequests?AF.Include:AF.SameOrigin,headers:new Headers(l),method:"POST"},n.prev=24,n.next=27,fetch(c,u);case 27:s=n.sent,n.next=33;break;case 30:throw n.prev=30,n.t7=n.catch(24),new EF("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===s.status&&s.ok){n.next=40;break}return n.t8=EF,n.t9="Invalid response status received for the custom grant request. (".concat(s.statusText,")"),n.next=38,s.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(s,e),n.next=49;break;case 44:return n.t12=Promise,n.next=47,s.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 wF(this,void 0,void 0,a().mark((function e(){var n,r,i;return a().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,r=this._authenticationHelper.getAuthenticatedUserInfo(null==n?void 0:n.id_token),i={allowedScopes:n.scope,sessionState:n.session_state},e.abrupt("return",(Object.keys(r).forEach((function(t){void 0!==r[t]&&""!==r[t]&&null!==r[t]||delete r[t]})),i=Object.assign(Object.assign({},i),r)));case 6:case"end":return e.stop()}}),e,this)})))}},{key:"getDecodedIDToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){var n;return a().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:"getCryptoHelper",value:function(){return wF(this,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._cryptoHelper);case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function e(){var n,r,i;return a().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(!(r=n.wellKnownEndpoint)){e.next=36;break}return e.prev=12,e.next=15,fetch(r);case 15:if(200===(i=e.sent).status&&i.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 EF("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,i.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 EF("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 EF("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,r,i,c,o,l,u,s;return wF(this,void 0,void 0,a().mark((function d(){var m;return a().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,this._oidcProviderMetaData();case 2:return m=a.sent,a.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!==(r=m.introspection_endpoint)&&void 0!==r?r:"",issuer:null!==(i=m.issuer)&&void 0!==i?i:"",jwksUri:null!==(c=m.jwks_uri)&&void 0!==c?c:"",registrationEndpoint:null!==(o=m.registration_endpoint)&&void 0!==o?o:"",revocationEndpoint:null!==(l=m.revocation_endpoint)&&void 0!==l?l:"",tokenEndpoint:null!==(u=m.token_endpoint)&&void 0!==u?u:"",userinfoEndpoint:null!==(s=m.userinfo_endpoint)&&void 0!==s?s:""});case 4:case"end":return a.stop()}}),d,this)})))}},{key:"getSignOutURL",value:function(t){var e,n,r;return wF(this,void 0,void 0,a().mark((function i(){var c,o,l,u;return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._oidcProviderMetaData();case 2:if(i.t1=e=i.sent,i.t0=null===i.t1,i.t0){i.next=6;break}i.t0=void 0===e;case 6:if(!i.t0){i.next=10;break}i.t2=void 0,i.next=11;break;case 10:i.t2=e.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 EF("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(t);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((l=i.t5)&&0!==l.trim().length){i.next=31;break}throw new EF("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!==(r=null==o?void 0:o.signOutRedirectURL)&&void 0!==r?r:null==o?void 0:o.signInRedirectURL)&&0!==u.trim().length){i.next=34;break}throw new EF("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(l,"&post_logout_redirect_uri=").concat(u,"&state=sign_out_success"));case 35:case"end":return i.stop()}}),i,this)})))}},{key:"signOut",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,this._dataLayer.getTemporaryDataParameter(DF.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 wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._dataLayer.setTemporaryDataParameter(DF.extractPKCEKeyFromStateParam(e),t,n);case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}}),r,this)})))}},{key:"updateConfig",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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}(),$F=function(){function e(t,n){s(this,e),this._id=t,this._store=n}return m(e,[{key:"setDataInBulk",value:function(t,e){var n;return wF(this,void 0,void 0,a().mark((function r(){var i,c,o,l;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(t);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),e),l=JSON.stringify(o),r.next=17,this._store.setData(t,l);case 17:case"end":return r.stop()}}),r,this)})))}},{key:"setValue",value:function(t,e,n){var r;return wF(this,void 0,void 0,a().mark((function i(){var c,o,l,u;return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._store.getData(t);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),l=Object.assign(Object.assign({},o),h({},e,n)),u=JSON.stringify(l),i.next=17,this._store.setData(t,u);case 17:case"end":return i.stop()}}),i,this)})))}},{key:"removeValue",value:function(t,e){var n;return wF(this,void 0,void 0,a().mark((function r(){var i,c,o,l;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(t);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))[e],l=JSON.stringify(o),r.next=18,this._store.setData(t,l);case 18:case"end":return r.stop()}}),r,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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.TemporaryData,n),e);case 1:case"end":return r.stop()}}),r,this)})))}},{key:"setSessionData",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:this.setDataInBulk(this._resolveKey(t.Stores.SessionData,n),e);case 1:case"end":return r.stop()}}),r,this)})))}},{key:"setCustomData",value:function(t,e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:this.setDataInBulk(this._resolveKey(t,n),e);case 1:case"end":return r.stop()}}),r,this)})))}},{key:"getConfigData",value:function(){var e;return wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.t0=JSON,r.next=3,this._store.getData(this._resolveKey(t.Stores.TemporaryData,e));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(e){var n;return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.t0=JSON,r.next=3,this._store.getData(this._resolveKey(t.Stores.SessionData,e));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:"getCustomData",value:function(t,e){var n;return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.t0=JSON,r.next=3,this._store.getData(this._resolveKey(t,e));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 wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function e(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function n(){var r;return a().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 r=n.sent,n.abrupt("return",r&&JSON.parse(r)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getOIDCProviderMetaDataParameter",value:function(e){return wF(this,void 0,void 0,a().mark((function n(){var r;return a().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 r=n.sent,n.abrupt("return",r&&JSON.parse(r)[e]);case 4:case"end":return n.stop()}}),n,this)})))}},{key:"getTemporaryDataParameter",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){var i;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(this._resolveKey(t.Stores.TemporaryData,n));case 2:return i=r.sent,r.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return r.stop()}}),r,this)})))}},{key:"getSessionDataParameter",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){var i;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._store.getData(this._resolveKey(t.Stores.SessionData,n));case 2:return i=r.sent,r.abrupt("return",i&&JSON.parse(i)[e]);case 4:case"end":return r.stop()}}),r,this)})))}},{key:"setConfigDataParameter",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(t.Stores.ConfigData),e,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"setOIDCProviderMetaDataParameter",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.setValue(this._resolveKey(t.Stores.OIDCProviderMetaData),e,n);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"setTemporaryDataParameter",value:function(e,n,r){return wF(this,void 0,void 0,a().mark((function i(){return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.TemporaryData,r),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"setSessionDataParameter",value:function(e,n,r){return wF(this,void 0,void 0,a().mark((function i(){return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this.setValue(this._resolveKey(t.Stores.SessionData,r),e,n);case 2:case"end":return i.stop()}}),i,this)})))}},{key:"removeConfigDataParameter",value:function(e){return wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function n(){return a().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 wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.removeValue(this._resolveKey(t.Stores.TemporaryData,n),e);case 2:case"end":return r.stop()}}),r,this)})))}},{key:"removeSessionDataParameter",value:function(e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this.removeValue(this._resolveKey(t.Stores.SessionData,n),e);case 2:case"end":return r.stop()}}),r,this)})))}}]),e}(),tz={clockTolerance:300,enablePKCE:!0,responseMode:t.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0},ez=function(){
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 i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function n(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var l=function(e){return e&&e.Math==Math&&e},o=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof t&&t)||function(){return this}()||Function("return this")(),c=o,a=function(e){try{return!!e()}catch(e){return!0}},r=!a((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),d=r,s=Function.prototype,u=s.bind,h=s.call,Z=d&&u.bind(h,h),b=d?function(e){return e&&Z(e)}:function(e){return e&&function(){return h.apply(e,arguments)}},m=TypeError,p=function(e){if(null==e)throw m("Can't call method on "+e);return e},I=p,g=Object,G=function(e){return g(I(e))},y=G,X=b({}.hasOwnProperty),W=Object.hasOwn||function(e,t){return X(y(e),t)},V={},C={exports:{}},R=o,S=Object.defineProperty,v=function(e,t){try{S(R,e,{value:t,configurable:!0,writable:!0})}catch(i){R[e]=t}return t},f=v,Y="__core-js_shared__",K=o[Y]||f(Y,{}),N=K;(C.exports=function(e,t){return N[e]||(N[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.24.0",mode:"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE",source:"https://github.com/zloirock/core-js"});var J,H,L=b,k=0,A=Math.random(),U=L(1..toString),T=function(e){return"Symbol("+(void 0===e?"":e)+")_"+U(++k+A,36)},B=function(e){return"function"==typeof e},F=o,w=B,z=function(e){return w(e)?e:void 0},x=function(e,t){return arguments.length<2?z(F[e]):F[e]&&F[e][t]},P=x("navigator","userAgent")||"",j=o,Q=P,M=j.process,E=j.Deno,D=M&&M.versions||E&&E.version,O=D&&D.v8;O&&(H=(J=O.split("."))[0]>0&&J[0]<4?1:+(J[0]+J[1])),!H&&Q&&(!(J=Q.match(/Edge\/(\d+)/))||J[1]>=74)&&(J=Q.match(/Chrome\/(\d+)/))&&(H=+J[1]);var _=H,q=_,$=a,ee=!!Object.getOwnPropertySymbols&&!$((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&q&&q<41})),te=ee&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ie=o,ne=C.exports,le=W,oe=T,ce=ee,ae=te,re=ne("wks"),de=ie.Symbol,se=de&&de.for,ue=ae?de:de&&de.withoutSetter||oe,he=function(e){if(!le(re,e)||!ce&&"string"!=typeof re[e]){var t="Symbol."+e;ce&&le(de,e)?re[e]=de[e]:re[e]=ae&&se?se(t):ue(t)}return re[e]},Ze=he;V.f=Ze;var be={},me=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),pe=B,Ie=function(e){return"object"==typeof e?null!==e:pe(e)},ge=Ie,Ge=o.document,ye=ge(Ge)&&ge(Ge.createElement),Xe=function(e){return ye?Ge.createElement(e):{}},We=Xe,Ve=!me&&!a((function(){return 7!=Object.defineProperty(We("div"),"a",{get:function(){return 7}}).a})),Ce=me&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Re=Ie,Se=String,ve=TypeError,fe=function(e){if(Re(e))return e;throw ve(Se(e)+" is not an object")},Ye=r,Ke=Function.prototype.call,Ne=Ye?Ke.bind(Ke):function(){return Ke.apply(Ke,arguments)},Je=b({}.isPrototypeOf),He=x,Le=B,ke=Je,Ae=Object,Ue=te?function(e){return"symbol"==typeof e}:function(e){var t=He("Symbol");return Le(t)&&ke(t.prototype,Ae(e))},Te=String,Be=function(e){try{return Te(e)}catch(e){return"Object"}},Fe=B,we=Be,ze=TypeError,xe=function(e){if(Fe(e))return e;throw ze(we(e)+" is not a function")},Pe=xe,je=function(e,t){var i=e[t];return null==i?void 0:Pe(i)},Qe=Ne,Me=B,Ee=Ie,De=TypeError,Oe=Ne,_e=Ie,qe=Ue,$e=je,et=function(e,t){var i,n;if("string"===t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;if(Me(i=e.valueOf)&&!Ee(n=Qe(i,e)))return n;if("string"!==t&&Me(i=e.toString)&&!Ee(n=Qe(i,e)))return n;throw De("Can't convert object to primitive value")},tt=TypeError,it=he("toPrimitive"),nt=function(e,t){if(!_e(e)||qe(e))return e;var i,n=$e(e,it);if(n){if(void 0===t&&(t="default"),i=Oe(n,e,t),!_e(i)||qe(i))return i;throw tt("Can't convert object to primitive value")}return void 0===t&&(t="number"),et(e,t)},lt=nt,ot=Ue,ct=function(e){var t=lt(e,"string");return ot(t)?t:t+""},at=me,rt=Ve,dt=Ce,st=fe,ut=ct,ht=TypeError,Zt=Object.defineProperty,bt=Object.getOwnPropertyDescriptor,mt="enumerable",pt="configurable",It="writable";be.f=at?dt?function(e,t,i){if(st(e),t=ut(t),st(i),"function"==typeof e&&"prototype"===t&&"value"in i&&It in i&&!i.writable){var n=bt(e,t);n&&n.writable&&(e[t]=i.value,i={configurable:pt in i?i.configurable:n.configurable,enumerable:mt in i?i.enumerable:n.enumerable,writable:!1})}return Zt(e,t,i)}:Zt:function(e,t,i){if(st(e),t=ut(t),st(i),rt)try{return Zt(e,t,i)}catch(e){}if("get"in i||"set"in i)throw ht("Accessors not supported");return"value"in i&&(e[t]=i.value),e};var gt=c,Gt=W,yt=V,Xt=be.f,Wt=function(e){var t=gt.Symbol||(gt.Symbol={});Gt(t,e)||Xt(t,e,{value:yt.f(e)})};Wt("matchAll");var Vt={},Ct={},Rt={}.propertyIsEnumerable,St=Object.getOwnPropertyDescriptor,vt=St&&!Rt.call({1:2},1);Ct.f=vt?function(e){var t=St(this,e);return!!t&&t.enumerable}:Rt;var ft=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Yt=b,Kt=Yt({}.toString),Nt=Yt("".slice),Jt=function(e){return Nt(Kt(e),8,-1)},Ht=a,Lt=Jt,kt=Object,At=b("".split),Ut=Ht((function(){return!kt("z").propertyIsEnumerable(0)}))?function(e){return"String"==Lt(e)?At(e,""):kt(e)}:kt,Tt=Ut,Bt=p,Ft=function(e){return Tt(Bt(e))},wt=me,zt=Ne,xt=Ct,Pt=ft,jt=Ft,Qt=ct,Mt=W,Et=Ve,Dt=Object.getOwnPropertyDescriptor;Vt.f=wt?Dt:function(e,t){if(e=jt(e),t=Qt(t),Et)try{return Dt(e,t)}catch(e){}if(Mt(e,t))return Pt(!zt(xt.f,e,t),e[t])};var Ot=be,_t=ft,qt=me?function(e,t,i){return Ot.f(e,t,_t(1,i))}:function(e,t,i){return e[t]=i,e},$t={exports:{}},ei=me,ti=W,ii=Function.prototype,ni=ei&&Object.getOwnPropertyDescriptor,li=ti(ii,"name"),oi={EXISTS:li,PROPER:li&&"something"===function(){}.name,CONFIGURABLE:li&&(!ei||ei&&ni(ii,"name").configurable)},ci=B,ai=K,ri=b(Function.toString);ci(ai.inspectSource)||(ai.inspectSource=function(e){return ri(e)});var di,si,ui,hi=ai.inspectSource,Zi=B,bi=hi,mi=o.WeakMap,pi=Zi(mi)&&/native code/.test(bi(mi)),Ii=C.exports,gi=T,Gi=Ii("keys"),yi=function(e){return Gi[e]||(Gi[e]=gi(e))},Xi={},Wi=pi,Vi=o,Ci=b,Ri=Ie,Si=qt,vi=W,fi=K,Yi=yi,Ki=Xi,Ni="Object already initialized",Ji=Vi.TypeError,Hi=Vi.WeakMap;if(Wi||fi.state){var Li=fi.state||(fi.state=new Hi),ki=Ci(Li.get),Ai=Ci(Li.has),Ui=Ci(Li.set);di=function(e,t){if(Ai(Li,e))throw new Ji(Ni);return t.facade=e,Ui(Li,e,t),t},si=function(e){return ki(Li,e)||{}},ui=function(e){return Ai(Li,e)}}else{var Ti=Yi("state");Ki[Ti]=!0,di=function(e,t){if(vi(e,Ti))throw new Ji(Ni);return t.facade=e,Si(e,Ti,t),t},si=function(e){return vi(e,Ti)?e[Ti]:{}},ui=function(e){return vi(e,Ti)}}var Bi={set:di,get:si,has:ui,enforce:function(e){return ui(e)?si(e):di(e,{})},getterFor:function(e){return function(t){var i;if(!Ri(t)||(i=si(t)).type!==e)throw Ji("Incompatible receiver, "+e+" required");return i}}},Fi=a,wi=B,zi=W,xi=me,Pi=oi.CONFIGURABLE,ji=hi,Qi=Bi.enforce,Mi=Bi.get,Ei=Object.defineProperty,Di=xi&&!Fi((function(){return 8!==Ei((function(){}),"length",{value:8}).length})),Oi=String(String).split("String"),_i=$t.exports=function(e,t,i){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(t="get "+t),i&&i.setter&&(t="set "+t),(!zi(e,"name")||Pi&&e.name!==t)&&(xi?Ei(e,"name",{value:t,configurable:!0}):e.name=t),Di&&i&&zi(i,"arity")&&e.length!==i.arity&&Ei(e,"length",{value:i.arity});try{i&&zi(i,"constructor")&&i.constructor?xi&&Ei(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=Qi(e);return zi(n,"source")||(n.source=Oi.join("string"==typeof t?t:"")),e};Function.prototype.toString=_i((function(){return wi(this)&&Mi(this).source||ji(this)}),"toString");var qi=B,$i=be,en=$t.exports,tn=v,nn=function(e,t,i,n){n||(n={});var l=n.enumerable,o=void 0!==n.name?n.name:t;if(qi(i)&&en(i,o,n),n.global)l?e[t]=i:tn(t,i);else{try{n.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=i:$i.f(e,t,{value:i,enumerable:!1,configurable:!n.nonConfigurable,writable:!n.nonWritable})}return e},ln={},on=Math.ceil,cn=Math.floor,an=Math.trunc||function(e){var t=+e;return(t>0?cn:on)(t)},rn=an,dn=function(e){var t=+e;return t!=t||0===t?0:rn(t)},sn=dn,un=Math.max,hn=Math.min,Zn=function(e,t){var i=sn(e);return i<0?un(i+t,0):hn(i,t)},bn=dn,mn=Math.min,pn=function(e){return e>0?mn(bn(e),9007199254740991):0},In=pn,gn=function(e){return In(e.length)},Gn=Ft,yn=Zn,Xn=gn,Wn=function(e){return function(t,i,n){var l,o=Gn(t),c=Xn(o),a=yn(n,c);if(e&&i!=i){for(;c>a;)if((l=o[a++])!=l)return!0}else for(;c>a;a++)if((e||a in o)&&o[a]===i)return e||a||0;return!e&&-1}},Vn={includes:Wn(!0),indexOf:Wn(!1)},Cn=W,Rn=Ft,Sn=Vn.indexOf,vn=Xi,fn=b([].push),Yn=function(e,t){var i,n=Rn(e),l=0,o=[];for(i in n)!Cn(vn,i)&&Cn(n,i)&&fn(o,i);for(;t.length>l;)Cn(n,i=t[l++])&&(~Sn(o,i)||fn(o,i));return o},Kn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Nn=Yn,Jn=Kn.concat("length","prototype");ln.f=Object.getOwnPropertyNames||function(e){return Nn(e,Jn)};var Hn={};Hn.f=Object.getOwnPropertySymbols;var Ln=x,kn=ln,An=Hn,Un=fe,Tn=b([].concat),Bn=Ln("Reflect","ownKeys")||function(e){var t=kn.f(Un(e)),i=An.f;return i?Tn(t,i(e)):t},Fn=W,wn=Bn,zn=Vt,xn=be,Pn=a,jn=B,Qn=/#|\.prototype\./,Mn=function(e,t){var i=Dn[En(e)];return i==_n||i!=On&&(jn(t)?Pn(t):!!t)},En=Mn.normalize=function(e){return String(e).replace(Qn,".").toLowerCase()},Dn=Mn.data={},On=Mn.NATIVE="N",_n=Mn.POLYFILL="P",qn=Mn,$n=o,el=Vt.f,tl=qt,il=nn,nl=v,ll=function(e,t,i){for(var n=wn(t),l=xn.f,o=zn.f,c=0;c<n.length;c++){var a=n[c];Fn(e,a)||i&&Fn(i,a)||l(e,a,o(t,a))}},ol=qn,cl=function(e,t){var i,n,l,o,c,a=e.target,r=e.global,d=e.stat;if(i=r?$n:d?$n[a]||nl(a,{}):($n[a]||{}).prototype)for(n in t){if(o=t[n],l=e.dontCallGetSet?(c=el(i,n))&&c.value:i[n],!ol(r?n:a+(d?".":"#")+n,e.forced)&&void 0!==l){if(typeof o==typeof l)continue;ll(o,l)}(e.sham||l&&l.sham)&&tl(o,"sham",!0),il(i,n,o,e)}},al={},rl=Yn,dl=Kn,sl=Object.keys||function(e){return rl(e,dl)},ul=me,hl=Ce,Zl=be,bl=fe,ml=Ft,pl=sl;al.f=ul&&!hl?Object.defineProperties:function(e,t){bl(e);for(var i,n=ml(t),l=pl(t),o=l.length,c=0;o>c;)Zl.f(e,i=l[c++],n[i]);return e};var Il,gl=x("document","documentElement"),Gl=fe,yl=al,Xl=Kn,Wl=Xi,Vl=gl,Cl=Xe,Rl=yi("IE_PROTO"),Sl=function(){},vl=function(e){return"<script>"+e+"</"+"script>"},fl=function(e){e.write(vl("")),e.close();var t=e.parentWindow.Object;return e=null,t},Yl=function(){try{Il=new ActiveXObject("htmlfile")}catch(e){}var e,t;Yl="undefined"!=typeof document?document.domain&&Il?fl(Il):((t=Cl("iframe")).style.display="none",Vl.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(vl("document.F=Object")),e.close(),e.F):fl(Il);for(var i=Xl.length;i--;)delete Yl.prototype[Xl[i]];return Yl()};Wl[Rl]=!0;var Kl=Object.create||function(e,t){var i;return null!==e?(Sl.prototype=Gl(e),i=new Sl,Sl.prototype=null,i[Rl]=e):i=Yl(),void 0===t?i:yl.f(i,t)},Nl=he,Jl=Kl,Hl=be.f,Ll=Nl("unscopables"),kl=Array.prototype;null==kl[Ll]&&Hl(kl,Ll,{configurable:!0,value:Jl(null)});var Al=function(e){kl[Ll][e]=!0},Ul=Vn.includes,Tl=Al;cl({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return Ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Tl("includes"),Al("flat"),Al("flatMap");var Bl={},Fl=xe,wl=function(e){var t,i;this.promise=new e((function(e,n){if(void 0!==t||void 0!==i)throw TypeError("Bad Promise constructor");t=e,i=n})),this.resolve=Fl(t),this.reject=Fl(i)};Bl.f=function(e){return new wl(e)};var zl=xe,xl=r,Pl=b(b.bind),jl=function(e,t){return zl(e),void 0===t?e:xl?Pl(e,t):function(){return e.apply(t,arguments)}},Ql={},Ml=Ql,El=he("iterator"),Dl=Array.prototype,Ol=function(e){return void 0!==e&&(Ml.Array===e||Dl[El]===e)},_l={};_l[he("toStringTag")]="z";var ql="[object z]"===String(_l),$l=B,eo=Jt,to=he("toStringTag"),io=Object,no="Arguments"==eo(function(){return arguments}()),lo=ql?eo:function(e){var t,i,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,t){try{return e[t]}catch(e){}}(t=io(e),to))?i:no?eo(t):"Object"==(n=eo(t))&&$l(t.callee)?"Arguments":n},oo=lo,co=je,ao=Ql,ro=he("iterator"),so=function(e){if(null!=e)return co(e,ro)||co(e,"@@iterator")||ao[oo(e)]},uo=Ne,ho=xe,Zo=fe,bo=Be,mo=so,po=TypeError,Io=function(e,t){var i=arguments.length<2?mo(e):t;if(ho(i))return Zo(uo(i,e));throw po(bo(e)+" is not iterable")},go=Ne,Go=fe,yo=je,Xo=function(e,t,i){var n,l;Go(e);try{if(!(n=yo(e,"return"))){if("throw"===t)throw i;return i}n=go(n,e)}catch(e){l=!0,n=e}if("throw"===t)throw i;if(l)throw n;return Go(n),i},Wo=jl,Vo=Ne,Co=fe,Ro=Be,So=Ol,vo=gn,fo=Je,Yo=Io,Ko=so,No=Xo,Jo=TypeError,Ho=function(e,t){this.stopped=e,this.result=t},Lo=Ho.prototype,ko=Ne,Ao=xe,Uo=Bl,To=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}},Bo=function(e,t,i){var n,l,o,c,a,r,d,s=i&&i.that,u=!(!i||!i.AS_ENTRIES),h=!(!i||!i.IS_RECORD),Z=!(!i||!i.IS_ITERATOR),b=!(!i||!i.INTERRUPTED),m=Wo(t,s),p=function(e){return n&&No(n,"normal",e),new Ho(!0,e)},I=function(e){return u?(Co(e),b?m(e[0],e[1],p):m(e[0],e[1])):b?m(e,p):m(e)};if(h)n=e.iterator;else if(Z)n=e;else{if(!(l=Ko(e)))throw Jo(Ro(e)+" is not iterable");if(So(l)){for(o=0,c=vo(e);c>o;o++)if((a=I(e[o]))&&fo(Lo,a))return a;return new Ho(!1)}n=Yo(e,l)}for(r=h?e.next:n.next;!(d=Vo(r,n)).done;){try{a=I(d.value)}catch(e){No(n,"throw",e)}if("object"==typeof a&&a&&fo(Lo,a))return a}return new Ho(!1)};cl({target:"Promise",stat:!0},{allSettled:function(e){var t=this,i=Uo.f(t),n=i.resolve,l=i.reject,o=To((function(){var i=Ao(t.resolve),l=[],o=0,c=1;Bo(e,(function(e){var a=o++,r=!1;c++,ko(i,t,e).then((function(e){r||(r=!0,l[a]={status:"fulfilled",value:e},--c||n(l))}),(function(e){r||(r=!0,l[a]={status:"rejected",reason:e},--c||n(l))}))})),--c||n(l)}));return o.error&&l(o.value),i.promise}});var Fo=o.Promise,wo=b,zo=a,xo=B,Po=lo,jo=hi,Qo=function(){},Mo=[],Eo=x("Reflect","construct"),Do=/^\s*(?:class|function)\b/,Oo=wo(Do.exec),_o=!Do.exec(Qo),qo=function(e){if(!xo(e))return!1;try{return Eo(Qo,Mo,e),!0}catch(e){return!1}},$o=function(e){if(!xo(e))return!1;switch(Po(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return _o||!!Oo(Do,jo(e))}catch(e){return!0}};$o.sham=!0;var ec=!Eo||zo((function(){var e;return qo(qo.call)||!qo(Object)||!qo((function(){e=!0}))||e}))?$o:qo,tc=ec,ic=Be,nc=TypeError,lc=function(e){if(tc(e))return e;throw nc(ic(e)+" is not a constructor")},oc=fe,cc=lc,ac=he("species"),rc=function(e,t){var i,n=oc(e).constructor;return void 0===n||null==(i=oc(n)[ac])?t:cc(i)},dc=fe,sc=Ie,uc=Bl,hc=cl,Zc=Fo,bc=a,mc=x,pc=B,Ic=rc,gc=function(e,t){if(dc(e),sc(t)&&t.constructor===e)return t;var i=uc.f(e);return(0,i.resolve)(t),i.promise},Gc=nn,yc=Zc&&Zc.prototype;if(hc({target:"Promise",proto:!0,real:!0,forced:!!Zc&&bc((function(){yc.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=Ic(this,mc("Promise")),i=pc(e);return this.then(i?function(i){return gc(t,e()).then((function(){return i}))}:e,i?function(i){return gc(t,e()).then((function(){throw i}))}:e)}}),pc(Zc)){var Xc=mc("Promise").prototype.finally;yc.finally!==Xc&&Gc(yc,"finally",Xc,{unsafe:!0})}var Wc=$t.exports,Vc=be,Cc=function(e,t,i){return i.get&&Wc(i.get,t,{getter:!0}),i.set&&Wc(i.set,t,{setter:!0}),Vc.f(e,t,i)},Rc=fe,Sc=function(){var e=Rc(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t},vc=me,fc=Cc,Yc=Sc,Kc=a,Nc=o.RegExp,Jc=Nc.prototype,Hc=vc&&Kc((function(){var e=!0;try{Nc(".","d")}catch(t){e=!1}var t={},i="",n=e?"dgimsy":"gimsy",l=function(e,n){Object.defineProperty(t,e,{get:function(){return i+=n,!0}})},o={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var c in e&&(o.hasIndices="d"),o)l(c,o[c]);return Object.getOwnPropertyDescriptor(Jc,"flags").get.call(t)!==n||i!==n}));Hc&&fc(Jc,"flags",{configurable:!0,get:Yc});var Lc,kc,Ac,Uc=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Tc=W,Bc=B,Fc=G,wc=Uc,zc=yi("IE_PROTO"),xc=Object,Pc=xc.prototype,jc=wc?xc.getPrototypeOf:function(e){var t=Fc(e);if(Tc(t,zc))return t[zc];var i=t.constructor;return Bc(i)&&t instanceof i?i.prototype:t instanceof xc?Pc:null},Qc=a,Mc=B,Ec=jc,Dc=nn,Oc=he("iterator"),_c=!1;[].keys&&("next"in(Ac=[].keys())?(kc=Ec(Ec(Ac)))!==Object.prototype&&(Lc=kc):_c=!0);var qc=null==Lc||Qc((function(){var e={};return Lc[Oc].call(e)!==e}));qc&&(Lc={}),Mc(Lc[Oc])||Dc(Lc,Oc,(function(){return this}));var $c,ea,ta={IteratorPrototype:Lc,BUGGY_SAFARI_ITERATORS:_c},ia=be.f,na=W,la=he("toStringTag"),oa=function(e,t,i){e&&!i&&(e=e.prototype),e&&!na(e,la)&&ia(e,la,{configurable:!0,value:t})},ca=ta.IteratorPrototype,aa=Kl,ra=ft,da=oa,sa=Ql,ua=function(){return this},ha=function(e,t,i,n){var l=t+" Iterator";return e.prototype=aa(ca,{next:ra(+!n,i)}),da(e,l,!1),sa[l]=ua,e},Za=lo,ba=String,ma=function(e){if("Symbol"===Za(e))throw TypeError("Cannot convert a Symbol value to a string");return ba(e)},pa=Ie,Ia=Jt,ga=he("match"),Ga=Ne,ya=W,Xa=Je,Wa=Sc,Va=RegExp.prototype,Ca=b,Ra=dn,Sa=ma,va=p,fa=Ca("".charAt),Ya=Ca("".charCodeAt),Ka=Ca("".slice),Na=function(e){return function(t,i){var n,l,o=Sa(va(t)),c=Ra(i),a=o.length;return c<0||c>=a?e?"":void 0:(n=Ya(o,c))<55296||n>56319||c+1===a||(l=Ya(o,c+1))<56320||l>57343?e?fa(o,c):n:e?Ka(o,c,c+2):l-56320+(n-55296<<10)+65536}},Ja={codeAt:Na(!1),charAt:Na(!0)},Ha=Ja.charAt,La=function(e,t,i){return t+(i?Ha(e,t).length:1)},ka=a,Aa=o.RegExp,Ua=ka((function(){var e=Aa("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),Ta=Ua||ka((function(){return!Aa("a","y").sticky})),Ba={BROKEN_CARET:Ua||ka((function(){var e=Aa("^r","gy");return e.lastIndex=2,null!=e.exec("str")})),MISSED_STICKY:Ta,UNSUPPORTED_Y:Ua},Fa=a,wa=o.RegExp,za=Fa((function(){var e=wa(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)})),xa=a,Pa=o.RegExp,ja=xa((function(){var e=Pa("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")})),Qa=Ne,Ma=b,Ea=ma,Da=Sc,Oa=Ba,_a=C.exports,qa=Kl,$a=Bi.get,er=za,tr=ja,ir=_a("native-string-replace",String.prototype.replace),nr=RegExp.prototype.exec,lr=nr,or=Ma("".charAt),cr=Ma("".indexOf),ar=Ma("".replace),rr=Ma("".slice),dr=(ea=/b*/g,Qa(nr,$c=/a/,"a"),Qa(nr,ea,"a"),0!==$c.lastIndex||0!==ea.lastIndex),sr=Oa.BROKEN_CARET,ur=void 0!==/()??/.exec("")[1];(dr||ur||sr||er||tr)&&(lr=function(e){var t,i,n,l,o,c,a,r=this,d=$a(r),s=Ea(e),u=d.raw;if(u)return u.lastIndex=r.lastIndex,t=Qa(lr,u,s),r.lastIndex=u.lastIndex,t;var h=d.groups,Z=sr&&r.sticky,b=Qa(Da,r),m=r.source,p=0,I=s;if(Z&&(b=ar(b,"y",""),-1===cr(b,"g")&&(b+="g"),I=rr(s,r.lastIndex),r.lastIndex>0&&(!r.multiline||r.multiline&&"\n"!==or(s,r.lastIndex-1))&&(m="(?: "+m+")",I=" "+I,p++),i=new RegExp("^(?:"+m+")",b)),ur&&(i=new RegExp("^"+m+"$(?!\\s)",b)),dr&&(n=r.lastIndex),l=Qa(nr,Z?i:r,I),Z?l?(l.input=rr(l.input,p),l[0]=rr(l[0],p),l.index=r.lastIndex,r.lastIndex+=l[0].length):r.lastIndex=0:dr&&l&&(r.lastIndex=r.global?l.index+l[0].length:n),ur&&l&&l.length>1&&Qa(ir,l[0],i,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(l[o]=void 0)})),l&&h)for(l.groups=c=qa(null),o=0;o<h.length;o++)c[(a=h[o])[0]]=l[a[1]];return l});var hr=lr,Zr=Ne,br=fe,mr=B,pr=Jt,Ir=hr,gr=TypeError,Gr=function(e,t){var i=e.exec;if(mr(i)){var n=Zr(i,e,t);return null!==n&&br(n),n}if("RegExp"===pr(e))return Zr(Ir,e,t);throw gr("RegExp#exec called on incompatible receiver")},yr=cl,Xr=Ne,Wr=b,Vr=ha,Cr=p,Rr=pn,Sr=ma,vr=fe,fr=function(e){var t;return pa(e)&&(void 0!==(t=e[ga])?!!t:"RegExp"==Ia(e))},Yr=function(e){var t=e.flags;return void 0!==t||"flags"in Va||ya(e,"flags")||!Xa(Va,e)?t:Ga(Wa,e)},Kr=je,Nr=nn,Jr=a,Hr=rc,Lr=La,kr=Gr,Ar=Bi,Ur=he("matchAll"),Tr="RegExp String",Br="RegExp String Iterator",Fr=Ar.set,wr=Ar.getterFor(Br),zr=RegExp.prototype,xr=TypeError,Pr=Wr("".indexOf),jr=Wr("".matchAll),Qr=!!jr&&!Jr((function(){jr("a",/./)})),Mr=Vr((function(e,t,i,n){Fr(this,{type:Br,regexp:e,string:t,global:i,unicode:n,done:!1})}),Tr,(function(){var e=wr(this);if(e.done)return{value:void 0,done:!0};var t=e.regexp,i=e.string,n=kr(t,i);return null===n?{value:void 0,done:e.done=!0}:e.global?(""===Sr(n[0])&&(t.lastIndex=Lr(i,Rr(t.lastIndex),e.unicode)),{value:n,done:!1}):(e.done=!0,{value:n,done:!1})})),Er=function(e){var t,i,n,l=vr(this),o=Sr(e),c=Hr(l,RegExp),a=Sr(Yr(l));return t=new c(c===RegExp?l.source:l,a),i=!!~Pr(a,"g"),n=!!~Pr(a,"u"),t.lastIndex=Rr(l.lastIndex),new Mr(t,o,i,n)};yr({target:"String",proto:!0,forced:Qr},{matchAll:function(e){var t,i,n,l=Cr(this);if(null!=e){if(fr(e)&&(t=Sr(Cr(Yr(e))),!~Pr(t,"g")))throw xr("`.matchAll` does not allow non-global regexes");if(Qr)return jr(l,e);if(n=Kr(e,Ur))return Xr(n,e,l)}else if(Qr)return jr(l,e);return i=Sr(l),new RegExp(e,"g")[Ur](i)}}),Ur in zr||Nr(zr,Ur,Er);var Dr=r,Or=Function.prototype,_r=Or.apply,qr=Or.call,$r="object"==typeof Reflect&&Reflect.apply||(Dr?qr.bind(_r):function(){return qr.apply(_r,arguments)});cl({target:"RegExp",proto:!0,forced:/./.exec!==hr},{exec:hr});var ed=b,td=nn,id=hr,nd=a,ld=he,od=qt,cd=ld("species"),ad=RegExp.prototype,rd=b,dd=G,sd=Math.floor,ud=rd("".charAt),hd=rd("".replace),Zd=rd("".slice),bd=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,md=/\$([$&'`]|\d{1,2})/g,pd=$r,Id=Ne,gd=b,Gd=function(e,t,i,n){var l=ld(e),o=!nd((function(){var t={};return t[l]=function(){return 7},7!=""[e](t)})),c=o&&!nd((function(){var t=!1,i=/a/;return"split"===e&&((i={}).constructor={},i.constructor[cd]=function(){return i},i.flags="",i[l]=/./[l]),i.exec=function(){return t=!0,null},i[l](""),!t}));if(!o||!c||i){var a=ed(/./[l]),r=t(l,""[e],(function(e,t,i,n,l){var c=ed(e),r=t.exec;return r===id||r===ad.exec?o&&!l?{done:!0,value:a(t,i,n)}:{done:!0,value:c(i,t,n)}:{done:!1}}));td(String.prototype,e,r[0]),td(ad,l,r[1])}n&&od(ad[l],"sham",!0)},yd=a,Xd=fe,Wd=B,Vd=dn,Cd=pn,Rd=ma,Sd=p,vd=La,fd=je,Yd=function(e,t,i,n,l,o){var c=i+e.length,a=n.length,r=md;return void 0!==l&&(l=dd(l),r=bd),hd(o,r,(function(o,r){var d;switch(ud(r,0)){case"$":return"$";case"&":return e;case"`":return Zd(t,0,i);case"'":return Zd(t,c);case"<":d=l[Zd(r,1,-1)];break;default:var s=+r;if(0===s)return o;if(s>a){var u=sd(s/10);return 0===u?o:u<=a?void 0===n[u-1]?ud(r,1):n[u-1]+ud(r,1):o}d=n[s-1]}return void 0===d?"":d}))},Kd=Gr,Nd=he("replace"),Jd=Math.max,Hd=Math.min,Ld=gd([].concat),kd=gd([].push),Ad=gd("".indexOf),Ud=gd("".slice),Td="$0"==="a".replace(/./,"$0"),Bd=!!/./[Nd]&&""===/./[Nd]("a","$0");Gd("replace",(function(e,t,i){var n=Bd?"$":"$0";return[function(e,i){var n=Sd(this),l=null==e?void 0:fd(e,Nd);return l?Id(l,e,n,i):Id(t,Rd(n),e,i)},function(e,l){var o=Xd(this),c=Rd(e);if("string"==typeof l&&-1===Ad(l,n)&&-1===Ad(l,"$<")){var a=i(t,o,c,l);if(a.done)return a.value}var r=Wd(l);r||(l=Rd(l));var d=o.global;if(d){var s=o.unicode;o.lastIndex=0}for(var u=[];;){var h=Kd(o,c);if(null===h)break;if(kd(u,h),!d)break;""===Rd(h[0])&&(o.lastIndex=vd(c,Cd(o.lastIndex),s))}for(var Z,b="",m=0,p=0;p<u.length;p++){for(var I=Rd((h=u[p])[0]),g=Jd(Hd(Vd(h.index),c.length),0),G=[],y=1;y<h.length;y++)kd(G,void 0===(Z=h[y])?Z:String(Z));var X=h.groups;if(r){var W=Ld([I],G,g,c);void 0!==X&&kd(W,X);var V=Rd(pd(l,void 0,W))}else V=Yd(I,c,g,G,X,l);g>=m&&(b+=Ud(c,m,g)+V,m=g+I.length)}return b+Ud(c,m)}]}),!!yd((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!Td||Bd);var Fd={exports:{}},wd=he("iterator"),zd=!1;try{var xd=0,Pd={next:function(){return{done:!!xd++}},return:function(){zd=!0}};Pd[wd]=function(){return this},Array.from(Pd,(function(){throw 2}))}catch(e){}var jd,Qd,Md,Ed="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView,Dd=B,Od=String,_d=TypeError,qd=b,$d=fe,es=function(e){if("object"==typeof e||Dd(e))return e;throw _d("Can't set "+Od(e)+" as a prototype")},ts=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,i={};try{(e=qd(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(i,[]),t=i instanceof Array}catch(e){}return function(i,n){return $d(i),es(n),t?e(i,n):i.__proto__=n,i}}():void 0),is=Ed,ns=me,ls=o,os=B,cs=Ie,as=W,rs=lo,ds=Be,ss=qt,us=nn,hs=be.f,Zs=Je,bs=jc,ms=ts,ps=he,Is=T,gs=Bi.enforce,Gs=Bi.get,ys=ls.Int8Array,Xs=ys&&ys.prototype,Ws=ls.Uint8ClampedArray,Vs=Ws&&Ws.prototype,Cs=ys&&bs(ys),Rs=Xs&&bs(Xs),Ss=Object.prototype,vs=ls.TypeError,fs=ps("toStringTag"),Ys=Is("TYPED_ARRAY_TAG"),Ks="TypedArrayConstructor",Ns=is&&!!ms&&"Opera"!==rs(ls.opera),Js=!1,Hs={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},Ls={BigInt64Array:8,BigUint64Array:8},ks=function(e){var t=bs(e);if(cs(t)){var i=Gs(t);return i&&as(i,Ks)?i.TypedArrayConstructor:ks(t)}},As=function(e){if(!cs(e))return!1;var t=rs(e);return as(Hs,t)||as(Ls,t)};for(jd in Hs)(Md=(Qd=ls[jd])&&Qd.prototype)?gs(Md).TypedArrayConstructor=Qd:Ns=!1;for(jd in Ls)(Md=(Qd=ls[jd])&&Qd.prototype)&&(gs(Md).TypedArrayConstructor=Qd);if((!Ns||!os(Cs)||Cs===Function.prototype)&&(Cs=function(){throw vs("Incorrect invocation")},Ns))for(jd in Hs)ls[jd]&&ms(ls[jd],Cs);if((!Ns||!Rs||Rs===Ss)&&(Rs=Cs.prototype,Ns))for(jd in Hs)ls[jd]&&ms(ls[jd].prototype,Rs);if(Ns&&bs(Vs)!==Rs&&ms(Vs,Rs),ns&&!as(Rs,fs))for(jd in Js=!0,hs(Rs,fs,{get:function(){return cs(this)?this[Ys]:void 0}}),Hs)ls[jd]&&ss(ls[jd],Ys,jd);var Us={NATIVE_ARRAY_BUFFER_VIEWS:Ns,TYPED_ARRAY_TAG:Js&&Ys,aTypedArray:function(e){if(As(e))return e;throw vs("Target is not a typed array")},aTypedArrayConstructor:function(e){if(os(e)&&(!ms||Zs(Cs,e)))return e;throw vs(ds(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,i,n){if(ns){if(i)for(var l in Hs){var o=ls[l];if(o&&as(o.prototype,e))try{delete o.prototype[e]}catch(i){try{o.prototype[e]=t}catch(e){}}}Rs[e]&&!i||us(Rs,e,i?t:Ns&&Xs[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,i){var n,l;if(ns){if(ms){if(i)for(n in Hs)if((l=ls[n])&&as(l,e))try{delete l[e]}catch(e){}if(Cs[e]&&!i)return;try{return us(Cs,e,i?t:Ns&&Cs[e]||t)}catch(e){}}for(n in Hs)!(l=ls[n])||l[e]&&!i||us(l,e,t)}},getTypedArrayConstructor:ks,isView:function(e){if(!cs(e))return!1;var t=rs(e);return"DataView"===t||as(Hs,t)||as(Ls,t)},isTypedArray:As,TypedArray:Cs,TypedArrayPrototype:Rs},Ts=o,Bs=a,Fs=function(e,t){if(!t&&!zd)return!1;var i=!1;try{var n={};n[wd]=function(){return{next:function(){return{done:i=!0}}}},e(n)}catch(e){}return i},ws=Us.NATIVE_ARRAY_BUFFER_VIEWS,zs=Ts.ArrayBuffer,xs=Ts.Int8Array,Ps=!ws||!Bs((function(){xs(1)}))||!Bs((function(){new xs(-1)}))||!Fs((function(e){new xs,new xs(null),new xs(1.5),new xs(e)}),!0)||Bs((function(){return 1!==new xs(new zs(2),1,void 0).length})),js=nn,Qs=function(e,t,i){for(var n in t)js(e,n,t[n],i);return e},Ms=Je,Es=TypeError,Ds=function(e,t){if(Ms(t,e))return e;throw Es("Incorrect invocation")},Os=dn,_s=pn,qs=RangeError,$s=function(e){if(void 0===e)return 0;var t=Os(e),i=_s(t);if(t!==i)throw qs("Wrong length or index");return i},eu=Array,tu=Math.abs,iu=Math.pow,nu=Math.floor,lu=Math.log,ou=Math.LN2,cu={pack:function(e,t,i){var n,l,o,c=eu(i),a=8*i-t-1,r=(1<<a)-1,d=r>>1,s=23===t?iu(2,-24)-iu(2,-77):0,u=e<0||0===e&&1/e<0?1:0,h=0;for((e=tu(e))!=e||e===1/0?(l=e!=e?1:0,n=r):(n=nu(lu(e)/ou),e*(o=iu(2,-n))<1&&(n--,o*=2),(e+=n+d>=1?s/o:s*iu(2,1-d))*o>=2&&(n++,o/=2),n+d>=r?(l=0,n=r):n+d>=1?(l=(e*o-1)*iu(2,t),n+=d):(l=e*iu(2,d-1)*iu(2,t),n=0));t>=8;)c[h++]=255&l,l/=256,t-=8;for(n=n<<t|l,a+=t;a>0;)c[h++]=255&n,n/=256,a-=8;return c[--h]|=128*u,c},unpack:function(e,t){var i,n=e.length,l=8*n-t-1,o=(1<<l)-1,c=o>>1,a=l-7,r=n-1,d=e[r--],s=127&d;for(d>>=7;a>0;)s=256*s+e[r--],a-=8;for(i=s&(1<<-a)-1,s>>=-a,a+=t;a>0;)i=256*i+e[r--],a-=8;if(0===s)s=1-c;else{if(s===o)return i?NaN:d?-1/0:1/0;i+=iu(2,t),s-=c}return(d?-1:1)*i*iu(2,s-t)}},au=G,ru=Zn,du=gn,su=function(e){for(var t=au(this),i=du(t),n=arguments.length,l=ru(n>1?arguments[1]:void 0,i),o=n>2?arguments[2]:void 0,c=void 0===o?i:ru(o,i);c>l;)t[l++]=e;return t},uu=ct,hu=be,Zu=ft,bu=function(e,t,i){var n=uu(t);n in e?hu.f(e,n,Zu(0,i)):e[n]=i},mu=Zn,pu=gn,Iu=bu,gu=Array,Gu=Math.max,yu=function(e,t,i){for(var n=pu(e),l=mu(t,n),o=mu(void 0===i?n:i,n),c=gu(Gu(o-l,0)),a=0;l<o;l++,a++)Iu(c,a,e[l]);return c.length=a,c},Xu=o,Wu=b,Vu=me,Cu=Ed,Ru=oi,Su=qt,vu=Qs,fu=a,Yu=Ds,Ku=dn,Nu=pn,Ju=$s,Hu=cu,Lu=jc,ku=ts,Au=ln.f,Uu=be.f,Tu=su,Bu=yu,Fu=oa,wu=Ru.PROPER,zu=Ru.CONFIGURABLE,xu=Bi.get,Pu=Bi.set,ju="ArrayBuffer",Qu="DataView",Mu="Wrong index",Eu=Xu.ArrayBuffer,Du=Eu,Ou=Du&&Du.prototype,_u=Xu.DataView,qu=_u&&_u.prototype,$u=Object.prototype,eh=Xu.Array,th=Xu.RangeError,ih=Wu(Tu),nh=Wu([].reverse),lh=Hu.pack,oh=Hu.unpack,ch=function(e){return[255&e]},ah=function(e){return[255&e,e>>8&255]},rh=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},dh=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},sh=function(e){return lh(e,23,4)},uh=function(e){return lh(e,52,8)},hh=function(e,t){Uu(e.prototype,t,{get:function(){return xu(this)[t]}})},Zh=function(e,t,i,n){var l=Ju(i),o=xu(e);if(l+t>o.byteLength)throw th(Mu);var c=xu(o.buffer).bytes,a=l+o.byteOffset,r=Bu(c,a,a+t);return n?r:nh(r)},bh=function(e,t,i,n,l,o){var c=Ju(i),a=xu(e);if(c+t>a.byteLength)throw th(Mu);for(var r=xu(a.buffer).bytes,d=c+a.byteOffset,s=n(+l),u=0;u<t;u++)r[d+u]=s[o?u:t-u-1]};if(Cu){var mh=wu&&Eu.name!==ju;if(fu((function(){Eu(1)}))&&fu((function(){new Eu(-1)}))&&!fu((function(){return new Eu,new Eu(1.5),new Eu(NaN),mh&&!zu})))mh&&zu&&Su(Eu,"name",ju);else{(Du=function(e){return Yu(this,Ou),new Eu(Ju(e))}).prototype=Ou;for(var ph,Ih=Au(Eu),gh=0;Ih.length>gh;)(ph=Ih[gh++])in Du||Su(Du,ph,Eu[ph]);Ou.constructor=Du}ku&&Lu(qu)!==$u&&ku(qu,$u);var Gh=new _u(new Du(2)),yh=Wu(qu.setInt8);Gh.setInt8(0,2147483648),Gh.setInt8(1,2147483649),!Gh.getInt8(0)&&Gh.getInt8(1)||vu(qu,{setInt8:function(e,t){yh(this,e,t<<24>>24)},setUint8:function(e,t){yh(this,e,t<<24>>24)}},{unsafe:!0})}else Du=function(e){Yu(this,Ou);var t=Ju(e);Pu(this,{bytes:ih(eh(t),0),byteLength:t}),Vu||(this.byteLength=t)},Ou=Du.prototype,_u=function(e,t,i){Yu(this,qu),Yu(e,Ou);var n=xu(e).byteLength,l=Ku(t);if(l<0||l>n)throw th("Wrong offset");if(l+(i=void 0===i?n-l:Nu(i))>n)throw th("Wrong length");Pu(this,{buffer:e,byteLength:i,byteOffset:l}),Vu||(this.buffer=e,this.byteLength=i,this.byteOffset=l)},qu=_u.prototype,Vu&&(hh(Du,"byteLength"),hh(_u,"buffer"),hh(_u,"byteLength"),hh(_u,"byteOffset")),vu(qu,{getInt8:function(e){return Zh(this,1,e)[0]<<24>>24},getUint8:function(e){return Zh(this,1,e)[0]},getInt16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Zh(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return dh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return dh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return oh(Zh(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return oh(Zh(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){bh(this,1,e,ch,t)},setUint8:function(e,t){bh(this,1,e,ch,t)},setInt16:function(e,t){bh(this,2,e,ah,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){bh(this,2,e,ah,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){bh(this,4,e,rh,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){bh(this,4,e,rh,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){bh(this,4,e,sh,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){bh(this,8,e,uh,t,arguments.length>2?arguments[2]:void 0)}});Fu(Du,ju),Fu(_u,Qu);var Xh={ArrayBuffer:Du,DataView:_u},Wh=Ie,Vh=Math.floor,Ch=Number.isInteger||function(e){return!Wh(e)&&isFinite(e)&&Vh(e)===e},Rh=dn,Sh=RangeError,vh=function(e){var t=Rh(e);if(t<0)throw Sh("The argument can't be less than 0");return t},fh=RangeError,Yh=function(e,t){var i=vh(e);if(i%t)throw fh("Wrong offset");return i},Kh=jl,Nh=Ne,Jh=lc,Hh=G,Lh=gn,kh=Io,Ah=so,Uh=Ol,Th=Us.aTypedArrayConstructor,Bh=function(e){var t,i,n,l,o,c,a=Jh(this),r=Hh(e),d=arguments.length,s=d>1?arguments[1]:void 0,u=void 0!==s,h=Ah(r);if(h&&!Uh(h))for(c=(o=kh(r,h)).next,r=[];!(l=Nh(c,o)).done;)r.push(l.value);for(u&&d>2&&(s=Kh(s,arguments[2])),i=Lh(r),n=new(Th(a))(i),t=0;i>t;t++)n[t]=u?s(r[t],t):r[t];return n},Fh=Jt,wh=Array.isArray||function(e){return"Array"==Fh(e)},zh=ec,xh=Ie,Ph=he("species"),jh=Array,Qh=function(e){var t;return wh(e)&&(t=e.constructor,(zh(t)&&(t===jh||wh(t.prototype))||xh(t)&&null===(t=t[Ph]))&&(t=void 0)),void 0===t?jh:t},Mh=jl,Eh=Ut,Dh=G,Oh=gn,_h=function(e,t){return new(Qh(e))(0===t?0:t)},qh=b([].push),$h=function(e){var t=1==e,i=2==e,n=3==e,l=4==e,o=6==e,c=7==e,a=5==e||o;return function(r,d,s,u){for(var h,Z,b=Dh(r),m=Eh(b),p=Mh(d,s),I=Oh(m),g=0,G=u||_h,y=t?G(r,I):i||c?G(r,0):void 0;I>g;g++)if((a||g in m)&&(Z=p(h=m[g],g,b),e))if(t)y[g]=Z;else if(Z)switch(e){case 3:return!0;case 5:return h;case 6:return g;case 2:qh(y,h)}else switch(e){case 4:return!1;case 7:qh(y,h)}return o?-1:n||l?l:y}},eZ={forEach:$h(0),map:$h(1),filter:$h(2),some:$h(3),every:$h(4),find:$h(5),findIndex:$h(6),filterReject:$h(7)},tZ=x,iZ=be,nZ=me,lZ=he("species"),oZ=B,cZ=Ie,aZ=ts,rZ=cl,dZ=o,sZ=Ne,uZ=me,hZ=Ps,ZZ=Us,bZ=Xh,mZ=Ds,pZ=ft,IZ=qt,gZ=Ch,GZ=pn,yZ=$s,XZ=Yh,WZ=ct,VZ=W,CZ=lo,RZ=Ie,SZ=Ue,vZ=Kl,fZ=Je,YZ=ts,KZ=ln.f,NZ=Bh,JZ=eZ.forEach,HZ=function(e){var t=tZ(e),i=iZ.f;nZ&&t&&!t[lZ]&&i(t,lZ,{configurable:!0,get:function(){return this}})},LZ=be,kZ=Vt,AZ=function(e,t,i){var n,l;return aZ&&oZ(n=t.constructor)&&n!==i&&cZ(l=n.prototype)&&l!==i.prototype&&aZ(e,l),e},UZ=Bi.get,TZ=Bi.set,BZ=Bi.enforce,FZ=LZ.f,wZ=kZ.f,zZ=Math.round,xZ=dZ.RangeError,PZ=bZ.ArrayBuffer,jZ=PZ.prototype,QZ=bZ.DataView,MZ=ZZ.NATIVE_ARRAY_BUFFER_VIEWS,EZ=ZZ.TYPED_ARRAY_TAG,DZ=ZZ.TypedArray,OZ=ZZ.TypedArrayPrototype,_Z=ZZ.aTypedArrayConstructor,qZ=ZZ.isTypedArray,$Z="BYTES_PER_ELEMENT",eb="Wrong length",tb=function(e,t){_Z(e);for(var i=0,n=t.length,l=new e(n);n>i;)l[i]=t[i++];return l},ib=function(e,t){FZ(e,t,{get:function(){return UZ(this)[t]}})},nb=function(e){var t;return fZ(jZ,e)||"ArrayBuffer"==(t=CZ(e))||"SharedArrayBuffer"==t},lb=function(e,t){return qZ(e)&&!SZ(t)&&t in e&&gZ(+t)&&t>=0},ob=function(e,t){return t=WZ(t),lb(e,t)?pZ(2,e[t]):wZ(e,t)},cb=function(e,t,i){return t=WZ(t),!(lb(e,t)&&RZ(i)&&VZ(i,"value"))||VZ(i,"get")||VZ(i,"set")||i.configurable||VZ(i,"writable")&&!i.writable||VZ(i,"enumerable")&&!i.enumerable?FZ(e,t,i):(e[t]=i.value,e)};uZ?(MZ||(kZ.f=ob,LZ.f=cb,ib(OZ,"buffer"),ib(OZ,"byteOffset"),ib(OZ,"byteLength"),ib(OZ,"length")),rZ({target:"Object",stat:!0,forced:!MZ},{getOwnPropertyDescriptor:ob,defineProperty:cb}),Fd.exports=function(e,t,i){var n=e.match(/\d+$/)[0]/8,l=e+(i?"Clamped":"")+"Array",o="get"+e,c="set"+e,a=dZ[l],r=a,d=r&&r.prototype,s={},u=function(e,t){FZ(e,t,{get:function(){return function(e,t){var i=UZ(e);return i.view[o](t*n+i.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,l){var o=UZ(e);i&&(l=(l=zZ(l))<0?0:l>255?255:255&l),o.view[c](t*n+o.byteOffset,l,!0)}(this,t,e)},enumerable:!0})};MZ?hZ&&(r=t((function(e,t,i,l){return mZ(e,d),AZ(RZ(t)?nb(t)?void 0!==l?new a(t,XZ(i,n),l):void 0!==i?new a(t,XZ(i,n)):new a(t):qZ(t)?tb(r,t):sZ(NZ,r,t):new a(yZ(t)),e,r)})),YZ&&YZ(r,DZ),JZ(KZ(a),(function(e){e in r||IZ(r,e,a[e])})),r.prototype=d):(r=t((function(e,t,i,l){mZ(e,d);var o,c,a,s=0,h=0;if(RZ(t)){if(!nb(t))return qZ(t)?tb(r,t):sZ(NZ,r,t);o=t,h=XZ(i,n);var Z=t.byteLength;if(void 0===l){if(Z%n)throw xZ(eb);if((c=Z-h)<0)throw xZ(eb)}else if((c=GZ(l)*n)+h>Z)throw xZ(eb);a=c/n}else a=yZ(t),o=new PZ(c=a*n);for(TZ(e,{buffer:o,byteOffset:h,byteLength:c,length:a,view:new QZ(o)});s<a;)u(e,s++)})),YZ&&YZ(r,DZ),d=r.prototype=vZ(OZ)),d.constructor!==r&&IZ(d,"constructor",r),BZ(d).TypedArrayConstructor=r,EZ&&IZ(d,EZ,l);var h=r!=a;s[l]=r,rZ({global:!0,constructor:!0,forced:h,sham:!MZ},s),$Z in r||IZ(r,$Z,n),$Z in d||IZ(d,$Z,n),HZ(l)}):Fd.exports=function(){},(0,Fd.exports)("Float32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Float64",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Int32",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint8",(function(e){return function(t,i,n){return e(this,t,i,n)}}),!0),(0,Fd.exports)("Uint16",(function(e){return function(t,i,n){return e(this,t,i,n)}})),(0,Fd.exports)("Uint32",(function(e){return function(t,i,n){return e(this,t,i,n)}}));var ab=nt,rb=TypeError,db=su,sb=function(e){var t=ab(e,"number");if("number"==typeof t)throw rb("Can't convert number to bigint");return BigInt(t)},ub=lo,hb=Ne,Zb=a,bb=Us.aTypedArray,mb=Us.exportTypedArrayMethod,pb=b("".slice);mb("fill",(function(e){var t=arguments.length;bb(this);var i="Big"===pb(ub(this),0,3)?sb(e):+e;return hb(db,this,i,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),Zb((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e}))),(0,Us.exportTypedArrayStaticMethod)("from",Bh,Ps);var Ib=Us.aTypedArrayConstructor;(0,Us.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,i=new(Ib(this))(t);t>e;)i[e]=arguments[e++];return i}),Ps);var gb=o,Gb=Ne,yb=Us,Xb=gn,Wb=Yh,Vb=G,Cb=a,Rb=gb.RangeError,Sb=gb.Int8Array,vb=Sb&&Sb.prototype,fb=vb&&vb.set,Yb=yb.aTypedArray,Kb=yb.exportTypedArrayMethod,Nb=!Cb((function(){var e=new Uint8ClampedArray(2);return Gb(fb,e,{length:1,0:3},1),3!==e[1]})),Jb=Nb&&yb.NATIVE_ARRAY_BUFFER_VIEWS&&Cb((function(){var e=new Sb(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));Kb("set",(function(e){Yb(this);var t=Wb(arguments.length>1?arguments[1]:void 0,1),i=Vb(e);if(Nb)return Gb(fb,this,i,t);var n=this.length,l=Xb(i),o=0;if(l+t>n)throw Rb("Wrong length");for(;o<l;)this[t+o]=i[o++]}),!Nb||Jb);var Hb=yu,Lb=Math.floor,kb=function(e,t){var i=e.length,n=Lb(i/2);return i<8?Ab(e,t):Ub(e,kb(Hb(e,0,n),t),kb(Hb(e,n),t),t)},Ab=function(e,t){for(var i,n,l=e.length,o=1;o<l;){for(n=o,i=e[o];n&&t(e[n-1],i)>0;)e[n]=e[--n];n!==o++&&(e[n]=i)}return e},Ub=function(e,t,i,n){for(var l=t.length,o=i.length,c=0,a=0;c<l||a<o;)e[c+a]=c<l&&a<o?n(t[c],i[a])<=0?t[c++]:i[a++]:c<l?t[c++]:i[a++];return e},Tb=kb,Bb=P.match(/firefox\/(\d+)/i),Fb=!!Bb&&+Bb[1],wb=/MSIE|Trident/.test(P),zb=P.match(/AppleWebKit\/(\d+)\./),xb=!!zb&&+zb[1],Pb=b,jb=a,Qb=xe,Mb=Tb,Eb=Fb,Db=wb,Ob=_,_b=xb,qb=Us.aTypedArray,$b=Us.exportTypedArrayMethod,em=o.Uint16Array,tm=em&&Pb(em.prototype.sort),im=!(!tm||jb((function(){tm(new em(2),null)}))&&jb((function(){tm(new em(2),{})}))),nm=!!tm&&!jb((function(){if(Ob)return Ob<74;if(Eb)return Eb<67;if(Db)return!0;if(_b)return _b<602;var e,t,i=new em(516),n=Array(516);for(e=0;e<516;e++)t=e%4,i[e]=515-e,n[e]=e-2*t+3;for(tm(i,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(i[e]!==n[e])return!0}));$b("sort",(function(e){return void 0!==e&&Qb(e),nm?tm(this,e):Mb(qb(this),function(e){return function(t,i){return void 0!==e?+e(t,i)||0:i!=i?-1:t!=t?1:0===t&&0===i?1/t>0&&1/i<0?1:-1:t>i}}(e))}),!nm||im);var lm=Xe("span").classList,om=lm&&lm.constructor&&lm.constructor.prototype,cm=om===Object.prototype?void 0:om,am=cl,rm=Ne,dm=B,sm=ha,um=jc,hm=ts,Zm=oa,bm=qt,mm=nn,pm=Ql,Im=oi.PROPER,gm=oi.CONFIGURABLE,Gm=ta.IteratorPrototype,ym=ta.BUGGY_SAFARI_ITERATORS,Xm=he("iterator"),Wm="keys",Vm="values",Cm="entries",Rm=function(){return this},Sm=function(e,t,i,n,l,o,c){sm(i,t,n);var a,r,d,s=function(e){if(e===l&&m)return m;if(!ym&&e in Z)return Z[e];switch(e){case Wm:case Vm:case Cm:return function(){return new i(this,e)}}return function(){return new i(this)}},u=t+" Iterator",h=!1,Z=e.prototype,b=Z[Xm]||Z["@@iterator"]||l&&Z[l],m=!ym&&b||s(l),p="Array"==t&&Z.entries||b;if(p&&(a=um(p.call(new e)))!==Object.prototype&&a.next&&(um(a)!==Gm&&(hm?hm(a,Gm):dm(a[Xm])||mm(a,Xm,Rm)),Zm(a,u,!0)),Im&&l==Vm&&b&&b.name!==Vm&&(gm?bm(Z,"name",Vm):(h=!0,m=function(){return rm(b,this)})),l)if(r={values:s(Vm),keys:o?m:s(Wm),entries:s(Cm)},c)for(d in r)(ym||h||!(d in Z))&&mm(Z,d,r[d]);else am({target:t,proto:!0,forced:ym||h},r);return Z[Xm]!==m&&mm(Z,Xm,m,{name:l}),pm[t]=m,r},vm=Ft,fm=Al,Ym=Ql,Km=Bi,Nm=be.f,Jm=Sm,Hm=me,Lm="Array Iterator",km=Km.set,Am=Km.getterFor(Lm),Um=Jm(Array,"Array",(function(e,t){km(this,{type:Lm,target:vm(e),index:0,kind:t})}),(function(){var e=Am(this),t=e.target,i=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),"values"),Tm=Ym.Arguments=Ym.Array;if(fm("keys"),fm("values"),fm("entries"),Hm&&"values"!==Tm.name)try{Nm(Tm,"name",{value:"values"})}catch(e){}var Bm=o,Fm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},wm=cm,zm=Um,xm=qt,Pm=he,jm=Pm("iterator"),Qm=Pm("toStringTag"),Mm=zm.values,Em=function(e,t){if(e){if(e[jm]!==Mm)try{xm(e,jm,Mm)}catch(t){e[jm]=Mm}if(e[Qm]||xm(e,Qm,t),Fm[t])for(var i in zm)if(e[i]!==zm[i])try{xm(e,i,zm[i])}catch(t){e[i]=zm[i]}}};for(var Dm in Fm)Em(Bm[Dm]&&Bm[Dm].prototype,Dm);Em(wm,"DOMTokenList");var Om,_m,qm,$m,ep=b([].slice),tp=TypeError,ip=function(e,t){if(e<t)throw tp("Not enough arguments");return e},np=/(?:ipad|iphone|ipod).*applewebkit/i.test(P),lp="process"==Jt(o.process),op=o,cp=$r,ap=jl,rp=B,dp=W,sp=a,up=gl,hp=ep,Zp=Xe,bp=ip,mp=np,pp=lp,Ip=op.setImmediate,gp=op.clearImmediate,Gp=op.process,yp=op.Dispatch,Xp=op.Function,Wp=op.MessageChannel,Vp=op.String,Cp=0,Rp={},Sp="onreadystatechange";try{Om=op.location}catch(e){}var vp=function(e){if(dp(Rp,e)){var t=Rp[e];delete Rp[e],t()}},fp=function(e){return function(){vp(e)}},Yp=function(e){vp(e.data)},Kp=function(e){op.postMessage(Vp(e),Om.protocol+"//"+Om.host)};Ip&&gp||(Ip=function(e){bp(arguments.length,1);var t=rp(e)?e:Xp(e),i=hp(arguments,1);return Rp[++Cp]=function(){cp(t,void 0,i)},_m(Cp),Cp},gp=function(e){delete Rp[e]},pp?_m=function(e){Gp.nextTick(fp(e))}:yp&&yp.now?_m=function(e){yp.now(fp(e))}:Wp&&!mp?($m=(qm=new Wp).port2,qm.port1.onmessage=Yp,_m=ap($m.postMessage,$m)):op.addEventListener&&rp(op.postMessage)&&!op.importScripts&&Om&&"file:"!==Om.protocol&&!sp(Kp)?(_m=Kp,op.addEventListener("message",Yp,!1)):_m=Sp in Zp("script")?function(e){up.appendChild(Zp("script")).onreadystatechange=function(){up.removeChild(this),vp(e)}}:function(e){setTimeout(fp(e),0)});var Np={set:Ip,clear:gp},Jp=Np.clear;cl({global:!0,bind:!0,enumerable:!0,forced:o.clearImmediate!==Jp},{clearImmediate:Jp});var Hp=Np.set;cl({global:!0,bind:!0,enumerable:!0,forced:o.setImmediate!==Hp},{setImmediate:Hp});var Lp=Ja.charAt,kp=ma,Ap=Bi,Up=Sm,Tp="String Iterator",Bp=Ap.set,Fp=Ap.getterFor(Tp);Up(String,"String",(function(e){Bp(this,{type:Tp,string:kp(e),index:0})}),(function(){var e,t=Fp(this),i=t.string,n=t.index;return n>=i.length?{value:void 0,done:!0}:(e=Lp(i,n),t.index+=e.length,{value:e,done:!1})}));var wp=a,zp=he("iterator"),xp=!wp((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,i="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),i+=n+e})),!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[zp]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host})),Pp=me,jp=b,Qp=Ne,Mp=a,Ep=sl,Dp=Hn,Op=Ct,_p=G,qp=Ut,$p=Object.assign,eI=Object.defineProperty,tI=jp([].concat),iI=!$p||Mp((function(){if(Pp&&1!==$p({b:1},$p(eI({},"a",{enumerable:!0,get:function(){eI(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach((function(e){t[e]=e})),7!=$p({},e)[i]||Ep($p({},t)).join("")!=n}))?function(e,t){for(var i=_p(e),n=arguments.length,l=1,o=Dp.f,c=Op.f;n>l;)for(var a,r=qp(arguments[l++]),d=o?tI(Ep(r),o(r)):Ep(r),s=d.length,u=0;s>u;)a=d[u++],Pp&&!Qp(c,r,a)||(i[a]=r[a]);return i}:$p,nI=fe,lI=Xo,oI=jl,cI=Ne,aI=G,rI=function(e,t,i,n){try{return n?t(nI(i)[0],i[1]):t(i)}catch(t){lI(e,"throw",t)}},dI=Ol,sI=ec,uI=gn,hI=bu,ZI=Io,bI=so,mI=Array,pI=b,II=2147483647,gI=/[^\0-\u007E]/,GI=/[.\u3002\uFF0E\uFF61]/g,yI="Overflow: input needs wider integers to process",XI=RangeError,WI=pI(GI.exec),VI=Math.floor,CI=String.fromCharCode,RI=pI("".charCodeAt),SI=pI([].join),vI=pI([].push),fI=pI("".replace),YI=pI("".split),KI=pI("".toLowerCase),NI=function(e){return e+22+75*(e<26)},JI=function(e,t,i){var n=0;for(e=i?VI(e/700):e>>1,e+=VI(e/t);e>455;)e=VI(e/35),n+=36;return VI(n+36*e/(e+38))},HI=function(e){var t=[];e=function(e){for(var t=[],i=0,n=e.length;i<n;){var l=RI(e,i++);if(l>=55296&&l<=56319&&i<n){var o=RI(e,i++);56320==(64512&o)?vI(t,((1023&l)<<10)+(1023&o)+65536):(vI(t,l),i--)}else vI(t,l)}return t}(e);var i,n,l=e.length,o=128,c=0,a=72;for(i=0;i<e.length;i++)(n=e[i])<128&&vI(t,CI(n));var r=t.length,d=r;for(r&&vI(t,"-");d<l;){var s=II;for(i=0;i<e.length;i++)(n=e[i])>=o&&n<s&&(s=n);var u=d+1;if(s-o>VI((II-c)/u))throw XI(yI);for(c+=(s-o)*u,o=s,i=0;i<e.length;i++){if((n=e[i])<o&&++c>II)throw XI(yI);if(n==o){for(var h=c,Z=36;;){var b=Z<=a?1:Z>=a+26?26:Z-a;if(h<b)break;var m=h-b,p=36-b;vI(t,CI(NI(b+m%p))),h=VI(m/p),Z+=36}vI(t,CI(NI(h))),a=JI(c,u,d==r),c=0,d++}}c++,o++}return SI(t,"")},LI=cl,kI=o,AI=Ne,UI=b,TI=me,BI=xp,FI=nn,wI=Qs,zI=oa,xI=ha,PI=Bi,jI=Ds,QI=B,MI=W,EI=jl,DI=lo,OI=fe,_I=Ie,qI=ma,$I=Kl,eg=ft,tg=Io,ig=so,ng=ip,lg=Tb,og=he("iterator"),cg="URLSearchParams",ag="URLSearchParamsIterator",rg=PI.set,dg=PI.getterFor(cg),sg=PI.getterFor(ag),ug=Object.getOwnPropertyDescriptor,hg=function(e){if(!TI)return kI[e];var t=ug(kI,e);return t&&t.value},Zg=hg("fetch"),bg=hg("Request"),mg=hg("Headers"),pg=bg&&bg.prototype,Ig=mg&&mg.prototype,gg=kI.RegExp,Gg=kI.TypeError,yg=kI.decodeURIComponent,Xg=kI.encodeURIComponent,Wg=UI("".charAt),Vg=UI([].join),Cg=UI([].push),Rg=UI("".replace),Sg=UI([].shift),vg=UI([].splice),fg=UI("".split),Yg=UI("".slice),Kg=/\+/g,Ng=Array(4),Jg=function(e){return Ng[e-1]||(Ng[e-1]=gg("((?:%[\\da-f]{2}){"+e+"})","gi"))},Hg=function(e){try{return yg(e)}catch(t){return e}},Lg=function(e){var t=Rg(e,Kg," "),i=4;try{return yg(t)}catch(e){for(;i;)t=Rg(t,Jg(i--),Hg);return t}},kg=/[!'()~]|%20/g,Ag={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Ug=function(e){return Ag[e]},Tg=function(e){return Rg(Xg(e),kg,Ug)},Bg=xI((function(e,t){rg(this,{type:ag,iterator:tg(dg(e).entries),kind:t})}),"Iterator",(function(){var e=sg(this),t=e.kind,i=e.iterator.next(),n=i.value;return i.done||(i.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),i}),!0),Fg=function(e){this.entries=[],this.url=null,void 0!==e&&(_I(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===Wg(e,0)?Yg(e,1):e:qI(e)))};Fg.prototype={type:cg,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,i,n,l,o,c,a,r=ig(e);if(r)for(i=(t=tg(e,r)).next;!(n=AI(i,t)).done;){if(o=(l=tg(OI(n.value))).next,(c=AI(o,l)).done||(a=AI(o,l)).done||!AI(o,l).done)throw Gg("Expected sequence with length 2");Cg(this.entries,{key:qI(c.value),value:qI(a.value)})}else for(var d in e)MI(e,d)&&Cg(this.entries,{key:d,value:qI(e[d])})},parseQuery:function(e){if(e)for(var t,i,n=fg(e,"&"),l=0;l<n.length;)(t=n[l++]).length&&(i=fg(t,"="),Cg(this.entries,{key:Lg(Sg(i)),value:Lg(Vg(i,"="))}))},serialize:function(){for(var e,t=this.entries,i=[],n=0;n<t.length;)e=t[n++],Cg(i,Tg(e.key)+"="+Tg(e.value));return Vg(i,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var wg=function(){jI(this,zg);var e=arguments.length>0?arguments[0]:void 0;rg(this,new Fg(e))},zg=wg.prototype;if(wI(zg,{append:function(e,t){ng(arguments.length,2);var i=dg(this);Cg(i.entries,{key:qI(e),value:qI(t)}),i.updateURL()},delete:function(e){ng(arguments.length,1);for(var t=dg(this),i=t.entries,n=qI(e),l=0;l<i.length;)i[l].key===n?vg(i,l,1):l++;t.updateURL()},get:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;n++)if(t[n].key===i)return t[n].value;return null},getAll:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=[],l=0;l<t.length;l++)t[l].key===i&&Cg(n,t[l].value);return n},has:function(e){ng(arguments.length,1);for(var t=dg(this).entries,i=qI(e),n=0;n<t.length;)if(t[n++].key===i)return!0;return!1},set:function(e,t){ng(arguments.length,1);for(var i,n=dg(this),l=n.entries,o=!1,c=qI(e),a=qI(t),r=0;r<l.length;r++)(i=l[r]).key===c&&(o?vg(l,r--,1):(o=!0,i.value=a));o||Cg(l,{key:c,value:a}),n.updateURL()},sort:function(){var e=dg(this);lg(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,i=dg(this).entries,n=EI(e,arguments.length>1?arguments[1]:void 0),l=0;l<i.length;)n((t=i[l++]).value,t.key,this)},keys:function(){return new Bg(this,"keys")},values:function(){return new Bg(this,"values")},entries:function(){return new Bg(this,"entries")}},{enumerable:!0}),FI(zg,og,zg.entries,{name:"entries"}),FI(zg,"toString",(function(){return dg(this).serialize()}),{enumerable:!0}),zI(wg,cg),LI({global:!0,constructor:!0,forced:!BI},{URLSearchParams:wg}),!BI&&QI(mg)){var xg=UI(Ig.has),Pg=UI(Ig.set),jg=function(e){if(_I(e)){var t,i=e.body;if(DI(i)===cg)return t=e.headers?new mg(e.headers):new mg,xg(t,"content-type")||Pg(t,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),$I(e,{body:eg(0,qI(i)),headers:eg(0,t)})}return e};if(QI(Zg)&&LI({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return Zg(e,arguments.length>1?jg(arguments[1]):{})}}),QI(bg)){var Qg=function(e){return jI(this,pg),new bg(e,arguments.length>1?jg(arguments[1]):{})};pg.constructor=Qg,Qg.prototype=pg,LI({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Qg})}}var Mg,Eg=cl,Dg=me,Og=xp,_g=o,qg=jl,$g=b,eG=nn,tG=Cc,iG=Ds,nG=W,lG=iI,oG=function(e){var t=aI(e),i=sI(this),n=arguments.length,l=n>1?arguments[1]:void 0,o=void 0!==l;o&&(l=oI(l,n>2?arguments[2]:void 0));var c,a,r,d,s,u,h=bI(t),Z=0;if(!h||this===mI&&dI(h))for(c=uI(t),a=i?new this(c):mI(c);c>Z;Z++)u=o?l(t[Z],Z):t[Z],hI(a,Z,u);else for(s=(d=ZI(t,h)).next,a=i?new this:[];!(r=cI(s,d)).done;Z++)u=o?rI(d,l,[r.value,Z],!0):r.value,hI(a,Z,u);return a.length=Z,a},cG=yu,aG=Ja.codeAt,rG=function(e){var t,i,n=[],l=YI(fI(KI(e),GI,"."),".");for(t=0;t<l.length;t++)i=l[t],vI(n,WI(gI,i)?"xn--"+HI(i):i);return SI(n,".")},dG=ma,sG=oa,uG=ip,hG={URLSearchParams:wg,getState:dg},ZG=Bi,bG=ZG.set,mG=ZG.getterFor("URL"),pG=hG.URLSearchParams,IG=hG.getState,gG=_g.URL,GG=_g.TypeError,yG=_g.parseInt,XG=Math.floor,WG=Math.pow,VG=$g("".charAt),CG=$g(/./.exec),RG=$g([].join),SG=$g(1..toString),vG=$g([].pop),fG=$g([].push),YG=$g("".replace),KG=$g([].shift),NG=$g("".split),JG=$g("".slice),HG=$g("".toLowerCase),LG=$g([].unshift),kG="Invalid scheme",AG="Invalid host",UG="Invalid port",TG=/[a-z]/i,BG=/[\d+-.a-z]/i,FG=/\d/,wG=/^0x/i,zG=/^[0-7]+$/,xG=/^\d+$/,PG=/^[\da-f]+$/i,jG=/[\0\t\n\r #%/:<>?@[\\\]^|]/,QG=/[\0\t\n\r #/:<>?@[\\\]^|]/,MG=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,EG=/[\t\n\r]/g,DG=function(e){var t,i,n,l;if("number"==typeof e){for(t=[],i=0;i<4;i++)LG(t,e%256),e=XG(e/256);return RG(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,i=1,n=null,l=0,o=0;o<8;o++)0!==e[o]?(l>i&&(t=n,i=l),n=null,l=0):(null===n&&(n=o),++l);return l>i&&(t=n,i=l),t}(e),i=0;i<8;i++)l&&0===e[i]||(l&&(l=!1),n===i?(t+=i?":":"::",l=!0):(t+=SG(e[i],16),i<7&&(t+=":")));return"["+t+"]"}return e},OG={},_G=lG({},OG,{" ":1,'"':1,"<":1,">":1,"`":1}),qG=lG({},_G,{"#":1,"?":1,"{":1,"}":1}),$G=lG({},qG,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ey=function(e,t){var i=aG(e,0);return i>32&&i<127&&!nG(t,e)?e:encodeURIComponent(e)},ty={ftp:21,file:null,http:80,https:443,ws:80,wss:443},iy=function(e,t){var i;return 2==e.length&&CG(TG,VG(e,0))&&(":"==(i=VG(e,1))||!t&&"|"==i)},ny=function(e){var t;return e.length>1&&iy(JG(e,0,2))&&(2==e.length||"/"===(t=VG(e,2))||"\\"===t||"?"===t||"#"===t)},ly=function(e){return"."===e||"%2e"===HG(e)},oy={},cy={},ay={},ry={},dy={},sy={},uy={},hy={},Zy={},by={},my={},py={},Iy={},gy={},Gy={},yy={},Xy={},Wy={},Vy={},Cy={},Ry={},Sy=function(e,t,i){var n,l,o,c=dG(e);if(t){if(l=this.parse(c))throw GG(l);this.searchParams=null}else{if(void 0!==i&&(n=new Sy(i,!0)),l=this.parse(c,null,n))throw GG(l);(o=IG(new pG)).bindURL(this),this.searchParams=o}};Sy.prototype={type:"URL",parse:function(e,t,i){var n,l,o,c,a,r=this,d=t||oy,s=0,u="",h=!1,Z=!1,b=!1;for(e=dG(e),t||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,e=YG(e,MG,"")),e=YG(e,EG,""),n=oG(e);s<=n.length;){switch(l=n[s],d){case oy:if(!l||!CG(TG,l)){if(t)return kG;d=ay;continue}u+=HG(l),d=cy;break;case cy:if(l&&(CG(BG,l)||"+"==l||"-"==l||"."==l))u+=HG(l);else{if(":"!=l){if(t)return kG;u="",d=ay,s=0;continue}if(t&&(r.isSpecial()!=nG(ty,u)||"file"==u&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=u,t)return void(r.isSpecial()&&ty[r.scheme]==r.port&&(r.port=null));u="","file"==r.scheme?d=gy:r.isSpecial()&&i&&i.scheme==r.scheme?d=ry:r.isSpecial()?d=hy:"/"==n[s+1]?(d=dy,s++):(r.cannotBeABaseURL=!0,fG(r.path,""),d=Vy)}break;case ay:if(!i||i.cannotBeABaseURL&&"#"!=l)return kG;if(i.cannotBeABaseURL&&"#"==l){r.scheme=i.scheme,r.path=cG(i.path),r.query=i.query,r.fragment="",r.cannotBeABaseURL=!0,d=Ry;break}d="file"==i.scheme?gy:sy;continue;case ry:if("/"!=l||"/"!=n[s+1]){d=sy;continue}d=Zy,s++;break;case dy:if("/"==l){d=by;break}d=Wy;continue;case sy:if(r.scheme=i.scheme,l==Mg)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cG(i.path),r.query=i.query;else if("/"==l||"\\"==l&&r.isSpecial())d=uy;else if("?"==l)r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cG(i.path),r.query="",d=Cy;else{if("#"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cG(i.path),r.path.length--,d=Wy;continue}r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,r.path=cG(i.path),r.query=i.query,r.fragment="",d=Ry}break;case uy:if(!r.isSpecial()||"/"!=l&&"\\"!=l){if("/"!=l){r.username=i.username,r.password=i.password,r.host=i.host,r.port=i.port,d=Wy;continue}d=by}else d=Zy;break;case hy:if(d=Zy,"/"!=l||"/"!=VG(u,s+1))continue;s++;break;case Zy:if("/"!=l&&"\\"!=l){d=by;continue}break;case by:if("@"==l){h&&(u="%40"+u),h=!0,o=oG(u);for(var m=0;m<o.length;m++){var p=o[m];if(":"!=p||b){var I=ey(p,$G);b?r.password+=I:r.username+=I}else b=!0}u=""}else if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(h&&""==u)return"Invalid authority";s-=oG(u).length+1,u="",d=my}else u+=l;break;case my:case py:if(t&&"file"==r.scheme){d=yy;continue}if(":"!=l||Z){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()){if(r.isSpecial()&&""==u)return AG;if(t&&""==u&&(r.includesCredentials()||null!==r.port))return;if(c=r.parseHost(u))return c;if(u="",d=Xy,t)return;continue}"["==l?Z=!0:"]"==l&&(Z=!1),u+=l}else{if(""==u)return AG;if(c=r.parseHost(u))return c;if(u="",d=Iy,t==py)return}break;case Iy:if(!CG(FG,l)){if(l==Mg||"/"==l||"?"==l||"#"==l||"\\"==l&&r.isSpecial()||t){if(""!=u){var g=yG(u,10);if(g>65535)return UG;r.port=r.isSpecial()&&g===ty[r.scheme]?null:g,u=""}if(t)return;d=Xy;continue}return UG}u+=l;break;case gy:if(r.scheme="file","/"==l||"\\"==l)d=Gy;else{if(!i||"file"!=i.scheme){d=Wy;continue}if(l==Mg)r.host=i.host,r.path=cG(i.path),r.query=i.query;else if("?"==l)r.host=i.host,r.path=cG(i.path),r.query="",d=Cy;else{if("#"!=l){ny(RG(cG(n,s),""))||(r.host=i.host,r.path=cG(i.path),r.shortenPath()),d=Wy;continue}r.host=i.host,r.path=cG(i.path),r.query=i.query,r.fragment="",d=Ry}}break;case Gy:if("/"==l||"\\"==l){d=yy;break}i&&"file"==i.scheme&&!ny(RG(cG(n,s),""))&&(iy(i.path[0],!0)?fG(r.path,i.path[0]):r.host=i.host),d=Wy;continue;case yy:if(l==Mg||"/"==l||"\\"==l||"?"==l||"#"==l){if(!t&&iy(u))d=Wy;else if(""==u){if(r.host="",t)return;d=Xy}else{if(c=r.parseHost(u))return c;if("localhost"==r.host&&(r.host=""),t)return;u="",d=Xy}continue}u+=l;break;case Xy:if(r.isSpecial()){if(d=Wy,"/"!=l&&"\\"!=l)continue}else if(t||"?"!=l)if(t||"#"!=l){if(l!=Mg&&(d=Wy,"/"!=l))continue}else r.fragment="",d=Ry;else r.query="",d=Cy;break;case Wy:if(l==Mg||"/"==l||"\\"==l&&r.isSpecial()||!t&&("?"==l||"#"==l)){if(".."===(a=HG(a=u))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==l||"\\"==l&&r.isSpecial()||fG(r.path,"")):ly(u)?"/"==l||"\\"==l&&r.isSpecial()||fG(r.path,""):("file"==r.scheme&&!r.path.length&&iy(u)&&(r.host&&(r.host=""),u=VG(u,0)+":"),fG(r.path,u)),u="","file"==r.scheme&&(l==Mg||"?"==l||"#"==l))for(;r.path.length>1&&""===r.path[0];)KG(r.path);"?"==l?(r.query="",d=Cy):"#"==l&&(r.fragment="",d=Ry)}else u+=ey(l,qG);break;case Vy:"?"==l?(r.query="",d=Cy):"#"==l?(r.fragment="",d=Ry):l!=Mg&&(r.path[0]+=ey(l,OG));break;case Cy:t||"#"!=l?l!=Mg&&("'"==l&&r.isSpecial()?r.query+="%27":r.query+="#"==l?"%23":ey(l,OG)):(r.fragment="",d=Ry);break;case Ry:l!=Mg&&(r.fragment+=ey(l,_G))}s++}},parseHost:function(e){var t,i,n;if("["==VG(e,0)){if("]"!=VG(e,e.length-1))return AG;if(t=function(e){var t,i,n,l,o,c,a,r=[0,0,0,0,0,0,0,0],d=0,s=null,u=0,h=function(){return VG(e,u)};if(":"==h()){if(":"!=VG(e,1))return;u+=2,s=++d}for(;h();){if(8==d)return;if(":"!=h()){for(t=i=0;i<4&&CG(PG,h());)t=16*t+yG(h(),16),u++,i++;if("."==h()){if(0==i)return;if(u-=i,d>6)return;for(n=0;h();){if(l=null,n>0){if(!("."==h()&&n<4))return;u++}if(!CG(FG,h()))return;for(;CG(FG,h());){if(o=yG(h(),10),null===l)l=o;else{if(0==l)return;l=10*l+o}if(l>255)return;u++}r[d]=256*r[d]+l,2!=++n&&4!=n||d++}if(4!=n)return;break}if(":"==h()){if(u++,!h())return}else if(h())return;r[d++]=t}else{if(null!==s)return;u++,s=++d}}if(null!==s)for(c=d-s,d=7;0!=d&&c>0;)a=r[d],r[d--]=r[s+c-1],r[s+--c]=a;else if(8!=d)return;return r}(JG(e,1,-1)),!t)return AG;this.host=t}else if(this.isSpecial()){if(e=rG(e),CG(jG,e))return AG;if(t=function(e){var t,i,n,l,o,c,a,r=NG(e,".");if(r.length&&""==r[r.length-1]&&r.length--,(t=r.length)>4)return e;for(i=[],n=0;n<t;n++){if(""==(l=r[n]))return e;if(o=10,l.length>1&&"0"==VG(l,0)&&(o=CG(wG,l)?16:8,l=JG(l,8==o?1:2)),""===l)c=0;else{if(!CG(10==o?xG:8==o?zG:PG,l))return e;c=yG(l,o)}fG(i,c)}for(n=0;n<t;n++)if(c=i[n],n==t-1){if(c>=WG(256,5-t))return null}else if(c>255)return null;for(a=vG(i),n=0;n<i.length;n++)a+=i[n]*WG(256,3-n);return a}(e),null===t)return AG;this.host=t}else{if(CG(QG,e))return AG;for(t="",i=oG(e),n=0;n<i.length;n++)t+=ey(i[n],OG);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return nG(ty,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||"file"==this.scheme&&1==t&&iy(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,i=e.username,n=e.password,l=e.host,o=e.port,c=e.path,a=e.query,r=e.fragment,d=t+":";return null!==l?(d+="//",e.includesCredentials()&&(d+=i+(n?":"+n:"")+"@"),d+=DG(l),null!==o&&(d+=":"+o)):"file"==t&&(d+="//"),d+=e.cannotBeABaseURL?c[0]:c.length?"/"+RG(c,"/"):"",null!==a&&(d+="?"+a),null!==r&&(d+="#"+r),d},setHref:function(e){var t=this.parse(e);if(t)throw GG(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if("blob"==e)try{return new vy(e.path[0]).origin}catch(e){return"null"}return"file"!=e&&this.isSpecial()?e+"://"+DG(this.host)+(null!==t?":"+t:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(e){this.parse(dG(e)+":",oy)},getUsername:function(){return this.username},setUsername:function(e){var t=oG(dG(e));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var i=0;i<t.length;i++)this.username+=ey(t[i],$G)}},getPassword:function(){return this.password},setPassword:function(e){var t=oG(dG(e));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var i=0;i<t.length;i++)this.password+=ey(t[i],$G)}},getHost:function(){var e=this.host,t=this.port;return null===e?"":null===t?DG(e):DG(e)+":"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,my)},getHostname:function(){var e=this.host;return null===e?"":DG(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,py)},getPort:function(){var e=this.port;return null===e?"":dG(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(""==(e=dG(e))?this.port=null:this.parse(e,Iy))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?"/"+RG(e,"/"):""},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,Xy))},getSearch:function(){var e=this.query;return e?"?"+e:""},setSearch:function(e){""==(e=dG(e))?this.query=null:("?"==VG(e,0)&&(e=JG(e,1)),this.query="",this.parse(e,Cy)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?"#"+e:""},setHash:function(e){""!=(e=dG(e))?("#"==VG(e,0)&&(e=JG(e,1)),this.fragment="",this.parse(e,Ry)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var vy=function(e){var t=iG(this,fy),i=uG(arguments.length,1)>1?arguments[1]:void 0,n=bG(t,new Sy(e,!1,i));Dg||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},fy=vy.prototype,Yy=function(e,t){return{get:function(){return mG(this)[e]()},set:t&&function(e){return mG(this)[t](e)},configurable:!0,enumerable:!0}};if(Dg&&(tG(fy,"href",Yy("serialize","setHref")),tG(fy,"origin",Yy("getOrigin")),tG(fy,"protocol",Yy("getProtocol","setProtocol")),tG(fy,"username",Yy("getUsername","setUsername")),tG(fy,"password",Yy("getPassword","setPassword")),tG(fy,"host",Yy("getHost","setHost")),tG(fy,"hostname",Yy("getHostname","setHostname")),tG(fy,"port",Yy("getPort","setPort")),tG(fy,"pathname",Yy("getPathname","setPathname")),tG(fy,"search",Yy("getSearch","setSearch")),tG(fy,"searchParams",Yy("getSearchParams")),tG(fy,"hash",Yy("getHash","setHash"))),eG(fy,"toJSON",(function(){return mG(this).serialize()}),{enumerable:!0}),eG(fy,"toString",(function(){return mG(this).serialize()}),{enumerable:!0}),gG){var Ky=gG.createObjectURL,Ny=gG.revokeObjectURL;Ky&&eG(vy,"createObjectURL",qg(Ky,gG)),Ny&&eG(vy,"revokeObjectURL",qg(Ny,gG))}sG(vy,"URL"),Eg({global:!0,constructor:!0,forced:!Og,sham:!Dg},{URL:vy});var Jy=Ne;function Hy(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}function Ly(e,t,i,n){return new(i||(i=Promise))((function(l,o){function c(e){try{r(n.next(e))}catch(e){o(e)}}function a(e){try{r(n.throw(e))}catch(e){o(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(c,a)}r((n=n.apply(e,t||[])).next())}))}cl({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return Jy(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={}));const ky="refresh_token_timer",Ay=["RS256","RS512","RS384","PS256"],Uy="code",Ty="session_state",By="sign_out_url",Fy="sign_out_success",wy="state";var zy;!function(e){e.Include="include",e.SameOrigin="same-origin",e.Omit="omit"}(zy||(zy={}));class xy{constructor(e,t,i){this.message=i,this.name=t,this.code=e,Object.setPrototypeOf(this,new.target.prototype)}}class Py{constructor(){}static filterClaimsFromIDTokenPayload(e){const t=Object.assign({},e);null==t||delete t.iss,null==t||delete t.aud,null==t||delete t.exp,null==t||delete t.iat,null==t||delete t.acr,null==t||delete t.amr,null==t||delete t.azp,null==t||delete t.auth_time,null==t||delete t.nonce,null==t||delete t.c_hash,null==t||delete t.at_hash,null==t||delete t.nbf,null==t||delete t.isk,null==t||delete t.sid;const i={};return Object.entries(t).forEach((e=>{let[t,n]=e;const l=t.split("_").map(((e,t)=>0===t?e:[e[0].toUpperCase(),...e.slice(1)].join(""))).join("");i[l]=n})),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(e,t){const i=parseInt(e.split("#")[1]);return t?"".concat(t,"_request_").concat(i):"request_".concat(i)}static extractPKCEKeyFromStateParam(e){return"pkce_code_verifier#".concat(parseInt(e.split("request_")[1]))}}Py.getTenantDomainFromIdTokenPayload=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"@";const i=e.sub.split(t);return i.length>2?i[i.length-1]:""};class jy{constructor(e,t){this._dataLayer=e,this._config=()=>Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=t}resolveEndpoints(e){return Ly(this,void 0,void 0,(function*(){const t={},i=yield this._config();return i.endpoints&&Object.keys(i.endpoints).forEach((e=>{const n=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));t[n]=(null==i?void 0:i.endpoints)?i.endpoints[e]:""})),Object.assign(Object.assign({},e),t)}))}resolveEndpointsExplicitly(){return Ly(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!t.endpoints||!Object.keys(null==t?void 0:t.endpoints).every((e=>{const t=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));return i.includes(t)})))throw new xy("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""})),Object.assign({},e)}))}resolveEndpointsByBaseURL(){return Ly(this,void 0,void 0,(function*(){const e={},t=yield this._config(),i=t.baseUrl;if(!i)throw new xy("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");t.endpoints&&Object.keys(t.endpoints).forEach((i=>{const n=i.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));e[n]=(null==t?void 0:t.endpoints)?t.endpoints[i]:""}));const n={authorization_endpoint:"".concat(i).concat("/oauth2/authorize"),end_session_endpoint:"".concat(i).concat("/oidc/logout"),issuer:"".concat(i).concat("/oauth2/token"),jwks_uri:"".concat(i).concat("/oauth2/jwks"),check_session_iframe:"".concat(i).concat("/oidc/checksession"),revocation_endpoint:"".concat(i).concat("/oauth2/revoke"),token_endpoint:"".concat(i).concat("/oauth2/token"),userinfo_endpoint:"".concat(i).concat("/oauth2/userinfo")};return Object.assign(Object.assign({},n),e)}))}validateIdToken(e){return Ly(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,i=yield this._config();if(!t||0===t.trim().length)throw new xy("JS_AUTH_HELPER-VIT-NF01","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");let n;try{n=yield fetch(t,{credentials:i.sendCookiesInRequests?zy.Include:zy.SameOrigin})}catch(t){throw new xy("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=t?t:"The request sent to get the jwks from the server failed.")}if(200!==n.status||!n.ok)throw new xy("JS-AUTH_HELPER-VIT-HE03","Invalid response status received for jwks request (".concat(n.statusText,")."),yield n.json());const l=(yield this._oidcProviderMetaData()).issuer,{keys:o}=yield n.json(),c=yield this._cryptoHelper.getJWKForTheIdToken(e.split(".")[0],o);return this._cryptoHelper.isValidIdToken(e,c,(yield this._config()).clientID,null!=l?l:"",this._cryptoHelper.decodeIDToken(e).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(e){var t,i,n,l;const o=this._cryptoHelper.decodeIDToken(e),c=Py.getTenantDomainFromIdTokenPayload(o),a=null!==(t=null==o?void 0:o.username)&&void 0!==t?t:"",r=null!==(i=o.given_name)&&void 0!==i?i:"",d=null!==(n=o.family_name)&&void 0!==n?n:"",s=r&&d?"".concat(r," ").concat(d):r||d||"",u=null!==(l=o.preferred_username)&&void 0!==l?l:s;return Object.assign({displayName:u,tenantDomain:c,username:a},Py.filterClaimsFromIDTokenPayload(o))}replaceCustomGrantTemplateTags(e,t){var i;return Ly(this,void 0,void 0,(function*(){let n="openid";const l=yield this._config(),o=yield this._dataLayer.getSessionData(t);return l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),n=l.scope.join(" ")),e.replace("{{token}}",o.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(o.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",l.clientID).replace("{{clientSecret}}",null!==(i=l.clientSecret)&&void 0!==i?i:"")}))}clearUserSessionData(e){return Ly(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(e),yield this._dataLayer.removeSessionData(e)}))}handleTokenResponse(e,t){return Ly(this,void 0,void 0,(function*(){if(200!==e.status||!e.ok)throw new xy("JS-AUTH_HELPER-HTR-NE01","Invalid response status received for token request (".concat(e.statusText,")."),yield e.json());const i=yield e.json();if(i.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(i.id_token).then((()=>Ly(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(i,t);const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return Promise.resolve(e)}))));{const e={accessToken:i.access_token,createdAt:i.created_at,expiresIn:i.expires_in,idToken:i.id_token,refreshToken:i.refresh_token,scope:i.scope,tokenType:i.token_type};return yield this._dataLayer.setSessionData(i,t),Promise.resolve(e)}}))}generatePKCEKey(e){var t;return Ly(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getTemporaryData(e),n=[];Object.keys(i).forEach((e=>{e.startsWith("pkce_code_verifier")&&n.push(e)}));const l=n.sort().pop();return"pkce_code_verifier#".concat(parseInt(null!==(t=null==l?void 0:l.split("#")[1])&&void 0!==t?t:"-1")+1)}))}}class Qy{constructor(e){this._cryptoUtils=e}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(e){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(e))}getJWKForTheIdToken(e,t){const i=JSON.parse(this._cryptoUtils.base64URLDecode(e));for(const e of t)if(i.kid===e.kid)return e;throw new xy("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+t.map((e=>e.kid)).join(", "))}isValidIdToken(e,t,i,n,l,o){return this._cryptoUtils.verifyJwt(e,t,Ay,i,n,l,o).then((e=>e?Promise.resolve(!0):Promise.reject(new xy("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))))}decodeIDToken(e){try{const t=this._cryptoUtils.base64URLDecode(e.split(".")[1]);return JSON.parse(t)}catch(e){throw new xy("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",e)}}}class My{constructor(e,t){this._cryptoUtils=t,this._cryptoHelper=new Qy(t),this._authenticationHelper=new jy(e,this._cryptoHelper),this._dataLayer=e,this._config=()=>Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(e,t){var i,n,l;return Ly(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),c=yield this._config();if(!o||0===o.trim().length)throw new xy("JS-AUTH_CORE-GAU-NF01","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const a=new URL(o),r=new Map;r.set("response_type","code"),r.set("client_id",c.clientID);let d="openid";c.scope&&c.scope.length>0&&(c.scope.includes("openid")||c.scope.push("openid"),d=c.scope.join(" ")),r.set("scope",d),r.set("redirect_uri",c.signInRedirectURL),c.responseMode&&r.set("response_mode",c.responseMode);const s=yield this._authenticationHelper.generatePKCEKey(t);if(c.enablePKCE){const e=null===(i=this._cryptoHelper)||void 0===i?void 0:i.getCodeVerifier(),l=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(e);yield this._dataLayer.setTemporaryDataParameter(s,e,t),r.set("code_challenge_method","S256"),r.set("code_challenge",l)}c.prompt&&r.set("prompt",c.prompt);const u=e;if(u)for(const[e,t]of Object.entries(u))if(""!=e&&""!=t&&"state"!==e){const i=e.replace(/[A-Z]/g,(e=>"_".concat(e.toLowerCase())));r.set(i,t.toString())}r.set("state",Py.generateStateParamForRequestCorrelation(s,u?null===(l=u.state)||void 0===l?void 0:l.toString():""));for(const[e,t]of r.entries())a.searchParams.append(e,t);return a.toString()}))}requestAccessToken(e,t,i,n){return Ly(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xy("JS-AUTH_CORE-RAT1-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");t&&(yield this._dataLayer.setSessionDataParameter("session_state",t,n));const c=[];c.push("client_id=".concat(o.clientID)),o.clientSecret&&o.clientSecret.trim().length>0&&c.push("client_secret=".concat(o.clientSecret));const a=e;let r;c.push("code=".concat(a)),c.push("grant_type=authorization_code"),c.push("redirect_uri=".concat(o.signInRedirectURL)),o.enablePKCE&&(c.push("code_verifier=".concat(yield this._dataLayer.getTemporaryDataParameter(Py.extractPKCEKeyFromStateParam(i),n))),yield this._dataLayer.removeTemporaryDataParameter(Py.extractPKCEKeyFromStateParam(i),n));try{r=yield fetch(l,{body:c.join("&"),credentials:o.sendCookiesInRequests?zy.Include:zy.SameOrigin,headers:new Headers(Py.getTokenRequestHeaders()),method:"POST"})}catch(l){throw new xy("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=l?l:"The request to get the access token from the server failed.")}if(!r.ok)throw new xy("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with ".concat(r.statusText),yield r.json());return yield this._authenticationHelper.handleTokenResponse(r,n)}))}refreshAccessToken(e){return Ly(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config(),n=yield this._dataLayer.getSessionData(e);if(!n.refresh_token)throw new xy("JS-AUTH_CORE-RAT2-NF01","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled.");if(!t||0===t.trim().length)throw new xy("JS-AUTH_CORE-RAT2-NF02","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty.");const l=[];let o;l.push("client_id=".concat(i.clientID)),l.push("refresh_token=".concat(n.refresh_token)),l.push("grant_type=refresh_token"),i.clientSecret&&i.clientSecret.trim().length>0&&l.push("client_secret=".concat(i.clientSecret));try{o=yield fetch(t,{body:l.join("&"),credentials:i.sendCookiesInRequests?zy.Include:zy.SameOrigin,headers:new Headers(Py.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xy("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=t?t:"The request to refresh the access token failed.")}if(!o.ok)throw new xy("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with ".concat(o.statusText),yield o.json());return this._authenticationHelper.handleTokenResponse(o,e)}))}revokeAccessToken(e){return Ly(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,i=yield this._config();if(!t||0===t.trim().length)throw new xy("JS-AUTH_CORE-RAT3-NF01","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty.");const n=[];let l;n.push("client_id=".concat(i.clientID)),n.push("token=".concat((yield this._dataLayer.getSessionData(e)).access_token)),n.push("token_type_hint=access_token");try{l=yield fetch(t,{body:n.join("&"),credentials:i.sendCookiesInRequests?zy.Include:zy.SameOrigin,headers:new Headers(Py.getTokenRequestHeaders()),method:"POST"})}catch(t){throw new xy("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=t?t:"The request sent to revoke the access token failed.")}if(200!==l.status||!l.ok)throw new xy("JS-AUTH_CORE-RAT3-HE03","Invalid response status received for revoke access token request (".concat(l.statusText,")."),yield l.json());return this._authenticationHelper.clearUserSessionData(e),Promise.resolve(l)}))}requestCustomGrant(e,t){return Ly(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData(),n=yield this._config();let l;if(l=e.tokenEndpoint&&0!==e.tokenEndpoint.trim().length?e.tokenEndpoint:i.token_endpoint,!l||0===l.trim().length)throw new xy("JS-AUTH_CORE-RCG-NF01","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");const o=yield Promise.all(Object.entries(e.data).map((e=>{let[i,n]=e;return Ly(this,void 0,void 0,(function*(){const e=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,t);return"".concat(i,"=").concat(e)}))})));let c=Object.assign({},Py.getTokenRequestHeaders());e.attachToken&&(c=Object.assign(Object.assign({},c),{Authorization:"Bearer ".concat((yield this._dataLayer.getSessionData(t)).access_token)}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?zy.Include:zy.SameOrigin,headers:new Headers(c),method:"POST"};let r;try{r=yield fetch(l,a)}catch(e){throw new xy("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=e?e:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new xy("JS-AUTH_CORE-RCG-HE03","Invalid response status received for the custom grant request. (".concat(r.statusText,")"),yield r.json());return e.returnsSession?this._authenticationHelper.handleTokenResponse(r,t):Promise.resolve(yield r.json())}))}getBasicUserInfo(e){return Ly(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(e),i=this._authenticationHelper.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let n={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(i).forEach((e=>{void 0!==i[e]&&""!==i[e]&&null!==i[e]||delete i[e]})),n=Object.assign(Object.assign({},n),i),n}))}getDecodedIDToken(e){return Ly(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData(e)).id_token;return this._cryptoHelper.decodeIDToken(t)}))}getCryptoHelper(){return Ly(this,void 0,void 0,(function*(){return this._cryptoHelper}))}getIDToken(e){return Ly(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(e)).id_token}))}getOIDCProviderMetaData(e){return Ly(this,void 0,void 0,(function*(){const t=yield this._config();if(!e&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const i=t.wellKnownEndpoint;if(i){let e;try{if(e=yield fetch(i),200!==e.status||!e.ok)throw new Error}catch(t){throw new xy("JS-AUTH_CORE-GOPMD-HE01","Invalid well-known response","The well known endpoint response has been failed with an error.")}return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(yield e.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(t.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(t){throw new xy("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by base url failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsExplicitly())}catch(t){throw new xy("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=t?t:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var e,t,i,n,l,o,c,a,r,d;return Ly(this,void 0,void 0,(function*(){const s=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(e=s.authorization_endpoint)&&void 0!==e?e:"",checkSessionIframe:null!==(t=s.check_session_iframe)&&void 0!==t?t:"",endSessionEndpoint:null!==(i=s.end_session_endpoint)&&void 0!==i?i:"",introspectionEndpoint:null!==(n=s.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(l=s.issuer)&&void 0!==l?l:"",jwksUri:null!==(o=s.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(c=s.registration_endpoint)&&void 0!==c?c:"",revocationEndpoint:null!==(a=s.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=s.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(d=s.userinfo_endpoint)&&void 0!==d?d:""}}))}getSignOutURL(e){var t,i,n;return Ly(this,void 0,void 0,(function*(){const l=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,o=yield this._config();if(!l||0===l.trim().length)throw new xy("JS-AUTH_CORE-GSOU-NF01","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null===(i=yield this._dataLayer.getSessionData(e))||void 0===i?void 0:i.id_token;if(!c||0===c.trim().length)throw new xy("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.");const a=null!==(n=null==o?void 0:o.signOutRedirectURL)&&void 0!==n?n:null==o?void 0:o.signInRedirectURL;if(!a||0===a.trim().length)throw new xy("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. ");return"".concat(l,"?id_token_hint=").concat(c,"&post_logout_redirect_uri=").concat(a,"&state=sign_out_success")}))}clearUserSessionData(e){return Ly(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(e)}))}getAccessToken(e){var t;return Ly(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData(e))||void 0===t?void 0:t.access_token}))}isAuthenticated(e){return Ly(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(e))}))}getPKCECode(e,t){return Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(Py.extractPKCEKeyFromStateParam(e),t)}))}setPKCECode(e,t,i){return Ly(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(Py.extractPKCEKeyFromStateParam(t),e,i)}))}updateConfig(e){return Ly(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(e),yield this.getOIDCProviderMetaData(!0)}))}}class Ey{constructor(e,t){this._id=e,this._store=t}setDataInBulk(e,t){var i;return Ly(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign(Object.assign({},l),t),c=JSON.stringify(o);yield this._store.setData(e,c)}))}setValue(e,t,i){var n;return Ly(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(e))&&void 0!==n?n:null,o=l&&JSON.parse(l),c=Object.assign(Object.assign({},o),{[t]:i}),a=JSON.stringify(c);yield this._store.setData(e,a)}))}removeValue(e,t){var i;return Ly(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(e))&&void 0!==i?i:null,l=n&&JSON.parse(n),o=Object.assign({},l);delete o[t];const c=JSON.stringify(o);yield this._store.setData(e,c)}))}_resolveKey(e,t){return t?"".concat(e,"-").concat(this._id,"-").concat(t):"".concat(e,"-").concat(this._id)}setConfigData(t){return Ly(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(e.Stores.ConfigData),t)}))}setOIDCProviderMetaData(t){return Ly(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}setTemporaryData(t,i){return Ly(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.TemporaryData,i),t)}))}setSessionData(t,i){return Ly(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e.Stores.SessionData,i),t)}))}setCustomData(e,t,i){return Ly(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(e,i),t)}))}getConfigData(){var t;return Ly(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return Ly(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var i;return Ly(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,t)))&&void 0!==i?i:null)}))}getSessionData(t){var i;return Ly(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e.Stores.SessionData,t)))&&void 0!==i?i:null)}))}getCustomData(e,t){var i;return Ly(this,void 0,void 0,(function*(){return JSON.parse(null!==(i=yield this._store.getData(this._resolveKey(e,t)))&&void 0!==i?i:null)}))}removeConfigData(){return Ly(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.ConfigData))}))}removeOIDCProviderMetaData(){return Ly(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.OIDCProviderMetaData))}))}removeTemporaryData(t){return Ly(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.TemporaryData,t))}))}removeSessionData(t){return Ly(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(e.Stores.SessionData,t))}))}getConfigDataParameter(t){return Ly(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.ConfigData));return i&&JSON.parse(i)[t]}))}getOIDCProviderMetaDataParameter(t){return Ly(this,void 0,void 0,(function*(){const i=yield this._store.getData(this._resolveKey(e.Stores.OIDCProviderMetaData));return i&&JSON.parse(i)[t]}))}getTemporaryDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.TemporaryData,i));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(e.Stores.SessionData,i));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.ConfigData),t,i)}))}setOIDCProviderMetaDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t,i)}))}setTemporaryDataParameter(t,i,n){return Ly(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.TemporaryData,n),t,i)}))}setSessionDataParameter(t,i,n){return Ly(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(e.Stores.SessionData,n),t,i)}))}removeConfigDataParameter(t){return Ly(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return Ly(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.TemporaryData,i),t)}))}removeSessionDataParameter(t,i){return Ly(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(e.Stores.SessionData,i),t)}))}}const Dy={clockTolerance:300,enablePKCE:!0,responseMode:e.ResponseMode.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class Oy{
4
2
  /**
5
3
  * This is the constructor method that returns an instance of the .
6
4
  *
@@ -15,7 +13,7 @@ a=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r="functio
15
13
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
16
14
  * @preserve
17
15
  */
18
- function t(e,n){s(this,t),t._instanceID?t._instanceID+=1:t._instanceID=0,this._dataLayer=new $F("instance_".concat(t._instanceID),e),this._authenticationCore=new qF(this._dataLayer,n),t._authenticationCore=new qF(this._dataLayer,n)}
16
+ constructor(e,t){Oy._instanceID?Oy._instanceID+=1:Oy._instanceID=0,this._dataLayer=new Ey("instance_".concat(Oy._instanceID),e),this._authenticationCore=new My(this._dataLayer,t),Oy._authenticationCore=new My(this._dataLayer,t)
19
17
  /**
20
18
  *
21
19
  * This method initializes the SDK with the config data.
@@ -34,906 +32,885 @@ function t(e,n){s(this,t),t._instanceID?t._instanceID+=1:t._instanceID=0,this._d
34
32
  * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
35
33
  *
36
34
  * @preserve
37
- */return m(t,[{key:"initialize",value:function(t){var e,n,r;return wF(this,void 0,void 0,a().mark((function i(){return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},tz),t),{scope:[].concat(W(null!==(e=tz.scope)&&void 0!==e?e:[]),W(null!==(r=null===(n=t.scope)||void 0===n?void 0:n.filter((function(t){var e;return!(null===(e=null==tz?void 0:tz.scope)||void 0===e?void 0:e.includes(t))})))&&void 0!==r?r:[]))}));case 2:case"end":return i.stop()}}),i,this)})))}
38
- /**
39
- * This method returns the `DataLayer` object that allows you to access authentication data.
40
- *
41
- * @return {DataLayer} - The `DataLayer` object.
42
- *
43
- * @example
44
- * ```
45
- * const data = auth.getDataLayer();
46
- * ```
47
- *
48
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDataLayer
49
- *
50
- * @memberof AsgardeoAuthClient
51
- *
52
- * @preserve
53
- */},{key:"getDataLayer",value:function(){return this._dataLayer}
54
- /**
55
- * This is an async method that returns a Promise that resolves with the authorization URL.
56
- *
57
- * @param {GetAuthURLConfig} config - (Optional) A config object to force initialization and pass
58
- * custom path parameters such as the fidp parameter.
59
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
60
- * scenarios where each user should be uniquely identified.
61
- *
62
- * @return {Promise<string>} - A promise that resolves with the authorization URL.
63
- *
64
- * @example
65
- * ```
66
- * auth.getAuthorizationURL().then((url)=>{
67
- * // console.log(url);
68
- * }).catch((error)=>{
69
- * // console.error(error);
70
- * });
71
- * ```
72
- *
73
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAuthorizationURL
74
- *
75
- * @memberof AsgardeoAuthClient
76
- *
77
- * @preserve
78
- */},{key:"getAuthorizationURL",value:function(t,e){return wF(this,void 0,void 0,a().mark((function n(){var r,i=this;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return null==(r=Object.assign({},t))||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,e),n.next=9;break;case 8:n.t0=this._authenticationCore.getOIDCProviderMetaData(null==t?void 0:t.forceInit).then((function(){return i._authenticationCore.getAuthorizationURL(r,e)}));case 9:return n.abrupt("return",n.t0);case 10:case"end":return n.stop()}}),n,this)})))}
79
- /**
80
- * This is an async method that sends a request to obtain the access token and returns a Promise
81
- * that resolves with the token and other relevant data.
82
- *
83
- * @param {string} authorizationCode - The authorization code.
84
- * @param {string} sessionState - The session state.
85
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
86
- * scenarios where each user should be uniquely identified.
87
- *
88
- * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
89
- *
90
- * @example
91
- * ```
92
- * auth.requestAccessToken(authCode, sessionState).then((token)=>{
93
- * // console.log(token);
94
- * }).catch((error)=>{
95
- * // console.error(error);
96
- * });
97
- * ```
98
- *
99
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestAccessToken
100
- *
101
- * @memberof AsgardeoAuthClient
102
- *
103
- * @preserve
104
- */},{key:"requestAccessToken",value:function(t,e,n,r){return wF(this,void 0,void 0,a().mark((function i(){var c=this;return a().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(t,e,n,r),i.next=7;break;case 6:i.t0=this._authenticationCore.getOIDCProviderMetaData(!1).then((function(){return c._authenticationCore.requestAccessToken(t,e,n,r)}));case 7:return i.abrupt("return",i.t0);case 8:case"end":return i.stop()}}),i,this)})))}
105
- /**
106
- * This method clears all authentication data and returns the sign-out URL.
107
- *
108
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
109
- * scenarios where each user should be uniquely identified.
110
- *
111
- * @return {Promise<string>} - A Promise that resolves with the sign-out URL.
112
- *
113
- * @example
114
- * ```
115
- * const signOutUrl = await auth.signOut();
116
- * ```
117
- *
118
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#signOut
119
- *
120
- * @memberof AsgardeoAuthClient
121
- *
122
- * @preserve
123
- */},{key:"signOut",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
124
- /**
125
- * This method returns the sign-out URL.
126
- *
127
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
128
- * scenarios where each user should be uniquely identified.
129
- *
130
- * **This doesn't clear the authentication data.**
131
- *
132
- * @return {Promise<string>} - A Promise that resolves with the sign-out URL.
133
- *
134
- * @example
135
- * ```
136
- * const signOutUrl = await auth.getSignOutURL();
137
- * ```
138
- *
139
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getSignOutURL
140
- *
141
- * @memberof AsgardeoAuthClient
142
- *
143
- * @preserve
144
- */},{key:"getSignOutURL",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
145
- /**
146
- * This method returns OIDC service endpoints that are fetched from the `.well-known` endpoint.
147
- *
148
- * @return {Promise<OIDCEndpoints>} - A Promise that resolves with an object containing the OIDC service endpoints.
149
- *
150
- * @example
151
- * ```
152
- * const endpoints = await auth.getOIDCServiceEndpoints();
153
- * ```
154
- *
155
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getOIDCServiceEndpoints
156
- *
157
- * @memberof AsgardeoAuthClient
158
- *
159
- * @preserve
160
- */},{key:"getOIDCServiceEndpoints",value:function(){return wF(this,void 0,void 0,a().mark((function t(){return a().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)})))}
161
- /**
162
- * This method decodes the payload of the ID token and returns it.
163
- *
164
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
165
- * scenarios where each user should be uniquely identified.
166
- *
167
- * @return {Promise<DecodedIDTokenPayload>} - A Promise that resolves with the decoded ID token payload.
168
- *
169
- * @example
170
- * ```
171
- * const decodedIdToken = await auth.getDecodedIDToken();
172
- * ```
173
- *
174
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDecodedIDToken
175
- *
176
- * @memberof AsgardeoAuthClient
177
- *
178
- * @preserve
179
- */},{key:"getDecodedIDToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
180
- /**
181
- * This method returns the ID token.
182
- *
183
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
184
- * scenarios where each user should be uniquely identified.
185
- *
186
- * @return {Promise<string>} - A Promise that resolves with the ID token.
187
- *
188
- * @example
189
- * ```
190
- * const idToken = await auth.getIDToken();
191
- * ```
192
- *
193
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
194
- *
195
- * @memberof AsgardeoAuthClient
196
- *
197
- * @preserve
198
- */},{key:"getIDToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
199
- /**
200
- * This method returns the basic user information obtained from the ID token.
201
- *
202
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
203
- * scenarios where each user should be uniquely identified.
204
- *
205
- * @return {Promise<BasicUserInfo>} - A Promise that resolves with an object containing the basic user information.
206
- *
207
- * @example
208
- * ```
209
- * const userInfo = await auth.getBasicUserInfo();
210
- * ```
211
- *
212
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getBasicUserInfo
213
- *
214
- * @memberof AsgardeoAuthClient
215
- *
216
- * @preserve
217
- */},{key:"getBasicUserInfo",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
218
- /**
219
- * This method returns the crypto helper object.
220
- *
221
- * @return {Promise<CryptoHelper>} - A Promise that resolves with a CryptoHelper object.
222
- *
223
- * @example
224
- * ```
225
- * const cryptoHelper = await auth.CryptoHelper();
226
- * ```
227
- *
228
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getCryptoHelper
229
- *
230
- * @memberof AsgardeoAuthClient
231
- *
232
- * @preserve
233
- */},{key:"getCryptoHelper",value:function(){return wF(this,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationCore.getCryptoHelper());case 1:case"end":return t.stop()}}),t,this)})))}
234
- /**
235
- * This method revokes the access token.
236
- *
237
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
238
- * scenarios where each user should be uniquely identified.
239
- *
240
- * **This method also clears the authentication data.**
241
- *
242
- * @return {Promise<FetchResponse>} - A Promise that returns the response of the revoke-access-token request.
243
- *
244
- * @example
245
- * ```
246
- * auth.revokeAccessToken().then((response)=>{
247
- * // console.log(response);
248
- * }).catch((error)=>{
249
- * // console.error(error);
250
- * });
251
- * ```
252
- *
253
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#revokeAccessToken
254
- *
255
- * @memberof AsgardeoAuthClient
256
- *
257
- * @preserve
258
- */},{key:"revokeAccessToken",value:function(t){return this._authenticationCore.revokeAccessToken(t)}
259
- /**
260
- * This method refreshes the access token and returns a Promise that resolves with the new access
261
- * token and other relevant data.
262
- *
263
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
264
- * scenarios where each user should be uniquely identified.
265
- *
266
- * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
267
- *
268
- * @example
269
- * ```
270
- * auth.refreshAccessToken().then((response)=>{
271
- * // console.log(response);
272
- * }).catch((error)=>{
273
- * // console.error(error);
274
- * });
275
- * ```
276
- *
277
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#refreshAccessToken
278
- *
279
- * @memberof AsgardeoAuthClient
280
- *
281
- * @preserve
282
- */},{key:"refreshAccessToken",value:function(t){return this._authenticationCore.refreshAccessToken(t)}
283
- /**
284
- * This method returns the access token.
285
- *
286
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
287
- * scenarios where each user should be uniquely identified.
288
- *
289
- * @return {Promise<string>} - A Promise that resolves with the access token.
290
- *
291
- * @example
292
- * ```
293
- * const accessToken = await auth.getAccessToken();
294
- * ```
295
- *
296
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAccessToken
297
- *
298
- * @memberof AsgardeoAuthClient
299
- *
300
- * @preserve
301
- */},{key:"getAccessToken",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
302
- /**
303
- * This method sends a custom-grant request and returns a Promise that resolves with the response
304
- * depending on the config passed.
305
- *
306
- * @param {CustomGrantConfig} config - A config object containing the custom grant configurations.
307
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
308
- * scenarios where each user should be uniquely identified.
309
- *
310
- * @return {Promise<TokenResponse | FetchResponse>} - A Promise that resolves with the response depending
311
- * on your configurations.
312
- *
313
- * @example
314
- * ```
315
- * const config = {
316
- * attachToken: false,
317
- * data: {
318
- * client_id: "{{clientID}}",
319
- * grant_type: "account_switch",
320
- * scope: "{{scope}}",
321
- * token: "{{token}}",
322
- * },
323
- * id: "account-switch",
324
- * returnResponse: true,
325
- * returnsSession: true,
326
- * signInRequired: true
327
- * }
328
- *
329
- * auth.requestCustomGrant(config).then((response)=>{
330
- * // console.log(response);
331
- * }).catch((error)=>{
332
- * // console.error(error);
333
- * });
334
- * ```
335
- *
336
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestCustomGrant
337
- *
338
- * @memberof AsgardeoAuthClient
339
- *
340
- * @preserve
341
- */},{key:"requestCustomGrant",value:function(t,e){return this._authenticationCore.requestCustomGrant(t,e)}
342
- /**
343
- * This method returns if the user is authenticated or not.
344
- *
345
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
346
- * scenarios where each user should be uniquely identified.
347
- *
348
- * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated, `false` otherwise.
349
- *
350
- * @example
351
- * ```
352
- * await auth.isAuthenticated();
353
- * ```
354
- *
355
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isAuthenticated
356
- *
357
- * @memberof AsgardeoAuthClient
358
- *
359
- * @preserve
360
- */},{key:"isAuthenticated",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
361
- /**
362
- * This method returns the PKCE code generated during the generation of the authentication URL.
363
- *
364
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
365
- * scenarios where each user should be uniquely identified.
366
- * @param {string} state - The state parameter that was passed in the authentication URL.
367
- *
368
- * @return {Promise<string>} - A Promise that resolves with the PKCE code.
369
- *
370
- * @example
371
- * ```
372
- * const pkce = await getPKCECode();
373
- * ```
374
- *
375
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getPKCECode
376
- *
377
- * @memberof AsgardeoAuthClient
378
- *
379
- * @preserve
380
- */},{key:"getPKCECode",value:function(t,e){return wF(this,void 0,void 0,a().mark((function n(){return a().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)})))}
381
- /**
382
- * This method sets the PKCE code to the data store.
383
- *
384
- * @param {string} pkce - The PKCE code.
385
- * @param {string} state - The state parameter that was passed in the authentication URL.
386
- * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
387
- * scenarios where each user should be uniquely identified.
388
- *
389
- * @example
390
- * ```
391
- * await auth.setPKCECode("pkce_code")
392
- * ```
393
- *
394
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#setPKCECode
395
- *
396
- * @memberof AsgardeoAuthClient
397
- *
398
- * @preserve
399
- */},{key:"setPKCECode",value:function(t,e,n){return wF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,this._authenticationCore.setPKCECode(t,e,n);case 2:case"end":return r.stop()}}),r,this)})))}
400
- /**
401
- * This method returns if the sign-out is successful or not.
402
- *
403
- * @param {string} signOutRedirectUrl - The URL to which the user has been redirected to after signing-out.
404
- *
405
- * **The server appends path parameters to the `signOutRedirectURL` and these path parameters
406
- * are required for this method to function.**
407
- *
408
- * @return {boolean} - `true` if successful, `false` otherwise.
409
- *
410
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isSignOutSuccessful
411
- *
412
- * @memberof AsgardeoAuthClient
413
- *
414
- * @preserve
415
- */},{key:"updateConfig",value:
416
- /**
417
- * This method updates the configuration that was passed into the constructor when instantiating this class.
418
- *
419
- * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
420
- *
421
- * @example
422
- * ```
423
- * const config = {
424
- * signInRedirectURL: "http://localhost:3000/sign-in",
425
- * clientID: "client ID",
426
- * baseUrl: "https://localhost:9443"
427
- * }
428
- *
429
- * await auth.updateConfig(config);
430
- * ```
431
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#updateConfig
432
- *
433
- * @memberof AsgardeoAuthClient
434
- *
435
- * @preserve
436
- */
437
- function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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"),r=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&!r}
438
- /**
439
- * This method returns if the sign-out has failed or not.
440
- *
441
- * @param {string} signOutRedirectUrl - The URL to which the user has been redirected to after signing-out.
442
- *
443
- * **The server appends path parameters to the `signOutRedirectURL` and these path parameters
444
- * are required for this method to function.**
445
- *
446
- * @return {boolean} - `true` if successful, `false` otherwise.
447
- *
448
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#didSignOutFail
449
- *
450
- * @memberof AsgardeoAuthClient
451
- *
452
- * @preserve
453
- */},{key:"didSignOutFail",value:function(t){var e=new URL(t),n=e.searchParams.get("state"),r=Boolean(e.searchParams.get("error"));return!!n&&"sign_out_success"===n&&r}},{key:"clearUserSessionData",value:function(t){return wF(this,void 0,void 0,a().mark((function e(){return a().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 nz(t,e,n){var r=void 0===e?null:e,i=function(t,e){var n=atob(t);if(e){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}(t,void 0!==n&&n),c=i.indexOf("\n",10)+1,a=i.substring(c)+(r?"//# sourceMappingURL="+r:""),o=new Blob([a],{type:"application/javascript"});return URL.createObjectURL(o)}var rz,iz,cz,az,oz,lz,uz=(rz="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gdCh0KXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbcl0/YXJndW1lbnRzW3JdOnt9O3IlMj9lKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yyh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6ZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiByKCl7Ci8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi8Kcj1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgZT17fSx0PU9iamVjdC5wcm90b3R5cGUsbj10Lmhhc093blByb3BlcnR5LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsbz1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7dSh7fSwiIil9Y2F0Y2goZSl7dT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gYyhlLHQscixuKXt2YXIgYT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIGg/dDpoLGk9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbz1uZXcgUyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybiBUKCl9Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPWsobyxyKTtpZihzKXtpZihzPT09bCljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciB1PWYoZSx0LHIpO2lmKCJub3JtYWwiPT09dS50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLHUuYXJnPT09bCljb250aW51ZTtyZXR1cm57dmFsdWU6dS5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT11LnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9dS5hcmcpfX19KGUscixvKSxpfWZ1bmN0aW9uIGYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgbD17fTtmdW5jdGlvbiBoKCl7fWZ1bmN0aW9uIHAoKXt9ZnVuY3Rpb24gZCgpe312YXIgdj17fTt1KHYsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgZz1PYmplY3QuZ2V0UHJvdG90eXBlT2YseT1nJiZnKGcoRShbXSkpKTt5JiZ5IT09dCYmbi5jYWxsKHksaSkmJih2PXkpO3ZhciBtPWQucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodik7ZnVuY3Rpb24gdyhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3UoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gYihlLHQpe2Z1bmN0aW9uIHIoYSxpLG8scyl7dmFyIHU9ZihlW2FdLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsbD1jLnZhbHVlO3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGwmJm4uY2FsbChsLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGwuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLG8scyl9KSk6dC5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxvKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxvLHMpfSkpfXModS5hcmcpfXZhciBhO3RoaXMuX2ludm9rZT1mdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQsYSl7cihlLG4sdCxhKX0pKX1yZXR1cm4gYT1hP2EudGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gayhlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLGsoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBsO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBsfXZhciBuPWYocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxsO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGwpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsbCl9ZnVuY3Rpb24geChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBfKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBTKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goeCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBFKGUpe2lmKGUpe3ZhciB0PWVbaV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIHI9LTEsYT1mdW5jdGlvbiB0KCl7Zm9yKDsrK3I8ZS5sZW5ndGg7KWlmKG4uY2FsbChlLHIpKXJldHVybiB0LnZhbHVlPWVbcl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gYS5uZXh0PWF9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBwLnByb3RvdHlwZT1kLHUobSwiY29uc3RydWN0b3IiLGQpLHUoZCwiY29uc3RydWN0b3IiLHApLHAuZGlzcGxheU5hbWU9dShkLHMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhdCYmKHQ9PT1wfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KHQuZGlzcGxheU5hbWV8fHQubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxkKTooZS5fX3Byb3RvX189ZCx1KGUscywiR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx3KGIucHJvdG90eXBlKSx1KGIucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPWIsZS5hc3luYz1mdW5jdGlvbih0LHIsbixhLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBvPW5ldyBiKGModCxyLG4sYSksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdyhtKSx1KG0scywiR2VuZXJhdG9yIiksdShtLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdShtLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LGUudmFsdWVzPUUsUy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChfKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gcigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9bi5jYWxsKGksImNhdGNoTG9jIiksdT1uLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJnUpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW3JdO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJm4uY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxsKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGx9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksXyhyKSxsfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO18ocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpFKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxsfX0sZX1mdW5jdGlvbiBuKGUpe3JldHVybiBuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxuKGUpfWZ1bmN0aW9uIGEoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksdT1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixhKX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGkpe3ZhciBvPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBzKGUpe2EobyxuLGkscyx1LCJuZXh0IixlKX1mdW5jdGlvbiB1KGUpe2EobyxuLGkscyx1LCJ0aHJvdyIsZSl9cyh2b2lkIDApfSkpfX1mdW5jdGlvbiBvKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiB0JiZzKGUucHJvdG90eXBlLHQpLHImJnMoZSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIGYoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmaChlLHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9LGwoZSl9ZnVuY3Rpb24gaChlLHQpe3JldHVybiBoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0saChlLHQpfWZ1bmN0aW9uIHAoKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIFJlZmxlY3R8fCFSZWZsZWN0LmNvbnN0cnVjdClyZXR1cm4hMTtpZihSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBkPXAoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtudWxsXTtuLnB1c2guYXBwbHkobix0KTt2YXIgYT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShlLG4pKTtyZXR1cm4gciYmaChhLHIucHJvdG90eXBlKSxhfSxkLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiB2KGUpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIHY9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fChyPWUsLTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKHIpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSkpcmV0dXJuIGU7dmFyIHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT10KXtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7dC5zZXQoZSxuKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGQoZSxhcmd1bWVudHMsbCh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGgobixlKX0sdihlKX1mdW5jdGlvbiBnKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiB5KGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZyhlKX1mdW5jdGlvbiBtKGUpe3ZhciB0PXAoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuPWwoZSk7aWYodCl7dmFyIGE9bCh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KG4sYXJndW1lbnRzLGEpfWVsc2Ugcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4geSh0aGlzLHIpfX1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPW51bGw9PWU/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlWyJAQGl0ZXJhdG9yIl07aWYobnVsbD09cilyZXR1cm47dmFyIG4sYSxpPVtdLG89ITAscz0hMTt0cnl7Zm9yKHI9ci5jYWxsKGUpOyEobz0obj1yLm5leHQoKSkuZG9uZSkmJihpLnB1c2gobi52YWx1ZSksIXR8fGkubGVuZ3RoIT09dCk7bz0hMCk7fWNhdGNoKGUpe3M9ITAsYT1lfWZpbmFsbHl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX1yZXR1cm4gaX0oZSx0KXx8ayhlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geChlKX0oZSl8fGZ1bmN0aW9uKGUpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGsoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gayhlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4geChlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP3goZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIHgoZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBfKGUsdCl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KGUpfHwocj1rKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7ciYmKGU9cik7dmFyIG49MCxhPWZ1bmN0aW9uKCl7fTtyZXR1cm57czphLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbbisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjphfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGksbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwoZSl9LG46ZnVuY3Rpb24oKXt2YXIgZT1yLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXtzPSEwLGk9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgaX19fX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihhLGkpe2Z1bmN0aW9uIG8oZSl7dHJ5e3Uobi5uZXh0KGUpKX1jYXRjaChlKXtpKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXt1KG4udGhyb3coZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUoZSl7dmFyIHQ7ZS5kb25lP2EoZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKG8scyl9dSgobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGEsaSl7ZnVuY3Rpb24gbyhlKXt0cnl7dShuLm5leHQoZSkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e3Uobi50aHJvdyhlKSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gdShlKXt2YXIgdDtlLmRvbmU/YShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiByP3Q6bmV3IHIoKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4obyxzKX11KChuPW4uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9dmFyIFQ7IWZ1bmN0aW9uKGUpe2UuZm9ybVBvc3Q9ImZvcm1fcG9zdCIsZS5xdWVyeT0icXVlcnkifShUfHwoVD17fSkpO3ZhciBBOyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oQXx8KEE9e30pKTt2YXIgUixDPSJyZWZyZXNoX3Rva2VuX3RpbWVyIixQPVsiUlMyNTYiLCJSUzUxMiIsIlJTMzg0IiwiUFMyNTYiXSxEPSJzaWduX291dF91cmwiLE89InNpZ25fb3V0X3N1Y2Nlc3MiOyFmdW5jdGlvbihlKXtlLkluY2x1ZGU9ImluY2x1ZGUiLGUuU2FtZU9yaWdpbj0ic2FtZS1vcmlnaW4iLGUuT21pdD0ib21pdCJ9KFJ8fChSPXt9KSk7dmFyIEk9dSgoZnVuY3Rpb24gZSh0LHIsbil7byh0aGlzLGUpLHRoaXMubWVzc2FnZT1uLHRoaXMubmFtZT1yLHRoaXMuY29kZT10LE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCh0aGlzIGluc3RhbmNlb2YgZT90aGlzLmNvbnN0cnVjdG9yOnZvaWQgMCkucHJvdG90eXBlKX0pKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKX1yZXR1cm4gdShlLG51bGwsW3trZXk6ImZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO3ZhciByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD13KGUsMiksbj10WzBdLGE9dFsxXSxpPW4uc3BsaXQoIl8iKS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKV0uY29uY2F0KGIoZS5zbGljZSgxKSkpLmpvaW4oIiIpfSkpLmpvaW4oIiIpO3JbaV09YX0pKSxyfX0se2tleToiZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19fSx7a2V5OiJnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD8iIi5jb25jYXQodCwiX3JlcXVlc3RfIikuY29uY2F0KHIpOiJyZXF1ZXN0XyIuY29uY2F0KHIpfX0se2tleToiZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuInBrY2VfY29kZV92ZXJpZmllciMiLmNvbmNhdChwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKSl9fV0pLGV9KCk7TC5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIixyPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O3ZhciBVLEgsTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgYT10aGlzO28odGhpcyxlKSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gRShhLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gRShhLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9LHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJldHVybiB1KGUsW3trZXk6InJlc29sdmVFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuLGE7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gbj17fSx0Lm5leHQ9Myx0aGlzLl9jb25maWcoKTtjYXNlIDM6cmV0dXJuIGE9dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLChhLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoYS5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO25bdF09KG51bGw9PWE/dm9pZCAwOmEuZW5kcG9pbnRzKT9hLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksbikpKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LG4sYTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXt9LGUubmV4dD0zLHRoaXMuX2NvbmZpZygpO2Nhc2UgMzppZihuPWUuc2VudCxhPVsiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIsImVuZF9zZXNzaW9uX2VuZHBvaW50Iiwiandrc191cmkiLCJjaGVja19zZXNzaW9uX2lmcmFtZSIsInJldm9jYXRpb25fZW5kcG9pbnQiLCJ0b2tlbl9lbmRwb2ludCIsImlzc3VlciIsInVzZXJpbmZvX2VuZHBvaW50Il0sbi5lbmRwb2ludHMmJk9iamVjdC5rZXlzKG51bGw9PW4/dm9pZCAwOm4uZW5kcG9pbnRzKS5ldmVyeSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChmdW5jdGlvbihlKXtyZXR1cm4iXyIuY29uY2F0KGUudG9Mb3dlckNhc2UoKSl9KSk7cmV0dXJuIGEuaW5jbHVkZXModCl9KSkpe2UubmV4dD03O2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0hFTFBFUi1SRUUtTkYwMSIsIk5vIHJlcXVpcmVkIGVuZHBvaW50cy4iLCJSZXF1aXJlZCBvaWRjIGVuZHBvaW50cyBhcmUgbm90IGRlZmluZWQiKTtjYXNlIDc6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLChuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO3Rbcl09KG51bGw9PW4/dm9pZCAwOm4uZW5kcG9pbnRzKT9uLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKHt9LHQpKSk7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LG4sYSxpO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9e30sZS5uZXh0PTMsdGhpcy5fY29uZmlnKCk7Y2FzZSAzOmlmKG49ZS5zZW50LGE9bi5iYXNlVXJsKXtlLm5leHQ9NzticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9IRUxQRVJfUkVCTy1ORjAxIiwiQmFzZSBVUkwgbm90IGRlZmluZWQuIiwiQmFzZSBVUkwgaXMgbm90IGRlZmluZWQgaW4gQXV0aENsaWVudCBjb25maWcuIik7Y2FzZSA3OnJldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWUucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpO3Rbcl09KG51bGw9PW4/dm9pZCAwOm4uZW5kcG9pbnRzKT9uLmVuZHBvaW50c1tlXToiIn0pKSxpPXthdXRob3JpemF0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChhKS5jb25jYXQoIi9vYXV0aDIvYXV0aG9yaXplIiksZW5kX3Nlc3Npb25fZW5kcG9pbnQ6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29pZGMvbG9nb3V0IiksaXNzdWVyOiIiLmNvbmNhdChhKS5jb25jYXQoIi9vYXV0aDIvdG9rZW4iKSxqd2tzX3VyaToiIi5jb25jYXQoYSkuY29uY2F0KCIvb2F1dGgyL2p3a3MiKSxjaGVja19zZXNzaW9uX2lmcmFtZToiIi5jb25jYXQoYSkuY29uY2F0KCIvb2lkYy9jaGVja3Nlc3Npb24iKSxyZXZvY2F0aW9uX2VuZHBvaW50OiIiLmNvbmNhdChhKS5jb25jYXQoIi9vYXV0aDIvcmV2b2tlIiksdG9rZW5fZW5kcG9pbnQ6IiIuY29uY2F0KGEpLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLHVzZXJpbmZvX2VuZHBvaW50OiIiLmNvbmNhdChhKS5jb25jYXQoIi9vYXV0aDIvdXNlcmluZm8iKX0sZS5hYnJ1cHQoInJldHVybiIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHQpKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJ2YWxpZGF0ZUlkVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuLGEsaSxvLHMsdSxjO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQuandrc191cmksdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKGE9dC5zZW50LG4mJjAhPT1uLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXRocm93IG5ldyBJKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuIHQucHJldj04LHQubmV4dD0xMSxmZXRjaChuLHtjcmVkZW50aWFsczphLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9SLkluY2x1ZGU6Ui5TYW1lT3JpZ2lufSk7Y2FzZSAxMTppPXQuc2VudCx0Lm5leHQ9MTc7YnJlYWs7Y2FzZSAxNDp0aHJvdyB0LnByZXY9MTQsdC50MD10LmNhdGNoKDgpLG5ldyBJKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10LnQwP3QudDA6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIik7Y2FzZSAxNzppZigyMDA9PT1pLnN0YXR1cyYmaS5vayl7dC5uZXh0PTI0O2JyZWFrfXJldHVybiB0LnQxPUksdC50Mj0iSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoIi5jb25jYXQoaS5zdGF0dXNUZXh0LCIpLiIpLHQubmV4dD0yMixpLmpzb24oKTtjYXNlIDIyOnRocm93IHQudDM9dC5zZW50LG5ldyB0LnQxKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsdC50Mix0LnQzKTtjYXNlIDI0OnJldHVybiB0Lm5leHQ9MjYsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI2OnJldHVybiBvPXQuc2VudC5pc3N1ZXIsdC5uZXh0PTI5LGkuanNvbigpO2Nhc2UgMjk6cmV0dXJuIHM9dC5zZW50LHU9cy5rZXlzLHQubmV4dD0zMyx0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdSk7Y2FzZSAzMzpyZXR1cm4gYz10LnNlbnQsdC50ND10aGlzLl9jcnlwdG9IZWxwZXIsdC50NT1lLHQudDY9Yyx0Lm5leHQ9MzksdGhpcy5fY29uZmlnKCk7Y2FzZSAzOTpyZXR1cm4gdC50Nz10LnNlbnQuY2xpZW50SUQsdC50OD1udWxsIT1vP286IiIsdC50OT10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsdC5uZXh0PTQ0LHRoaXMuX2NvbmZpZygpO2Nhc2UgNDQ6cmV0dXJuIHQudDEwPXQuc2VudC5jbG9ja1RvbGVyYW5jZSx0LmFicnVwdCgicmV0dXJuIix0LnQ0LmlzVmFsaWRJZFRva2VuLmNhbGwodC50NCx0LnQ1LHQudDYsdC50Nyx0LnQ4LHQudDksdC50MTApKTtjYXNlIDQ2OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzLFtbOCwxNF1dKX0pKSl9fSx7a2V5OiJnZXRBdXRoZW50aWNhdGVkVXNlckluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGk9dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSksbz1MLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChpKSxzPW51bGwhPT0odD1udWxsPT1pP3ZvaWQgMDppLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPWkuZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixjPW51bGwhPT0obj1pLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGY9dSYmYz8iIi5jb25jYXQodSwiICIpLmNvbmNhdChjKTp1fHxjfHwiIixsPW51bGwhPT0oYT1pLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWE/YTpmO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpsLHRlbmFudERvbWFpbjpvLHVzZXJuYW1lOnN9LEwuZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGkpKX19LHtrZXk6InJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGEoKXt2YXIgaSxvLHM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gaT0ib3BlbmlkIixyLm5leHQ9Myx0aGlzLl9jb25maWcoKTtjYXNlIDM6cmV0dXJuIG89ci5zZW50LHIubmV4dD02LHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSh0KTtjYXNlIDY6cmV0dXJuIHM9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLChvLnNjb3BlJiZvLnNjb3BlLmxlbmd0aD4wJiYoby5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fG8uc2NvcGUucHVzaCgib3BlbmlkIiksaT1vLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLHMuYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKHMuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLGkpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsby5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShuPW8uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09bj9uOiIiKSkpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToiY2xlYXJVc2VyU2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpO2Nhc2UgMjpyZXR1cm4gdC5uZXh0PTQsdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiaGFuZGxlVG9rZW5SZXNwb25zZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgYSxpLG89dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOmlmKDIwMD09PWUuc3RhdHVzJiZlLm9rKXtuLm5leHQ9NzticmVha31yZXR1cm4gbi50MD1JLG4udDE9IkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgiLmNvbmNhdChlLnN0YXR1c1RleHQsIikuIiksbi5uZXh0PTUsZS5qc29uKCk7Y2FzZSA1OnRocm93IG4udDI9bi5zZW50LG5ldyBuLnQwKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsbi50MSxuLnQyKTtjYXNlIDc6cmV0dXJuIG4ubmV4dD05LGUuanNvbigpO2Nhc2UgOTpyZXR1cm4oYT1uLnNlbnQpLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksbi5uZXh0PTEzLHRoaXMuX2NvbmZpZygpO2Nhc2UgMTM6aWYoIW4uc2VudC52YWxpZGF0ZUlEVG9rZW4pe24ubmV4dD0xNTticmVha31yZXR1cm4gbi5hYnJ1cHQoInJldHVybiIsdGhpcy52YWxpZGF0ZUlkVG9rZW4oYS5pZF90b2tlbikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gRShvLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgbjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoYSx0KTtjYXNlIDI6cmV0dXJuIG49e2FjY2Vzc1Rva2VuOmEuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDphLmNyZWF0ZWRfYXQsZXhwaXJlc0luOmEuZXhwaXJlc19pbixpZFRva2VuOmEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmEucmVmcmVzaF90b2tlbixzY29wZTphLnNjb3BlLHRva2VuVHlwZTphLnRva2VuX3R5cGV9LGUuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVzb2x2ZShuKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSkpO2Nhc2UgMTU6cmV0dXJuIGk9e2FjY2Vzc1Rva2VuOmEuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDphLmNyZWF0ZWRfYXQsZXhwaXJlc0luOmEuZXhwaXJlc19pbixpZFRva2VuOmEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmEucmVmcmVzaF90b2tlbixzY29wZTphLnNjb3BlLHRva2VuVHlwZTphLnRva2VuX3R5cGV9LG4ubmV4dD0xOCx0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoYSx0KTtjYXNlIDE4OnJldHVybiBuLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoaSkpO2Nhc2UgMTk6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6ImdlbmVyYXRlUEtDRUtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGEsaSxvO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpO2Nhc2UgMjpyZXR1cm4gYT1yLnNlbnQsaT1bXSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZpLnB1c2goZSl9KSksbz1pLnNvcnQoKS5wb3AoKSxyLmFicnVwdCgicmV0dXJuIiwicGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KG51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT10P3Q6Ii0xIikrMSkpO2Nhc2UgNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX1dKSxlfSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe28odGhpcyxlKSx0aGlzLl9jcnlwdG9VdGlscz10fXJldHVybiB1KGUsW3trZXk6ImdldENvZGVWZXJpZmllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX19LHtrZXk6ImdldENvZGVDaGFsbGVuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9fSx7a2V5OiJnZXRKV0tGb3JUaGVJZFRva2VuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpLGE9Xyh0KTt0cnl7Zm9yKGEucygpOyEocj1hLm4oKSkuZG9uZTspe3ZhciBpPXIudmFsdWU7aWYobi5raWQ9PT1pLmtpZClyZXR1cm4gaX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dGhyb3cgbmV3IEkoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrbi5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5raWR9KSkuam9pbigiLCAiKSl9fSx7a2V5OiJpc1ZhbGlkSWRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LFAscixuLGEsaSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgSSgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIj09PShudWxsPT1lP3ZvaWQgMDplLmNvZGUpJiYibmJmIj09PShudWxsPT1lP3ZvaWQgMDplLmNsYWltKT9Qcm9taXNlLnJlamVjdChuZXcgSSgiSlMtQ1JZUFRPX1VUSUxTLUlWSVQtSVYwMiIsIkpXVCBOQkYgQ0xBSU0gVkFMSURBVElPTiBGQUlMRUQiLCJKV1QgTkJGIGNsYWltIHZhbGlkYXRpb24gaGFzIGJlZW4gZmFpbGVkIikpOlByb21pc2UucmVqZWN0KG5ldyBJKCJKUy1DUllQVE9fVVRJTFMtSVZJVC1JVjAzIiwiSldUIFZBTElEQVRJT04gRkFJTEVEIiwiSldUIHZhbGlkYXRpb24gaGFzIGJlZW4gZmFpbGVkIikpfSkpfX0se2tleToiZGVjb2RlSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBJKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19XSksZX0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3ZhciBhPXRoaXM7byh0aGlzLGUpLHRoaXMuX2NyeXB0b1V0aWxzPW4sdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBqKG4pLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBNKHQsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9dCx0aGlzLl9jb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gRShhLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0sdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gRShhLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fXJldHVybiB1KGUsW3trZXk6ImdldEF1dGhvcml6YXRpb25VUkwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4sYSxpO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbygpe3ZhciBzLHUsYyxmLGwsaCxwLGQsdixnLHksbSxiLGsseCxTLEUsVCxBLFI7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iik7Y2FzZSAyOnJldHVybiBzPXIuc2VudCxyLm5leHQ9NSx0aGlzLl9jb25maWcoKTtjYXNlIDU6aWYodT1yLnNlbnQscyYmMCE9PXMudHJpbSgpLmxlbmd0aCl7ci5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSA4OnJldHVybiBjPW5ldyBVUkwocyksKGY9bmV3IE1hcCkuc2V0KCJyZXNwb25zZV90eXBlIiwiY29kZSIpLGYuc2V0KCJjbGllbnRfaWQiLHUuY2xpZW50SUQpLGw9Im9wZW5pZCIsdS5zY29wZSYmdS5zY29wZS5sZW5ndGg+MCYmKHUuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHx1LnNjb3BlLnB1c2goIm9wZW5pZCIpLGw9dS5zY29wZS5qb2luKCIgIikpLGYuc2V0KCJzY29wZSIsbCksZi5zZXQoInJlZGlyZWN0X3VyaSIsdS5zaWduSW5SZWRpcmVjdFVSTCksdS5yZXNwb25zZU1vZGUmJmYuc2V0KCJyZXNwb25zZV9tb2RlIix1LnJlc3BvbnNlTW9kZSksci5uZXh0PTE0LHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleSh0KTtjYXNlIDE0OmlmKGg9ci5zZW50LCF1LmVuYWJsZVBLQ0Upe3IubmV4dD0yMTticmVha31yZXR1cm4gcD1udWxsPT09KG49dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXRDb2RlVmVyaWZpZXIoKSxkPW51bGw9PT0oYT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmdldENvZGVDaGFsbGVuZ2UocCksci5uZXh0PTE5LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgscCx0KTtjYXNlIDE5OmYuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2IiksZi5zZXQoImNvZGVfY2hhbGxlbmdlIixkKTtjYXNlIDIxOmlmKHUucHJvbXB0JiZmLnNldCgicHJvbXB0Iix1LnByb21wdCksdj1lKWZvcihnPTAseT1PYmplY3QuZW50cmllcyh2KTtnPHkubGVuZ3RoO2crKyltPXcoeVtnXSwyKSxiPW1bMF0saz1tWzFdLCIiIT1iJiYiIiE9ayYmInN0YXRlIiE9PWImJih4PWIucmVwbGFjZSgvW0EtWl0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIl8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpfSkpLGYuc2V0KHgsay50b1N0cmluZygpKSk7Zi5zZXQoInN0YXRlIixMLmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLHY/bnVsbD09PShpPXYuc3RhdGUpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnRvU3RyaW5nKCk6IiIpKSxTPV8oZi5lbnRyaWVzKCkpO3RyeXtmb3IoUy5zKCk7IShFPVMubigpKS5kb25lOylUPXcoRS52YWx1ZSwyKSxBPVRbMF0sUj1UWzFdLGMuc2VhcmNoUGFyYW1zLmFwcGVuZChBLFIpfWNhdGNoKGUpe1MuZShlKX1maW5hbGx5e1MuZigpfXJldHVybiByLmFicnVwdCgicmV0dXJuIixjLnRvU3RyaW5nKCkpO2Nhc2UgMjg6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxvLHRoaXMpfSkpKX19LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBpKCl7dmFyIG8scyx1LGMsZjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbz1yLnNlbnQudG9rZW5fZW5kcG9pbnQsci5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKHM9ci5zZW50LG8mJjAhPT1vLnRyaW0oKS5sZW5ndGgpe3IubmV4dD04O2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2Nhc2UgODppZihyLnQwPXQsIXIudDApe3IubmV4dD0xMjticmVha31yZXR1cm4gci5uZXh0PTEyLHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCxhKTtjYXNlIDEyOmlmKCh1PVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQocy5jbGllbnRJRCkpLHMuY2xpZW50U2VjcmV0JiZzLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnUucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChzLmNsaWVudFNlY3JldCkpLGM9ZSx1LnB1c2goImNvZGU9Ii5jb25jYXQoYykpLHUucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSx1LnB1c2goInJlZGlyZWN0X3VyaT0iLmNvbmNhdChzLnNpZ25JblJlZGlyZWN0VVJMKSksci50MT1zLmVuYWJsZVBLQ0UsIXIudDEpe3IubmV4dD0yOTticmVha31yZXR1cm4gci50Mj11LHIudDM9ImNvZGVfdmVyaWZpZXI9IixyLm5leHQ9MjQsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGEpO2Nhc2UgMjQ6cmV0dXJuIHIudDQ9ci5zZW50LHIudDU9ci50My5jb25jYXQuY2FsbChyLnQzLHIudDQpLHIudDIucHVzaC5jYWxsKHIudDIsci50NSksci5uZXh0PTI5LHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKEwuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxhKTtjYXNlIDI5OnJldHVybiByLnByZXY9Mjksci5uZXh0PTMyLGZldGNoKG8se2JvZHk6dS5qb2luKCImIiksY3JlZGVudGlhbHM6cy5zZW5kQ29va2llc0luUmVxdWVzdHM/Ui5JbmNsdWRlOlIuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKEwuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSk7Y2FzZSAzMjpmPXIuc2VudCxyLm5leHQ9Mzg7YnJlYWs7Y2FzZSAzNTp0aHJvdyByLnByZXY9MzUsci50Nj1yLmNhdGNoKDI5KSxuZXcgSSgiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9ci50Nj9yLnQ2OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpO2Nhc2UgMzg6aWYoZi5vayl7ci5uZXh0PTQ1O2JyZWFrfXJldHVybiByLnQ3PUksci50OD0iUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoZi5zdGF0dXNUZXh0KSxyLm5leHQ9NDMsZi5qc29uKCk7Y2FzZSA0Mzp0aHJvdyByLnQ5PXIuc2VudCxuZXcgci50NygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsci50OCxyLnQ5KTtjYXNlIDQ1OnJldHVybiByLm5leHQ9NDcsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShmLGEpO2Nhc2UgNDc6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHIuc2VudCk7Y2FzZSA0ODpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyxbWzI5LDM1XV0pfSkpKX19LHtrZXk6InJlZnJlc2hBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYSxpLG8scztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQudG9rZW5fZW5kcG9pbnQsdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OnJldHVybiBhPXQuc2VudCx0Lm5leHQ9OCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSA4OmlmKChpPXQuc2VudCkucmVmcmVzaF90b2tlbil7dC5uZXh0PTExO2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2Nhc2UgMTE6aWYobiYmMCE9PW4udHJpbSgpLmxlbmd0aCl7dC5uZXh0PTEzO2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSAxMzpyZXR1cm4obz1bXSkucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KGEuY2xpZW50SUQpKSxvLnB1c2goInJlZnJlc2hfdG9rZW49Ii5jb25jYXQoaS5yZWZyZXNoX3Rva2VuKSksby5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxhLmNsaWVudFNlY3JldCYmYS5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZvLnB1c2goImNsaWVudF9zZWNyZXQ9Ii5jb25jYXQoYS5jbGllbnRTZWNyZXQpKSx0LnByZXY9MTUsdC5uZXh0PTE4LGZldGNoKG4se2JvZHk6by5qb2luKCImIiksY3JlZGVudGlhbHM6YS5zZW5kQ29va2llc0luUmVxdWVzdHM/Ui5JbmNsdWRlOlIuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKEwuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSk7Y2FzZSAxODpzPXQuc2VudCx0Lm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTp0aHJvdyB0LnByZXY9MjEsdC50MD10LmNhdGNoKDE1KSxuZXcgSSgiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dC50MD90LnQwOiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpO2Nhc2UgMjQ6aWYocy5vayl7dC5uZXh0PTMxO2JyZWFrfXJldHVybiB0LnQxPUksdC50Mj0iUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQocy5zdGF0dXNUZXh0KSx0Lm5leHQ9Mjkscy5qc29uKCk7Y2FzZSAyOTp0aHJvdyB0LnQzPXQuc2VudCxuZXcgdC50MSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsdC50Mix0LnQzKTtjYXNlIDMxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKHMsZSkpO2Nhc2UgMzI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxNSwyMV1dKX0pKSl9fSx7a2V5OiJyZXZva2VBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYSxpLG87cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIG49dC5zZW50LnJldm9jYXRpb25fZW5kcG9pbnQsdC5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKGE9dC5zZW50LG4mJjAhPT1uLnRyaW0oKS5sZW5ndGgpe3QubmV4dD04O2JyZWFrfXRocm93IG5ldyBJKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y2FzZSA4OnJldHVybihpPVtdKS5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoYS5jbGllbnRJRCkpLHQudDA9aSx0LnQxPSJ0b2tlbj0iLHQubmV4dD0xNCx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSAxNDpyZXR1cm4gdC50Mj10LnNlbnQuYWNjZXNzX3Rva2VuLHQudDM9dC50MS5jb25jYXQuY2FsbCh0LnQxLHQudDIpLHQudDAucHVzaC5jYWxsKHQudDAsdC50MyksaS5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIiksdC5wcmV2PTE4LHQubmV4dD0yMSxmZXRjaChuLHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOmEuc2VuZENvb2tpZXNJblJlcXVlc3RzP1IuSW5jbHVkZTpSLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhMLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pO2Nhc2UgMjE6bz10LnNlbnQsdC5uZXh0PTI3O2JyZWFrO2Nhc2UgMjQ6dGhyb3cgdC5wcmV2PTI0LHQudDQ9dC5jYXRjaCgxOCksbmV3IEkoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQudDQ/dC50NDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIik7Y2FzZSAyNzppZigyMDA9PT1vLnN0YXR1cyYmby5vayl7dC5uZXh0PTM0O2JyZWFrfXJldHVybiB0LnQ1PUksdC50Nj0iSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoIi5jb25jYXQoby5zdGF0dXNUZXh0LCIpLiIpLHQubmV4dD0zMixvLmpzb24oKTtjYXNlIDMyOnRocm93IHQudDc9dC5zZW50LG5ldyB0LnQ1KCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIix0LnQ2LHQudDcpO2Nhc2UgMzQ6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLCh0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUobykpKTtjYXNlIDM1OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzLFtbMTgsMjRdXSl9KSkpfX0se2tleToicmVxdWVzdEN1c3RvbUdyYW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhLGksbyxzLHUsYyxmLGw9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLm5leHQ9Mix0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO2Nhc2UgMjpyZXR1cm4gYT1uLnNlbnQsbi5uZXh0PTUsdGhpcy5fY29uZmlnKCk7Y2FzZSA1OmlmKGk9bi5zZW50LChvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDphLnRva2VuX2VuZHBvaW50KSYmMCE9PW8udHJpbSgpLmxlbmd0aCl7bi5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDg6cmV0dXJuIG4ubmV4dD0xMCxQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49dyhlLDIpLGE9blswXSxpPW5bMV07cmV0dXJuIEUobCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIG47cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGksdCk7Y2FzZSAyOnJldHVybiBuPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIiwiIi5jb25jYXQoYSwiPSIpLmNvbmNhdChuKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9KSkpO2Nhc2UgMTA6aWYocz1uLnNlbnQsdT1PYmplY3QuYXNzaWduKHt9LEwuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxuLnQwPWUuYXR0YWNoVG9rZW4sIW4udDApe24ubmV4dD0yMzticmVha31yZXR1cm4gbi50MT1PYmplY3Qsbi50Mj1PYmplY3QuYXNzaWduKHt9LHUpLG4udDM9IkJlYXJlciAiLG4ubmV4dD0xOSx0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEodCk7Y2FzZSAxOTpuLnQ0PW4uc2VudC5hY2Nlc3NfdG9rZW4sbi50NT1uLnQzLmNvbmNhdC5jYWxsKG4udDMsbi50NCksbi50Nj17QXV0aG9yaXphdGlvbjpuLnQ1fSx1PW4udDEuYXNzaWduLmNhbGwobi50MSxuLnQyLG4udDYpO2Nhc2UgMjM6cmV0dXJuIGM9e2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6aS5zZW5kQ29va2llc0luUmVxdWVzdHM/Ui5JbmNsdWRlOlIuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUpLG1ldGhvZDoiUE9TVCJ9LG4ucHJldj0yNCxuLm5leHQ9MjcsZmV0Y2gobyxjKTtjYXNlIDI3OmY9bi5zZW50LG4ubmV4dD0zMzticmVhaztjYXNlIDMwOnRocm93IG4ucHJldj0zMCxuLnQ3PW4uY2F0Y2goMjQpLG5ldyBJKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9bi50Nz9uLnQ3OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKTtjYXNlIDMzOmlmKDIwMD09PWYuc3RhdHVzJiZmLm9rKXtuLm5leHQ9NDA7YnJlYWt9cmV0dXJuIG4udDg9SSxuLnQ5PSJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoIi5jb25jYXQoZi5zdGF0dXNUZXh0LCIpIiksbi5uZXh0PTM4LGYuanNvbigpO2Nhc2UgMzg6dGhyb3cgbi50MTA9bi5zZW50LG5ldyBuLnQ4KCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLG4udDksbi50MTApO2Nhc2UgNDA6aWYoIWUucmV0dXJuc1Nlc3Npb24pe24ubmV4dD00NDticmVha31uLnQxMT10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGYsdCksbi5uZXh0PTQ5O2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIG4udDEyPVByb21pc2Usbi5uZXh0PTQ3LGYuanNvbigpO2Nhc2UgNDc6bi50MTM9bi5zZW50LG4udDExPW4udDEyLnJlc29sdmUuY2FsbChuLnQxMixuLnQxMyk7Y2FzZSA0OTpyZXR1cm4gbi5hYnJ1cHQoInJldHVybiIsbi50MTEpO2Nhc2UgNTA6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuLHRoaXMsW1syNCwzMF1dKX0pKSl9fSx7a2V5OiJnZXRCYXNpY1VzZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbixhLGk7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQsYT10aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8obnVsbD09bj92b2lkIDA6bi5pZF90b2tlbiksaT17YWxsb3dlZFNjb3BlczpuLnNjb3BlLHNlc3Npb25TdGF0ZTpuLnNlc3Npb25fc3RhdGV9LHQuYWJydXB0KCJyZXR1cm4iLChPYmplY3Qua2V5cyhhKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2b2lkIDAhPT1hW2VdJiYiIiE9PWFbZV0mJm51bGwhPT1hW2VdfHxkZWxldGUgYVtlXX0pKSxpPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSxhKSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtjYXNlIDI6cmV0dXJuIG49dC5zZW50LmlkX3Rva2VuLHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKG4pKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldENyeXB0b0hlbHBlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9jcnlwdG9IZWxwZXIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0SURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50LmlkX3Rva2VuKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbixhLGk7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fY29uZmlnKCk7Y2FzZSAyOmlmKG49dC5zZW50LHQudDA9IWUsIXQudDApe3QubmV4dD04O2JyZWFrfXJldHVybiB0Lm5leHQ9Nyx0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpO2Nhc2UgNzp0LnQwPXQuc2VudDtjYXNlIDg6aWYoIXQudDApe3QubmV4dD0xMDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgMTA6aWYoIShhPW4ud2VsbEtub3duRW5kcG9pbnQpKXt0Lm5leHQ9MzY7YnJlYWt9cmV0dXJuIHQucHJldj0xMix0Lm5leHQ9MTUsZmV0Y2goYSk7Y2FzZSAxNTppZigyMDA9PT0oaT10LnNlbnQpLnN0YXR1cyYmaS5vayl7dC5uZXh0PTE4O2JyZWFrfXRocm93IG5ldyBFcnJvcjtjYXNlIDE4OnQubmV4dD0yMzticmVhaztjYXNlIDIwOnRocm93IHQucHJldj0yMCx0LnQxPXQuY2F0Y2goMTIpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSEUwMSIsIkludmFsaWQgd2VsbC1rbm93biByZXNwb25zZSIsIlRoZSB3ZWxsIGtub3duIGVuZHBvaW50IHJlc3BvbnNlIGhhcyBiZWVuIGZhaWxlZCB3aXRoIGFuIGVycm9yLiIpO2Nhc2UgMjM6cmV0dXJuIHQudDI9dGhpcy5fZGF0YUxheWVyLHQudDM9dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIsdC5uZXh0PTI3LGkuanNvbigpO2Nhc2UgMjc6cmV0dXJuIHQudDQ9dC5zZW50LHQubmV4dD0zMCx0LnQzLnJlc29sdmVFbmRwb2ludHMuY2FsbCh0LnQzLHQudDQpO2Nhc2UgMzA6cmV0dXJuIHQudDU9dC5zZW50LHQubmV4dD0zMyx0LnQyLnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50Mix0LnQ1KTtjYXNlIDMzOnJldHVybiB0Lm5leHQ9MzUsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDM1OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoKSk7Y2FzZSAzNjppZighbi5iYXNlVXJsKXt0Lm5leHQ9NTI7YnJlYWt9cmV0dXJuIHQucHJldj0zNyx0LnQ2PXRoaXMuX2RhdGFMYXllcix0Lm5leHQ9NDEsdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpO2Nhc2UgNDE6cmV0dXJuIHQudDc9dC5zZW50LHQubmV4dD00NCx0LnQ2LnNldE9JRENQcm92aWRlck1ldGFEYXRhLmNhbGwodC50Nix0LnQ3KTtjYXNlIDQ0OnQubmV4dD00OTticmVhaztjYXNlIDQ2OnRocm93IHQucHJldj00Nix0LnQ4PXQuY2F0Y2goMzcpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMiIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dC50OD90LnQ4OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGJhc2UgdXJsIGZhaWxlZC4iKTtjYXNlIDQ5OnJldHVybiB0Lm5leHQ9NTEsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKTtjYXNlIDUxOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlc29sdmUoKSk7Y2FzZSA1MjpyZXR1cm4gdC5wcmV2PTUyLHQudDk9dGhpcy5fZGF0YUxheWVyLHQubmV4dD01Nix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpO2Nhc2UgNTY6cmV0dXJuIHQudDEwPXQuc2VudCx0Lm5leHQ9NTksdC50OS5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YS5jYWxsKHQudDksdC50MTApO2Nhc2UgNTk6dC5uZXh0PTY0O2JyZWFrO2Nhc2UgNjE6dGhyb3cgdC5wcmV2PTYxLHQudDExPXQuY2F0Y2goNTIpLG5ldyBJKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMyIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dC50MTE/dC50MTE6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIik7Y2FzZSA2NDpyZXR1cm4gdC5uZXh0PTY2LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCk7Y2FzZSA2NjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKCkpO2Nhc2UgNjc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxMiwyMF0sWzM3LDQ2XSxbNTIsNjFdXSl9KSkpfX0se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLGEsaSxvLHMsdSxjLGY7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBsKCl7dmFyIGg7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6cmV0dXJuIGg9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLHthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPWguYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PSh0PWguY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT10P3Q6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj1oLmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGE9aC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLGlzc3VlcjpudWxsIT09KGk9aC5pc3N1ZXIpJiZ2b2lkIDAhPT1pP2k6IiIsandrc1VyaTpudWxsIT09KG89aC5qd2tzX3VyaSkmJnZvaWQgMCE9PW8/bzoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KHM9aC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1zP3M6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0odT1oLnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KGM9aC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0oZj1oLnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09Zj9mOiIifSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRTaWduT3V0VVJMIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLGE7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBpKCl7dmFyIG8scyx1LGM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtjYXNlIDI6aWYoci50MT10PXIuc2VudCxyLnQwPW51bGw9PT1yLnQxLHIudDApe3IubmV4dD02O2JyZWFrfXIudDA9dm9pZCAwPT09dDtjYXNlIDY6aWYoIXIudDApe3IubmV4dD0xMDticmVha31yLnQyPXZvaWQgMCxyLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpyLnQyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQ7Y2FzZSAxMTpyZXR1cm4gbz1yLnQyLHIubmV4dD0xNCx0aGlzLl9jb25maWcoKTtjYXNlIDE0OmlmKHM9ci5zZW50LG8mJjAhPT1vLnRyaW0oKS5sZW5ndGgpe3IubmV4dD0xNzticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjYXNlIDE3OnJldHVybiByLm5leHQ9MTksdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2Nhc2UgMTk6aWYoci50ND1uPXIuc2VudCxyLnQzPW51bGw9PT1yLnQ0LHIudDMpe3IubmV4dD0yMzticmVha31yLnQzPXZvaWQgMD09PW47Y2FzZSAyMzppZighci50Myl7ci5uZXh0PTI3O2JyZWFrfXIudDU9dm9pZCAwLHIubmV4dD0yODticmVhaztjYXNlIDI3OnIudDU9bi5pZF90b2tlbjtjYXNlIDI4OmlmKCh1PXIudDUpJiYwIT09dS50cmltKCkubGVuZ3RoKXtyLm5leHQ9MzE7YnJlYWt9dGhyb3cgbmV3IEkoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y2FzZSAzMTppZigoYz1udWxsIT09KGE9bnVsbD09cz92b2lkIDA6cy5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1hP2E6bnVsbD09cz92b2lkIDA6cy5zaWduSW5SZWRpcmVjdFVSTCkmJjAhPT1jLnRyaW0oKS5sZW5ndGgpe3IubmV4dD0zNDticmVha310aHJvdyBuZXcgSSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO2Nhc2UgMzQ6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLCIiLmNvbmNhdChvLCI/aWRfdG9rZW5faGludD0iKS5jb25jYXQodSwiJnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0iKS5jb25jYXQoYywiJnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3MiKSk7Y2FzZSAzNTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyl9KSkpfX0se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5nZXRTaWduT3V0VVJMKGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImNsZWFyVXNlclNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7Y2FzZSAyOmlmKHIudDE9dD1yLnNlbnQsci50MD1udWxsPT09ci50MSxyLnQwKXtyLm5leHQ9NjticmVha31yLnQwPXZvaWQgMD09PXQ7Y2FzZSA2OmlmKCFyLnQwKXtyLm5leHQ9MTA7YnJlYWt9ci50Mj12b2lkIDAsci5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6ci50Mj10LmFjY2Vzc190b2tlbjtjYXNlIDExOnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnQyKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJpc0F1dGhlbnRpY2F0ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9Qm9vbGVhbix0Lm5leHQ9Myx0aGlzLmdldEFjY2Vzc1Rva2VuKGUpO2Nhc2UgMzpyZXR1cm4gdC50MT10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsKDAsdC50MCkodC50MSkpO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0UEtDRUNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpLHQpO2Nhc2UgMjpyZXR1cm4gci5hYnJ1cHQoInJldHVybiIsci5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldFBLQ0VDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKHQpLGUsbik7Y2FzZSAyOnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToidXBkYXRlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKTtjYXNlIDI6cmV0dXJuIHQubmV4dD00LHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX1dKSxlfSgpLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7byh0aGlzLGUpLHRoaXMuX2lkPXQsdGhpcy5fc3RvcmU9cn1yZXR1cm4gdShlLFt7a2V5OiJzZXREYXRhSW5CdWxrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3ZhciBpLG8scyx1O3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEoZSk7Y2FzZSAyOmlmKHIudDE9bj1yLnNlbnQsci50MD1udWxsIT09ci50MSwhci50MCl7ci5uZXh0PTY7YnJlYWt9ci50MD12b2lkIDAhPT1uO2Nhc2UgNjppZighci50MCl7ci5uZXh0PTEwO2JyZWFrfXIudDI9bixyLm5leHQ9MTE7YnJlYWs7Y2FzZSAxMDpyLnQyPW51bGw7Y2FzZSAxMTpyZXR1cm4gaT1yLnQyLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx0KSx1PUpTT04uc3RyaW5naWZ5KHMpLHIubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsdSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToic2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgYTtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXt2YXIgbyxzLHUsZjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKGUpO2Nhc2UgMjppZihyLnQxPWE9ci5zZW50LHIudDA9bnVsbCE9PXIudDEsIXIudDApe3IubmV4dD02O2JyZWFrfXIudDA9dm9pZCAwIT09YTtjYXNlIDY6aWYoIXIudDApe3IubmV4dD0xMDticmVha31yLnQyPWEsci5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6ci50Mj1udWxsO2Nhc2UgMTE6cmV0dXJuIG89ci50MixzPW8mJkpTT04ucGFyc2UobyksdT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scyksYyh7fSx0LG4pKSxmPUpTT04uc3RyaW5naWZ5KHUpLHIubmV4dD0xNyx0aGlzLl9zdG9yZS5zZXREYXRhKGUsZik7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyl9KSkpfX0se2tleToicmVtb3ZlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIGksbyxzLHU7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fc3RvcmUuZ2V0RGF0YShlKTtjYXNlIDI6aWYoci50MT1uPXIuc2VudCxyLnQwPW51bGwhPT1yLnQxLCFyLnQwKXtyLm5leHQ9NjticmVha31yLnQwPXZvaWQgMCE9PW47Y2FzZSA2OmlmKCFyLnQwKXtyLm5leHQ9MTA7YnJlYWt9ci50Mj1uLHIubmV4dD0xMTticmVhaztjYXNlIDEwOnIudDI9bnVsbDtjYXNlIDExOnJldHVybiBpPXIudDIsbz1pJiZKU09OLnBhcnNlKGkpLGRlbGV0ZShzPU9iamVjdC5hc3NpZ24oe30sbykpW3RdLHU9SlNPTi5zdHJpbmdpZnkocyksci5uZXh0PTE4LHRoaXMuX3N0b3JlLnNldERhdGEoZSx1KTtjYXNlIDE4OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJfcmVzb2x2ZUtleSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCwiLSIpLmNvbmNhdCh0KToiIi5jb25jYXQoZSwiLSIpLmNvbmNhdCh0aGlzLl9pZCl9fSx7a2V5OiJzZXRDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToic2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoQS5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJzZXRUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoQS5UZW1wb3JhcnlEYXRhLHQpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDp0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLHQpLGUpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0Q3VzdG9tRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoZSxuKSx0KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX19LHtrZXk6ImdldENvbmZpZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC50MD1KU09OLHQubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpKTtjYXNlIDM6aWYodC50Mj1lPXQuc2VudCx0LnQxPW51bGwhPT10LnQyLCF0LnQxKXt0Lm5leHQ9NzticmVha310LnQxPXZvaWQgMCE9PWU7Y2FzZSA3OmlmKCF0LnQxKXt0Lm5leHQ9MTE7YnJlYWt9dC50Mz1lLHQubmV4dD0xMjticmVhaztjYXNlIDExOnQudDM9bnVsbDtjYXNlIDEyOnJldHVybiB0LnQ0PXQudDMsdC5hYnJ1cHQoInJldHVybiIsdC50MC5wYXJzZS5jYWxsKHQudDAsdC50NCkpO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQudDA9SlNPTix0Lm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMzppZih0LnQyPWU9dC5zZW50LHQudDE9bnVsbCE9PXQudDIsIXQudDEpe3QubmV4dD03O2JyZWFrfXQudDE9dm9pZCAwIT09ZTtjYXNlIDc6aWYoIXQudDEpe3QubmV4dD0xMTticmVha310LnQzPWUsdC5uZXh0PTEyO2JyZWFrO2Nhc2UgMTE6dC50Mz1udWxsO2Nhc2UgMTI6cmV0dXJuIHQudDQ9dC50Myx0LmFicnVwdCgicmV0dXJuIix0LnQwLnBhcnNlLmNhbGwodC50MCx0LnQ0KSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiZ2V0VGVtcG9yYXJ5RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci50MD1KU09OLHIubmV4dD0zLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLlRlbXBvcmFyeURhdGEsZSkpO2Nhc2UgMzppZihyLnQyPXQ9ci5zZW50LHIudDE9bnVsbCE9PXIudDIsIXIudDEpe3IubmV4dD03O2JyZWFrfXIudDE9dm9pZCAwIT09dDtjYXNlIDc6aWYoIXIudDEpe3IubmV4dD0xMTticmVha31yLnQzPXQsci5uZXh0PTEyO2JyZWFrO2Nhc2UgMTE6ci50Mz1udWxsO2Nhc2UgMTI6cmV0dXJuIHIudDQ9ci50MyxyLmFicnVwdCgicmV0dXJuIixyLnQwLnBhcnNlLmNhbGwoci50MCxyLnQ0KSk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiZ2V0U2Vzc2lvbkRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIudDA9SlNPTixyLm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5TZXNzaW9uRGF0YSxlKSk7Y2FzZSAzOmlmKHIudDI9dD1yLnNlbnQsci50MT1udWxsIT09ci50Miwhci50MSl7ci5uZXh0PTc7YnJlYWt9ci50MT12b2lkIDAhPT10O2Nhc2UgNzppZighci50MSl7ci5uZXh0PTExO2JyZWFrfXIudDM9dCxyLm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTpyLnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gci50ND1yLnQzLHIuYWJydXB0KCJyZXR1cm4iLHIudDAucGFyc2UuY2FsbChyLnQwLHIudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJnZXRDdXN0b21EYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIudDA9SlNPTixyLm5leHQ9Myx0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoZSx0KSk7Y2FzZSAzOmlmKHIudDI9bj1yLnNlbnQsci50MT1udWxsIT09ci50Miwhci50MSl7ci5uZXh0PTc7YnJlYWt9ci50MT12b2lkIDAhPT1uO2Nhc2UgNzppZighci50MSl7ci5uZXh0PTExO2JyZWFrfXIudDM9bixyLm5leHQ9MTI7YnJlYWs7Y2FzZSAxMTpyLnQzPW51bGw7Y2FzZSAxMjpyZXR1cm4gci50ND1yLnQzLHIuYWJydXB0KCJyZXR1cm4iLHIudDAucGFyc2UuY2FsbChyLnQwLHIudDQpKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksYSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVDb25maWdEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShBLk9JRENQcm92aWRlck1ldGFEYXRhKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJyZW1vdmVUZW1wb3JhcnlEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5UZW1wb3JhcnlEYXRhLGUpKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5TZXNzaW9uRGF0YSxlKSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRDb25maWdEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5Db25maWdEYXRhKSk7Y2FzZSAyOnJldHVybiBuPXQuc2VudCx0LmFicnVwdCgicmV0dXJuIixuJiZKU09OLnBhcnNlKG4pW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO2Nhc2UgMjpyZXR1cm4gbj10LnNlbnQsdC5hYnJ1cHQoInJldHVybiIsbiYmSlNPTi5wYXJzZShuKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShBLlRlbXBvcmFyeURhdGEsdCkpO2Nhc2UgMjpyZXR1cm4gYT1yLnNlbnQsci5hYnJ1cHQoInJldHVybiIsYSYmSlNPTi5wYXJzZShhKVtlXSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJnZXRTZXNzaW9uRGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXt2YXIgYTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoQS5TZXNzaW9uRGF0YSx0KSk7Y2FzZSAyOnJldHVybiBhPXIuc2VudCxyLmFicnVwdCgicmV0dXJuIixhJiZKU09OLnBhcnNlKGEpW2VdKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldENvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuQ29uZmlnRGF0YSksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShBLk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToic2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShBLlRlbXBvcmFyeURhdGEsbiksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX19LHtrZXk6InNldFNlc3Npb25EYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuU2Vzc2lvbkRhdGEsbiksZSx0KTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShBLkNvbmZpZ0RhdGEpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShBLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KEEuVGVtcG9yYXJ5RGF0YSx0KSxlKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxuLHRoaXMpfSkpKX19LHtrZXk6InJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShBLlNlc3Npb25EYXRhLHQpLGUpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX1dKSxlfSgpLEs9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpULnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH0sSj1mdW5jdGlvbigpewovKioKICAgICAgICAgKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IF9zdG9yZTogU3RvcmUgPSBuZXcgRGF0YVN0b3JlKCk7CiAgICAgICAgICogY29uc3QgYXV0aCA9IG5ldyBBc2dhcmRlb0F1dGhDbGllbnQ8Q3VzdG9tQ2xpZW50Q29uZmlnPihfc3RvcmUpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2NvbnN0cnVjdG9yCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovCmZ1bmN0aW9uIGUodCxyKXtvKHRoaXMsZSksZS5faW5zdGFuY2VJRD9lLl9pbnN0YW5jZUlEKz0xOmUuX2luc3RhbmNlSUQ9MCx0aGlzLl9kYXRhTGF5ZXI9bmV3IHEoImluc3RhbmNlXyIuY29uY2F0KGUuX2luc3RhbmNlSUQpLHQpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgTih0aGlzLl9kYXRhTGF5ZXIsciksZS5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBOKHRoaXMuX2RhdGFMYXllcixyKX0KLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV0dXJuIHUoZSxbe2tleToiaW5pdGlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbixhO3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gaSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEspLGUpLHtzY29wZTpbXS5jb25jYXQoYihudWxsIT09KHQ9Sy5zY29wZSkmJnZvaWQgMCE9PXQ/dDpbXSksYihudWxsIT09KGE9bnVsbD09PShuPWUuc2NvcGUpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09Sz92b2lkIDA6Sy5zY29wZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaW5jbHVkZXMoZSkpfSkpKSYmdm9pZCAwIT09YT9hOltdKSl9KSk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksaSx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYERhdGFMYXllcmAgb2JqZWN0IHRoYXQgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYXV0aGVudGljYXRpb24gZGF0YS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkYXRhID0gYXV0aC5nZXREYXRhTGF5ZXIoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREYXRhTGF5ZXIKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImdldERhdGFMYXllciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICAgKiBjdXN0b20gcGF0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGZpZHAgcGFyYW1ldGVyLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHVybCk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRBdXRob3JpemF0aW9uVVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJnZXRBdXRob3JpemF0aW9uVVJMIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbigpe3ZhciBhLGk9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiBudWxsPT0oYT1PYmplY3QuYXNzaWduKHt9LGUpKXx8ZGVsZXRlIGEuZm9yY2VJbml0LHIubmV4dD00LHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIik7Y2FzZSA0OmlmKCFyLnNlbnQpe3IubmV4dD04O2JyZWFrfXIudDA9dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwoYSx0KSxyLm5leHQ9OTticmVhaztjYXNlIDg6ci50MD10aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEobnVsbD09ZT92b2lkIDA6ZS5mb3JjZUluaXQpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKGEsdCl9KSk7Y2FzZSA5OnJldHVybiByLmFicnVwdCgicmV0dXJuIixyLnQwKTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovfSx7a2V5OiJyZXF1ZXN0QWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gaSgpe3ZhciBvPXRoaXM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDpyZXR1cm4gci5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKTtjYXNlIDI6aWYoIXIuc2VudCl7ci5uZXh0PTY7YnJlYWt9ci50MD10aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCxuLGEpLHIubmV4dD03O2JyZWFrO2Nhc2UgNjpyLnQwPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQsbixhKX0pKTtjYXNlIDc6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHIudDApO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGksdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToic2lnbk91dCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhpcyBkb2Vzbid0IGNsZWFyIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5nZXRTaWduT3V0VVJMKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0U2lnbk91dFVSTAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0U2lnbk91dFVSTCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi99LHtrZXk6ImdldElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0QmFzaWNVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjcnlwdG9IZWxwZXIgPSBhd2FpdCBhdXRoLkNyeXB0b0hlbHBlcigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldENyeXB0b0hlbHBlcgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL30se2tleToiZ2V0Q3J5cHRvSGVscGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+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+MDspe3ZhciBvPWFbaV0scz10W29dO2lmKHMpe3ZhciB1PWVbb10sYz12b2lkIDA9PT11fHxzKHUsbyxlKTtpZighMCE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIitjKX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6TXR9LHF0PWZlLEt0PXBlLEp0PWdlLEJ0PWZ1bmN0aW9uKGUpe3JldHVybiBPdChlKSxlLmhlYWRlcnM9ZS5oZWFkZXJzfHx7fSxlLmRhdGE9UnQuY2FsbChlLGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9QXQubWVyZ2UoZS5oZWFkZXJzLmNvbW1vbnx8e30sZS5oZWFkZXJzW2UubWV0aG9kXXx8e30sZS5oZWFkZXJzKSxBdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fFB0LmFkYXB0ZXIpKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBPdChlKSx0LmRhdGE9UnQuY2FsbChlLHQuZGF0YSx0LmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSksdH0pLChmdW5jdGlvbih0KXtyZXR1cm4gQ3QodCl8fChPdChlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPVJ0LmNhbGwoZSx0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9LEZ0PUx0LFd0PU50LHp0PVd0LnZhbGlkYXRvcnM7ZnVuY3Rpb24gWXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBKdCxyZXNwb25zZTpuZXcgSnR9fVl0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PXR5cGVvZiBlPyh0PXR8fHt9KS51cmw9ZTp0PWV8fHt9LCh0PUZ0KHRoaXMuZGVmYXVsdHMsdCkpLm1ldGhvZD90Lm1ldGhvZD10Lm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3QubWV0aG9kPXRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6dC5tZXRob2Q9ImdldCI7dmFyIHI9dC50cmFuc2l0aW9uYWw7dm9pZCAwIT09ciYmV3QuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp6dC50cmFuc2l0aW9uYWwoenQuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6enQudHJhbnNpdGlvbmFsKHp0LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6enQudHJhbnNpdGlvbmFsKHp0LmJvb2xlYW4pfSwhMSk7dmFyIG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJ1bldoZW4mJiExPT09ZS5ydW5XaGVuKHQpfHwoYT1hJiZlLnN5bmNocm9ub3VzLG4udW5zaGlmdChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKSl9KSk7dmFyIGksbz1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnB1c2goZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksIWEpe3ZhciBzPVtCdCx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShzLG4pLHM9cy5jb25jYXQobyksaT1Qcm9taXNlLnJlc29sdmUodCk7cy5sZW5ndGg7KWk9aS50aGVuKHMuc2hpZnQoKSxzLnNoaWZ0KCkpO3JldHVybiBpfWZvcih2YXIgdT10O24ubGVuZ3RoOyl7dmFyIGM9bi5zaGlmdCgpLGY9bi5zaGlmdCgpO3RyeXt1PWModSl9Y2F0Y2goZSl7ZihlKTticmVha319dHJ5e2k9QnQodSl9Y2F0Y2goZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfWZvcig7by5sZW5ndGg7KWk9aS50aGVuKG8uc2hpZnQoKSxvLnNoaWZ0KCkpO3JldHVybiBpfSxZdC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPUZ0KHRoaXMuZGVmYXVsdHMsZSksS3QoZS51cmwsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXD8vLCIiKX0scXQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe1l0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoRnQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxxdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe1l0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChGdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YTpyfSkpfX0pKTt2YXIgR3Q9WXQsVnQ9YXQ7ZnVuY3Rpb24gWHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKHIuX2xpc3RlbmVycyl7dmFyIHQsbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcih0PTA7dDxuO3QrKylyLl9saXN0ZW5lcnNbdF0oZSk7ci5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LG49bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Iuc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUodCl9LG59LGUoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IFZ0KGUpLHQoci5yZWFzb24pKX0pKX1YdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxYdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfSxYdC5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbGlzdGVuZXJzKXt2YXIgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX19LFh0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IFh0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgJHQ9WHQsWnQ9ZmUsUXQ9ZmUsZXI9ZWUsdHI9R3QscnI9THQ7dmFyIG5yPWZ1bmN0aW9uIGUodCl7dmFyIHI9bmV3IHRyKHQpLG49ZXIodHIucHJvdG90eXBlLnJlcXVlc3Qscik7cmV0dXJuIFF0LmV4dGVuZChuLHRyLnByb3RvdHlwZSxyKSxRdC5leHRlbmQobixyKSxuLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gZShycih0LHIpKX0sbn0oX3QpO25yLkF4aW9zPXRyLG5yLkNhbmNlbD1hdCxuci5DYW5jZWxUb2tlbj0kdCxuci5pc0NhbmNlbD1UdCxuci5WRVJTSU9OPVV0LG5yLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LG5yLnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LG5yLmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4gWnQuaXNPYmplY3QoZSkmJiEwPT09ZS5pc0F4aW9zRXJyb3J9LFEuZXhwb3J0cz1ucixRLmV4cG9ydHMuZGVmYXVsdD1ucjt2YXIgYXIsaXI9US5leHBvcnRzO3ZhciBvcj1hcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSksdGhpcy5hdHRhY2hUb2tlbj1mdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1yZXR1cm4gdShlLFt7a2V5OiJyZXF1ZXN0SGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYTtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLmF0dGFjaFRva2VuKGUpO2Nhc2UgMjpyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKSYmKG49bnVsbD09ZT92b2lkIDA6ZS5kYXRhLGE9bmV3IEZvcm1EYXRhLE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe2EuYXBwZW5kKGUsbltlXSl9KSksZS5kYXRhPWEpLGUuc3RhcnRUaW1lSW5Ncz0obmV3IERhdGUpLmdldFRpbWUoKSxhci5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayhlKSx0LmFicnVwdCgicmV0dXJuIixlKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19LHtrZXk6ImVycm9ySGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhyb3cgYXIuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9fSx7a2V5OiJzdWNjZXNzSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfX0se2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDphci5pc0hhbmRsZXJFbmFibGVkPWUsdGhpcy5hdHRhY2hUb2tlbj10O2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLG4sdGhpcyl9KSkpfX0se2tleToiZW5hYmxlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXthci5pc0hhbmRsZXJFbmFibGVkPSEwfX0se2tleToiZGlzYWJsZUhhbmRsZXIiLHZhbHVlOmZ1bmN0aW9uKCl7YXIuaXNIYW5kbGVyRW5hYmxlZD0hMX19LHtrZXk6ImRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmFyLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7YXIuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2FyLmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX19LHtrZXk6InNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfX0se2tleToic2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfX0se2tleToic2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9fSx7a2V5OiJzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX1dLFt7a2V5OiJnZXRJbnN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9aXIuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgYXIpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCk7Y2FzZSAyOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcih0KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIodCl9KSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1pci5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1pci5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfX1dKSxlfSgpO29yLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLG9yPWFyPWZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1hP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOmE7aWYoIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0PyJ1bmRlZmluZWQiOm4oUmVmbGVjdCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsYSk7ZWxzZSBmb3IodmFyIHU9ZS5sZW5ndGgtMTt1Pj0wO3UtLSkoaT1lW3VdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtmdW5jdGlvbihlKXt9XSxvcik7dmFyIHNyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKSx0aGlzLl9kYXRhPW5ldyBNYXB9cmV0dXJuIHUoZSxbe2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnRoaXMuX2RhdGEuc2V0KGUsdCk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbix0aGlzKX0pKSl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLG51bGwhPT0obj1udWxsPT09KHQ9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0KGUpKSYmdm9pZCAwIT09bj9uOiJ7fSIpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToicmVtb3ZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDp0aGlzLl9kYXRhLmRlbGV0ZShlKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMpfSkpKX19XSksZX0oKSx1cj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtvKHRoaXMsZSl9cmV0dXJuIHUoZSxudWxsLFt7a2V5OiJnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19fSx7a2V5OiJnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fV0pLGV9KCksY3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7byh0aGlzLGUpfXJldHVybiB1KGUsbnVsbCxbe2tleToicmVtb3ZlQXV0aG9yaXphdGlvbkNvZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9fSx7a2V5OiJnZXRQS0NFIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZSkpJiZ2b2lkIDAhPT10P3Q6IiJ9fSx7a2V5OiJzZXRQS0NFIix2YWx1ZTpmdW5jdGlvbihlLHQpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oZSx0KX19LHtrZXk6InNldFNpZ25PdXRVUkwiLHZhbHVlOmZ1bmN0aW9uKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oRCxlKX19LHtrZXk6ImdldFNpZ25PdXRVUkwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEQpKSYmdm9pZCAwIT09ZT9lOiIifX0se2tleToicmVtb3ZlUEtDRSIsdmFsdWU6ZnVuY3Rpb24oZSl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShlKX19LHtrZXk6ImNhbkNvbnRpbnVlU2lnbkluIix2YWx1ZTpmdW5jdGlvbih0LHIpe3JldHVybiEodCYmIWUuaGFzRXJyb3JJblVSTCgpJiYhZS5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKSYmIXIpfX0se2tleToiaXNJbml0aWFsaXplZFNpbGVudFNpZ25JbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCl9fSx7a2V5OiJ3YXNTaWduSW5DYWxsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghZS5oYXNFcnJvckluVVJMKCkmJiFlLmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpfHx0aGlzLmlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKSl9fSx7a2V5OiJ3YXNTaWxlbnRTaWduSW5DYWxsZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiaW5pdGlhbGl6ZWQtc2lsZW50LXNpZ24taW4iKSx0PWU/SlNPTi5wYXJzZShlKTpudWxsO3JldHVybiBCb29sZWFuKHQpfX0se2tleToiaXNTaWduT3V0U3VjY2Vzc2Z1bCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCFKLmlzU2lnbk91dFN1Y2Nlc3NmdWwod2luZG93LmxvY2F0aW9uLmhyZWYpKXtlLm5leHQ9NjticmVha31yZXR1cm4gdD13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdLGhpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLHQpLGUubmV4dD01LEouY2xlYXJVc2VyU2Vzc2lvbkRhdGEoKTtjYXNlIDU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCEwKTtjYXNlIDY6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCExKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9fSx7a2V5OiJkaWRTaWduT3V0RmFpbCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihKLmRpZFNpZ25PdXRGYWlsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7dmFyIGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoVykscj1lLnNlYXJjaFBhcmFtcy5nZXQoeiksbj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxuKSx7ZGVzY3JpcHRpb246bnVsbCE9cj9yOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9fSx7a2V5OiJpc1NpbGVudFN0YXRlUHJlc2VudEluVVJMIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKTtyZXR1cm4gbnVsbCE9PShlPW51bGw9PXQ/dm9pZCAwOnQuaW5jbHVkZXMoInNpZ24taW4tc2lsZW50bHkiKSkmJnZvaWQgMCE9PWUmJmV9fSx7a2V5OiJoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdy5sb2NhdGlvbi5zZWFyY2gsdD0vWz8mXWNvZGU9W14mXSsvO3JldHVybiB0LnRlc3QoZSl9fSx7a2V5OiJoYXNFcnJvckluVVJMIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cubG9jYXRpb24uaHJlZix0PW5ldyBVUkwoZSk7cmV0dXJuISF0LnNlYXJjaFBhcmFtcy5nZXQoVykmJnQuc2VhcmNoUGFyYW1zLmdldChHKSE9PU99fSx7a2V5OiJjYW5TZW5kUHJvbXB0Tm9uZVJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShGKTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX19LHtrZXk6InNldFByb21wdE5vbmVSZXF1ZXN0U2VudCIsdmFsdWU6ZnVuY3Rpb24oZSl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShGLEpTT04uc3RyaW5naWZ5KGUpKX19LHtrZXk6IndhaXRUaWxsUGFnZVJlZGlyZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbjtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBuPW51bGwhPWU/ZTozZTMsdC5uZXh0PTMsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3JldHVybiBzZXRUaW1lb3V0KGUsMWUzKm4pfSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX19XSksZX0oKSxmcj1bXSxscj1bXSxocj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxwcj0hMTtmdW5jdGlvbiBkcigpe3ByPSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmclt0XT1lW3RdLGxyW2UuY2hhckNvZGVBdCh0KV09dDtsclsiLSIuY2hhckNvZGVBdCgwKV09NjIsbHJbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIHZyKGUsdCxyKXtmb3IodmFyIG4sYSxpPVtdLG89dDtvPHI7bys9MyluPShlW29dPDwxNikrKGVbbysxXTw8OCkrZVtvKzJdLGkucHVzaChmclsoYT1uKT4+MTgmNjNdK2ZyW2E+PjEyJjYzXStmclthPj42JjYzXStmcls2MyZhXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gZ3IoZSl7dmFyIHQ7cHJ8fGRyKCk7Zm9yKHZhciByPWUubGVuZ3RoLG49ciUzLGE9IiIsaT1bXSxvPTE2MzgzLHM9MCx1PXItbjtzPHU7cys9bylpLnB1c2godnIoZSxzLHMrbz51P3U6cytvKSk7cmV0dXJuIDE9PT1uPyh0PWVbci0xXSxhKz1mclt0Pj4yXSxhKz1mclt0PDw0JjYzXSxhKz0iPT0iKToyPT09biYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLGErPWZyW3Q+PjEwXSxhKz1mclt0Pj40JjYzXSxhKz1mclt0PDwyJjYzXSxhKz0iPSIpLGkucHVzaChhKSxpLmpvaW4oIiIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4sYSl7dmFyIGksbyxzPTgqYS1uLTEsdT0oMTw8cyktMSxjPXU+PjEsZj0tNyxsPXI/YS0xOjAsaD1yPy0xOjEscD1lW3QrbF07Zm9yKGwrPWgsaT1wJigxPDwtZiktMSxwPj49LWYsZis9cztmPjA7aT0yNTYqaStlW3QrbF0sbCs9aCxmLT04KTtmb3Iobz1pJigxPDwtZiktMSxpPj49LWYsZis9bjtmPjA7bz0yNTYqbytlW3QrbF0sbCs9aCxmLT04KTtpZigwPT09aSlpPTEtYztlbHNle2lmKGk9PT11KXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxpLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixpLW4pfWZ1bmN0aW9uIG1yKGUsdCxyLG4sYSxpKXt2YXIgbyxzLHUsYz04KmktYS0xLGY9KDE8PGMpLTEsbD1mPj4xLGg9MjM9PT1hP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxwPW4/MDppLTEsZD1uPzE6LTEsdj10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KHM9aXNOYU4odCk/MTowLG89Zik6KG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSx1Kj0yKSwodCs9bytsPj0xP2gvdTpoKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKG8rKyx1Lz0yKSxvK2w+PWY/KHM9MCxvPWYpOm8rbD49MT8ocz0odCp1LTEpKk1hdGgucG93KDIsYSksbys9bCk6KHM9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixhKSxvPTApKTthPj04O2VbcitwXT0yNTUmcyxwKz1kLHMvPTI1NixhLT04KTtmb3Iobz1vPDxhfHMsYys9YTtjPjA7ZVtyK3BdPTI1NSZvLHArPWQsby89MjU2LGMtPTgpO2VbcitwLWRdfD0xMjgqdn12YXIgd3I9e30udG9TdHJpbmcsYnI9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09d3IuY2FsbChlKX07U3IuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT15ZS5UWVBFRF9BUlJBWV9TVVBQT1JUfHx5ZS5UWVBFRF9BUlJBWV9TVVBQT1JUO3ZhciBrcj14cigpO2Z1bmN0aW9uIHhyKCl7cmV0dXJuIFNyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIF9yKGUsdCl7aWYoeHIoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189U3IucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IFNyKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIFNyKGUsdCxyKXtpZighKFNyLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBTcikpcmV0dXJuIG5ldyBTcihlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBBcih0aGlzLGUpfXJldHVybiBFcih0aGlzLGUsdCxyKX1mdW5jdGlvbiBFcihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO1NyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPVNyLnByb3RvdHlwZTplPVJyKGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIVNyLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIG49MHxEcih0LHIpLGE9KGU9X3IoZSxuKSkud3JpdGUodCxyKTthIT09biYmKGU9ZS5zbGljZSgwLGEpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoUHIodCkpe3ZhciByPTB8Q3IodC5sZW5ndGgpO3JldHVybiAwPT09KGU9X3IoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP19yKGUsMCk6UnIoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmYnIodC5kYXRhKSlyZXR1cm4gUnIoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiBUcihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIEFyKGUsdCl7aWYoVHIodCksZT1fcihlLHQ8MD8wOjB8Q3IodCkpLCFTci5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIFJyKGUsdCl7dmFyIHI9dC5sZW5ndGg8MD8wOjB8Q3IodC5sZW5ndGgpO2U9X3IoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIENyKGUpe2lmKGU+PXhyKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3hyKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIFByKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX1mdW5jdGlvbiBEcihlLHQpe2lmKFByKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBhbihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnI7Y2FzZSJoZXgiOnJldHVybiByPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG9uKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIGFuKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIE9yKGUsdCxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09dHx8dDwwKSYmKHQ9MCksdD50aGlzLmxlbmd0aClyZXR1cm4iIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVybiIiO2lmKChyPj4+PTApPD0odD4+Pj0wKSlyZXR1cm4iIjtmb3IoZXx8KGU9InV0ZjgiKTs7KXN3aXRjaChlKXtjYXNlImhleCI6cmV0dXJuIFlyKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBCcih0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFdyKHRoaXMsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB6cih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBKcih0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBHcih0aGlzLHQscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZSk7ZT0oZSsiIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBJcihlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIExyKGUsdCxyLG4sYSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9YT8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKGEpcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighYSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1Tci5mcm9tKHQsbikpLFByKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6VXIoZSx0LHIsbixhKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9hP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6VXIoZSxbdF0scixuLGEpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFVyKGUsdCxyLG4sYSl7dmFyIGksbz0xLHM9ZS5sZW5ndGgsdT10Lmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLHUvPTIsci89Mn1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDE9PT1vP2VbdF06ZS5yZWFkVUludDE2QkUodCpvKX1pZihhKXt2YXIgZj0tMTtmb3IoaT1yO2k8cztpKyspaWYoYyhlLGkpPT09Yyh0LC0xPT09Zj8wOmktZikpe2lmKC0xPT09ZiYmKGY9aSksaS1mKzE9PT11KXJldHVybiBmKm99ZWxzZS0xIT09ZiYmKGktPWktZiksZj0tMX1lbHNlIGZvcihyK3U+cyYmKHI9cy11KSxpPXI7aT49MDtpLS0pe2Zvcih2YXIgbD0hMCxoPTA7aDx1O2grKylpZihjKGUsaStoKSE9PWModCxoKSl7bD0hMTticmVha31pZihsKXJldHVybiBpfXJldHVybi0xfWZ1bmN0aW9uIEhyKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBhPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmEmJihuPWEpOm49YTt2YXIgaT10Lmxlbmd0aDtpZihpJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7bj5pLzImJihuPWkvMik7Zm9yKHZhciBvPTA7bzxuOysrbyl7dmFyIHM9cGFyc2VJbnQodC5zdWJzdHIoMipvLDIpLDE2KTtpZihpc05hTihzKSlyZXR1cm4gbztlW3Irb109c31yZXR1cm4gb31mdW5jdGlvbiBNcihlLHQscixuKXtyZXR1cm4gc24oYW4odCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24ganIoZSx0LHIsbil7cmV0dXJuIHNuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fSh0KSxlLHIsbil9ZnVuY3Rpb24gTnIoZSx0LHIsbil7cmV0dXJuIGpyKGUsdCxyLG4pfWZ1bmN0aW9uIHFyKGUsdCxyLG4pe3JldHVybiBzbihvbih0KSxlLHIsbil9ZnVuY3Rpb24gS3IoZSx0LHIsbil7cmV0dXJuIHNuKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4sYSxpPVtdLG89MDtvPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK28pbj0ocj1lLmNoYXJDb2RlQXQobykpPj44LGE9ciUyNTYsaS5wdXNoKGEpLGkucHVzaChuKTtyZXR1cm4gaX0odCxlLmxlbmd0aC1yKSxlLHIsbil9ZnVuY3Rpb24gSnIoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP2dyKGUpOmdyKGUuc2xpY2UodCxyKSl9ZnVuY3Rpb24gQnIoZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGE9dDthPHI7KXt2YXIgaSxvLHMsdSxjPWVbYV0sZj1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihhK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGY9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoaT1lW2ErMV0pKSYmKHU9KDMxJmMpPDw2fDYzJmkpPjEyNyYmKGY9dSk7YnJlYWs7Y2FzZSAzOmk9ZVthKzFdLG89ZVthKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJm8pJiYodT0oMTUmYyk8PDEyfCg2MyZpKTw8Nnw2MyZvKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihmPXUpO2JyZWFrO2Nhc2UgNDppPWVbYSsxXSxvPWVbYSsyXSxzPWVbYSszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDE4fCg2MyZpKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjY1NTM1JiZ1PDExMTQxMTImJihmPXUpfW51bGw9PT1mPyhmPTY1NTMzLGw9MSk6Zj42NTUzNSYmKGYtPTY1NTM2LG4ucHVzaChmPj4+MTAmMTAyM3w1NTI5NiksZj01NjMyMHwxMDIzJmYpLG4ucHVzaChmKSxhKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1GcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9RnIpKTtyZXR1cm4gcn0obil9U3IucG9vbFNpemU9ODE5MixTci5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189U3IucHJvdG90eXBlLGV9LFNyLmZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBFcihudWxsLGUsdCxyKX0sU3IuVFlQRURfQVJSQVlfU1VQUE9SVCYmKFNyLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsU3IuX19wcm90b19fPVVpbnQ4QXJyYXkpLFNyLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFRyKHQpLHQ8PTA/X3IoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9fcihlLHQpLmZpbGwocixuKTpfcihlLHQpLmZpbGwocik6X3IoZSx0KX0obnVsbCxlLHQscil9LFNyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBBcihudWxsLGUpfSxTci5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIEFyKG51bGwsZSl9LFNyLmlzQnVmZmVyPXVuLFNyLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighUHIoZSl8fCFQcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsYT0wLGk9TWF0aC5taW4ocixuKTthPGk7KythKWlmKGVbYV0hPT10W2FdKXtyPWVbYV0sbj10W2FdO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sU3IuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sU3IuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIFNyLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49U3IuYWxsb2NVbnNhZmUodCksYT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBpPWVbcl07aWYoIVByKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpLmNvcHkobixhKSxhKz1pLmxlbmd0aH1yZXR1cm4gbn0sU3IuYnl0ZUxlbmd0aD1EcixTci5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFNyLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpSXIodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LFNyLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpSXIodGhpcyx0LHQrMyksSXIodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sU3IucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClJcih0aGlzLHQsdCs3KSxJcih0aGlzLHQrMSx0KzYpLElyKHRoaXMsdCsyLHQrNSksSXIodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sU3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/QnIodGhpcywwLGUpOk9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sU3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighUHIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PVNyLmNvbXBhcmUodGhpcyxlKX0sU3IucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sU3IucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixhKXtpZighUHIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09YSYmKGE9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1hJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWEpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGk9KGE+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0odD4+Pj0wKSxzPU1hdGgubWluKGksbyksdT10aGlzLnNsaWNlKG4sYSksYz1lLnNsaWNlKHQsciksZj0wO2Y8czsrK2YpaWYodVtmXSE9PWNbZl0pe2k9dVtmXSxvPWNbZl07YnJlYWt9cmV0dXJuIGk8bz8tMTpvPGk/MTowfSxTci5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sU3IucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBMcih0aGlzLGUsdCxyLCEwKX0sU3IucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTHIodGhpcyxlLHQsciwhMSl9LFNyLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgYT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmEpJiYocj1hKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBpPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gSHIodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gTXIodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIGpyKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIE5yKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcXIodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBLcih0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGk9ITB9fSxTci5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgRnI9NDA5NjtmdW5jdGlvbiBXcihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGE9dDthPHI7KythKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbYV0pO3JldHVybiBufWZ1bmN0aW9uIHpyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgYT10O2E8cjsrK2Epbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBZcihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBhPSIiLGk9dDtpPHI7KytpKWErPW5uKGVbaV0pO3JldHVybiBhfWZ1bmN0aW9uIEdyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGE9IiIsaT0wO2k8bi5sZW5ndGg7aSs9MilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0rMjU2Km5baSsxXSk7cmV0dXJuIGF9ZnVuY3Rpb24gVnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFhyKGUsdCxyLG4sYSxpKXtpZighUHIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+YXx8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uICRyKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGE9MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsMik7YTxpOysrYSllW3IrYV09KHQmMjU1PDw4KihuP2E6MS1hKSk+Pj44KihuP2E6MS1hKX1mdW5jdGlvbiBacihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGE9MCxpPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7YTxpOysrYSllW3IrYV09dD4+PjgqKG4/YTozLWEpJjI1NX1mdW5jdGlvbiBRcihlLHQscixuLGEsaSl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGVuKGUsdCxyLG4sYSl7cmV0dXJuIGF8fFFyKGUsMCxyLDQpLG1yKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIHRuKGUsdCxyLG4sYSl7cmV0dXJuIGF8fFFyKGUsMCxyLDgpLG1yKGUsdCxyLG4sNTIsOCkscis4fVNyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUKShyPXRoaXMuc3ViYXJyYXkoZSx0KSkuX19wcm90b19fPVNyLnByb3RvdHlwZTtlbHNle3ZhciBhPXQtZTtyPW5ldyBTcihhLHZvaWQgMCk7Zm9yKHZhciBpPTA7aTxhOysraSlyW2ldPXRoaXNbaStlXX1yZXR1cm4gcn0sU3IucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxWcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGE9MSxpPTA7KytpPHQmJihhKj0yNTYpOyluKz10aGlzW2UraV0qYTtyZXR1cm4gbn0sU3IucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxWcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2UrLS10XSxhPTE7dD4wJiYoYSo9MjU2KTspbis9dGhpc1tlKy0tdF0qYTtyZXR1cm4gbn0sU3IucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LFNyLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sU3IucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDh8dGhpc1tlKzFdfSxTci5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sU3IucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LFNyLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxWcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGE9MSxpPTA7KytpPHQmJihhKj0yNTYpOyluKz10aGlzW2UraV0qYTtyZXR1cm4gbj49KGEqPTEyOCkmJihuLT1NYXRoLnBvdygyLDgqdCkpLG59LFNyLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxWcihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGE9MSxpPXRoaXNbZSstLW5dO24+MCYmKGEqPTI1Nik7KWkrPXRoaXNbZSstLW5dKmE7cmV0dXJuIGk+PShhKj0xMjgpJiYoaS09TWF0aC5wb3coMiw4KnQpKSxpfSxTci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sU3IucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8VnIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2VdfHRoaXNbZSsxXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sU3IucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8VnIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sU3IucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxTci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8VnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdPDwyNHx0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM119LFNyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxWcihlLDQsdGhpcy5sZW5ndGgpLHlyKHRoaXMsZSwhMCwyMyw0KX0sU3IucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsNCx0aGlzLmxlbmd0aCkseXIodGhpcyxlLCExLDIzLDQpfSxTci5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsOCx0aGlzLmxlbmd0aCkseXIodGhpcyxlLCEwLDUyLDgpfSxTci5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFZyKGUsOCx0aGlzLmxlbmd0aCkseXIodGhpcyxlLCExLDUyLDgpfSxTci5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxYcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBhPTEsaT0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYoYSo9MjU2KTspdGhpc1t0K2ldPWUvYSYyNTU7cmV0dXJuIHQrcn0sU3IucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8WHIodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT1yLTEsaT0xO2Zvcih0aGlzW3QrYV09MjU1JmU7LS1hPj0wJiYoaSo9MjU2KTspdGhpc1t0K2FdPWUvaSYyNTU7cmV0dXJuIHQrcn0sU3IucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsMSwyNTUsMCksU3IuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LFNyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDIsNjU1MzUsMCksU3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOiRyKHRoaXMsZSx0LCEwKSx0KzJ9LFNyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDIsNjU1MzUsMCksU3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOiRyKHRoaXMsZSx0LCExKSx0KzJ9LFNyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOlpyKHRoaXMsZSx0LCEwKSx0KzR9LFNyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOlpyKHRoaXMsZSx0LCExKSx0KzR9LFNyLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGE9TWF0aC5wb3coMiw4KnItMSk7WHIodGhpcyxlLHQscixhLTEsLWEpfXZhciBpPTAsbz0xLHM9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8ciYmKG8qPTI1Nik7KWU8MCYmMD09PXMmJjAhPT10aGlzW3QraS0xXSYmKHM9MSksdGhpc1t0K2ldPShlL28+PjApLXMmMjU1O3JldHVybiB0K3J9LFNyLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGE9TWF0aC5wb3coMiw4KnItMSk7WHIodGhpcyxlLHQscixhLTEsLWEpfXZhciBpPXItMSxvPTEscz0wO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpKzFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sU3IucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxYcih0aGlzLGUsdCwxLDEyNywtMTI4KSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxTci5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fFhyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6JHIodGhpcyxlLHQsITApLHQrMn0sU3IucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxYcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksU3IuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOiRyKHRoaXMsZSx0LCExKSx0KzJ9LFNyLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOlpyKHRoaXMsZSx0LCEwKSx0KzR9LFNyLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8WHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxTci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOlpyKHRoaXMsZSx0LCExKSx0KzR9LFNyLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlbih0aGlzLGUsdCwhMCxyKX0sU3IucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVuKHRoaXMsZSx0LCExLHIpfSxTci5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRuKHRoaXMsZSx0LCEwLHIpfSxTci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRuKHRoaXMsZSx0LCExLHIpfSxTci5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBhLGk9bi1yO2lmKHRoaXM9PT1lJiZyPHQmJnQ8bilmb3IoYT1pLTE7YT49MDstLWEpZVthK3RdPXRoaXNbYStyXTtlbHNlIGlmKGk8MWUzfHwhU3IuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoYT0wO2E8aTsrK2EpZVthK3RdPXRoaXNbYStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIraSksdCk7cmV0dXJuIGl9LFNyLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBhPWUuY2hhckNvZGVBdCgwKTthPDI1NiYmKGU9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFTci5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD10KXJldHVybiB0aGlzO3ZhciBpO2lmKHQ+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihpPXQ7aTxyOysraSl0aGlzW2ldPWU7ZWxzZXt2YXIgbz1QcihlKT9lOmFuKG5ldyBTcihlLG4pLnRvU3RyaW5nKCkpLHM9by5sZW5ndGg7Zm9yKGk9MDtpPHItdDsrK2kpdGhpc1tpK3RdPW9baSVzXX1yZXR1cm4gdGhpc307dmFyIHJuPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIG5uKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBhbihlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxhPW51bGwsaT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9ZS5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWEpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9YT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KSxhPXI7Y29udGludWV9cj02NTUzNisoYS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBhJiYodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSk7aWYoYT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztpLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO2kucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztpLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO2kucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGl9ZnVuY3Rpb24gb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGksbztwcnx8ZHIoKTt2YXIgcz1lLmxlbmd0aDtpZihzJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtpPSI9Ij09PWVbcy0yXT8yOiI9Ij09PWVbcy0xXT8xOjAsbz1uZXcgaHIoMypzLzQtaSksbj1pPjA/cy00OnM7dmFyIHU9MDtmb3IodD0wLHI9MDt0PG47dCs9NCxyKz0zKWE9bHJbZS5jaGFyQ29kZUF0KHQpXTw8MTh8bHJbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxscltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bHJbZS5jaGFyQ29kZUF0KHQrMyldLG9bdSsrXT1hPj4xNiYyNTUsb1t1KytdPWE+PjgmMjU1LG9bdSsrXT0yNTUmYTtyZXR1cm4gMj09PWk/KGE9bHJbZS5jaGFyQ29kZUF0KHQpXTw8MnxscltlLmNoYXJDb2RlQXQodCsxKV0+PjQsb1t1KytdPTI1NSZhKToxPT09aSYmKGE9bHJbZS5jaGFyQ29kZUF0KHQpXTw8MTB8bHJbZS5jaGFyQ29kZUF0KHQrMSldPDw0fGxyW2UuY2hhckNvZGVBdCh0KzIpXT4+MixvW3UrK109YT4+OCYyNTUsb1t1KytdPTI1NSZhKSxvfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHJuLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBzbihlLHQscixuKXtmb3IodmFyIGE9MDthPG4mJiEoYStyPj10Lmxlbmd0aHx8YT49ZS5sZW5ndGgpOysrYSl0W2Ercl09ZVthXTtyZXR1cm4gYX1mdW5jdGlvbiB1bihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fGNuKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJmNuKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBjbihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBmbj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6U3IsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksU3IuYWxsb2MoK2UpfSxpc0J1ZmZlcjp1bixrTWF4TGVuZ3RoOmtyfSksbG49e2V4cG9ydHM6e319LGhuPXt9LHBuPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwbiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscG4uZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXQlNDtpZighcilyZXR1cm4gZTt2YXIgbj10LGE9NC1yLGk9dCthLG89U3IuYWxsb2MoaSk7Zm9yKG8ud3JpdGUoZSk7YS0tOylvLndyaXRlKCI9IixuKyspO3JldHVybiBvLnRvU3RyaW5nKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRuPXBuO2Z1bmN0aW9uIHZuKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksU3IuaXNCdWZmZXIoZSk/eW4oZS50b1N0cmluZygiYmFzZTY0IikpOnluKFNyLmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIGduKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxkbi5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiB5bihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIil9dmFyIG1uLHduPXZuO3duLmVuY29kZT12bix3bi5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxTci5mcm9tKGduKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sd24udG9CYXNlNjQ9Z24sd24uZnJvbUJhc2U2ND15bix3bi50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gU3IuZnJvbShnbihlKSwiYmFzZTY0Iil9LGhuLmRlZmF1bHQ9d24sKG1uPWxuKS5leHBvcnRzPWhuLmRlZmF1bHQsbW4uZXhwb3J0cy5kZWZhdWx0PW1uLmV4cG9ydHM7dmFyIGJuPWxuLmV4cG9ydHMsa249e2V4cG9ydHM6e319OyFmdW5jdGlvbihlKXshZnVuY3Rpb24odCxyKXt2YXIgbj17fTshZnVuY3Rpb24oZSl7ZS5fX2VzTW9kdWxlPSEwLGUuZGlnZXN0TGVuZ3RoPTMyLGUuYmxvY2tTaXplPTY0O3ZhciB0PW5ldyBVaW50MzJBcnJheShbMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSk7ZnVuY3Rpb24gcihlLHIsbixhLGkpe2Zvcih2YXIgbyxzLHUsYyxmLGwsaCxwLGQsdixnLHksbTtpPj02NDspe2ZvcihvPXJbMF0scz1yWzFdLHU9clsyXSxjPXJbM10sZj1yWzRdLGw9cls1XSxoPXJbNl0scD1yWzddLHY9MDt2PDE2O3YrKylnPWErNCp2LGVbdl09KDI1NSZuW2ddKTw8MjR8KDI1NSZuW2crMV0pPDwxNnwoMjU1Jm5bZysyXSk8PDh8MjU1Jm5bZyszXTtmb3Iodj0xNjt2PDY0O3YrKyl5PSgoZD1lW3YtMl0pPj4+MTd8ZDw8MTUpXihkPj4+MTl8ZDw8MTMpXmQ+Pj4xMCxtPSgoZD1lW3YtMTVdKT4+Pjd8ZDw8MjUpXihkPj4+MTh8ZDw8MTQpXmQ+Pj4zLGVbdl09KHkrZVt2LTddfDApKyhtK2Vbdi0xNl18MCk7Zm9yKHY9MDt2PDY0O3YrKyl5PSgoKGY+Pj42fGY8PDI2KV4oZj4+PjExfGY8PDIxKV4oZj4+PjI1fGY8PDcpKSsoZiZsXn5mJmgpfDApKyhwKyh0W3ZdK2Vbdl18MCl8MCl8MCxtPSgobz4+PjJ8bzw8MzApXihvPj4+MTN8bzw8MTkpXihvPj4+MjJ8bzw8MTApKSsobyZzXm8mdV5zJnUpfDAscD1oLGg9bCxsPWYsZj1jK3l8MCxjPXUsdT1zLHM9byxvPXkrbXwwO3JbMF0rPW8sclsxXSs9cyxyWzJdKz11LHJbM10rPWMscls0XSs9ZixyWzVdKz1sLHJbNl0rPWgscls3XSs9cCxhKz02NCxpLT02NH1yZXR1cm4gYX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpZ2VzdExlbmd0aD1lLmRpZ2VzdExlbmd0aCx0aGlzLmJsb2NrU2l6ZT1lLmJsb2NrU2l6ZSx0aGlzLnN0YXRlPW5ldyBJbnQzMkFycmF5KDgpLHRoaXMudGVtcD1uZXcgSW50MzJBcnJheSg2NCksdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTI4KSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXMucmVzZXQoKX1yZXR1cm4gdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZVswXT0xNzc5MDMzNzAzLHRoaXMuc3RhdGVbMV09MzE0NDEzNDI3Nyx0aGlzLnN0YXRlWzJdPTEwMTM5MDQyNDIsdGhpcy5zdGF0ZVszXT0yNzczNDgwNzYyLHRoaXMuc3RhdGVbNF09MTM1OTg5MzExOSx0aGlzLnN0YXRlWzVdPTI2MDA4MjI5MjQsdGhpcy5zdGF0ZVs2XT01Mjg3MzQ2MzUsdGhpcy5zdGF0ZVs3XT0xNTQxNDU5MjI1LHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpc30sdC5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuYnVmZmVyLmxlbmd0aDtlKyspdGhpcy5idWZmZXJbZV09MDtmb3IoZT0wO2U8dGhpcy50ZW1wLmxlbmd0aDtlKyspdGhpcy50ZW1wW2VdPTA7dGhpcy5yZXNldCgpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD1lLmxlbmd0aCksdGhpcy5maW5pc2hlZCl0aHJvdyBuZXcgRXJyb3IoIlNIQTI1NjogY2FuJ3QgdXBkYXRlIGJlY2F1c2UgaGFzaCB3YXMgZmluaXNoZWQuIik7dmFyIG49MDtpZih0aGlzLmJ5dGVzSGFzaGVkKz10LHRoaXMuYnVmZmVyTGVuZ3RoPjApe2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8NjQmJnQ+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTs2ND09PXRoaXMuYnVmZmVyTGVuZ3RoJiYocih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLDY0KSx0aGlzLmJ1ZmZlckxlbmd0aD0wKX1mb3IodD49NjQmJihuPXIodGhpcy50ZW1wLHRoaXMuc3RhdGUsZSxuLHQpLHQlPTY0KTt0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbbisrXSx0LS07cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtpZighdGhpcy5maW5pc2hlZCl7dmFyIHQ9dGhpcy5ieXRlc0hhc2hlZCxuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9dC81MzY4NzA5MTJ8MCxpPXQ8PDMsbz10JTY0PDU2PzY0OjEyODt0aGlzLmJ1ZmZlcltuXT0xMjg7Zm9yKHZhciBzPW4rMTtzPG8tODtzKyspdGhpcy5idWZmZXJbc109MDt0aGlzLmJ1ZmZlcltvLThdPWE+Pj4yNCYyNTUsdGhpcy5idWZmZXJbby03XT1hPj4+MTYmMjU1LHRoaXMuYnVmZmVyW28tNl09YT4+PjgmMjU1LHRoaXMuYnVmZmVyW28tNV09YT4+PjAmMjU1LHRoaXMuYnVmZmVyW28tNF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltvLTNdPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbby0yXT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbby0xXT1pPj4+MCYyNTUscih0aGlzLnRlbXAsdGhpcy5zdGF0ZSx0aGlzLmJ1ZmZlciwwLG8pLHRoaXMuZmluaXNoZWQ9ITB9Zm9yKHM9MDtzPDg7cysrKWVbNCpzKzBdPXRoaXMuc3RhdGVbc10+Pj4yNCYyNTUsZVs0KnMrMV09dGhpcy5zdGF0ZVtzXT4+PjE2JjI1NSxlWzQqcysyXT10aGlzLnN0YXRlW3NdPj4+OCYyNTUsZVs0KnMrM109dGhpcy5zdGF0ZVtzXT4+PjAmMjU1O3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LHQucHJvdG90eXBlLl9zYXZlU3RhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLnN0YXRlLmxlbmd0aDt0KyspZVt0XT10aGlzLnN0YXRlW3RdfSx0LnByb3RvdHlwZS5fcmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0aGlzLnN0YXRlLmxlbmd0aDtyKyspdGhpcy5zdGF0ZVtyXT1lW3JdO3RoaXMuYnl0ZXNIYXNoZWQ9dCx0aGlzLmZpbmlzaGVkPSExLHRoaXMuYnVmZmVyTGVuZ3RoPTB9LHR9KCk7ZS5IYXNoPW47dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuaW5uZXI9bmV3IG4sdGhpcy5vdXRlcj1uZXcgbix0aGlzLmJsb2NrU2l6ZT10aGlzLmlubmVyLmJsb2NrU2l6ZSx0aGlzLmRpZ2VzdExlbmd0aD10aGlzLmlubmVyLmRpZ2VzdExlbmd0aDt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmJsb2NrU2l6ZSk7aWYoZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUpKG5ldyBuKS51cGRhdGUoZSkuZmluaXNoKHQpLmNsZWFuKCk7ZWxzZSBmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0W3JdPWVbcl07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdXj01NDt0aGlzLmlubmVyLnVwZGF0ZSh0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTEwNjt0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl09MH1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5fcmVzdG9yZVN0YXRlKHRoaXMuaXN0YXRlLHRoaXMuaW5uZXIuYmxvY2tTaXplKSx0aGlzLm91dGVyLl9yZXN0b3JlU3RhdGUodGhpcy5vc3RhdGUsdGhpcy5vdXRlci5ibG9ja1NpemUpLHRoaXN9LGUucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmlzdGF0ZS5sZW5ndGg7ZSsrKXRoaXMub3N0YXRlW2VdPXRoaXMuaXN0YXRlW2VdPTA7dGhpcy5pbm5lci5jbGVhbigpLHRoaXMub3V0ZXIuY2xlYW4oKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShlKSx0aGlzfSxlLnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3V0ZXIuZmluaXNoZWQ/dGhpcy5vdXRlci5maW5pc2goZSk6KHRoaXMuaW5uZXIuZmluaXNoKGUpLHRoaXMub3V0ZXIudXBkYXRlKGUsdGhpcy5kaWdlc3RMZW5ndGgpLmZpbmlzaChlKSksdGhpc30sZS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSxlfSgpO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9KG5ldyBuKS51cGRhdGUoZSkscj10LmRpZ2VzdCgpO3JldHVybiB0LmNsZWFuKCkscn1mdW5jdGlvbiBvKGUsdCl7dmFyIHI9bmV3IGEoZSkudXBkYXRlKHQpLG49ci5kaWdlc3QoKTtyZXR1cm4gci5jbGVhbigpLG59ZnVuY3Rpb24gcyhlLHQscixuKXt2YXIgYT1uWzBdO2lmKDA9PT1hKXRocm93IG5ldyBFcnJvcigiaGtkZjogY2Fubm90IGV4cGFuZCBtb3JlIik7dC5yZXNldCgpLGE+MSYmdC51cGRhdGUoZSksciYmdC51cGRhdGUociksdC51cGRhdGUobiksdC5maW5pc2goZSksblswXSsrfWUuSE1BQz1hLGUuaGFzaD1pLGUuZGVmYXVsdD1pLGUuaG1hYz1vO3ZhciB1PW5ldyBVaW50OEFycmF5KGUuZGlnZXN0TGVuZ3RoKTtmdW5jdGlvbiBjKGUsdCxyLG4pe3ZvaWQgMD09PXQmJih0PXUpLHZvaWQgMD09PW4mJihuPTMyKTtmb3IodmFyIGk9bmV3IFVpbnQ4QXJyYXkoWzFdKSxjPW8odCxlKSxmPW5ldyBhKGMpLGw9bmV3IFVpbnQ4QXJyYXkoZi5kaWdlc3RMZW5ndGgpLGg9bC5sZW5ndGgscD1uZXcgVWludDhBcnJheShuKSxkPTA7ZDxuO2QrKyloPT09bC5sZW5ndGgmJihzKGwsZixyLGkpLGg9MCkscFtkXT1sW2grK107cmV0dXJuIGYuY2xlYW4oKSxsLmZpbGwoMCksaS5maWxsKDApLHB9ZnVuY3Rpb24gZihlLHQscixuKXtmb3IodmFyIGk9bmV3IGEoZSksbz1pLmRpZ2VzdExlbmd0aCxzPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkobyksYz1uZXcgVWludDhBcnJheShvKSxmPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKm88bjtsKyspe3ZhciBoPWwrMTtzWzBdPWg+Pj4yNCYyNTUsc1sxXT1oPj4+MTYmMjU1LHNbMl09aD4+PjgmMjU1LHNbM109aD4+PjAmMjU1LGkucmVzZXQoKSxpLnVwZGF0ZSh0KSxpLnVwZGF0ZShzKSxpLmZpbmlzaChjKTtmb3IodmFyIHA9MDtwPG87cCsrKXVbcF09Y1twXTtmb3IocD0yO3A8PXI7cCsrKXtpLnJlc2V0KCksaS51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgZD0wO2Q8bztkKyspdVtkXV49Y1tkXX1mb3IocD0wO3A8byYmbCpvK3A8bjtwKyspZltsKm8rcF09dVtwXX1mb3IobD0wO2w8bztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKXNbbF09MDtyZXR1cm4gaS5jbGVhbigpLGZ9ZS5oa2RmPWMsZS5wYmtkZjI9Zn0obik7dmFyIGE9bi5kZWZhdWx0O2Zvcih2YXIgaSBpbiBuKWFbaV09bltpXTtlLmV4cG9ydHM9YX0oKX0oa24pO3ZhciB4bj0kKGtuLmV4cG9ydHMpLF9uPWNyeXB0byxTbj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIENyeXB0b0tleX0sRW49bmV3IFRleHRFbmNvZGVyLFRuPW5ldyBUZXh0RGVjb2RlcjtmdW5jdGlvbiBBbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPXQucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QubGVuZ3RofSksMCksYT1uZXcgVWludDhBcnJheShuKSxpPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5zZXQoZSxpKSxpKz1lLmxlbmd0aH0pKSxhfXZhciBSbj1mdW5jdGlvbihlKXt2YXIgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1Ubi5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hdG9iKGUpLHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXQuY2hhckNvZGVBdChuKTtyZXR1cm4gcn0odCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX0sQ249ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcihlKXt2YXIgbixhO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLG4ubmFtZT1uLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PShhPUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09YXx8YS5jYWxsKEVycm9yLGcobiksbi5jb25zdHJ1Y3Rvciksbn1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSk9TRV9HRU5FUklDIn19XSkscn0odihFcnJvcikpLFBuPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoZSl7dmFyIG4sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3JldHVybiBvKHRoaXMsciksKG49dC5jYWxsKHRoaXMsZSkpLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLG4uY2xhaW09YSxuLnJlYXNvbj1pLG59cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fV0pLHJ9KENuKSxEbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKGUpe3ZhciBuLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtyZXR1cm4gbyh0aGlzLHIpLChuPXQuY2FsbCh0aGlzLGUpKS5jb2RlPSJFUlJfSldUX0VYUElSRUQiLG4uY2xhaW09YSxuLnJlYXNvbj1pLG59cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19XSkscn0oQ24pLE9uPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19XSkscn0oQ24pLEluPWZ1bmN0aW9uKGUpe2YocixlKTt2YXIgdD1tKHIpO2Z1bmN0aW9uIHIoKXt2YXIgZTtyZXR1cm4gbyh0aGlzLHIpLChlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpKS5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIixlfXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1dKSxyfShDbiksTG49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCIsZX1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1dKSxyfShDbiksVW49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCIsZX1yZXR1cm4gdShyLG51bGwsW3trZXk6ImNvZGUiLGdldDpmdW5jdGlvbigpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1dKSxyfShDbiksSG49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXS1NfSU5WQUxJRCJ9fV0pLHJ9KENuKSxNbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXS1NfTk9fTUFUQ0hJTkdfS0VZIixlLm1lc3NhZ2U9Im5vIGFwcGxpY2FibGUga2V5IGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0IixlfXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fV0pLHJ9KENuKSxqbj1mdW5jdGlvbihlKXtmKHIsZSk7dmFyIHQ9bShyKTtmdW5jdGlvbiByKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxyKSwoZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsZS5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0IixlfXJldHVybiB1KHIsbnVsbCxbe2tleToiY29kZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1dKSxyfShDbiksTm49ZnVuY3Rpb24oZSl7ZihyLGUpO3ZhciB0PW0ocik7ZnVuY3Rpb24gcigpe3ZhciBlO3JldHVybiBvKHRoaXMsciksKGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLGUubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiLGV9cmV0dXJuIHUocixudWxsLFt7a2V5OiJjb2RlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCJ9fV0pLHJ9KENuKTtmdW5jdGlvbiBxbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIEtuKCl7dHJ5e3JldHVybiB2b2lkIDAhPT1KZS52ZXJzaW9ucy5ub2RlfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBKbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFsZ29yaXRobS5uYW1lIjtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyAiLmNvbmNhdCh0LCIgbXVzdCBiZSAiKS5jb25jYXQoZSkpfWZ1bmN0aW9uIEJuKGUsdCl7cmV0dXJuIGUubmFtZT09PXR9ZnVuY3Rpb24gRm4oZSl7cmV0dXJuIHBhcnNlSW50KGUubmFtZS5zbGljZSg0KSwxMCl9ZnVuY3Rpb24gV24oZSl7c3dpdGNoKGUpe2Nhc2UiRVMyNTYiOnJldHVybiJQLTI1NiI7Y2FzZSJFUzM4NCI6cmV0dXJuIlAtMzg0IjtjYXNlIkVTNTEyIjpyZXR1cm4iUC01MjEiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpfX1mdW5jdGlvbiB6bihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gZS51c2FnZXMuaW5jbHVkZXModCl9KSkpe3ZhciByPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXt2YXIgbj10LnBvcCgpO3IrPSJvbmUgb2YgIi5jb25jYXQodC5qb2luKCIsICIpLCIsIG9yICIpLmNvbmNhdChuLCIuIil9ZWxzZSAyPT09dC5sZW5ndGg/cis9Im9uZSBvZiAiLmNvbmNhdCh0WzBdLCIgb3IgIikuY29uY2F0KHRbMV0sIi4iKTpyKz0iIi5jb25jYXQodFswXSwiLiIpO3Rocm93IG5ldyBUeXBlRXJyb3Iocil9fXZhciBZbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9IktleSBtdXN0IGJlICIscj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspYVtpLTFdPWFyZ3VtZW50c1tpXTtpZihhLmxlbmd0aD4yKXt2YXIgbz1hLnBvcCgpO3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChhLmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG8sIi4iKX1lbHNlIDI9PT1hLmxlbmd0aD90Kz0ib25lIG9mIHR5cGUgIi5jb25jYXQoYVswXSwiIG9yICIpLmNvbmNhdChhWzFdLCIuIik6dCs9Im9mIHR5cGUgIi5jb25jYXQoYVswXSwiLiIpO3JldHVybiBudWxsPT1lP3QrPSIgUmVjZWl2ZWQgIi5jb25jYXQoZSk6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUubmFtZT90Kz0iIFJlY2VpdmVkIGZ1bmN0aW9uICIuY29uY2F0KGUubmFtZSk6Im9iamVjdCI9PT1uKGUpJiZudWxsIT1lJiZlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWUmJih0Kz0iIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICIuY29uY2F0KGUuY29uc3RydWN0b3IubmFtZSkpLHR9LEduPWZ1bmN0aW9uKGUpe3JldHVybiBTbihlKX0sVm49WyJDcnlwdG9LZXkiXSxYbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuLGE9dC5maWx0ZXIoQm9vbGVhbik7aWYoMD09PWEubGVuZ3RofHwxPT09YS5sZW5ndGgpcmV0dXJuITA7dmFyIGksbz1fKGEpO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIHM9aS52YWx1ZSx1PU9iamVjdC5rZXlzKHMpO2lmKG4mJjAhPT1uLnNpemUpZm9yKHZhciBjPTAsZj11O2M8Zi5sZW5ndGg7YysrKXt2YXIgbD1mW2NdO2lmKG4uaGFzKGwpKXJldHVybiExO24uYWRkKGwpfWVsc2Ugbj1uZXcgU2V0KHUpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1yZXR1cm4hMH07ZnVuY3Rpb24gJG4oZSl7aWYoIm9iamVjdCIhPT1uKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2Zvcih2YXIgcj1lO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yfXZhciBabj1mdW5jdGlvbihlLHQpe2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXt2YXIgcj10LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoO2lmKCJudW1iZXIiIT10eXBlb2Ygcnx8cjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KGUsIiByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyIikpfX07ZnVuY3Rpb24gUW4oZSl7dmFyIHQscjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxyPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBJbigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxyPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxyPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LHI9WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLSIuY29uY2F0KHBhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDEpfSxyPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxyPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZShxbigpfHxLbigpKSYmIk9LUCI6aWYoIkVkRFNBIiE9PWUuYWxnKXRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyk7c3dpdGNoKGUuY3J2KXtjYXNlIkVkMjU1MTkiOnQ9e25hbWU6Ik5PREUtRUQyNTUxOSIsbmFtZWRDdXJ2ZToiTk9ERS1FRDI1NTE5In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIEtuKCkmJiJFZDQ0OCI6dD17bmFtZToiTk9ERS1FRDQ0OCIsbmFtZWRDdXJ2ZToiTk9ERS1FRDQ0OCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSW4oJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBJbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fXZhciBlYT1mdW5jdGlvbigpe3ZhciBlPWkocigpLm1hcmsoKGZ1bmN0aW9uIGUobil7dmFyIGEsaSxvLHMsdSxjLGYsbCxoO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocz1RbihuKSx1PXMuYWxnb3JpdGhtLGM9cy5rZXlVc2FnZXMsZj1bdSxudWxsIT09KGk9bi5leHQpJiZ2b2lkIDAhPT1pJiZpLG51bGwhPT0obz1uLmtleV9vcHMpJiZ2b2lkIDAhPT1vP286Y10sIlBCS0RGMiIhPT11Lm5hbWUpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIiwobD1fbi5zdWJ0bGUpLmltcG9ydEtleS5hcHBseShsLFsicmF3IixSbihuLmspXS5jb25jYXQoZikpKTtjYXNlIDQ6cmV0dXJuIGRlbGV0ZShoPXQoe30sbikpLmFsZyxlLmFicnVwdCgicmV0dXJuIiwoYT1fbi5zdWJ0bGUpLmltcG9ydEtleS5hcHBseShhLFsiandrIixoXS5jb25jYXQoZikpKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZnVuY3Rpb24gdGEoZSx0LHIpe3JldHVybiByYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcmEoKXtyZXR1cm4ocmE9aShyKCkubWFyaygoZnVuY3Rpb24gZShuLGEsaSl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigkbihuKSl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcigiSldLIG11c3QgYmUgYW4gb2JqZWN0Iik7Y2FzZSAyOmlmKGF8fChhPW4uYWxnKSwic3RyaW5nIj09dHlwZW9mIGEmJmEpe2UubmV4dD01O2JyZWFrfXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7Y2FzZSA1OmUudDA9bi5rdHksZS5uZXh0PSJvY3QiPT09ZS50MD84OiJSU0EiPT09ZS50MD8xNDoiRUMiPT09ZS50MHx8Ik9LUCI9PT1lLnQwPzE2OjE3O2JyZWFrO2Nhc2UgODppZigic3RyaW5nIj09dHlwZW9mIG4uayYmbi5rKXtlLm5leHQ9MTA7YnJlYWt9dGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7Y2FzZSAxMDppZihudWxsIT1pfHwoaT0hMCE9PW4uZXh0KSwhaSl7ZS5uZXh0PTEzO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIixlYSh0KHQoe30sbikse30se2FsZzphLGV4dDohMX0pKSk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsUm4obi5rKSk7Y2FzZSAxNDppZih2b2lkIDA9PT1uLm90aCl7ZS5uZXh0PTE2O2JyZWFrfXRocm93IG5ldyBJbignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSAxNjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZWEodCh0KHt9LG4pLHt9LHthbGc6YX0pKSk7Y2FzZSAxNzp0aHJvdyBuZXcgSW4oJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyk7Y2FzZSAxODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBuYT1mdW5jdGlvbihlLHQscil7ZS5zdGFydHNXaXRoKCJIUyIpfHwiZGlyIj09PWV8fGUuc3RhcnRzV2l0aCgiUEJFUzIiKXx8L15BXGR7M30oPzpHQ00pP0tXJC8udGVzdChlKT9mdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIUduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoWW4uYXBwbHkodm9pZCAwLFtlXS5jb25jYXQoYihWbiksWyJVaW50OEFycmF5Il0pKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IGJlIG9mIHR5cGUgInNlY3JldCInKSl9fSh0KTpmdW5jdGlvbihlLHQpe2lmKCFHbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFluLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KGIoVm4pKSkpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KFZuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCInKSk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBzaWduaW5nIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoVm4uam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBkZWNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSInKSk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KFZuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gdmVyaWZ5aW5nIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoIiIuY29uY2F0KFZuLmpvaW4oIiBvciAiKSwnIGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZW5jcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyInKSl9KHQscil9O2Z1bmN0aW9uIGFhKGUsdCxyLG4sYSl7aWYodm9pZCAwIT09YS5jcml0JiZ2b2lkIDA9PT1uLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIW58fHZvaWQgMD09PW4uY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShuLmNyaXQpfHwwPT09bi5jcml0Lmxlbmd0aHx8bi5jcml0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RofSkpKXRocm93IG5ldyBlKCciY3JpdCIgKENyaXRpY2FsKSBIZWFkZXIgUGFyYW1ldGVyIE1VU1QgYmUgYW4gYXJyYXkgb2Ygbm9uLWVtcHR5IHN0cmluZ3Mgd2hlbiBwcmVzZW50Jyk7dmFyIGk7aT12b2lkIDAhPT1yP25ldyBNYXAoW10uY29uY2F0KGIoT2JqZWN0LmVudHJpZXMocikpLGIodC5lbnRyaWVzKCkpKSk6dDt2YXIgbyxzPV8obi5jcml0KTt0cnl7Zm9yKHMucygpOyEobz1zLm4oKSkuZG9uZTspe3ZhciB1PW8udmFsdWU7aWYoIWkuaGFzKHUpKXRocm93IG5ldyBJbignRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHUsJyIgaXMgbm90IHJlY29nbml6ZWQnKSk7aWYodm9pZCAwPT09YVt1XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHUsJyIgaXMgbWlzc2luZycpKTtpZihpLmdldCh1KSYmdm9pZCAwPT09blt1XSl0aHJvdyBuZXcgZSgnRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIicuY29uY2F0KHUsJyIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJykpfX1jYXRjaChlKXtzLmUoZSl9ZmluYWxseXtzLmYoKX1yZXR1cm4gbmV3IFNldChuLmNyaXQpfXZhciBpYT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGV9KSkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyInLmNvbmNhdChlLCciIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7aWYodClyZXR1cm4gbmV3IFNldCh0KX07ZnVuY3Rpb24gb2EoZSx0KXt2YXIgcj0iU0hBLSIuY29uY2F0KGUuc2xpY2UoLTMpKTtzd2l0Y2goZSl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJITUFDIn07Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOmUuc2xpY2UoLTMpPj4zfTtjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQVNTQS1QS0NTMS12MV81In07Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6cmV0dXJue2hhc2g6cixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTp0Lm5hbWVkQ3VydmV9O2Nhc2UocW4oKXx8S24oKSkmJiJFZERTQSI6dmFyIG49dC5uYW1lZEN1cnZlO3JldHVybntuYW1lOm4sbmFtZWRDdXJ2ZTpufTtkZWZhdWx0OnRocm93IG5ldyBJbigiYWxnICIuY29uY2F0KGUsIiBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lIikpfX1mdW5jdGlvbiBzYShlLHQscil7aWYoU24odCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOmlmKCFCbihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IEpuKCJITUFDIik7dmFyIHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoRm4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IEpuKCJTSEEtIi5jb25jYXQociksImFsZ29yaXRobS5oYXNoIik7YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6aWYoIUJuKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IEpuKCJSU0FTU0EtUEtDUzEtdjFfNSIpO3ZhciBuPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKEZuKGUuYWxnb3JpdGhtLmhhc2gpIT09bil0aHJvdyBKbigiU0hBLSIuY29uY2F0KG4pLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrO2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOmlmKCFCbihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IEpuKCJSU0EtUFNTIik7dmFyIGE9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoRm4oZS5hbGdvcml0aG0uaGFzaCkhPT1hKXRocm93IEpuKCJTSEEtIi5jb25jYXQoYSksImFsZ29yaXRobS5oYXNoIik7YnJlYWs7Y2FzZSBLbigpJiYiRWREU0EiOmlmKCJOT0RFLUVEMjU1MTkiIT09ZS5hbGdvcml0aG0ubmFtZSYmIk5PREUtRUQ0NDgiIT09ZS5hbGdvcml0aG0ubmFtZSl0aHJvdyBKbigiTk9ERS1FRDI1NTE5IG9yIE5PREUtRUQ0NDgiKTticmVhaztjYXNlIHFuKCkmJiJFZERTQSI6aWYoIUJuKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBKbigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6aWYoIUJuKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IEpuKCJFQ0RTQSIpO3ZhciBpPVduKHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1pKXRocm93IEpuKGksImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfWZvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KG8+Mj9vLTI6MCksdT0yO3U8bzt1Kyspc1t1LTJdPWFyZ3VtZW50c1t1XTt6bihlLHMpfSh0LGUsciksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFluLmFwcGx5KHZvaWQgMCxbdF0uY29uY2F0KGIoVm4pKSkpO3JldHVybiBfbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6IlNIQS0iLmNvbmNhdChlLnNsaWNlKC0zKSksbmFtZToiSE1BQyJ9LCExLFtyXSl9dGhyb3cgbmV3IFR5cGVFcnJvcihZbi5hcHBseSh2b2lkIDAsW3RdLmNvbmNhdChiKFZuKSxbIlVpbnQ4QXJyYXkiXSkpKX12YXIgdWE9ZnVuY3Rpb24oKXt2YXIgZT1pKHIoKS5tYXJrKChmdW5jdGlvbiBlKHQsbixhLGkpe3ZhciBvLHM7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsc2EodCxuLCJ2ZXJpZnkiKTtjYXNlIDI6cmV0dXJuIG89ZS5zZW50LFpuKHQsbykscz1vYSh0LG8uYWxnb3JpdGhtKSxlLnByZXY9NSxlLm5leHQ9OCxfbi5zdWJ0bGUudmVyaWZ5KHMsbyxhLGkpO2Nhc2UgODpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDExOnJldHVybiBlLnByZXY9MTEsZS50MD1lLmNhdGNoKDUpLGUuYWJydXB0KCJyZXR1cm4iLCExKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbNSwxMV1dKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQscixuLGEpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7ZnVuY3Rpb24gY2EoZSx0LHIpe3JldHVybiBmYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZmEoKXtyZXR1cm4gZmE9aShyKCkubWFyaygoZnVuY3Rpb24gZShuLGEsaSl7dmFyIG8scyx1LGMsZixsLGgscCxkLHYsZyx5LG07cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigkbihuKSl7ZS5uZXh0PTI7YnJlYWt9dGhyb3cgbmV3IExuKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7Y2FzZSAyOmlmKHZvaWQgMCE9PW4ucHJvdGVjdGVkfHx2b2lkIDAhPT1uLmhlYWRlcil7ZS5uZXh0PTQ7YnJlYWt9dGhyb3cgbmV3IExuKCdGbGF0dGVuZWQgSldTIG11c3QgaGF2ZSBlaXRoZXIgb2YgdGhlICJwcm90ZWN0ZWQiIG9yICJoZWFkZXIiIG1lbWJlcnMnKTtjYXNlIDQ6aWYodm9pZCAwPT09bi5wcm90ZWN0ZWR8fCJzdHJpbmciPT10eXBlb2Ygbi5wcm90ZWN0ZWQpe2UubmV4dD02O2JyZWFrfXRocm93IG5ldyBMbigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtjYXNlIDY6aWYodm9pZCAwIT09bi5wYXlsb2FkKXtlLm5leHQ9ODticmVha310aHJvdyBuZXcgTG4oIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtjYXNlIDg6aWYoInN0cmluZyI9PXR5cGVvZiBuLnNpZ25hdHVyZSl7ZS5uZXh0PTEwO2JyZWFrfXRocm93IG5ldyBMbigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7Y2FzZSAxMDppZih2b2lkIDA9PT1uLmhlYWRlcnx8JG4obi5oZWFkZXIpKXtlLm5leHQ9MTI7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7Y2FzZSAxMjppZihzPXt9LCFuLnByb3RlY3RlZCl7ZS5uZXh0PTIyO2JyZWFrfXU9Um4obi5wcm90ZWN0ZWQpLGUucHJldj0xNSxzPUpTT04ucGFyc2UoVG4uZGVjb2RlKHUpKSxlLm5leHQ9MjI7YnJlYWs7Y2FzZSAxOTp0aHJvdyBlLnByZXY9MTksZS50MD1lLmNhdGNoKDE1KSxuZXcgTG4oIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKTtjYXNlIDIyOmlmKFhuKHMsbi5oZWFkZXIpKXtlLm5leHQ9MjQ7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y2FzZSAyNDppZihjPXQodCh7fSxzKSxuLmhlYWRlciksZj1hYShMbixuZXcgTWFwKFtbImI2NCIsITBdXSksbnVsbD09aT92b2lkIDA6aS5jcml0LHMsYyksbD0hMCwhZi5oYXMoImI2NCIpKXtlLm5leHQ9MzE7YnJlYWt9aWYoImJvb2xlYW4iPT10eXBlb2YobD1zLmI2NCkpe2UubmV4dD0zMTticmVha310aHJvdyBuZXcgTG4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y2FzZSAzMTppZigic3RyaW5nIj09dHlwZW9mKGg9Yy5hbGcpJiZoKXtlLm5leHQ9MzQ7YnJlYWt9dGhyb3cgbmV3IExuKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjYXNlIDM0OmlmKCEocD1pJiZpYSgiYWxnb3JpdGhtcyIsaS5hbGdvcml0aG1zKSl8fHAuaGFzKGgpKXtlLm5leHQ9Mzc7YnJlYWt9dGhyb3cgbmV3IE9uKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7Y2FzZSAzNzppZighbCl7ZS5uZXh0PTQyO2JyZWFrfWlmKCJzdHJpbmciPT10eXBlb2Ygbi5wYXlsb2FkKXtlLm5leHQ9NDA7YnJlYWt9dGhyb3cgbmV3IExuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIik7Y2FzZSA0MDplLm5leHQ9NDQ7YnJlYWs7Y2FzZSA0MjppZigic3RyaW5nIj09dHlwZW9mIG4ucGF5bG9hZHx8bi5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSl7ZS5uZXh0PTQ0O2JyZWFrfXRocm93IG5ldyBMbigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7Y2FzZSA0NDppZihkPSExLCJmdW5jdGlvbiIhPXR5cGVvZiBhKXtlLm5leHQ9NTA7YnJlYWt9cmV0dXJuIGUubmV4dD00OCxhKHMsbik7Y2FzZSA0ODphPWUuc2VudCxkPSEwO2Nhc2UgNTA6cmV0dXJuIG5hKGgsYSwidmVyaWZ5Iiksdj1BbihFbi5lbmNvZGUobnVsbCE9PShvPW4ucHJvdGVjdGVkKSYmdm9pZCAwIT09bz9vOiIiKSxFbi5lbmNvZGUoIi4iKSwic3RyaW5nIj09dHlwZW9mIG4ucGF5bG9hZD9Fbi5lbmNvZGUobi5wYXlsb2FkKTpuLnBheWxvYWQpLGc9Um4obi5zaWduYXR1cmUpLGUubmV4dD01NSx1YShoLGEsZyx2KTtjYXNlIDU1OmlmKGUuc2VudCl7ZS5uZXh0PTU4O2JyZWFrfXRocm93IG5ldyBObjtjYXNlIDU4OmlmKHk9bD9SbihuLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2Ygbi5wYXlsb2FkP0VuLmVuY29kZShuLnBheWxvYWQpOm4ucGF5bG9hZCxtPXtwYXlsb2FkOnl9LHZvaWQgMCE9PW4ucHJvdGVjdGVkJiYobS5wcm90ZWN0ZWRIZWFkZXI9cyksdm9pZCAwIT09bi5oZWFkZXImJihtLnVucHJvdGVjdGVkSGVhZGVyPW4uaGVhZGVyKSwhZCl7ZS5uZXh0PTY0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KHQoe30sbSkse30se2tleTphfSkpO2Nhc2UgNjQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG0pO2Nhc2UgNjU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1sxNSwxOV1dKX0pKSksZmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGxhKGUsdCxyKXtyZXR1cm4gaGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhhKCl7cmV0dXJuKGhhPWkocigpLm1hcmsoKGZ1bmN0aW9uIGUobixhLGkpe3ZhciBvLHMsdSxjLGYsbDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG4gaW5zdGFuY2VvZiBVaW50OEFycmF5JiYobj1Ubi5kZWNvZGUobikpLCJzdHJpbmciPT10eXBlb2Ygbil7ZS5uZXh0PTM7YnJlYWt9dGhyb3cgbmV3IExuKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjYXNlIDM6aWYobz1uLnNwbGl0KCIuIikscz1vWzBdLHU9b1sxXSxjPW9bMl0sMz09PW8ubGVuZ3RoKXtlLm5leHQ9NjticmVha310aHJvdyBuZXcgTG4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjYXNlIDY6cmV0dXJuIGUubmV4dD04LGNhKHtwYXlsb2FkOnUscHJvdGVjdGVkOnMsc2lnbmF0dXJlOmN9LGEsaSk7Y2FzZSA4OmlmKGY9ZS5zZW50LGw9e3BheWxvYWQ6Zi5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjpmLnByb3RlY3RlZEhlYWRlcn0sImZ1bmN0aW9uIiE9dHlwZW9mIGEpe2UubmV4dD0xMjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdCh0KHt9LGwpLHt9LHtrZXk6Zi5rZXl9KSk7Y2FzZSAxMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbCk7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBwYT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlLmdldFRpbWUoKS8xZTMpfSxkYT04NjQwMCx2YT0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaSxnYT1mdW5jdGlvbihlKXt2YXIgdD12YS5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7dmFyIHI9cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKHIpO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqcik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKnIpO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQocipkYSk7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpyKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKnIpfX0seWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpfSxtYT1mdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT90LmluY2x1ZGVzKGUpOiEhQXJyYXkuaXNBcnJheShlKSYmdC5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldChlKSkpfSx3YT1mdW5jdGlvbihlLHQpe3ZhciByLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9YS50eXA7aWYoaSYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHlhKGUudHlwKSE9PXlhKGkpKSl0aHJvdyBuZXcgUG4oJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO3RyeXtyPUpTT04ucGFyc2UoVG4uZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoISRuKHIpKXRocm93IG5ldyBVbigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO3ZhciBvPWEuaXNzdWVyO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoci5pc3MpKXRocm93IG5ldyBQbigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO3ZhciBzPWEuc3ViamVjdDtpZihzJiZyLnN1YiE9PXMpdGhyb3cgbmV3IFBuKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYz1hLmF1ZGllbmNlO2lmKGMmJiFtYShyLmF1ZCwic3RyaW5nIj09dHlwZW9mIGM/W2NdOmMpKXRocm93IG5ldyBQbigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3N3aXRjaChuKGEuY2xvY2tUb2xlcmFuY2UpKXtjYXNlInN0cmluZyI6dT1nYShhLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6dT1hLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjp1PTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9dmFyIGY9YS5jdXJyZW50RGF0ZSxsPXBhKGZ8fG5ldyBEYXRlKTtpZigodm9pZCAwIT09ci5pYXR8fGEubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIHIuaWF0KXRocm93IG5ldyBQbignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1yLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiByLm5iZil0aHJvdyBuZXcgUG4oJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoci5uYmY+bCt1KXRocm93IG5ldyBQbignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PXIuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIHIuZXhwKXRocm93IG5ldyBQbignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihyLmV4cDw9bC11KXRocm93IG5ldyBEbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKGEubWF4VG9rZW5BZ2Upe3ZhciBoPWwtci5pYXQscD0ibnVtYmVyIj09dHlwZW9mIGEubWF4VG9rZW5BZ2U/YS5tYXhUb2tlbkFnZTpnYShhLm1heFRva2VuQWdlKTtpZihoLXU+cCl0aHJvdyBuZXcgRG4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoaDwwLXUpdGhyb3cgbmV3IFBuKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIHJ9O2Z1bmN0aW9uIGJhKCl7cmV0dXJuKGJhPWkocigpLm1hcmsoKGZ1bmN0aW9uIGUobixhLGkpe3ZhciBvLHMsdSxjO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLGxhKG4sYSxpKTtjYXNlIDI6aWYocz1lLnNlbnQsIShudWxsPT09KG89cy5wcm90ZWN0ZWRIZWFkZXIuY3JpdCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uaW5jbHVkZXMoImI2NCIpKXx8ITEhPT1zLnByb3RlY3RlZEhlYWRlci5iNjQpe2UubmV4dD01O2JyZWFrfXRocm93IG5ldyBVbigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjYXNlIDU6aWYodT13YShzLnByb3RlY3RlZEhlYWRlcixzLnBheWxvYWQsaSksYz17cGF5bG9hZDp1LHByb3RlY3RlZEhlYWRlcjpzLnByb3RlY3RlZEhlYWRlcn0sImZ1bmN0aW9uIiE9dHlwZW9mIGEpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KHQoe30sYykse30se2tleTpzLmtleX0pKTtjYXNlIDk6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBrYShlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgSW4oJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19ZnVuY3Rpb24geGEoZSl7cmV0dXJuICRuKGUpfXZhciBfYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYobyh0aGlzLGUpLHRoaXMuX2NhY2hlZD1uZXcgV2Vha01hcCwhZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJvYmplY3QiPT09bihlKSYmQXJyYXkuaXNBcnJheShlLmtleXMpJiZlLmtleXMuZXZlcnkoeGEpfSh0KSl0aHJvdyBuZXcgSG4oIkpTT04gV2ViIEtleSBTZXQgbWFsZm9ybWVkIik7dmFyIHI7dGhpcy5fandrcz0ocj10LCJmdW5jdGlvbiI9PXR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU/c3RydWN0dXJlZENsb25lKHIpOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpKX12YXIgYTtyZXR1cm4gdShlLFt7a2V5OiJnZXRLZXkiLHZhbHVlOihhPWkocigpLm1hcmsoKGZ1bmN0aW9uIGUobixhKXt2YXIgaSxvLHMsdSxjLGYsbCxoLHA7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihpPXQodCh7fSxuKSxhLmhlYWRlciksbz1pLmFsZyxzPWkua2lkLHU9a2EobyksYz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChmdW5jdGlvbihlKXt2YXIgdD11PT09ZS5rdHk7aWYodCYmInN0cmluZyI9PXR5cGVvZiBzJiYodD1zPT09ZS5raWQpLHQmJiJzdHJpbmciPT10eXBlb2YgZS5hbGcmJih0PW89PT1lLmFsZyksdCYmInN0cmluZyI9PXR5cGVvZiBlLnVzZSYmKHQ9InNpZyI9PT1lLnVzZSksdCYmQXJyYXkuaXNBcnJheShlLmtleV9vcHMpJiYodD1lLmtleV9vcHMuaW5jbHVkZXMoInZlcmlmeSIpKSx0JiYiRWREU0EiPT09byYmKHQ9IkVkMjU1MTkiPT09ZS5jcnZ8fCJFZDQ0OCI9PT1lLmNydiksdClzd2l0Y2gobyl7Y2FzZSJFUzI1NiI6dD0iUC0yNTYiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzI1NksiOnQ9InNlY3AyNTZrMSI9PT1lLmNydjticmVhaztjYXNlIkVTMzg0Ijp0PSJQLTM4NCI9PT1lLmNydjticmVhaztjYXNlIkVTNTEyIjp0PSJQLTUyMSI9PT1lLmNydn1yZXR1cm4gdH0pKSxmPWNbMF0sMCE9PShsPWMubGVuZ3RoKSl7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgbmV3IE1uO2Nhc2UgODppZigxPT09bCl7ZS5uZXh0PTEwO2JyZWFrfXRocm93IG5ldyBqbjtjYXNlIDEwOmlmKHZvaWQgMCE9PShoPXRoaXMuX2NhY2hlZC5nZXQoZil8fHRoaXMuX2NhY2hlZC5zZXQoZix7fSkuZ2V0KGYpKVtvXSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiBlLm5leHQ9MTQsdGEodCh0KHt9LGYpLHt9LHtleHQ6ITB9KSxvKTtjYXNlIDE0OmlmKCEoKHA9ZS5zZW50KWluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1wLnR5cGUpKXtlLm5leHQ9MTc7YnJlYWt9dGhyb3cgbmV3IEhuKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nhc2UgMTc6aFtvXT1wO2Nhc2UgMTg6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGhbb10pO2Nhc2UgMTk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfV0pLGV9KCk7dmFyIFNhPXtleHBvcnRzOnt9fSxFYT17ZXhwb3J0czp7fX0sVGE9Wihmbik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgcj1UYSxuPXIuQnVmZmVyO2Z1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gaShlLHQscil7cmV0dXJuIG4oZSx0LHIpfW4uZnJvbSYmbi5hbGxvYyYmbi5hbGxvY1Vuc2FmZSYmbi5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGEocix0KSx0LkJ1ZmZlcj1pKSxpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxhKG4saSksaS5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlLHQscil9LGkuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGE9bihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/YS5maWxsKHQscik6YS5maWxsKHQpOmEuZmlsbCgwKSxhfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSl9LGkuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19KEVhLEVhLmV4cG9ydHMpO3ZhciBBYT02NTUzNixSYT00Mjk0OTY3Mjk1O3ZhciBDYT1FYS5leHBvcnRzLkJ1ZmZlcixQYT1YLmNyeXB0b3x8WC5tc0NyeXB0bztQYSYmUGEuZ2V0UmFuZG9tVmFsdWVzP1NhLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPlJhKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHI9Q2EuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+QWEpZm9yKHZhciBuPTA7bjxlO24rPUFhKVBhLmdldFJhbmRvbVZhbHVlcyhyLnNsaWNlKG4sbitBYSkpO2Vsc2UgUGEuZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBKZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwscil9KSk7cmV0dXJuIHJ9OlNhLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBEYT1TYS5leHBvcnRzLE9hPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28odGhpcyxlKX1yZXR1cm4gdShlLFt7a2V5OiJiYXNlNjRVUkxFbmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBibi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfX0se2tleToiYmFzZTY0VVJMRGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9fSx7a2V5OiJoYXNoU2hhMjU2Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gU3IuZnJvbSh4bigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX19LHtrZXk6ImdlbmVyYXRlUmFuZG9tQnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBEYShlKX19LHtrZXk6InZlcmlmeUp3dCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gYmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfShlLChzPXtrZXlzOlt0XX0sX2EucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBfYShzKSkpLHthbGdvcml0aG1zOnIsYXVkaWVuY2U6bixjbG9ja1RvbGVyYW5jZTpvLGlzc3VlcjphLHN1YmplY3Q6aX0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSghMCl9KSk7dmFyIHN9fV0pLGV9KCk7b3JpZ2luLFUuU2Vzc2lvblN0b3JhZ2U7dmFyIElhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtvKHRoaXMsZSksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9dCx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmV0dXJuIHUoZSxbe2tleToicmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG4sYSxpLG89dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtjYXNlIDI6aWYoIShuPXQuc2VudCkucmVmcmVzaF90b2tlbil7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIGE9cGFyc2VJbnQobi5leHBpcmVzX2luKSxpPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIFMobyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsZS5yZWZyZXNoQWNjZXNzVG9rZW4oKTtjYXNlIDI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9KSwxZTMqKGE8PTEwP2E6YS0xMCkpLHQubmV4dD05LHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKEMsSlNPTi5zdHJpbmdpZnkoaSkpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpfX0se2tleToiY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0O3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKEMpO2Nhc2UgMjppZighZS5zZW50KXtlLm5leHQ9OTticmVha31yZXR1cm4gZS50MD1KU09OLGUubmV4dD02LHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKEMpO2Nhc2UgNjplLnQxPWUuc2VudCx0PWUudDAucGFyc2UuY2FsbChlLnQwLGUudDEpLGNsZWFyVGltZW91dCh0KTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19XSksZX0oKSxMYT1mdW5jdGlvbihlLHQpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGEsaSxvLHMsdSxjLGYsbCxoLHAsZCx2LGcseSxtLHcsYixrLHgsXyxFLFQsQSxSLEMsUCxELE8sSSxMLFUsSCxNLGo7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gYT1uZXcgc3IsaT1uZXcgT2Esbz1uZXcgSihhLGkpLG4ubmV4dD01LG8uaW5pdGlhbGl6ZShlKTtjYXNlIDU6aWYocz1uZXcgSWEobyksdT10KG8scyksYz1vLmdldERhdGFMYXllcigpLGY9b3IuZ2V0SW5zdGFuY2UoKSxsPWZ1bmN0aW9uKGUpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG47cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighKG49T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LGUpKS5hdHRhY2hUb2tlbil7dC5uZXh0PTIzO2JyZWFrfWlmKCFuLnNob3VsZEF0dGFjaElEUEFjY2Vzc1Rva2VuKXt0Lm5leHQ9MTQ7YnJlYWt9cmV0dXJuIHQudDA9T2JqZWN0LHQudDE9T2JqZWN0LmFzc2lnbih7fSxlLmhlYWRlcnMpLHQudDI9IkJlYXJlciAiLHQubmV4dD04LHUuZ2V0SURQQWNjZXNzVG9rZW4oKTtjYXNlIDg6dC50Mz10LnNlbnQsdC50ND10LnQyLmNvbmNhdC5jYWxsKHQudDIsdC50MyksdC50NT17QXV0aG9yaXphdGlvbjp0LnQ0fSxlLmhlYWRlcnM9dC50MC5hc3NpZ24uY2FsbCh0LnQwLHQudDEsdC50NSksdC5uZXh0PTIzO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIHQudDY9T2JqZWN0LHQudDc9T2JqZWN0LmFzc2lnbih7fSxlLmhlYWRlcnMpLHQudDg9IkJlYXJlciAiLHQubmV4dD0xOSx1LmdldEFjY2Vzc1Rva2VuKCk7Y2FzZSAxOTp0LnQ5PXQuc2VudCx0LnQxMD10LnQ4LmNvbmNhdC5jYWxsKHQudDgsdC50OSksdC50MTE9e0F1dGhvcml6YXRpb246dC50MTB9LGUuaGVhZGVycz10LnQ2LmFzc2lnbi5jYWxsKHQudDYsdC50Nyx0LnQxMSk7Y2FzZSAyMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sbi50MD1udWxsPT1mP3ZvaWQgMDpmLmluaXQsIW4udDApe24ubmV4dD0xNDticmVha31yZXR1cm4gbi5uZXh0PTE0LGYuaW5pdCghMCxsKTtjYXNlIDE0OnJldHVybiBoPWZ1bmN0aW9uKGUpeyhudWxsPT1mP3ZvaWQgMDpmLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmYuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxwPWZ1bmN0aW9uKGUpeyhudWxsPT1mP3ZvaWQgMDpmLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmZi5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sZD1mdW5jdGlvbihlKXsobnVsbD09Zj92b2lkIDA6Zi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmZi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdS5odHRwUmVxdWVzdChmLGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix1Lmh0dHBSZXF1ZXN0QWxsKGUsZik7Y2FzZSAyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnNlbnQpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0seT1mdW5jdGlvbigpe3UuZW5hYmxlSHR0cEhhbmRsZXIoZil9LG09ZnVuY3Rpb24oKXt1LmRpc2FibGVIdHRwSGFuZGxlcihmKX0sdz1mdW5jdGlvbihlKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLG8uZ2V0QXV0aG9yaXphdGlvblVSTChlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3ZhciBuLGEsaSxzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGE9bmV3IFVSTChlKSxpPW51bGwhPT0obj1hLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikpJiZ2b2lkIDAhPT1uP246IiIsdC5uZXh0PTQsby5nZXRQS0NFQ29kZShpKTtjYXNlIDQ6cmV0dXJuIHM9dC5zZW50LHQuYWJydXB0KCJyZXR1cm4iLHthdXRob3JpemF0aW9uVVJMOmUscGtjZTpzfSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sYj1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxzLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodSksZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0saz1mdW5jdGlvbihlLHQsbixhKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gaSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6cmV0dXJuIHIubmV4dD0yLHUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCx2b2lkIDAsbixhKTtjYXNlIDI6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLHIuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksaSl9KSkpfSx4PWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLGUubmV4dD0zLG8uZ2V0U2lnbk91dFVSTCgpO2Nhc2UgMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LF89ZnVuY3Rpb24oKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLG8uZ2V0U2lnbk91dFVSTCgpO2Nhc2UgMjpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9Mix1LnJlcXVlc3RDdXN0b21HcmFudChlKTtjYXNlIDI6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHQuc2VudCk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpfSxUPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLnByZXY9MCxlLm5leHQ9Myx1LnJlZnJlc2hBY2Nlc3NUb2tlbigpO2Nhc2UgMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDY6cmV0dXJuIGUucHJldj02LGUudDA9ZS5jYXRjaCgwKSxlLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChlLnQwKSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSxudWxsLFtbMCw2XV0pfSkpKX0sQT1mdW5jdGlvbigpe3JldHVybiBvLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gcy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxQcm9taXNlLnJlc29sdmUoITApfSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9KSl9LFI9ZnVuY3Rpb24oKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUuZ2V0QmFzaWNVc2VySW5mbygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEM9ZnVuY3Rpb24oKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUuZ2V0RGVjb2RlZElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1LmdldENyeXB0b0hlbHBlcigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSl9LEQ9ZnVuY3Rpb24oKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHUuZ2V0RGVjb2RlZElEUElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxPPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1LmdldElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpfSxJPWZ1bmN0aW9uKCl7cmV0dXJuIFModm9pZCAwLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix1LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sTD1mdW5jdGlvbigpe3JldHVybiB1LmdldEFjY2Vzc1Rva2VuKCl9LFU9ZnVuY3Rpb24oKXtyZXR1cm4gdS5pc0F1dGhlbnRpY2F0ZWQoKX0sSD1mdW5jdGlvbihlKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0sTT1mdW5jdGlvbihlKXtyZXR1cm4gUyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLG8udXBkYXRlQ29uZmlnKGUpO2Nhc2UgMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKX0saj1mdW5jdGlvbigpe3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsYy5nZXRDb25maWdEYXRhKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKX0sbi5hYnJ1cHQoInJldHVybiIse2Rpc2FibGVIdHRwSGFuZGxlcjptLGVuYWJsZUh0dHBIYW5kbGVyOnksZ2V0QWNjZXNzVG9rZW46TCxnZXRBdXRob3JpemF0aW9uVVJMOncsZ2V0QmFzaWNVc2VySW5mbzpSLGdldENvbmZpZ0RhdGE6aixnZXRDcnlwdG9IZWxwZXI6UCxnZXREZWNvZGVkSURQSURUb2tlbjpELGdldERlY29kZWRJRFRva2VuOkMsZ2V0SURUb2tlbjpPLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOkksZ2V0U2lnbk91dFVSTDpfLGh0dHBSZXF1ZXN0OnYsaHR0cFJlcXVlc3RBbGw6Zyxpc0F1dGhlbnRpY2F0ZWQ6VSxyZWZyZXNoQWNjZXNzVG9rZW46VCxyZXF1ZXN0QWNjZXNzVG9rZW46ayxyZXF1ZXN0Q3VzdG9tR3JhbnQ6RSxyZXZva2VBY2Nlc3NUb2tlbjpBLHNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s6ZCxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6aCxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazpwLHNldFNlc3Npb25TdGF0ZTpILHNpZ25PdXQ6eCxzdGFydEF1dG9SZWZyZXNoVG9rZW46Yix1cGRhdGVDb25maWc6TX0pO2Nhc2UgNDE6Y2FzZSJlbmQiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSl9LFVhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe28odGhpcyxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD10LHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9cn1yZXR1cm4gdShlLFt7a2V5OiJlbmFibGVIdHRwSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oZSl7KG51bGw9PWU/dm9pZCAwOmUuZW5hYmxlSGFuZGxlcikmJmUuZW5hYmxlSGFuZGxlcigpfX0se2tleToiZGlzYWJsZUh0dHBIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXsobnVsbD09ZT92b2lkIDA6ZS5kaXNhYmxlSGFuZGxlcikmJmUuZGlzYWJsZUhhbmRsZXIoKX19LHtrZXk6ImluaXRpYWxpemVTZXNzaW9uTWFuZ2VyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEpe3ZhciBpLG8sczthLmluaXRpYWxpemUoZS5jbGllbnRJRCxudWxsIT09KGk9dC5jaGVja1Nlc3Npb25JZnJhbWUpJiZ2b2lkIDAhPT1pP2k6IiIscixudWxsIT09KG89ZS5jaGVja1Nlc3Npb25JbnRlcnZhbCkmJnZvaWQgMCE9PW8/bzozLG51bGwhPT0ocz1lLnNlc3Npb25SZWZyZXNoSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MzAwLGUuc2lnbkluUmVkaXJlY3RVUkwsbil9fSx7a2V5OiJyZXF1ZXN0Q3VzdG9tR3JhbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4sYSxpO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gbygpe3ZhciBzLHUsYyxmLGwsaD10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYocz0hMCx1PSExLCEobnVsbD09ZT92b2lkIDA6ZS50b2tlbkVuZHBvaW50KSl7by5uZXh0PTM5O2JyZWFrfXJldHVybiBzPSExLGM9MCxvLnQwPVtdLG8udDE9YixvLm5leHQ9OSx0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgOTppZihvLnQ0PW49by5zZW50LG8udDM9bnVsbD09PW8udDQsby50Myl7by5uZXh0PTEzO2JyZWFrfW8udDM9dm9pZCAwPT09bjtjYXNlIDEzOmlmKCFvLnQzKXtvLm5leHQ9MTc7YnJlYWt9by50NT12b2lkIDAsby5uZXh0PTE4O2JyZWFrO2Nhc2UgMTc6by50NT1uLnJlc291cmNlU2VydmVyVVJMcztjYXNlIDE4OmlmKG8udDY9YT1vLnQ1LG8udDI9bnVsbCE9PW8udDYsIW8udDIpe28ubmV4dD0yMjticmVha31vLnQyPXZvaWQgMCE9PWE7Y2FzZSAyMjppZighby50Mil7by5uZXh0PTI2O2JyZWFrfW8udDc9YSxvLm5leHQ9Mjc7YnJlYWs7Y2FzZSAyNjpvLnQ3PVtdO2Nhc2UgMjc6by50OD1vLnQ3LG8udDk9KDAsby50MSkoby50OCksby50MTA9W2UuYmFzZVVybF0sZj1vLnQwLmNvbmNhdC5jYWxsKG8udDAsby50OSxvLnQxMCk7Y2FzZSAzMTppZighKGM8Zi5sZW5ndGgpKXtvLm5leHQ9Mzk7YnJlYWt9aWYoIShsPWZbY10pfHwhKG51bGw9PT0oaT1lLnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgobCkpKXtvLm5leHQ9MzY7YnJlYWt9cmV0dXJuIHU9ITAsby5hYnJ1cHQoImJyZWFrIiwzOSk7Y2FzZSAzNjpjKyssby5uZXh0PTMxO2JyZWFrO2Nhc2UgMzk6aWYoZS5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKFksSlNPTi5zdHJpbmdpZnkoZSkpLCFzJiYhdSl7by5uZXh0PTQ0O2JyZWFrfXJldHVybiBvLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZXF1ZXN0Q3VzdG9tR3JhbnQoZSkudGhlbigoZnVuY3Rpb24obil7cmV0dXJuIFMoaCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihyKXtmb3IoOzspc3dpdGNoKHIucHJldj1yLm5leHQpe2Nhc2UgMDppZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmdChlKSwhZS5yZXR1cm5zU2Vzc2lvbil7ci5uZXh0PTY7YnJlYWt9cmV0dXJuIHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHIuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKSk7Y2FzZSA2OnJldHVybiByLmFicnVwdCgicmV0dXJuIixuKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiByLnN0b3AoKX19KSxhLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDQ0OnJldHVybiBvLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgSSgiU1BBLU1BSU5fVEhSRUFEX0NMSUVOVC1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpKTtjYXNlIDQ1OmNhc2UiZW5kIjpyZXR1cm4gby5zdG9wKCl9fSksbyx0aGlzKX0pKSl9fSx7a2V5OiJnZXRDdXN0b21HcmFudENvbmZpZ0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQ7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoWSk7Y2FzZSAyOmlmKCEodD1lLnNlbnQpKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsSlNPTi5wYXJzZSh0KSk7Y2FzZSA3OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixudWxsKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6InJlZnJlc2hBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIG47cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5wcmV2PTAsdC5uZXh0PTMsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAzOnJldHVybiB0Lm5leHQ9NSx0aGlzLmdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpO2Nhc2UgNTppZighKG49dC5zZW50KSl7dC5uZXh0PTk7YnJlYWt9cmV0dXJuIHQubmV4dD05LHRoaXMucmVxdWVzdEN1c3RvbUdyYW50KG4sZSk7Y2FzZSA5OnJldHVybiB0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0LmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2Nhc2UgMTM6cmV0dXJuIHQucHJldj0xMyx0LnQwPXQuY2F0Y2goMCksdC5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QodC50MCkpO2Nhc2UgMTY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1swLDEzXV0pfSkpKX19LHtrZXk6Imh0dHBSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyl7dmFyIHMsdTtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGMoKXt2YXIgZixsLGgscCxkLHY9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGMpe2Zvcig7Oylzd2l0Y2goYy5wcmV2PWMubmV4dCl7Y2FzZSAwOnJldHVybiBmPSExLGMubmV4dD0zLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAzOnJldHVybiBsPWMuc2VudCxoPTAsYy50MD1bXSxjLnQxPWIsYy5uZXh0PTksbnVsbD09bD92b2lkIDA6bC5yZXNvdXJjZVNlcnZlclVSTHM7Y2FzZSA5OmlmKGMudDM9cz1jLnNlbnQsYy50Mj1udWxsIT09Yy50MywhYy50Mil7Yy5uZXh0PTEzO2JyZWFrfWMudDI9dm9pZCAwIT09cztjYXNlIDEzOmlmKCFjLnQyKXtjLm5leHQ9MTc7YnJlYWt9Yy50ND1zLGMubmV4dD0xODticmVhaztjYXNlIDE3OmMudDQ9W107Y2FzZSAxODpjLnQ1PWMudDQsYy50Nj0oMCxjLnQxKShjLnQ1KSxjLnQ3PVtsLmJhc2VVcmxdLHA9Yy50MC5jb25jYXQuY2FsbChjLnQwLGMudDYsYy50Nyk7Y2FzZSAyMjppZighKGg8cC5sZW5ndGgpKXtjLm5leHQ9MzA7YnJlYWt9aWYoIShkPXBbaF0pfHwhKG51bGw9PT0odT1udWxsPT10P3ZvaWQgMDp0LnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChkKSkpe2MubmV4dD0yNzticmVha31yZXR1cm4gZj0hMCxjLmFicnVwdCgiYnJlYWsiLDMwKTtjYXNlIDI3OmgrKyxjLm5leHQ9MjI7YnJlYWs7Y2FzZSAzMDppZighZil7Yy5uZXh0PTM0O2JyZWFrfXJldHVybiBjLmFicnVwdCgicmV0dXJuIixlLnJlcXVlc3QodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24ocyl7cmV0dXJuIFModix2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB1KCl7dmFyIGMsZixsLGgscDtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOmlmKDQwMSE9PShudWxsPT09KGM9bnVsbD09cz92b2lkIDA6cy5yZXNwb25zZSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc3RhdHVzKSYmKG51bGw9PXM/dm9pZCAwOnMucmVzcG9uc2UpKXtyLm5leHQ9MzE7YnJlYWt9cmV0dXJuIHIucHJldj0xLHIubmV4dD00LHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKG8pO2Nhc2UgNDpoPXIuc2VudCxyLm5leHQ9MTU7YnJlYWs7Y2FzZSA3OmlmKHIucHJldj03LHIudDA9ci5jYXRjaCgxKSwhbil7ci5uZXh0PTE0O2JyZWFrfWlmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXtyLm5leHQ9MTM7YnJlYWt9cmV0dXJuIHIubmV4dD0xMyxhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7Y29kZTpWfSkpO2Nhc2UgMTM6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkoKTtjYXNlIDE0OnRocm93IG5ldyBJKCJTUEEtQVVUSF9IRUxQRVItSFItU0UwMSIsbnVsbCE9PShmPW51bGw9PT1yLnQwfHx2b2lkIDA9PT1yLnQwP3ZvaWQgMDpyLnQwLm5hbWUpJiZ2b2lkIDAhPT1mP2Y6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGw9bnVsbD09PXIudDB8fHZvaWQgMD09PXIudDA/dm9pZCAwOnIudDAubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpO2Nhc2UgMTU6aWYoIWgpe3IubmV4dD0zMTticmVha31yZXR1cm4gci5wcmV2PTE2LHIubmV4dD0xOSxlLnJlcXVlc3QodCk7Y2FzZSAxOTpyZXR1cm4gcD1yLnNlbnQsci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHApKTtjYXNlIDIzOmlmKHIucHJldj0yMyxyLnQxPXIuY2F0Y2goMTYpLCFuKXtyLm5leHQ9MzA7YnJlYWt9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpe3IubmV4dD0yOTticmVha31yZXR1cm4gci5uZXh0PTI5LGEoci50MSk7Y2FzZSAyOToiZnVuY3Rpb24iPT10eXBlb2YgaSYmaSgpO2Nhc2UgMzA6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KHIudDEpKTtjYXNlIDMxOmlmKCFuKXtyLm5leHQ9MzY7YnJlYWt9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpe3IubmV4dD0zNTticmVha31yZXR1cm4gci5uZXh0PTM1LGEocyk7Y2FzZSAzNToiZnVuY3Rpb24iPT10eXBlb2YgaSYmaSgpO2Nhc2UgMzY6cmV0dXJuIHIuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KHMpKTtjYXNlIDM3OmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksdSx0aGlzLFtbMSw3XSxbMTYsMjNdXSl9KSkpfSkpKTtjYXNlIDM0OnJldHVybiBjLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgSSgiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKSk7Y2FzZSAzNTpjYXNlImVuZCI6cmV0dXJuIGMuc3RvcCgpfX0pLGMsdGhpcyl9KSkpfX0se2tleToiaHR0cFJlcXVlc3RBbGwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGEsaSl7dmFyIG8scyx1O3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gYygpe3ZhciBmLGwsaCxwLGQsdixnLHksbSx3LGs9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGMpe2Zvcig7Oylzd2l0Y2goYy5wcmV2PWMubmV4dCl7Y2FzZSAwOnJldHVybiBmPSEwLGMubmV4dD0zLHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Y2FzZSAzOmw9Yy5zZW50LGg9XyhlKSxjLnByZXY9NSxoLnMoKTtjYXNlIDc6aWYoKHA9aC5uKCkpLmRvbmUpe2MubmV4dD01MDticmVha31yZXR1cm4gZD1wLnZhbHVlLHY9ITEsZz0wLGMudDA9W10sYy50MT1iLGMubmV4dD0xNSxsO2Nhc2UgMTU6aWYoYy50ND1vPWMuc2VudCxjLnQzPW51bGw9PT1jLnQ0LGMudDMpe2MubmV4dD0xOTticmVha31jLnQzPXZvaWQgMD09PW87Y2FzZSAxOTppZighYy50Myl7Yy5uZXh0PTIzO2JyZWFrfWMudDU9dm9pZCAwLGMubmV4dD0yNDticmVhaztjYXNlIDIzOmMudDU9by5yZXNvdXJjZVNlcnZlclVSTHM7Y2FzZSAyNDppZihjLnQ2PXM9Yy50NSxjLnQyPW51bGwhPT1jLnQ2LCFjLnQyKXtjLm5leHQ9Mjg7YnJlYWt9Yy50Mj12b2lkIDAhPT1zO2Nhc2UgMjg6aWYoIWMudDIpe2MubmV4dD0zMjticmVha31jLnQ3PXMsYy5uZXh0PTMzO2JyZWFrO2Nhc2UgMzI6Yy50Nz1bXTtjYXNlIDMzOmMudDg9Yy50NyxjLnQ5PSgwLGMudDEpKGMudDgpLGMudDEwPVtsLmJhc2VVcmxdLHk9Yy50MC5jb25jYXQuY2FsbChjLnQwLGMudDksYy50MTApO2Nhc2UgMzc6aWYoIShnPHkubGVuZ3RoKSl7Yy5uZXh0PTQ1O2JyZWFrfWlmKCEobT15W2ddKXx8IShudWxsPT09KHU9ZC51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobSkpKXtjLm5leHQ9NDI7YnJlYWt9cmV0dXJuIHY9ITAsYy5hYnJ1cHQoImJyZWFrIiw0NSk7Y2FzZSA0MjpnKyssYy5uZXh0PTM3O2JyZWFrO2Nhc2UgNDU6aWYodil7Yy5uZXh0PTQ4O2JyZWFrfXJldHVybiBmPSExLGMuYWJydXB0KCJicmVhayIsNTApO2Nhc2UgNDg6Yy5uZXh0PTc7YnJlYWs7Y2FzZSA1MDpjLm5leHQ9NTU7YnJlYWs7Y2FzZSA1MjpjLnByZXY9NTIsYy50MTE9Yy5jYXRjaCg1KSxoLmUoYy50MTEpO2Nhc2UgNTU6cmV0dXJuIGMucHJldj01NSxoLmYoKSxjLmZpbmlzaCg1NSk7Y2FzZSA1ODppZih3PVtdLCFmKXtjLm5leHQ9NjQ7YnJlYWt9cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dy5wdXNoKHQucmVxdWVzdChlKSl9KSksYy5hYnJ1cHQoInJldHVybiIsKG51bGw9PXQ/dm9pZCAwOnQuYWxsKSYmdC5hbGwodykudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFMoayx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBvKCl7dmFyIHMsdSxjLGYsbD10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24obyl7Zm9yKDs7KXN3aXRjaChvLnByZXY9by5uZXh0KXtjYXNlIDA6aWYoNDAxIT09KG51bGw9PT0ocz1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cz92b2lkIDA6cy5zdGF0dXMpJiYobnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSkpe28ubmV4dD0xNzticmVha31yZXR1cm4gby5wcmV2PTEsby5uZXh0PTQsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSA0OmY9by5zZW50LG8ubmV4dD0xNTticmVhaztjYXNlIDc6aWYoby5wcmV2PTcsby50MD1vLmNhdGNoKDEpLCFuKXtvLm5leHQ9MTQ7YnJlYWt9aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpe28ubmV4dD0xMzticmVha31yZXR1cm4gby5uZXh0PTEzLGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHtjb2RlOlZ9KSk7Y2FzZSAxMzoiZnVuY3Rpb24iPT10eXBlb2YgaSYmaSgpO2Nhc2UgMTQ6dGhyb3cgbmV3IEkoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PSh1PW51bGw9PT1vLnQwfHx2b2lkIDA9PT1vLnQwP3ZvaWQgMDpvLnQwLm5hbWUpJiZ2b2lkIDAhPT11P3U6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGM9bnVsbD09PW8udDB8fHZvaWQgMD09PW8udDA/dm9pZCAwOm8udDAubWVzc2FnZSkmJnZvaWQgMCE9PWM/YzoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpO2Nhc2UgMTU6aWYoIWYpe28ubmV4dD0xNzticmVha31yZXR1cm4gby5hYnJ1cHQoInJldHVybiIsdC5hbGwmJnQuYWxsKHcpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBTKGwsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIW4pe3QubmV4dD01O2JyZWFrfWlmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5uZXh0PTQsYShlKTtjYXNlIDQ6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkoKTtjYXNlIDU6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFByb21pc2UucmVqZWN0KGUpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSl9KSkpO2Nhc2UgMTc6aWYoIW4pe28ubmV4dD0yMjticmVha31pZigiZnVuY3Rpb24iIT10eXBlb2YgYSl7by5uZXh0PTIxO2JyZWFrfXJldHVybiBvLm5leHQ9MjEsYShlKTtjYXNlIDIxOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpKCk7Y2FzZSAyMjpyZXR1cm4gby5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoZSkpO2Nhc2UgMjM6Y2FzZSJlbmQiOnJldHVybiBvLnN0b3AoKX19KSxvLHRoaXMsW1sxLDddXSl9KSkpfSkpKTtjYXNlIDY0OnRocm93IG5ldyBJKCJTUEEtQVVUSF9IRUxQRVItSFJBLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpO2Nhc2UgNjU6Y2FzZSJlbmQiOnJldHVybiBjLnN0b3AoKX19KSxjLHRoaXMsW1s1LDUyLDU1LDU4XV0pfSkpKX19LHtrZXk6InJlcXVlc3RBY2Nlc3NUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSxpKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIG8oKXt2YXIgcyx1LGM9dGhpcztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKG8pe2Zvcig7Oylzd2l0Y2goby5wcmV2PW8ubmV4dCl7Y2FzZSAwOnJldHVybiBvLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjppZigocz1vLnNlbnQpLnN0b3JhZ2UhPT1VLkJyb3dzZXJNZW1vcnl8fCFzLmVuYWJsZVBLQ0V8fCF0KXtvLm5leHQ9OTticmVha31yZXR1cm4gdT1jci5nZXRQS0NFKEwuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbSh0KSksby5uZXh0PTcsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUoTC5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKHQpLHUpO2Nhc2UgNzpvLm5leHQ9MTI7YnJlYWs7Y2FzZSA5OmlmKHMuc3RvcmFnZSE9PVUuV2ViV29ya2VyfHwhYSl7by5uZXh0PTEyO2JyZWFrfXJldHVybiBvLm5leHQ9MTIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUoYSxudWxsIT1pP2k6IiIpO2Nhc2UgMTI6aWYoIWUpe28ubmV4dD0xNDticmVha31yZXR1cm4gby5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbnVsbCE9dD90OiIiLG51bGwhPWk/aToiIikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gUyhjLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHMuc3RvcmFnZT09PVUuV2ViV29ya2VyKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUudDA9Y3IsZS5uZXh0PTQsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0U2lnbk91dFVSTCgpO2Nhc2UgNDplLnQxPWUuc2VudCxlLnQwLnNldFNpZ25PdXRVUkwuY2FsbChlLnQwLGUudDEpLHRoaXMuX3NwYUhlbHBlciYmKHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSksbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJnMuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZuKCksZS5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6dGhpcy5fc3BhSGVscGVyJiZ0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKTtjYXNlIDExOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2Nhc2UgMTI6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGUpfSkpKTtjYXNlIDE0OnJldHVybiBvLmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJlamVjdChuZXcgSSgiU1BBLUFVVEhfSEVMUEVSLVJBVDEtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gY29kZS4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGZvdW5kLiIpKSk7Y2FzZSAxNTpjYXNlImVuZCI6cmV0dXJuIG8uc3RvcCgpfX0pLG8sdGhpcyl9KSkpfX0se2tleToidHJ5U2lnbkluU2lsZW50bHkiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgYTtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGkoKXt2YXIgbyxzLHUsYz10aGlzO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oaSl7Zm9yKDs7KXN3aXRjaChpLnByZXY9aS5uZXh0KXtjYXNlIDA6aWYoIWNyLmlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKSl7aS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGkubmV4dD0zLG4ucmVjZWl2ZVByb21wdE5vbmVSZXNwb25zZSgpO2Nhc2UgMzpyZXR1cm4gaS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSkpO2Nhc2UgNDpyZXR1cm4gbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicnBJRnJhbWUiKSxzPW51bGw9PT0oYT1udWxsPT1vP3ZvaWQgMDpvLmNvbnRlbnREb2N1bWVudCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZ2V0RWxlbWVudEJ5SWQoInByb21wdE5vbmVJRnJhbWUiKSxpLnByZXY9NixpLm5leHQ9OSxlKCk7Y2FzZSA5OnU9aS5zZW50LHMuc3JjPXUsaS5uZXh0PTE2O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIGkucHJldj0xMyxpLnQwPWkuY2F0Y2goNiksaS5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZWplY3QoaS50MCkpO2Nhc2UgMTY6cmV0dXJuIGkuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3ZhciBhPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZSghMSl9KSwxZTQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoZnVuY3Rpb24gaShvKXtyZXR1cm4gUyhjLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIHMoKXt2YXIgdSxjLGYsbCxoO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6ImNoZWNrX3Nlc3Npb25fc2lnbmVkX291dCI9PShudWxsPT0oaD1vLmRhdGEpP3ZvaWQgMDpoLnR5cGUpJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLGNsZWFyVGltZW91dChhKSxlKCExKSksImNoZWNrX3Nlc3Npb25fc2lnbmVkX2luIj09KG51bGw9PWg/dm9pZCAwOmgudHlwZSkmJihudWxsPT09KHU9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlKSYmdChudWxsPT09KGM9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5jb2RlLG51bGw9PT0oZj1udWxsPT1oP3ZvaWQgMDpoLmRhdGEpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNlc3Npb25TdGF0ZSxudWxsPT09KGw9bnVsbD09aD92b2lkIDA6aC5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zdGF0ZSkudGhlbigoZnVuY3Rpb24odCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLGUodCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxuKGUpfSkpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGEpfSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLHMpfSkpKX0pKX0pKSk7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIGkuc3RvcCgpfX0pLGksbnVsbCxbWzYsMTNdXSl9KSkpfX0se2tleToiaGFuZGxlU2lnbkluIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBhKCl7dmFyIGksbyxzLHUsYztyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKHIpe2Zvcig7Oylzd2l0Y2goci5wcmV2PXIubmV4dCl7Y2FzZSAwOnJldHVybiByLm5leHQ9Mix0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Nhc2UgMjpyZXR1cm4gaT1yLnNlbnQsci5uZXh0PTUsZSgpO2Nhc2UgNTppZighci5zZW50KXtyLm5leHQ9NzticmVha31yZXR1cm4gci5hYnJ1cHQoInJldHVybiIsUHJvbWlzZS5yZXNvbHZlKHthbGxvd2VkU2NvcGVzOiIiLGRpc3BsYXlOYW1lOiIiLGVtYWlsOiIiLHNlc3Npb25TdGF0ZToiIixzdWI6IiIsdGVuYW50RG9tYWluOiIiLHVzZXJuYW1lOiIifSkpO2Nhc2UgNzppZihpLnN0b3JhZ2U9PT1VLldlYldvcmtlcil7ci5uZXh0PTE5O2JyZWFrfXJldHVybiByLm5leHQ9MTAsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCk7Y2FzZSAxMDppZighci5zZW50KXtyLm5leHQ9MTk7YnJlYWt9cmV0dXJuIHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSxpLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmdCgpLHIudDA9UHJvbWlzZSxyLm5leHQ9MTcsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpO2Nhc2UgMTc6cmV0dXJuIHIudDE9ci5zZW50LHIuYWJydXB0KCJyZXR1cm4iLHIudDAucmVzb2x2ZS5jYWxsKHIudDAsci50MSkpO2Nhc2UgMTk6aWYobz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFcpLHM9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCh6KSwhbyl7ci5uZXh0PTI3O2JyZWFrfXRocm93KHU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpLnNlYXJjaFBhcmFtcy5kZWxldGUoVyksdS5zZWFyY2hQYXJhbXMuZGVsZXRlKHopLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsdS50b1N0cmluZygpKSxuZXcgSSgiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLG8sbnVsbCE9cz9zOiIiKTtjYXNlIDI3OmlmKGkuc3RvcmFnZSE9PVUuV2ViV29ya2VyfHwhbil7ci5uZXh0PTMzO2JyZWFrfXJldHVybiByLm5leHQ9MzAsbigpO2Nhc2UgMzA6aWYoIShjPXIuc2VudCkpe3IubmV4dD0zMzticmVha31yZXR1cm4gci5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAzMzpjYXNlImVuZCI6cmV0dXJuIHIuc3RvcCgpfX0pLGEsdGhpcyl9KSkpfX0se2tleToiZ2V0QmFzaWNVc2VySW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0RGVjb2RlZElEVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXREZWNvZGVkSURQSURUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldENyeXB0b0hlbHBlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRJRFRva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fSx7a2V5OiJnZXRPSURDU2VydmljZUVuZHBvaW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKX19LHtrZXk6ImdldEFjY2Vzc1Rva2VuIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxyKCkubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpfX0se2tleToiZ2V0SURQQWNjZXNzVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIHIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7Y2FzZSAyOmlmKHQudDE9ZT10LnNlbnQsdC50MD1udWxsPT09dC50MSx0LnQwKXt0Lm5leHQ9NjticmVha310LnQwPXZvaWQgMD09PWU7Y2FzZSA2OmlmKCF0LnQwKXt0Lm5leHQ9MTA7YnJlYWt9dC50Mj12b2lkIDAsdC5uZXh0PTExO2JyZWFrO2Nhc2UgMTA6dC50Mj1lLmFjY2Vzc190b2tlbjtjYXNlIDExOnJldHVybiB0LmFicnVwdCgicmV0dXJuIix0LnQyKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSl9fSx7a2V5OiJnZXREYXRhTGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn19LHtrZXk6ImlzQXV0aGVudGljYXRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAscigpLm1hcmsoKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5pc0F1dGhlbnRpY2F0ZWQoKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSl9fV0pLGV9KCk7IWZ1bmN0aW9uKGUpe3ZhciB0LG49c2VsZjtuLm9ubWVzc2FnZT1mdW5jdGlvbihuKXt2YXIgcz1uLmRhdGEsdT1uLnBvcnRzO3JldHVybiBTKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHIoKS5tYXJrKChmdW5jdGlvbiBuKCl7dmFyIGMsZixsLGgscCxkO3JldHVybiByKCkud3JhcCgoZnVuY3Rpb24ocil7Zm9yKDs7KXN3aXRjaChyLnByZXY9ci5uZXh0KXtjYXNlIDA6aWYocD11WzBdLHMudHlwZT09PUJ8fHQpe3IubmV4dD00O2JyZWFrfXJldHVybiBwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEkoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpLHIuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQ6ci50MD1zLnR5cGUsci5uZXh0PXIudDA9PT1CPzc6ImdldF9hdXRoX3VybCI9PT1yLnQwPzIyOiJyZXF1ZXN0X2dldF90b2tlbiI9PT1yLnQwPzI0OiJodHRwLXJlcXVlc3QiPT09ci50MD8yNjoiaHR0cC1yZXF1ZXN0LWFsbCI9PT1yLnQwPzI4OiJzaWduLW91dCI9PT1yLnQwPzMwOiJyZXF1ZXN0LWN1c3RvbS1ncmFudCI9PT1yLnQwPzQ0OiJyZXZva2UtYWNjZXNzLXRva2VuIj09PXIudDA/NDY6ImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIj09PXIudDA/NDg6ImdldC1iYXNpYy11c2VyLWluZm8iPT09ci50MD82MjoiZ2V0LWRlY29kZWQtaWQtdG9rZW4iPT09ci50MD83NjoiZ2V0LWNyeXB0by1oZWxwZXIiPT09ci50MD85MDoiZ2V0X2lkX3Rva2VuIj09PXIudDA/MTA0OiJlbmFibGVfaHR0cF9oYW5kbGVyIj09PXIudDA/MTE4OiJkaXNhYmxlX2h0dHBfaGFuZGxlciI9PT1yLnQwPzEyMToiaXNfYXV0aGVudGljYXRlZCI9PT1yLnQwPzEyNDoiZ2V0X3NpZ25fb3V0X3VybCI9PT1yLnQwPzEzODoicmVmcmVzaF9hY2Nlc3MtdG9rZW4iPT09ci50MD8xNTI6InN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI9PT1yLnQwPzE2Njoic2V0X3Nlc3Npb25fc3RhdGUiPT09ci50MD8xNjg6InVwZGF0ZV9jb25maWciPT09ci50MD8xODI6ImdldF9jb25maWdfZGF0YSI9PT1yLnQwPzE5NjoyMTA7YnJlYWs7Y2FzZSA3OnJldHVybiByLnByZXY9NyxkPU9iamVjdC5hc3NpZ24oe30scy5kYXRhKSxyLm5leHQ9MTEsTGEoZCxlKTtjYXNlIDExOih0PXIuc2VudCkuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhvKSx0LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhhKSx0LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGkpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxyLm5leHQ9MjE7YnJlYWs7Y2FzZSAxODpyLnByZXY9MTgsci50MT1yLmNhdGNoKDcpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQxKSk7Y2FzZSAyMTpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMjI6cmV0dXJuIHQuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1zP3ZvaWQgMDpzLmRhdGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMjQ6cmV0dXJuIHQucmVxdWVzdEFjY2Vzc1Rva2VuKG51bGw9PT0oYz1udWxsPT1zP3ZvaWQgMDpzLmRhdGEpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLmNvZGUsbnVsbD09PShmPW51bGw9PXM/dm9pZCAwOnMuZGF0YSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2Vzc2lvblN0YXRlLG51bGw9PT0obD1udWxsPT1zP3ZvaWQgMDpzLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnBrY2UsbnVsbD09PShoPW51bGw9PXM/dm9pZCAwOnMuZGF0YSl8fHZvaWQgMD09PWg/dm9pZCAwOmguc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMjY6cmV0dXJuIHQuaHR0cFJlcXVlc3Qocy5kYXRhKS50aGVuKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDI4OnJldHVybiB0Lmh0dHBSZXF1ZXN0QWxsKHMuZGF0YSkudGhlbigoZnVuY3Rpb24oZSl7cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKSxyLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAzMDpyZXR1cm4gci5wcmV2PTMwLHIudDI9cCxyLnQzPXVyLHIubmV4dD0zNSx0LnNpZ25PdXQoKTtjYXNlIDM1OnIudDQ9ci5zZW50LHIudDU9ci50My5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50MyxyLnQ0KSxyLnQyLnBvc3RNZXNzYWdlLmNhbGwoci50MixyLnQ1KSxyLm5leHQ9NDM7YnJlYWs7Y2FzZSA0MDpyLnByZXY9NDAsci50Nj1yLmNhdGNoKDMwKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50NikpO2Nhc2UgNDM6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDQ0OnJldHVybiB0LnJlcXVlc3RDdXN0b21HcmFudChzLmRhdGEpLnRoZW4oKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSksci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgNDY6cmV0dXJuIHQucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpLHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDQ4OnJldHVybiByLnByZXY9NDgsci50Nz1wLHIudDg9dXIsci5uZXh0PTUzLHQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTtjYXNlIDUzOnIudDk9ci5zZW50LHIudDEwPXIudDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDgsci50OSksci50Ny5wb3N0TWVzc2FnZS5jYWxsKHIudDcsci50MTApLHIubmV4dD02MTticmVhaztjYXNlIDU4OnIucHJldj01OCxyLnQxMT1yLmNhdGNoKDQ4KSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50MTEpKTtjYXNlIDYxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSA2MjpyZXR1cm4gci5wcmV2PTYyLHIudDEyPXAsci50MTM9dXIsci5uZXh0PTY3LHQuZ2V0QmFzaWNVc2VySW5mbygpO2Nhc2UgNjc6ci50MTQ9ci5zZW50LHIudDE1PXIudDEzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQxMyxyLnQxNCksci50MTIucG9zdE1lc3NhZ2UuY2FsbChyLnQxMixyLnQxNSksci5uZXh0PTc1O2JyZWFrO2Nhc2UgNzI6ci5wcmV2PTcyLHIudDE2PXIuY2F0Y2goNjIpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQxNikpO2Nhc2UgNzU6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDc2OnJldHVybiByLnByZXY9NzYsci50MTc9cCxyLnQxOD11cixyLm5leHQ9ODEsdC5nZXREZWNvZGVkSURUb2tlbigpO2Nhc2UgODE6ci50MTk9ci5zZW50LHIudDIwPXIudDE4LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQxOCxyLnQxOSksci50MTcucG9zdE1lc3NhZ2UuY2FsbChyLnQxNyxyLnQyMCksci5uZXh0PTg5O2JyZWFrO2Nhc2UgODY6ci5wcmV2PTg2LHIudDIxPXIuY2F0Y2goNzYpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQyMSkpO2Nhc2UgODk6cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDkwOnJldHVybiByLnByZXY9OTAsci50MjI9cCxyLnQyMz11cixyLm5leHQ9OTUsdC5nZXRDcnlwdG9IZWxwZXIoKTtjYXNlIDk1OnIudDI0PXIuc2VudCxyLnQyNT1yLnQyMy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlLmNhbGwoci50MjMsci50MjQpLHIudDIyLnBvc3RNZXNzYWdlLmNhbGwoci50MjIsci50MjUpLHIubmV4dD0xMDM7YnJlYWs7Y2FzZSAxMDA6ci5wcmV2PTEwMCxyLnQyNj1yLmNhdGNoKDkwKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50MjYpKTtjYXNlIDEwMzpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMTA0OnJldHVybiByLnByZXY9MTA0LHIudDI3PXAsci50Mjg9dXIsci5uZXh0PTEwOSx0LmdldElEVG9rZW4oKTtjYXNlIDEwOTpyLnQyOT1yLnNlbnQsci50MzA9ci50MjguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDI4LHIudDI5KSxyLnQyNy5wb3N0TWVzc2FnZS5jYWxsKHIudDI3LHIudDMwKSxyLm5leHQ9MTE3O2JyZWFrO2Nhc2UgMTE0OnIucHJldj0xMTQsci50MzE9ci5jYXRjaCgxMDQpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQzMSkpO2Nhc2UgMTE3OnJldHVybiByLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAxMTg6cmV0dXJuIHQuZW5hYmxlSHR0cEhhbmRsZXIoKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSksci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMTIxOnJldHVybiB0LmRpc2FibGVIdHRwSGFuZGxlcigpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKSxyLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAxMjQ6cmV0dXJuIHIucHJldj0xMjQsci50MzI9cCxyLnQzMz11cixyLm5leHQ9MTI5LHQuaXNBdXRoZW50aWNhdGVkKCk7Y2FzZSAxMjk6ci50MzQ9ci5zZW50LHIudDM1PXIudDMzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQzMyxyLnQzNCksci50MzIucG9zdE1lc3NhZ2UuY2FsbChyLnQzMixyLnQzNSksci5uZXh0PTEzNzticmVhaztjYXNlIDEzNDpyLnByZXY9MTM0LHIudDM2PXIuY2F0Y2goMTI0KSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50MzYpKTtjYXNlIDEzNzpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMTM4OnJldHVybiByLnByZXY9MTM4LHIudDM3PXAsci50Mzg9dXIsci5uZXh0PTE0Myx0LmdldFNpZ25PdXRVUkwoKTtjYXNlIDE0MzpyLnQzOT1yLnNlbnQsci50NDA9ci50MzguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDM4LHIudDM5KSxyLnQzNy5wb3N0TWVzc2FnZS5jYWxsKHIudDM3LHIudDQwKSxyLm5leHQ9MTUxO2JyZWFrO2Nhc2UgMTQ4OnIucHJldj0xNDgsci50NDE9ci5jYXRjaCgxMzgpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQ0MSkpO2Nhc2UgMTUxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAxNTI6cmV0dXJuIHIucHJldj0xNTIsci50NDI9cCxyLnQ0Mz11cixyLm5leHQ9MTU3LHQucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y2FzZSAxNTc6ci50NDQ9ci5zZW50LHIudDQ1PXIudDQzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQ0MyxyLnQ0NCksci50NDIucG9zdE1lc3NhZ2UuY2FsbChyLnQ0MixyLnQ0NSksci5uZXh0PTE2NTticmVhaztjYXNlIDE2MjpyLnByZXY9MTYyLHIudDQ2PXIuY2F0Y2goMTUyKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50NDYpKTtjYXNlIDE2NTpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMTY2OnRyeXtwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UodC5zdGFydEF1dG9SZWZyZXNoVG9rZW4oKSkpfWNhdGNoKGUpe3AucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9cmV0dXJuIHIuYWJydXB0KCJicmVhayIsMjExKTtjYXNlIDE2ODpyZXR1cm4gci5wcmV2PTE2OCxyLnQ0Nz1wLHIudDQ4PXVyLHIubmV4dD0xNzMsdC5zZXRTZXNzaW9uU3RhdGUobnVsbD09cz92b2lkIDA6cy5kYXRhKTtjYXNlIDE3MzpyLnQ0OT1yLnNlbnQsci50NTA9ci50NDguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDQ4LHIudDQ5KSxyLnQ0Ny5wb3N0TWVzc2FnZS5jYWxsKHIudDQ3LHIudDUwKSxyLm5leHQ9MTgxO2JyZWFrO2Nhc2UgMTc4OnIucHJldj0xNzgsci50NTE9ci5jYXRjaCgxNjgpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQ1MSkpO2Nhc2UgMTgxOnJldHVybiByLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAxODI6cmV0dXJuIHIucHJldj0xODIsci50NTI9cCxyLnQ1Mz11cixyLm5leHQ9MTg3LHQudXBkYXRlQ29uZmlnKG51bGw9PXM/dm9pZCAwOnMuZGF0YSk7Y2FzZSAxODc6ci50NTQ9ci5zZW50LHIudDU1PXIudDUzLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UuY2FsbChyLnQ1MyxyLnQ1NCksci50NTIucG9zdE1lc3NhZ2UuY2FsbChyLnQ1MixyLnQ1NSksci5uZXh0PTE5NTticmVhaztjYXNlIDE5MjpyLnByZXY9MTkyLHIudDU2PXIuY2F0Y2goMTgyKSxwLnBvc3RNZXNzYWdlKHVyLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2Uoci50NTYpKTtjYXNlIDE5NTpyZXR1cm4gci5hYnJ1cHQoImJyZWFrIiwyMTEpO2Nhc2UgMTk2OnJldHVybiByLnByZXY9MTk2LHIudDU3PXAsci50NTg9dXIsci5uZXh0PTIwMSx0LmdldENvbmZpZ0RhdGEoKTtjYXNlIDIwMTpyLnQ1OT1yLnNlbnQsci50NjA9ci50NTguZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZS5jYWxsKHIudDU4LHIudDU5KSxyLnQ1Ny5wb3N0TWVzc2FnZS5jYWxsKHIudDU3LHIudDYwKSxyLm5leHQ9MjA5O2JyZWFrO2Nhc2UgMjA2OnIucHJldj0yMDYsci50NjE9ci5jYXRjaCgxOTYpLHAucG9zdE1lc3NhZ2UodXIuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShyLnQ2MSkpO2Nhc2UgMjA5OnJldHVybiByLmFicnVwdCgiYnJlYWsiLDIxMSk7Y2FzZSAyMTA6bnVsbD09cHx8cC5wb3N0TWVzc2FnZSh1ci5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBJKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsIlRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICIuY29uY2F0KHMudHlwZSwiLCBpcyBpbnZhbGlkLiIpKSkpO2Nhc2UgMjExOmNhc2UiZW5kIjpyZXR1cm4gci5zdG9wKCl9fSksbixudWxsLFtbNywxOF0sWzMwLDQwXSxbNDgsNThdLFs2Miw3Ml0sWzc2LDg2XSxbOTAsMTAwXSxbMTA0LDExNF0sWzEyNCwxMzRdLFsxMzgsMTQ4XSxbMTUyLDE2Ml0sWzE2OCwxNzhdLFsxODIsMTkyXSxbMTk2LDIwNl1dKX0pKSl9O3ZhciBhPWZ1bmN0aW9uKCl7bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0saT1mdW5jdGlvbihlKXtuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxvPWZ1bmN0aW9uKCl7bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9fSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFVhKGUsdCl9KSk7cmV0dXJue319KCk7Cgo=",iz=null,cz=!1,function(t){return az=az||nz(rz,iz,cz),new Worker(az,t)}),sz="init",dz="sign-out",mz="http-request",hz="http-request-all",bz="request-custom-grant",Zz="revoke-access-token",pz="request-start",Iz="request-success",yz="request-finish",gz="get-oidc-service-endpoints",Xz="get-basic-user-info",Gz="get-decoded-id-token",fz="get-crypto-helper",Vz="enable_http_handler",Wz="disable_http_handler",vz="get_auth_url",Cz="request_get_token",Yz="is_authenticated",Sz="get_sign_out_url",Rz="refresh_access-token",Kz="set_session_state",Lz="start_auto_refresh_token",Nz="update_config",Jz="get_id_token",Hz="check_session_signed_in",xz="check_session_signed_out",kz="get_config_data",Uz="set_session_state_from_iframe";t.Storage=void 0,(oz=t.Storage||(t.Storage={})).LocalStorage="localStorage",oz.SessionStorage="sessionStorage",oz.WebWorker="webWorker",oz.BrowserMemory="browserMemory",t.Hooks=void 0,(lz=t.Hooks||(t.Hooks={})).SignIn="sign-in",lz.SignOut="sign-out",lz.Initialize="initialize",lz.HttpRequestStart="http-request-start",lz.HttpRequestFinish="http-request-finish",lz.HttpRequestError="http-request-error",lz.HttpRequestSuccess="http-request-success",lz.RevokeAccessToken="revoke-access-token",lz.CustomGrant="custom-grant",lz.SignOutFailed="sign-out-failed";var Tz,wz,Az,Fz,zz,Bz,jz,Mz,Qz,Pz,Ez,Dz,Oz,_z,qz,$z,tB,eB="rpIFrame",nB="promptNoneIFrame",rB="Y2hlY2tTZXNzaW9u",iB="sign-in-silently",cB="initialized-silent-sign-in",aB="promptNoneRequestSent",oB="error",lB="error_description",uB="custom_grant_config",sB="state",dB="Access token is invalid",mB=function(){function e(t,n){s(this,e),this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=n}return m(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,r,i){var c,a,o;i.initialize(t.clientID,null!==(c=e.checkSessionIframe)&&void 0!==c?c:"",n,null!==(a=t.checkSessionInterval)&&void 0!==a?a:3,null!==(o=t.sessionRefreshInterval)&&void 0!==o?o:300,t.signInRedirectURL,r)}},{key:"requestCustomGrant",value:function(t,e){var n,r,i;return TF(this,void 0,void 0,a().mark((function c(){var o,l,u,s,d,m=this;return a().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(o=!0,l=!1,!(null==t?void 0:t.tokenEndpoint)){c.next=39;break}return o=!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=r=c.t5,c.t2=null!==c.t6,!c.t2){c.next=22;break}c.t2=void 0!==r;case 22:if(!c.t2){c.next=26;break}c.t7=r,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],s=c.t0.concat.call(c.t0,c.t9,c.t10);case 31:if(!(u<s.length)){c.next=39;break}if(!(d=s[u])||!(null===(i=t.tokenEndpoint)||void 0===i?void 0:i.startsWith(d))){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(uB,JSON.stringify(t)),!o&&!l){c.next=44;break}return c.abrupt("return",this._authenticationClient.requestCustomGrant(t).then((function(n){return TF(m,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e&&"function"==typeof e&&e(t),!t.returnsSession){r.next=6;break}return this._spaHelper.refreshAccessTokenAutomatically(this),r.abrupt("return",this._authenticationClient.getBasicUserInfo());case 6:return r.abrupt("return",n);case 7:case"end":return r.stop()}}),r,this)})))})).catch((function(t){return Promise.reject(t)})));case 44:return c.abrupt("return",Promise.reject(new EF("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 TF(this,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(uB);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 TF(this,void 0,void 0,a().mark((function e(){var n;return a().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(this),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,r,i,c){var o,l;return TF(this,void 0,void 0,a().mark((function u(){var s,d,m,h,b,Z=this;return a().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return s=!1,u.next=3,this._dataLayer.getConfigData();case 3:return d=u.sent,m=0,u.t0=[],u.t1=W,u.next=9,null==d?void 0:d.resourceServerURLs;case 9:if(u.t3=o=u.sent,u.t2=null!==u.t3,!u.t2){u.next=13;break}u.t2=void 0!==o;case 13:if(!u.t2){u.next=17;break}u.t4=o,u.next=18;break;case 17:u.t4=[];case 18:u.t5=u.t4,u.t6=(0,u.t1)(u.t5),u.t7=[d.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 s=!0,u.abrupt("break",30);case 27:m++,u.next=22;break;case 30:if(!s){u.next=34;break}return u.abrupt("return",t.request(e).then((function(t){return Promise.resolve(t)})).catch((function(o){return TF(Z,void 0,void 0,a().mark((function l(){var u,s,d,m,h;return a().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(401!==(null===(u=null==o?void 0:o.response)||void 0===u?void 0:u.status)&&(null==o?void 0:o.response)){a.next=31;break}return a.prev=1,a.next=4,this.refreshAccessToken(c);case 4:m=a.sent,a.next=15;break;case 7:if(a.prev=7,a.t0=a.catch(1),!n){a.next=14;break}if("function"!=typeof r){a.next=13;break}return a.next=13,r(Object.assign(Object.assign({},o),{code:dB}));case 13:"function"==typeof i&&i();case 14:throw new EF("SPA-AUTH_HELPER-HR-SE01",null!==(s=null===a.t0||void 0===a.t0?void 0:a.t0.name)&&void 0!==s?s:"Refresh token request failed.",null!==(d=null===a.t0||void 0===a.t0?void 0:a.t0.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.");case 15:if(!m){a.next=31;break}return a.prev=16,a.next=19,t.request(e);case 19:return h=a.sent,a.abrupt("return",Promise.resolve(h));case 23:if(a.prev=23,a.t1=a.catch(16),!n){a.next=30;break}if("function"!=typeof r){a.next=29;break}return a.next=29,r(a.t1);case 29:"function"==typeof i&&i();case 30:return a.abrupt("return",Promise.reject(a.t1));case 31:if(!n){a.next=36;break}if("function"!=typeof r){a.next=35;break}return a.next=35,r(o);case 35:"function"==typeof i&&i();case 36:return a.abrupt("return",Promise.reject(o));case 37:case"end":return a.stop()}}),l,this,[[1,7],[16,23]])})))})));case 34:return u.abrupt("return",Promise.reject(new EF("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,r,i){var c,o,l;return TF(this,void 0,void 0,a().mark((function u(){var s,d,m,h,b,Z,p,I,y,g,X=this;return a().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return s=!0,u.next=3,this._dataLayer.getConfigData();case 3:d=u.sent,m=Y(t),u.prev=5,m.s();case 7:if((h=m.n()).done){u.next=50;break}return b=h.value,Z=!1,p=0,u.t0=[],u.t1=W,u.next=15,d;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=o=u.t5,u.t2=null!==u.t6,!u.t2){u.next=28;break}u.t2=void 0!==o;case 28:if(!u.t2){u.next=32;break}u.t7=o,u.next=33;break;case 32:u.t7=[];case 33:u.t8=u.t7,u.t9=(0,u.t1)(u.t8),u.t10=[d.baseUrl],I=u.t0.concat.call(u.t0,u.t9,u.t10);case 37:if(!(p<I.length)){u.next=45;break}if(!(y=I[p])||!(null===(l=b.url)||void 0===l?void 0:l.startsWith(y))){u.next=42;break}return Z=!0,u.abrupt("break",45);case 42:p++,u.next=37;break;case 45:if(Z){u.next=48;break}return s=!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=[],!s){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 TF(X,void 0,void 0,a().mark((function c(){var o,l,u,s,d=this;return a().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(401!==(null===(o=null==t?void 0:t.response)||void 0===o?void 0:o.status)&&(null==t?void 0:t.response)){c.next=17;break}return c.prev=1,c.next=4,this._authenticationClient.refreshAccessToken();case 4:s=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 r){c.next=13;break}return c.next=13,r(Object.assign(Object.assign({},t),{code:dB}));case 13:"function"==typeof i&&i();case 14:throw new EF("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(!s){c.next=17;break}return c.abrupt("return",e.all&&e.all(g).then((function(t){return Promise.resolve(t)})).catch((function(t){return TF(d,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!n){e.next=5;break}if("function"!=typeof r){e.next=4;break}return e.next=4,r(t);case 4:"function"==typeof i&&i();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 r){c.next=21;break}return c.next=21,r(t);case 21:"function"==typeof i&&i();case 22:return c.abrupt("return",Promise.reject(t));case 23:case"end":return c.stop()}}),c,this,[[1,7]])})))})));case 64:throw new EF("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,r,i,c){return TF(this,void 0,void 0,a().mark((function o(){var l,u,s=this;return a().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,this._dataLayer.getConfigData();case 2:if((l=o.sent).storage!==t.Storage.BrowserMemory||!l.enablePKCE||!n){o.next=9;break}return u=ZB.getPKCE(DF.extractPKCEKeyFromStateParam(n)),o.next=7,this._authenticationClient.setPKCECode(DF.extractPKCEKeyFromStateParam(n),u);case 7:o.next=12;break;case 9:if(l.storage!==t.Storage.WebWorker||!i){o.next=12;break}return o.next=12,this._authenticationClient.setPKCECode(i,null!=c?c:"");case 12:if(!e){o.next=14;break}return o.abrupt("return",this._authenticationClient.requestAccessToken(e,null!=n?n:"",null!=c?c:"").then((function(){return TF(s,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(l.storage===t.Storage.WebWorker){e.next=10;break}return e.t0=ZB,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(this)),r&&"function"==typeof r&&l.enableOIDCSessionManagement&&r(),e.next=11;break;case 10:this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this);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 o.abrupt("return",Promise.reject(new EF("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found.")));case 15:case"end":return o.stop()}}),o,this)})))}},{key:"trySignInSilently",value:function(t,e,n){var r;return TF(this,void 0,void 0,a().mark((function i(){var c,o,l,u=this;return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(!ZB.isInitializedSilentSignIn()){i.next=4;break}return i.next=3,n.receivePromptNoneResponse();case 3:return i.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 4:return c=document.getElementById(eB),o=null===(r=null==c?void 0:c.contentDocument)||void 0===r?void 0:r.getElementById(nB),i.prev=6,i.next=9,t();case 9:l=i.sent,o.src=l,i.next=16;break;case 13:return i.prev=13,i.t0=i.catch(6),i.abrupt("return",Promise.reject(i.t0));case 16:return i.abrupt("return",new Promise((function(t,n){var r=setTimeout((function(){t(!1)}),1e4);window.addEventListener("message",(function i(c){return TF(u,void 0,void 0,a().mark((function o(){var l,u,s,d,m;return a().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:(null==(m=c.data)?void 0:m.type)==xz&&(window.removeEventListener("message",i),clearTimeout(r),t(!1)),(null==m?void 0:m.type)==Hz&&(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===(s=null==m?void 0:m.data)||void 0===s?void 0:s.sessionState,null===(d=null==m?void 0:m.data)||void 0===d?void 0:d.state).then((function(e){window.removeEventListener("message",i),t(e)})).catch((function(t){window.removeEventListener("message",i),n(t)})).finally((function(){clearTimeout(r)}));case 3:case"end":return a.stop()}}),o)})))}))})));case 17:case"end":return i.stop()}}),i,null,[[6,13]])})))}},{key:"handleSignIn",value:function(e,n,r){return TF(this,void 0,void 0,a().mark((function i(){var c,o,l,u,s;return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,this._dataLayer.getConfigData();case 2:return c=i.sent,i.next=5,e();case 5:if(!i.sent){i.next=7;break}return i.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 7:if(c.storage===t.Storage.WebWorker){i.next=19;break}return i.next=10,this._authenticationClient.isAuthenticated();case 10:if(!i.sent){i.next=19;break}return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),c.enableOIDCSessionManagement&&n(),i.t0=Promise,i.next=17,this._authenticationClient.getBasicUserInfo();case 17:return i.t1=i.sent,i.abrupt("return",i.t0.resolve.call(i.t0,i.t1));case 19:if(o=new URL(window.location.href).searchParams.get(oB),l=new URL(window.location.href).searchParams.get(lB),!o){i.next=27;break}throw(u=new URL(window.location.href)).searchParams.delete(oB),u.searchParams.delete(lB),history.pushState(null,document.title,u.toString()),new EF("SPA-AUTH_HELPER-SI-SE01",o,null!=l?l:"");case 27:if(c.storage!==t.Storage.WebWorker||!r){i.next=33;break}return i.next=30,r();case 30:if(!(s=i.sent)){i.next=33;break}return i.abrupt("return",s);case 33:case"end":return i.stop()}}),i,this)})))}},{key:"getBasicUserInfo",value:function(){return TF(this,void 0,void 0,a().mark((function t(){return a().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 TF(this,void 0,void 0,a().mark((function t(){return a().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:"getDecodedIDPIDToken",value:function(){return TF(this,void 0,void 0,a().mark((function t(){return a().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:"getCryptoHelper",value:function(){return TF(this,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._authenticationClient.getCryptoHelper());case 1:case"end":return t.stop()}}),t,this)})))}},{key:"getIDToken",value:function(){return TF(this,void 0,void 0,a().mark((function t(){return a().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 TF(this,void 0,void 0,a().mark((function t(){return a().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 TF(this,void 0,void 0,a().mark((function t(){return a().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:"getIDPAccessToken",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData();case 2:if(e.t1=t=e.sent,e.t0=null===e.t1,e.t0){e.next=6;break}e.t0=void 0===t;case 6:if(!e.t0){e.next=10;break}e.t2=void 0,e.next=11;break;case 10:e.t2=t.access_token;case 11:return e.abrupt("return",e.t2);case 12:case"end":return e.stop()}}),e,this)})))}},{key:"getDataLayer",value:function(){return this._dataLayer}},{key:"isAuthenticated",value:function(){return TF(this,void 0,void 0,a().mark((function t(){return a().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}(),hB=function(){function t(e){s(this,t),this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}return m(t,[{key:"refreshAccessTokenAutomatically",value:function(t){return TF(this,void 0,void 0,a().mark((function e(){var n,r,i,c=this;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._dataLayer.getSessionData();case 2:if(!(n=e.sent).refresh_token){e.next=9;break}return r=parseInt(n.expires_in),i=setTimeout((function(){return TF(c,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.refreshAccessToken();case 2:case"end":return e.stop()}}),e)})))}),1e3*(r<=10?r:r-10)),e.next=9,this._dataLayer.setTemporaryDataParameter(FF,JSON.stringify(i));case 9:case"end":return e.stop()}}),e,this)})))}},{key:"clearRefreshTokenTimeout",value:function(){return TF(this,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this._dataLayer.getTemporaryDataParameter(FF);case 2:if(!t.sent){t.next=9;break}return t.t0=JSON,t.next=6,this._dataLayer.getTemporaryDataParameter(FF);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}(),bB=function(){function t(){s(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}(),ZB=function(){function t(){s(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(MF,t)}},{key:"getSignOutURL",value:function(){var t;return null!==(t=sessionStorage.getItem(MF))&&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(cB),e=t?JSON.parse(t):null;return Boolean(e)}},{key:"isSignOutSuccessful",value:function(){return TF(this,void 0,void 0,a().mark((function t(){var e;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!ez.isSignOutSuccessful(window.location.href)){t.next=6;break}return e=window.location.href.split("?")[0],history.pushState({},document.title,e),t.next=5,ez.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(ez.didSignOutFail(window.location.href)){var t=new URL(window.location.href),e=t.searchParams.get(oB),n=t.searchParams.get(lB),r=window.location.href.split("?")[0];return history.pushState({},document.title,r),{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(iB))&&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(oB)&&e.searchParams.get(sB)!==QF}},{key:"canSendPromptNoneRequest",value:function(){var t=sessionStorage.getItem(aB);return!(t?JSON.parse(t):null)}},{key:"setPromptNoneRequestSent",value:function(t){sessionStorage.setItem(aB,JSON.stringify(t))}},{key:"waitTillPageRedirect",value:function(t){return TF(this,void 0,void 0,a().mark((function e(){var n;return a().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}(),pB=(Dz=function(t,e,n,r,i,c,a){Tz=t,wz=e,Az=n,zz=c,Bz=i,Ez=a,(Fz=r)>-1&&Oz(),Bz>-1&&(i=setInterval((function(){$z()}),1e3*Bz))},Oz=function(){return TF(void 0,void 0,void 0,a().mark((function t(){var e,n,r,i;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=function(){var t;return TF(this,void 0,void 0,a().mark((function e(){var r,i,c,o,l;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Az();case 2:r=e.sent,Boolean(Tz)&&Boolean(r)&&(i="".concat(Tz," ").concat(r),c=document.getElementById(eB),o=null===(t=null==c?void 0:c.contentDocument)||void 0===t?void 0:t.getElementById(n),null==(l=o.contentWindow)||l.postMessage(i,wz));case 4:case"end":return e.stop()}}),e)})))},wz&&Tz&&zz){t.next=3;break}return t.abrupt("return");case 3:n="opIFrame",i=document.getElementById(eB),(null===(e=null==i?void 0:i.contentDocument)||void 0===e?void 0:e.getElementById(n)).src=wz+"?client_id="+Tz+"&redirect_uri="+zz,Mz=setInterval(r,1e3*Fz),qz();case 9:case"end":return t.stop()}}),t)})))},_z=function(){clearInterval(Mz),clearInterval(void 0)},qz=function(){null===window||void 0===window||window.addEventListener("message",(function(t){var e;return TF(this,void 0,void 0,a().mark((function n(){var r;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if((r=wz)&&!((null==r?void 0:r.indexOf(t.origin))<0)&&(null===(e=null==t?void 0:t.data)||void 0===e?void 0:e.type)!==Uz){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,jz();case 9:window.location.href=n.sent,n.next=13;break;case 12:"changed"===t.data&&$z();case 13:case"end":return n.stop()}}),n)})))}),!1)},$z=function(){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r,i,c,o;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=document.getElementById(eB),i=null===(n=null==r?void 0:r.contentDocument)||void 0===n?void 0:n.getElementById(nB),!ZB.canSendPromptNoneRequest()){e.next=10;break}return ZB.setPromptNoneRequestSent(!0),c=function t(e){var n,r,i;(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)===Uz&&(Pz(null!==(i=null===(r=null==e?void 0:e.data)||void 0===r?void 0:r.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))},Qz!==t.Storage.BrowserMemory&&Qz!==t.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",c),e.next=8,Ez({prompt:"none",responseMode:"query",state:rB});case 8:o=e.sent,i.src=o;case 10:case"end":return e.stop()}}),e)})))},tB=function(e){return TF(void 0,void 0,void 0,a().mark((function n(){var r,i,c,o,l,u,s,d,m,h;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(c=new URL(window.location.href).searchParams.get(sB),o=new URL(window.location.href).searchParams.get(jF),l=window.parent.parent,null===c||!c.includes(rB)&&!c.includes(iB)){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(iB)){n.next=15;break}return s={data:{code:u,sessionState:null!=o?o:"",state:c},type:Hz},sessionStorage.setItem(cB,"false"),l.postMessage(s,l.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"),Qz!==t.Storage.LocalStorage&&Qz!==t.Storage.SessionStorage){n.next=23;break}if(n.t0=e,!n.t0){n.next=21;break}return n.next=21,e(d);case 21:n.next=25;break;case 23:m={data:null!=d?d:"",type:Uz},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(m);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(iB)){n.next=40;break}return h={type:xz},window.parent.parent.postMessage(h,l.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,jz();case 43:return l.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(t,e,n){return TF(void 0,void 0,void 0,a().mark((function r(){var i,c,o,l;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:(c=document.createElement("iframe")).setAttribute("id",eB),c.style.display="none",o=!1,c.onload=function(){var t,e,n,r,i=null==(c=document.getElementById(eB))?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===(e=null===(t=null==c?void 0:c.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.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),jz=t,Qz=e,Pz=n,l=function(){return new Promise((function(t){return setTimeout(t,1)}))};case 10:if(!1!==o){r.next=15;break}return r.next=13,l();case 13:r.next=10;break;case 15:return r.abrupt("return",{initialize:Dz,receivePromptNoneResponse:tB,reset:_z});case 16:case"end":return r.stop()}}),r)})))}),IB={exports:{}},yB=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}},gB=yB,XB=Object.prototype.toString;function GB(t){return Array.isArray(t)}function fB(t){return void 0===t}function VB(t){return"[object ArrayBuffer]"===XB.call(t)}function WB(t){return null!==t&&"object"===o(t)}function vB(t){if("[object Object]"!==XB.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function CB(t){return"[object Function]"===XB.call(t)}function YB(t,e){if(null!=t)if("object"!==o(t)&&(t=[t]),GB(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var SB={isArray:GB,isArrayBuffer:VB,isBuffer:function(t){return null!==t&&!fB(t)&&null!==t.constructor&&!fB(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===XB.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&VB(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:WB,isPlainObject:vB,isUndefined:fB,isDate:function(t){return"[object Date]"===XB.call(t)},isFile:function(t){return"[object File]"===XB.call(t)},isBlob:function(t){return"[object Blob]"===XB.call(t)},isFunction:CB,isStream:function(t){return WB(t)&&CB(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===XB.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:YB,merge:function t(){var e={};function n(n,r){vB(e[r])&&vB(n)?e[r]=t(e[r],n):vB(n)?e[r]=t({},n):GB(n)?e[r]=n.slice():e[r]=n}for(var r=0,i=arguments.length;r<i;r++)YB(arguments[r],n);return e},extend:function(t,e,n){return YB(e,(function(e,r){t[r]=n&&"function"==typeof e?gB(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}},RB=SB;function KB(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var LB=function(t,e,n){if(!e)return t;var r;if(n)r=n(e);else if(RB.isURLSearchParams(e))r=e.toString();else{var i=[];RB.forEach(e,(function(t,e){null!=t&&(RB.isArray(t)?e+="[]":t=[t],RB.forEach(t,(function(t){RB.isDate(t)?t=t.toISOString():RB.isObject(t)&&(t=JSON.stringify(t)),i.push(KB(e)+"="+KB(t))})))})),r=i.join("&")}if(r){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+r}return t},NB=SB;function JB(){this.handlers=[]}JB.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},JB.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},JB.prototype.forEach=function(t){NB.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var HB=JB,xB="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function kB(){throw new Error("setTimeout has not been defined")}function UB(){throw new Error("clearTimeout has not been defined")}var TB=kB,wB=UB;function AB(t){if(TB===setTimeout)return setTimeout(t,0);if((TB===kB||!TB)&&setTimeout)return TB=setTimeout,setTimeout(t,0);try{return TB(t,0)}catch(e){try{return TB.call(null,t,0)}catch(e){return TB.call(this,t,0)}}}"function"==typeof xB.setTimeout&&(TB=setTimeout),"function"==typeof xB.clearTimeout&&(wB=clearTimeout);var FB,zB=[],BB=!1,jB=-1;function MB(){BB&&FB&&(BB=!1,FB.length?zB=FB.concat(zB):jB=-1,zB.length&&QB())}function QB(){if(!BB){var t=AB(MB);BB=!0;for(var e=zB.length;e;){for(FB=zB,zB=[];++jB<e;)FB&&FB[jB].run();jB=-1,e=zB.length}FB=null,BB=!1,function(t){if(wB===clearTimeout)return clearTimeout(t);if((wB===UB||!wB)&&clearTimeout)return wB=clearTimeout,clearTimeout(t);try{wB(t)}catch(e){try{return wB.call(null,t)}catch(e){return wB.call(this,t)}}}(t)}}function PB(t,e){this.fun=t,this.array=e}PB.prototype.run=function(){this.fun.apply(null,this.array)};function EB(){}var DB=EB,OB=EB,_B=EB,qB=EB,$B=EB,tj=EB,ej=EB;var nj=xB.performance||{},rj=nj.now||nj.mozNow||nj.msNow||nj.oNow||nj.webkitNow||function(){return(new Date).getTime()};var ij=new Date;var cj={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];zB.push(new PB(t,e)),1!==zB.length||BB||AB(QB)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:DB,addListener:OB,once:_B,off:qB,removeListener:$B,removeAllListeners:tj,emit:ej,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*rj.call(nj),n=Math.floor(e),r=Math.floor(e%1*1e9);return t&&(n-=t[0],(r-=t[1])<0&&(n--,r+=1e9)),[n,r]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-ij)/1e3}},aj=cj,oj=SB,lj=function(t,e,n,r,i){return t.config=e,n&&(t.code=n),t.request=r,t.response=i,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},uj={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},sj=lj,dj=function(t,e,n,r,i){var c=new Error(t);return sj(c,e,n,r,i)},mj=dj,hj=SB,bj=hj.isStandardBrowserEnv()?{write:function(t,e,n,r,i,c){var a=[];a.push(t+"="+encodeURIComponent(e)),hj.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),hj.isString(r)&&a.push("path="+r),hj.isString(i)&&a.push("domain="+i),!0===c&&a.push("secure"),document.cookie=a.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(){}},Zj=function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)},pj=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t},Ij=SB,yj=["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"],gj=SB,Xj=gj.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(t){var r=t;return e&&(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 t=r(window.location.href),function(e){var n=gj.isString(e)?r(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function Gj(t){this.message=t}Gj.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Gj.prototype.__CANCEL__=!0;var fj=Gj,Vj=SB,Wj=function(t,e,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(mj("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)},vj=bj,Cj=LB,Yj=function(t,e){return t&&!Zj(e)?pj(t,e):e},Sj=function(t){var e,n,r,i={};return t?(Ij.forEach(t.split("\n"),(function(t){if(r=t.indexOf(":"),e=Ij.trim(t.substr(0,r)).toLowerCase(),n=Ij.trim(t.substr(r+1)),e){if(i[e]&&yj.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i},Rj=Xj,Kj=dj,Lj=uj,Nj=fj,Jj=function(t){return new Promise((function(e,n){var r,i=t.data,c=t.headers,a=t.responseType;function o(){t.cancelToken&&t.cancelToken.unsubscribe(r),t.signal&&t.signal.removeEventListener("abort",r)}Vj.isFormData(i)&&delete c["Content-Type"];var l=new XMLHttpRequest;if(t.auth){var u=t.auth.username||"",s=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(u+":"+s)}var d=Yj(t.baseURL,t.url);function m(){if(l){var r="getAllResponseHeaders"in l?Sj(l.getAllResponseHeaders()):null,i={data:a&&"text"!==a&&"json"!==a?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:r,config:t,request:l};Wj((function(t){e(t),o()}),(function(t){n(t),o()}),i),l=null}}if(l.open(t.method.toUpperCase(),Cj(d,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(Kj("Request aborted",t,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(Kj("Network Error",t,null,l)),l=null},l.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",r=t.transitional||Lj;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(Kj(e,t,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",l)),l=null},Vj.isStandardBrowserEnv()){var h=(t.withCredentials||Rj(d))&&t.xsrfCookieName?vj.read(t.xsrfCookieName):void 0;h&&(c[t.xsrfHeaderName]=h)}"setRequestHeader"in l&&Vj.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:l.setRequestHeader(e,t)})),Vj.isUndefined(t.withCredentials)||(l.withCredentials=!!t.withCredentials),a&&"json"!==a&&(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)&&(r=function(t){l&&(n(!t||t&&t.type?new Nj("canceled"):t),l.abort(),l=null)},t.cancelToken&&t.cancelToken.subscribe(r),t.signal&&(t.signal.aborted?r():t.signal.addEventListener("abort",r))),i||(i=null),l.send(i)}))},Hj=SB,xj=function(t,e){oj.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))},kj=lj,Uj={"Content-Type":"application/x-www-form-urlencoded"};function Tj(t,e){!Hj.isUndefined(t)&&Hj.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var wj,Aj={transitional:uj,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==aj&&"[object process]"===Object.prototype.toString.call(aj))&&(wj=Jj),wj),transformRequest:[function(t,e){return xj(e,"Accept"),xj(e,"Content-Type"),Hj.isFormData(t)||Hj.isArrayBuffer(t)||Hj.isBuffer(t)||Hj.isStream(t)||Hj.isFile(t)||Hj.isBlob(t)?t:Hj.isArrayBufferView(t)?t.buffer:Hj.isURLSearchParams(t)?(Tj(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Hj.isObject(t)||e&&"application/json"===e["Content-Type"]?(Tj(e,"application/json"),function(t,e,n){if(Hj.isString(t))try{return(e||JSON.parse)(t),Hj.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||Aj.transitional,n=e&&e.silentJSONParsing,r=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||r&&Hj.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw kj(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, */*"}}};Hj.forEach(["delete","get","head"],(function(t){Aj.headers[t]={}})),Hj.forEach(["post","put","patch"],(function(t){Aj.headers[t]=Hj.merge(Uj)}));var Fj=Aj,zj=SB,Bj=Fj,jj=function(t){return!(!t||!t.__CANCEL__)},Mj=SB,Qj=function(t,e,n){var r=this||Bj;return zj.forEach(n,(function(n){t=n.call(r,t,e)})),t},Pj=jj,Ej=Fj,Dj=fj;function Oj(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Dj("canceled")}var _j=SB,qj=function(t,e){e=e||{};var n={};function r(t,e){return _j.isPlainObject(t)&&_j.isPlainObject(e)?_j.merge(t,e):_j.isPlainObject(e)?_j.merge({},e):_j.isArray(e)?e.slice():e}function i(n){return _j.isUndefined(e[n])?_j.isUndefined(t[n])?void 0:r(void 0,t[n]):r(t[n],e[n])}function c(t){if(!_j.isUndefined(e[t]))return r(void 0,e[t])}function a(n){return _j.isUndefined(e[n])?_j.isUndefined(t[n])?void 0:r(void 0,t[n]):r(void 0,e[n])}function o(n){return n in e?r(t[n],e[n]):n in t?r(void 0,t[n]):void 0}var l={url:c,method:c,data:c,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:o};return _j.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=l[t]||i,r=e(t);_j.isUndefined(r)&&e!==o||(n[t]=r)})),n},$j="0.26.1",tM=$j,eM={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){eM[t]=function(n){return o(n)===t||"a"+(e<1?"n ":" ")+t}}));var nM={};eM.transitional=function(t,e,n){function r(t,e){return"[Axios v"+tM+"] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,c){if(!1===t)throw new Error(r(i," has been removed"+(e?" in "+e:"")));return e&&!nM[i]&&(nM[i]=!0,console.warn(r(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,c)}};var rM={assertOptions:function(t,e,n){if("object"!==o(t))throw new TypeError("options must be an object");for(var r=Object.keys(t),i=r.length;i-- >0;){var c=r[i],a=e[c];if(a){var l=t[c],u=void 0===l||a(l,c,t);if(!0!==u)throw new TypeError("option "+c+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:eM},iM=SB,cM=LB,aM=HB,oM=function(t){return Oj(t),t.headers=t.headers||{},t.data=Qj.call(t,t.data,t.headers,t.transformRequest),t.headers=Mj.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),Mj.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||Ej.adapter)(t).then((function(e){return Oj(t),e.data=Qj.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return Pj(e)||(Oj(t),e&&e.response&&(e.response.data=Qj.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},lM=qj,uM=rM,sM=uM.validators;function dM(t){this.defaults=t,this.interceptors={request:new aM,response:new aM}}dM.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=lM(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&&uM.assertOptions(n,{silentJSONParsing:sM.transitional(sM.boolean),forcedJSONParsing:sM.transitional(sM.boolean),clarifyTimeoutError:sM.transitional(sM.boolean)},!1);var r=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,r.unshift(t.fulfilled,t.rejected))}));var c,a=[];if(this.interceptors.response.forEach((function(t){a.push(t.fulfilled,t.rejected)})),!i){var o=[oM,void 0];for(Array.prototype.unshift.apply(o,r),o=o.concat(a),c=Promise.resolve(e);o.length;)c=c.then(o.shift(),o.shift());return c}for(var l=e;r.length;){var u=r.shift(),s=r.shift();try{l=u(l)}catch(t){s(t);break}}try{c=oM(l)}catch(t){return Promise.reject(t)}for(;a.length;)c=c.then(a.shift(),a.shift());return c},dM.prototype.getUri=function(t){return t=lM(this.defaults,t),cM(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},iM.forEach(["delete","get","head","options"],(function(t){dM.prototype[t]=function(e,n){return this.request(lM(n||{},{method:t,url:e,data:(n||{}).data}))}})),iM.forEach(["post","put","patch"],(function(t){dM.prototype[t]=function(e,n,r){return this.request(lM(r||{},{method:t,url:e,data:n}))}}));var mM=dM,hM=fj;function bM(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,r=n._listeners.length;for(e=0;e<r;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,r=new Promise((function(t){n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t){n.reason||(n.reason=new hM(t),e(n.reason))}))}bM.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},bM.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},bM.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},bM.source=function(){var t,e=new bM((function(e){t=e}));return{token:e,cancel:t}};var ZM=bM,pM=SB,IM=SB,yM=yB,gM=mM,XM=qj;var GM=function t(e){var n=new gM(e),r=yM(gM.prototype.request,n);return IM.extend(r,gM.prototype,n),IM.extend(r,n),r.create=function(n){return t(XM(e,n))},r}(Fj);GM.Axios=gM,GM.Cancel=fj,GM.CancelToken=ZM,GM.isCancel=jj,GM.VERSION=$j,GM.all=function(t){return Promise.all(t)},GM.spread=function(t){return function(e){return t.apply(null,e)}},GM.isAxiosError=function(t){return pM.isObject(t)&&!0===t.isAxiosError},IB.exports=GM,IB.exports.default=GM;var fM,VM=IB.exports;var WM=fM=function(){function t(){s(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 TF(this,void 0,void 0,a().mark((function e(){var n,r;return a().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,r=new FormData,Object.keys(n).forEach((function(t){r.append(t,n[t])})),t.data=r),t.startTimeInMs=(new Date).getTime(),fM.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),e.abrupt("return",t);case 6:case"end":return e.stop()}}),e,this)})))}},{key:"errorHandler",value:function(t){throw fM.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 fM.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 TF(this,void 0,void 0,a().mark((function n(){return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:fM.isHandlerEnabled=t,this.attachToken=e;case 2:case"end":return n.stop()}}),n,this)})))}},{key:"enableHandler",value:function(){fM.isHandlerEnabled=!0}},{key:"disableHandler",value:function(){fM.isHandlerEnabled=!1}},{key:"disableHandlerWithTimeout",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:fM.DEFAULT_HANDLER_DISABLE_TIMEOUT;fM.isHandlerEnabled=!1,setTimeout((function(){fM.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=VM.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new fM),this.axiosInstance.interceptors.request.use((function(e){return TF(t,void 0,void 0,a().mark((function t(){return a().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=VM.all,this.axiosInstance.spread=VM.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}();WM.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,WM=fM=function(t,e,n,r){var i,c=arguments.length,a=c<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"===("undefined"==typeof Reflect?"undefined":o(Reflect))&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,r);else for(var l=t.length-1;l>=0;l--)(i=t[l])&&(a=(c<3?i(a):c>3?i(e,n,a):i(e,n))||a);return c>3&&a&&Object.defineProperty(e,n,a),a}([function(t){}],WM);var vM=function(){function t(){s(this,t)}return m(t,[{key:"setData",value:function(t,e){return TF(this,void 0,void 0,a().mark((function n(){return a().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 TF(this,void 0,void 0,a().mark((function n(){return a().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 TF(this,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:localStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),CM=function(){function t(){s(this,t),this._data=new Map}return m(t,[{key:"setData",value:function(t,e){return TF(this,void 0,void 0,a().mark((function n(){return a().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 TF(this,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.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 r.stop()}}),r,this)})))}},{key:"removeData",value:function(t){return TF(this,void 0,void 0,a().mark((function e(){return a().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}(),YM=function(){function t(){s(this,t)}return m(t,[{key:"setData",value:function(t,e){return TF(this,void 0,void 0,a().mark((function n(){return a().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 TF(this,void 0,void 0,a().mark((function n(){return a().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 TF(this,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:sessionStorage.removeItem(t);case 1:case"end":return e.stop()}}),e)})))}}]),t}(),SM=[],RM=[],KM="undefined"!=typeof Uint8Array?Uint8Array:Array,LM=!1;function NM(){LM=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)SM[e]=t[e],RM[t.charCodeAt(e)]=e;RM["-".charCodeAt(0)]=62,RM["_".charCodeAt(0)]=63}function JM(t,e,n){for(var r,i,c=[],a=e;a<n;a+=3)r=(t[a]<<16)+(t[a+1]<<8)+t[a+2],c.push(SM[(i=r)>>18&63]+SM[i>>12&63]+SM[i>>6&63]+SM[63&i]);return c.join("")}function HM(t){var e;LM||NM();for(var n=t.length,r=n%3,i="",c=[],a=16383,o=0,l=n-r;o<l;o+=a)c.push(JM(t,o,o+a>l?l:o+a));return 1===r?(e=t[n-1],i+=SM[e>>2],i+=SM[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=SM[e>>10],i+=SM[e>>4&63],i+=SM[e<<2&63],i+="="),c.push(i),c.join("")}function xM(t,e,n,r,i){var c,a,o=8*i-r-1,l=(1<<o)-1,u=l>>1,s=-7,d=n?i-1:0,m=n?-1:1,h=t[e+d];for(d+=m,c=h&(1<<-s)-1,h>>=-s,s+=o;s>0;c=256*c+t[e+d],d+=m,s-=8);for(a=c&(1<<-s)-1,c>>=-s,s+=r;s>0;a=256*a+t[e+d],d+=m,s-=8);if(0===c)c=1-u;else{if(c===l)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,r),c-=u}return(h?-1:1)*a*Math.pow(2,c-r)}function kM(t,e,n,r,i,c){var a,o,l,u=8*c-i-1,s=(1<<u)-1,d=s>>1,m=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:c-1,b=r?1:-1,Z=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,a=s):(a=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-a))<1&&(a--,l*=2),(e+=a+d>=1?m/l:m*Math.pow(2,1-d))*l>=2&&(a++,l/=2),a+d>=s?(o=0,a=s):a+d>=1?(o=(e*l-1)*Math.pow(2,i),a+=d):(o=e*Math.pow(2,d-1)*Math.pow(2,i),a=0));i>=8;t[n+h]=255&o,h+=b,o/=256,i-=8);for(a=a<<i|o,u+=i;u>0;t[n+h]=255&a,h+=b,a/=256,u-=8);t[n+h-b]|=128*Z}var UM={}.toString,TM=Array.isArray||function(t){return"[object Array]"==UM.call(t)};zM.TYPED_ARRAY_SUPPORT=void 0===xB.TYPED_ARRAY_SUPPORT||xB.TYPED_ARRAY_SUPPORT;var wM=AM();function AM(){return zM.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function FM(t,e){if(AM()<e)throw new RangeError("Invalid typed array length");return zM.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=zM.prototype:(null===t&&(t=new zM(e)),t.length=e),t}function zM(t,e,n){if(!(zM.TYPED_ARRAY_SUPPORT||this instanceof zM))return new zM(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 MM(this,t)}return BM(this,t,e,n)}function BM(t,e,n,r){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,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r);zM.TYPED_ARRAY_SUPPORT?(t=e).__proto__=zM.prototype:t=QM(t,e);return t}(t,e,n,r):"string"==typeof e?function(t,e,n){"string"==typeof n&&""!==n||(n="utf8");if(!zM.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|DM(e,n),i=(t=FM(t,r)).write(e,n);i!==r&&(t=t.slice(0,i));return t}(t,e,n):function(t,e){if(EM(e)){var n=0|PM(e.length);return 0===(t=FM(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||(r=e.length)!=r?FM(t,0):QM(t,e);if("Buffer"===e.type&&TM(e.data))return QM(t,e.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function jM(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 MM(t,e){if(jM(e),t=FM(t,e<0?0:0|PM(e)),!zM.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function QM(t,e){var n=e.length<0?0:0|PM(e.length);t=FM(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function PM(t){if(t>=AM())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+AM().toString(16)+" bytes");return 0|t}function EM(t){return!(null==t||!t._isBuffer)}function DM(t,e){if(EM(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 r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return fQ(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return VQ(t).length;default:if(r)return fQ(t).length;e=(""+e).toLowerCase(),r=!0}}function OM(t,e,n){var r=!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 dQ(this,e,n);case"utf8":case"utf-8":return oQ(this,e,n);case"ascii":return uQ(this,e,n);case"latin1":case"binary":return sQ(this,e,n);case"base64":return aQ(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mQ(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function _M(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function qM(t,e,n,r,i){if(0===t.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:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=zM.from(e,r)),EM(e))return 0===e.length?-1:$M(t,e,n,r,i);if("number"==typeof e)return e&=255,zM.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):$M(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function $M(t,e,n,r,i){var c,a=1,o=t.length,l=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,o/=2,l/=2,n/=2}function u(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var s=-1;for(c=n;c<o;c++)if(u(t,c)===u(e,-1===s?0:c-s)){if(-1===s&&(s=c),c-s+1===l)return s*a}else-1!==s&&(c-=c-s),s=-1}else for(n+l>o&&(n=o-l),c=n;c>=0;c--){for(var d=!0,m=0;m<l;m++)if(u(t,c+m)!==u(e,m)){d=!1;break}if(d)return c}return-1}function tQ(t,e,n,r){n=Number(n)||0;var i=t.length-n;r?(r=Number(r))>i&&(r=i):r=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");r>c/2&&(r=c/2);for(var a=0;a<r;++a){var o=parseInt(e.substr(2*a,2),16);if(isNaN(o))return a;t[n+a]=o}return a}function eQ(t,e,n,r){return WQ(fQ(e,t.length-n),t,n,r)}function nQ(t,e,n,r){return WQ(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,r)}function rQ(t,e,n,r){return nQ(t,e,n,r)}function iQ(t,e,n,r){return WQ(VQ(e),t,n,r)}function cQ(t,e,n,r){return WQ(function(t,e){for(var n,r,i,c=[],a=0;a<t.length&&!((e-=2)<0);++a)r=(n=t.charCodeAt(a))>>8,i=n%256,c.push(i),c.push(r);return c}(e,t.length-n),t,n,r)}function aQ(t,e,n){return 0===e&&n===t.length?HM(t):HM(t.slice(e,n))}function oQ(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i<n;){var c,a,o,l,u=t[i],s=null,d=u>239?4:u>223?3:u>191?2:1;if(i+d<=n)switch(d){case 1:u<128&&(s=u);break;case 2:128==(192&(c=t[i+1]))&&(l=(31&u)<<6|63&c)>127&&(s=l);break;case 3:c=t[i+1],a=t[i+2],128==(192&c)&&128==(192&a)&&(l=(15&u)<<12|(63&c)<<6|63&a)>2047&&(l<55296||l>57343)&&(s=l);break;case 4:c=t[i+1],a=t[i+2],o=t[i+3],128==(192&c)&&128==(192&a)&&128==(192&o)&&(l=(15&u)<<18|(63&c)<<12|(63&a)<<6|63&o)>65535&&l<1114112&&(s=l)}null===s?(s=65533,d=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),i+=d}return function(t){var e=t.length;if(e<=lQ)return String.fromCharCode.apply(String,t);var n="",r=0;for(;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=lQ));return n}(r)}zM.poolSize=8192,zM._augment=function(t){return t.__proto__=zM.prototype,t},zM.from=function(t,e,n){return BM(null,t,e,n)},zM.TYPED_ARRAY_SUPPORT&&(zM.prototype.__proto__=Uint8Array.prototype,zM.__proto__=Uint8Array),zM.alloc=function(t,e,n){return function(t,e,n,r){return jM(e),e<=0?FM(t,e):void 0!==n?"string"==typeof r?FM(t,e).fill(n,r):FM(t,e).fill(n):FM(t,e)}(null,t,e,n)},zM.allocUnsafe=function(t){return MM(null,t)},zM.allocUnsafeSlow=function(t){return MM(null,t)},zM.isBuffer=vQ,zM.compare=function(t,e){if(!EM(t)||!EM(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,i=0,c=Math.min(n,r);i<c;++i)if(t[i]!==e[i]){n=t[i],r=e[i];break}return n<r?-1:r<n?1:0},zM.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}},zM.concat=function(t,e){if(!TM(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return zM.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=zM.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var c=t[n];if(!EM(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(r,i),i+=c.length}return r},zM.byteLength=DM,zM.prototype._isBuffer=!0,zM.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)_M(this,e,e+1);return this},zM.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)_M(this,e,e+3),_M(this,e+1,e+2);return this},zM.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)_M(this,e,e+7),_M(this,e+1,e+6),_M(this,e+2,e+5),_M(this,e+3,e+4);return this},zM.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?oQ(this,0,t):OM.apply(this,arguments)},zM.prototype.equals=function(t){if(!EM(t))throw new TypeError("Argument must be a Buffer");return this===t||0===zM.compare(this,t)},zM.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+">"},zM.prototype.compare=function(t,e,n,r,i){if(!EM(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===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(r>>>=0),a=(n>>>=0)-(e>>>=0),o=Math.min(c,a),l=this.slice(r,i),u=t.slice(e,n),s=0;s<o;++s)if(l[s]!==u[s]){c=l[s],a=u[s];break}return c<a?-1:a<c?1:0},zM.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},zM.prototype.indexOf=function(t,e,n){return qM(this,t,e,n,!0)},zM.prototype.lastIndexOf=function(t,e,n){return qM(this,t,e,n,!1)},zM.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=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===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var c=!1;;)switch(r){case"hex":return tQ(this,t,e,n);case"utf8":case"utf-8":return eQ(this,t,e,n);case"ascii":return nQ(this,t,e,n);case"latin1":case"binary":return rQ(this,t,e,n);case"base64":return iQ(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return cQ(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),c=!0}},zM.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var lQ=4096;function uQ(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(127&t[i]);return r}function sQ(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;i<n;++i)r+=String.fromCharCode(t[i]);return r}function dQ(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var i="",c=e;c<n;++c)i+=GQ(t[c]);return i}function mQ(t,e,n){for(var r=t.slice(e,n),i="",c=0;c<r.length;c+=2)i+=String.fromCharCode(r[c]+256*r[c+1]);return i}function hQ(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 bQ(t,e,n,r,i,c){if(!EM(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<c)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function ZQ(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-n,2);i<c;++i)t[n+i]=(e&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function pQ(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-n,4);i<c;++i)t[n+i]=e>>>8*(r?i:3-i)&255}function IQ(t,e,n,r,i,c){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function yQ(t,e,n,r,i){return i||IQ(t,0,n,4),kM(t,e,n,r,23,4),n+4}function gQ(t,e,n,r,i){return i||IQ(t,0,n,8),kM(t,e,n,r,52,8),n+8}zM.prototype.slice=function(t,e){var n,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t),zM.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=zM.prototype;else{var i=e-t;n=new zM(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+t]}return n},zM.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||hQ(t,e,this.length);for(var r=this[t],i=1,c=0;++c<e&&(i*=256);)r+=this[t+c]*i;return r},zM.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||hQ(t,e,this.length);for(var r=this[t+--e],i=1;e>0&&(i*=256);)r+=this[t+--e]*i;return r},zM.prototype.readUInt8=function(t,e){return e||hQ(t,1,this.length),this[t]},zM.prototype.readUInt16LE=function(t,e){return e||hQ(t,2,this.length),this[t]|this[t+1]<<8},zM.prototype.readUInt16BE=function(t,e){return e||hQ(t,2,this.length),this[t]<<8|this[t+1]},zM.prototype.readUInt32LE=function(t,e){return e||hQ(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},zM.prototype.readUInt32BE=function(t,e){return e||hQ(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},zM.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||hQ(t,e,this.length);for(var r=this[t],i=1,c=0;++c<e&&(i*=256);)r+=this[t+c]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*e)),r},zM.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||hQ(t,e,this.length);for(var r=e,i=1,c=this[t+--r];r>0&&(i*=256);)c+=this[t+--r]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},zM.prototype.readInt8=function(t,e){return e||hQ(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},zM.prototype.readInt16LE=function(t,e){e||hQ(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},zM.prototype.readInt16BE=function(t,e){e||hQ(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},zM.prototype.readInt32LE=function(t,e){return e||hQ(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},zM.prototype.readInt32BE=function(t,e){return e||hQ(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},zM.prototype.readFloatLE=function(t,e){return e||hQ(t,4,this.length),xM(this,t,!0,23,4)},zM.prototype.readFloatBE=function(t,e){return e||hQ(t,4,this.length),xM(this,t,!1,23,4)},zM.prototype.readDoubleLE=function(t,e){return e||hQ(t,8,this.length),xM(this,t,!0,52,8)},zM.prototype.readDoubleBE=function(t,e){return e||hQ(t,8,this.length),xM(this,t,!1,52,8)},zM.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||bQ(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,c=0;for(this[e]=255&t;++c<n&&(i*=256);)this[e+c]=t/i&255;return e+n},zM.prototype.writeUIntBE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||bQ(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+n},zM.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,1,255,0),zM.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},zM.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,2,65535,0),zM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):ZQ(this,t,e,!0),e+2},zM.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,2,65535,0),zM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):ZQ(this,t,e,!1),e+2},zM.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,4,4294967295,0),zM.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):pQ(this,t,e,!0),e+4},zM.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,4,4294967295,0),zM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):pQ(this,t,e,!1),e+4},zM.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);bQ(this,t,e,n,i-1,-i)}var c=0,a=1,o=0;for(this[e]=255&t;++c<n&&(a*=256);)t<0&&0===o&&0!==this[e+c-1]&&(o=1),this[e+c]=(t/a>>0)-o&255;return e+n},zM.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);bQ(this,t,e,n,i-1,-i)}var c=n-1,a=1,o=0;for(this[e+c]=255&t;--c>=0&&(a*=256);)t<0&&0===o&&0!==this[e+c+1]&&(o=1),this[e+c]=(t/a>>0)-o&255;return e+n},zM.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,1,127,-128),zM.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},zM.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,2,32767,-32768),zM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):ZQ(this,t,e,!0),e+2},zM.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,2,32767,-32768),zM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):ZQ(this,t,e,!1),e+2},zM.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,4,2147483647,-2147483648),zM.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):pQ(this,t,e,!0),e+4},zM.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||bQ(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),zM.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):pQ(this,t,e,!1),e+4},zM.prototype.writeFloatLE=function(t,e,n){return yQ(this,t,e,!0,n)},zM.prototype.writeFloatBE=function(t,e,n){return yQ(this,t,e,!1,n)},zM.prototype.writeDoubleLE=function(t,e,n){return gQ(this,t,e,!0,n)},zM.prototype.writeDoubleBE=function(t,e,n){return gQ(this,t,e,!1,n)},zM.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===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(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var i,c=r-n;if(this===t&&n<e&&e<r)for(i=c-1;i>=0;--i)t[i+e]=this[i+n];else if(c<1e3||!zM.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},zM.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!zM.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}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 a=EM(t)?t:fQ(new zM(t,r).toString()),o=a.length;for(c=0;c<n-e;++c)this[c+e]=a[c%o]}return this};var XQ=/[^+\/0-9A-Za-z-_]/g;function GQ(t){return t<16?"0"+t.toString(16):t.toString(16)}function fQ(t,e){var n;e=e||1/0;for(var r=t.length,i=null,c=[],a=0;a<r;++a){if((n=t.charCodeAt(a))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&c.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=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 VQ(t){return function(t){var e,n,r,i,c,a;LM||NM();var o=t.length;if(o%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[o-2]?2:"="===t[o-1]?1:0,a=new KM(3*o/4-c),r=c>0?o-4:o;var l=0;for(e=0,n=0;e<r;e+=4,n+=3)i=RM[t.charCodeAt(e)]<<18|RM[t.charCodeAt(e+1)]<<12|RM[t.charCodeAt(e+2)]<<6|RM[t.charCodeAt(e+3)],a[l++]=i>>16&255,a[l++]=i>>8&255,a[l++]=255&i;return 2===c?(i=RM[t.charCodeAt(e)]<<2|RM[t.charCodeAt(e+1)]>>4,a[l++]=255&i):1===c&&(i=RM[t.charCodeAt(e)]<<10|RM[t.charCodeAt(e+1)]<<4|RM[t.charCodeAt(e+2)]>>2,a[l++]=i>>8&255,a[l++]=255&i),a}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(XQ,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function WQ(t,e,n,r){for(var i=0;i<r&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function vQ(t){return null!=t&&(!!t._isBuffer||CQ(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&CQ(t.slice(0,0))}(t))}function CQ(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var YQ=Object.freeze({__proto__:null,Buffer:zM,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),zM.alloc(+t)},isBuffer:vQ,kMaxLength:wM}),SQ={exports:{}},RQ={},KQ={};Object.defineProperty(KQ,"__esModule",{value:!0}),KQ.default=function(t){var e=t.length,n=e%4;if(!n)return t;var r=e,i=4-n,c=e+i,a=zM.alloc(c);for(a.write(t);i--;)a.write("=",r++);return a.toString()},Object.defineProperty(RQ,"__esModule",{value:!0});var LQ=KQ;function NQ(t,e){return void 0===e&&(e="utf8"),zM.isBuffer(t)?HQ(t.toString("base64")):HQ(zM.from(t,e).toString("base64"))}function JQ(t){return t=t.toString(),LQ.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function HQ(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var xQ=NQ;xQ.encode=NQ,xQ.decode=function(t,e){return void 0===e&&(e="utf8"),zM.from(JQ(t),"base64").toString(e)},xQ.toBase64=JQ,xQ.fromBase64=HQ,xQ.toBuffer=function(t){return zM.from(JQ(t),"base64")},RQ.default=xQ,function(t){t.exports=RQ.default,t.exports.default=t.exports}(SQ);var kQ=SQ.exports,UQ={exports:{}};!function(t){!function(e,n){var r={};!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,r,i,c){for(var a,o,l,u,s,d,m,h,b,Z,p,I,y;c>=64;){for(a=n[0],o=n[1],l=n[2],u=n[3],s=n[4],d=n[5],m=n[6],h=n[7],Z=0;Z<16;Z++)p=i+4*Z,t[Z]=(255&r[p])<<24|(255&r[p+1])<<16|(255&r[p+2])<<8|255&r[p+3];for(Z=16;Z<64;Z++)I=((b=t[Z-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,y=((b=t[Z-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,t[Z]=(I+t[Z-7]|0)+(y+t[Z-16]|0);for(Z=0;Z<64;Z++)I=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&d^~s&m)|0)+(h+(e[Z]+t[Z]|0)|0)|0,y=((a>>>2|a<<30)^(a>>>13|a<<19)^(a>>>22|a<<10))+(a&o^a&l^o&l)|0,h=m,m=d,d=s,s=u+I|0,u=l,l=o,o=a,a=I+y|0;n[0]+=a,n[1]+=o,n[2]+=l,n[3]+=u,n[4]+=s,n[5]+=d,n[6]+=m,n[7]+=h,i+=64,c-=64}return i}var r=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 r=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[r++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(r=n(this.temp,this.state,t,r,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[r++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,r=this.bufferLength,i=e/536870912|0,c=e<<3,a=e%64<56?64:128;this.buffer[r]=128;for(var o=r+1;o<a-8;o++)this.buffer[o]=0;this.buffer[a-8]=i>>>24&255,this.buffer[a-7]=i>>>16&255,this.buffer[a-6]=i>>>8&255,this.buffer[a-5]=i>>>0&255,this.buffer[a-4]=c>>>24&255,this.buffer[a-3]=c>>>16&255,this.buffer[a-2]=c>>>8&255,this.buffer[a-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,a),this.finished=!0}for(o=0;o<8;o++)t[4*o+0]=this.state[o]>>>24&255,t[4*o+1]=this.state[o]>>>16&255,t[4*o+2]=this.state[o]>>>8&255,t[4*o+3]=this.state[o]>>>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=r;var i=function(){function t(t){this.inner=new r,this.outer=new r,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new r).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 r).update(t),n=e.digest();return e.clean(),n}function a(t,e){var n=new i(t).update(e),r=n.digest();return n.clean(),r}function o(t,e,n,r){var i=r[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),n&&e.update(n),e.update(r),e.finish(t),r[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=a;var l=new Uint8Array(t.digestLength);function u(t,e,n,r){void 0===e&&(e=l),void 0===r&&(r=32);for(var c=new Uint8Array([1]),u=a(e,t),s=new i(u),d=new Uint8Array(s.digestLength),m=d.length,h=new Uint8Array(r),b=0;b<r;b++)m===d.length&&(o(d,s,n,c),m=0),h[b]=d[m++];return s.clean(),d.fill(0),c.fill(0),h}function s(t,e,n,r){for(var c=new i(t),a=c.digestLength,o=new Uint8Array(4),l=new Uint8Array(a),u=new Uint8Array(a),s=new Uint8Array(r),d=0;d*a<r;d++){var m=d+1;o[0]=m>>>24&255,o[1]=m>>>16&255,o[2]=m>>>8&255,o[3]=m>>>0&255,c.reset(),c.update(e),c.update(o),c.finish(u);for(var h=0;h<a;h++)l[h]=u[h];for(h=2;h<=n;h++){c.reset(),c.update(u).finish(u);for(var b=0;b<a;b++)l[b]^=u[b]}for(h=0;h<a&&d*a+h<r;h++)s[d*a+h]=l[h]}for(d=0;d<a;d++)l[d]=u[d]=0;for(d=0;d<4;d++)o[d]=0;return c.clean(),s}t.hkdf=u,t.pbkdf2=s}(r);var i=r.default;for(var c in r)i[c]=r[c];t.exports=i}()}(UQ);var TQ=n(UQ.exports),wQ=crypto,AQ=function(t){return t instanceof CryptoKey},FQ=new TextEncoder,zQ=new TextDecoder;function BQ(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var r=e.reduce((function(t,e){return t+e.length}),0),i=new Uint8Array(r),c=0;return e.forEach((function(t){i.set(t,c),c+=t.length})),i}var jQ=function(t){var e=t;e instanceof Uint8Array&&(e=zQ.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),r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}},MQ=function(t){b(n,t);var e=f(n);function n(t){var r,i;return s(this,n),(r=e.call(this,t)).code="ERR_JOSE_GENERIC",r.name=r.constructor.name,null===(i=Error.captureStackTrace)||void 0===i||i.call(Error,X(r),r.constructor),r}return m(n,null,[{key:"code",get:function(){return"ERR_JOSE_GENERIC"}}]),n}(g(Error)),QQ=function(t){b(n,t);var e=f(n);function n(t){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 s(this,n),(r=e.call(this,t)).code="ERR_JWT_CLAIM_VALIDATION_FAILED",r.claim=i,r.reason=c,r}return m(n,null,[{key:"code",get:function(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}]),n}(MQ),PQ=function(t){b(n,t);var e=f(n);function n(t){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 s(this,n),(r=e.call(this,t)).code="ERR_JWT_EXPIRED",r.claim=i,r.reason=c,r}return m(n,null,[{key:"code",get:function(){return"ERR_JWT_EXPIRED"}}]),n}(MQ),EQ=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),DQ=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),OQ=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),_Q=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),qQ=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),$Q=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),tP=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ),eP=function(t){b(n,t);var e=f(n);function n(){var t;return s(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}(MQ);function nP(){return"function"==typeof WebSocketPair}function rP(){try{return void 0!==aj.versions.node}catch(t){return!1}}function iP(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 cP(t,e){return t.name===e}function aP(t){return parseInt(t.name.slice(4),10)}function oP(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function lP(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 r=e.pop();n+="one of ".concat(e.join(", "),", or ").concat(r,".")}else 2===e.length?n+="one of ".concat(e[0]," or ").concat(e[1],"."):n+="".concat(e[0],".");throw new TypeError(n)}}var uP=function(t){for(var e="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();e+="one of type ".concat(r.join(", "),", or ").concat(c,".")}else 2===r.length?e+="one of type ".concat(r[0]," or ").concat(r[1],"."):e+="of type ".concat(r[0],".");return null==t?e+=" Received ".concat(t):"function"==typeof t&&t.name?e+=" Received function ".concat(t.name):"object"===o(t)&&null!=t&&t.constructor&&t.constructor.name&&(e+=" Received an instance of ".concat(t.constructor.name)),e},sP=function(t){return AQ(t)},dP=["CryptoKey"],mP=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var r,i=e.filter(Boolean);if(0===i.length||1===i.length)return!0;var c,a=Y(i);try{for(a.s();!(c=a.n()).done;){var o=c.value,l=Object.keys(o);if(r&&0!==r.size)for(var u=0,s=l;u<s.length;u++){var d=s[u];if(r.has(d))return!1;r.add(d)}else r=new Set(l)}}catch(t){a.e(t)}finally{a.f()}return!0};function hP(t){if("object"!==o(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 bP=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 ZP(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 DQ("".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 DQ('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 DQ('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 DQ('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(nP()||rP())&&"OKP":if("EdDSA"!==t.alg)throw new DQ('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 rP()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},n=t.d?["sign"]:["verify"];break;default:throw new DQ('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new DQ('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}var pP=function(){var t=u(a().mark((function t(e){var n,r,i,o,l,u,s,d,m;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(o=ZP(e),l=o.algorithm,u=o.keyUsages,s=[l,null!==(r=e.ext)&&void 0!==r&&r,null!==(i=e.key_ops)&&void 0!==i?i:u],"PBKDF2"!==l.name){t.next=4;break}return t.abrupt("return",(d=wQ.subtle).importKey.apply(d,["raw",jQ(e.k)].concat(s)));case 4:return delete(m=c({},e)).alg,t.abrupt("return",(n=wQ.subtle).importKey.apply(n,["jwk",m].concat(s)));case 7:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}();function IP(t,e,n){return yP.apply(this,arguments)}function yP(){return(yP=u(a().mark((function t(e,n,r){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(hP(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!=r||(r=!0!==e.ext),!r){t.next=13;break}return t.abrupt("return",pP(c(c({},e),{},{alg:n,ext:!1})));case 13:return t.abrupt("return",jQ(e.k));case 14:if(void 0===e.oth){t.next=16;break}throw new DQ('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case 16:return t.abrupt("return",pP(c(c({},e),{},{alg:n})));case 17:throw new DQ('Unsupported "kty" (Key Type) Parameter value');case 18:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var gP=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(!sP(t))throw new TypeError(uP.apply(void 0,[t].concat(W(dP),["Uint8Array"])));if("secret"!==t.type)throw new TypeError("".concat(dP.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}}(e):function(t,e){if(!sP(t))throw new TypeError(uP.apply(void 0,[t].concat(W(dP))));if("secret"===t.type)throw new TypeError("".concat(dP.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===e&&"public"===t.type)throw new TypeError("".concat(dP.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===e&&"public"===t.type)throw new TypeError("".concat(dP.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError("".concat(dP.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError("".concat(dP.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))}(e,n)};function XP(t,e,n,r,i){if(void 0!==i.crit&&void 0===r.crit)throw new t('"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(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 a,o=Y(r.crit);try{for(o.s();!(a=o.n()).done;){var l=a.value;if(!c.has(l))throw new DQ('Extension Header Parameter "'.concat(l,'" is not recognized'));if(void 0===i[l])throw new t('Extension Header Parameter "'.concat(l,'" is missing'));if(c.get(l)&&void 0===r[l])throw new t('Extension Header Parameter "'.concat(l,'" MUST be integrity protected'))}}catch(t){o.e(t)}finally{o.f()}return new Set(r.crit)}var GP=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 fP(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(nP()||rP())&&"EdDSA":var r=e.namedCurve;return{name:r,namedCurve:r};default:throw new DQ("alg ".concat(t," is not supported either by JOSE or your javascript runtime"))}}function VP(t,e,n){if(AQ(e))return function(t,e){switch(e){case"HS256":case"HS384":case"HS512":if(!cP(t.algorithm,"HMAC"))throw iP("HMAC");var n=parseInt(e.slice(2),10);if(aP(t.algorithm.hash)!==n)throw iP("SHA-".concat(n),"algorithm.hash");break;case"RS256":case"RS384":case"RS512":if(!cP(t.algorithm,"RSASSA-PKCS1-v1_5"))throw iP("RSASSA-PKCS1-v1_5");var r=parseInt(e.slice(2),10);if(aP(t.algorithm.hash)!==r)throw iP("SHA-".concat(r),"algorithm.hash");break;case"PS256":case"PS384":case"PS512":if(!cP(t.algorithm,"RSA-PSS"))throw iP("RSA-PSS");var i=parseInt(e.slice(2),10);if(aP(t.algorithm.hash)!==i)throw iP("SHA-".concat(i),"algorithm.hash");break;case rP()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw iP("NODE-ED25519 or NODE-ED448");break;case nP()&&"EdDSA":if(!cP(t.algorithm,"NODE-ED25519"))throw iP("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":if(!cP(t.algorithm,"ECDSA"))throw iP("ECDSA");var c=oP(e);if(t.algorithm.namedCurve!==c)throw iP(c,"algorithm.namedCurve");break;default:throw new TypeError("CryptoKey does not support this operation")}for(var a=arguments.length,o=new Array(a>2?a-2:0),l=2;l<a;l++)o[l-2]=arguments[l];lP(t,o)}(e,t,n),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(uP.apply(void 0,[e].concat(W(dP))));return wQ.subtle.importKey("raw",e,{hash:"SHA-".concat(t.slice(-3)),name:"HMAC"},!1,[n])}throw new TypeError(uP.apply(void 0,[e].concat(W(dP),["Uint8Array"])))}var WP=function(){var t=u(a().mark((function t(e,n,r,i){var c,o;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,VP(e,n,"verify");case 2:return c=t.sent,bP(e,c),o=fP(e,c.algorithm),t.prev=5,t.next=8,wQ.subtle.verify(o,c,r,i);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,r,i){return t.apply(this,arguments)}}();function vP(t,e,n){return CP.apply(this,arguments)}function CP(){return CP=u(a().mark((function t(e,n,r){var i,o,l,u,s,d,m,h,b,Z,p,I,y;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(hP(e)){t.next=2;break}throw new OQ("Flattened JWS must be an object");case 2:if(void 0!==e.protected||void 0!==e.header){t.next=4;break}throw new OQ('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 OQ("JWS Protected Header incorrect type");case 6:if(void 0!==e.payload){t.next=8;break}throw new OQ("JWS Payload missing");case 8:if("string"==typeof e.signature){t.next=10;break}throw new OQ("JWS Signature missing or incorrect type");case 10:if(void 0===e.header||hP(e.header)){t.next=12;break}throw new OQ("JWS Unprotected Header incorrect type");case 12:if(o={},!e.protected){t.next=22;break}l=jQ(e.protected),t.prev=15,o=JSON.parse(zQ.decode(l)),t.next=22;break;case 19:throw t.prev=19,t.t0=t.catch(15),new OQ("JWS Protected Header is invalid");case 22:if(mP(o,e.header)){t.next=24;break}throw new OQ("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");case 24:if(u=c(c({},o),e.header),s=XP(OQ,new Map([["b64",!0]]),null==r?void 0:r.crit,o,u),d=!0,!s.has("b64")){t.next=31;break}if("boolean"==typeof(d=o.b64)){t.next=31;break}throw new OQ('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 OQ('JWS "alg" (Algorithm) Header Parameter missing or invalid');case 34:if(!(h=r&&GP("algorithms",r.algorithms))||h.has(m)){t.next=37;break}throw new EQ('"alg" (Algorithm) Header Parameter not allowed');case 37:if(!d){t.next=42;break}if("string"==typeof e.payload){t.next=40;break}throw new OQ("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 OQ("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(o,e);case 48:n=t.sent,b=!0;case 50:return gP(m,n,"verify"),Z=BQ(FQ.encode(null!==(i=e.protected)&&void 0!==i?i:""),FQ.encode("."),"string"==typeof e.payload?FQ.encode(e.payload):e.payload),p=jQ(e.signature),t.next=55,WP(m,n,p,Z);case 55:if(t.sent){t.next=58;break}throw new eP;case 58:if(I=d?jQ(e.payload):"string"==typeof e.payload?FQ.encode(e.payload):e.payload,y={payload:I},void 0!==e.protected&&(y.protectedHeader=o),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]])}))),CP.apply(this,arguments)}function YP(t,e,n){return SP.apply(this,arguments)}function SP(){return SP=u(a().mark((function t(e,n,r){var i,o,l,u,s,d;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e instanceof Uint8Array&&(e=zQ.decode(e)),"string"==typeof e){t.next=3;break}throw new OQ("Compact JWS must be a string or Uint8Array");case 3:if(i=e.split("."),o=i[0],l=i[1],u=i[2],3===i.length){t.next=6;break}throw new OQ("Invalid Compact JWS");case 6:return t.next=8,vP({payload:l,protected:o,signature:u},n,r);case 8:if(s=t.sent,d={payload:s.payload,protectedHeader:s.protectedHeader},"function"!=typeof n){t.next=12;break}return t.abrupt("return",c(c({},d),{},{key:s.key}));case 12:return t.abrupt("return",d);case 13:case"end":return t.stop()}}),t)}))),SP.apply(this,arguments)}var RP=function(t){return Math.floor(t.getTime()/1e3)},KP=86400,LP=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i,NP=function(t){var e=LP.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*KP);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}},JP=function(t){return t.toLowerCase().replace(/^application\//,"")},HP=function(t,e){return"string"==typeof t?e.includes(t):!!Array.isArray(t)&&e.some(Set.prototype.has.bind(new Set(t)))},xP=function(t,e){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=r.typ;if(i&&("string"!=typeof t.typ||JP(t.typ)!==JP(i)))throw new QQ('unexpected "typ" JWT header value',"typ","check_failed");try{n=JSON.parse(zQ.decode(e))}catch(t){}if(!hP(n))throw new _Q("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 QQ('unexpected "iss" claim value',"iss","check_failed");var a=r.subject;if(a&&n.sub!==a)throw new QQ('unexpected "sub" claim value',"sub","check_failed");var l,u=r.audience;if(u&&!HP(n.aud,"string"==typeof u?[u]:u))throw new QQ('unexpected "aud" claim value',"aud","check_failed");switch(o(r.clockTolerance)){case"string":l=NP(r.clockTolerance);break;case"number":l=r.clockTolerance;break;case"undefined":l=0;break;default:throw new TypeError("Invalid clockTolerance option type")}var s=r.currentDate,d=RP(s||new Date);if((void 0!==n.iat||r.maxTokenAge)&&"number"!=typeof n.iat)throw new QQ('"iat" claim must be a number',"iat","invalid");if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new QQ('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>d+l)throw new QQ('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new QQ('"exp" claim must be a number',"exp","invalid");if(n.exp<=d-l)throw new PQ('"exp" claim timestamp check failed',"exp","check_failed")}if(r.maxTokenAge){var m=d-n.iat,h="number"==typeof r.maxTokenAge?r.maxTokenAge:NP(r.maxTokenAge);if(m-l>h)throw new PQ('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(m<0-l)throw new QQ('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};function kP(){return kP=u(a().mark((function t(e,n,r){var i,o,l,u;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,YP(e,n,r);case 2:if(o=t.sent,!(null===(i=o.protectedHeader.crit)||void 0===i?void 0:i.includes("b64"))||!1!==o.protectedHeader.b64){t.next=5;break}throw new _Q("JWTs MUST NOT use unencoded payload");case 5:if(l=xP(o.protectedHeader,o.payload,r),u={payload:l,protectedHeader:o.protectedHeader},"function"!=typeof n){t.next=9;break}return t.abrupt("return",c(c({},u),{},{key:o.key}));case 9:return t.abrupt("return",u);case 10:case"end":return t.stop()}}),t)}))),kP.apply(this,arguments)}function UP(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 DQ('Unsupported "alg" value for a JSON Web Key Set')}}function TP(t){return hP(t)}var wP=function(){function t(e){if(s(this,t),this._cached=new WeakMap,!function(t){return t&&"object"===o(t)&&Array.isArray(t.keys)&&t.keys.every(TP)}(e))throw new qQ("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(a().mark((function t(e,n){var r,i,o,l,u,s,d,m,h;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=c(c({},e),n.header),i=r.alg,o=r.kid,l=UP(i),u=this._jwks.keys.filter((function(t){var e=l===t.kty;if(e&&"string"==typeof o&&(e=o===t.kid),e&&"string"==typeof t.alg&&(e=i===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"===i&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(i){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})),s=u[0],0!==(d=u.length)){t.next=8;break}throw new $Q;case 8:if(1===d){t.next=10;break}throw new tP;case 10:if(void 0!==(m=this._cached.get(s)||this._cached.set(s,{}).get(s))[i]){t.next=18;break}return t.next=14,IP(c(c({},s),{},{ext:!0}),i);case 14:if(!((h=t.sent)instanceof Uint8Array||"public"!==h.type)){t.next=17;break}throw new qQ("JSON Web Key Set members must be public keys");case 17:m[i]=h;case 18:return t.abrupt("return",m[i]);case 19:case"end":return t.stop()}}),t,this)}))),function(t,n){return e.apply(this,arguments)})}]),t}();var AP={exports:{}},FP={exports:{}},zP=r(YQ);
35
+ */}initialize(e){var t,i,n;return Ly(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},Dy),e),{scope:[...null!==(t=Dy.scope)&&void 0!==t?t:[],...null!==(n=null===(i=e.scope)||void 0===i?void 0:i.filter((e=>{var t;return!(null===(t=null==Dy?void 0:Dy.scope)||void 0===t?void 0:t.includes(e))})))&&void 0!==n?n:[]]}))}))}
36
+ /**
37
+ * This method returns the `DataLayer` object that allows you to access authentication data.
38
+ *
39
+ * @return {DataLayer} - The `DataLayer` object.
40
+ *
41
+ * @example
42
+ * ```
43
+ * const data = auth.getDataLayer();
44
+ * ```
45
+ *
46
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDataLayer
47
+ *
48
+ * @memberof AsgardeoAuthClient
49
+ *
50
+ * @preserve
51
+ */getDataLayer(){return this._dataLayer}
52
+ /**
53
+ * This is an async method that returns a Promise that resolves with the authorization URL.
54
+ *
55
+ * @param {GetAuthURLConfig} config - (Optional) A config object to force initialization and pass
56
+ * custom path parameters such as the fidp parameter.
57
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
58
+ * scenarios where each user should be uniquely identified.
59
+ *
60
+ * @return {Promise<string>} - A promise that resolves with the authorization URL.
61
+ *
62
+ * @example
63
+ * ```
64
+ * auth.getAuthorizationURL().then((url)=>{
65
+ * // console.log(url);
66
+ * }).catch((error)=>{
67
+ * // console.error(error);
68
+ * });
69
+ * ```
70
+ *
71
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAuthorizationURL
72
+ *
73
+ * @memberof AsgardeoAuthClient
74
+ *
75
+ * @preserve
76
+ */getAuthorizationURL(e,t){return Ly(this,void 0,void 0,(function*(){const i=Object.assign({},e);return null==i||delete i.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(i,t):this._authenticationCore.getOIDCProviderMetaData(null==e?void 0:e.forceInit).then((()=>this._authenticationCore.getAuthorizationURL(i,t)))}))}
77
+ /**
78
+ * This is an async method that sends a request to obtain the access token and returns a Promise
79
+ * that resolves with the token and other relevant data.
80
+ *
81
+ * @param {string} authorizationCode - The authorization code.
82
+ * @param {string} sessionState - The session state.
83
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
84
+ * scenarios where each user should be uniquely identified.
85
+ *
86
+ * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
87
+ *
88
+ * @example
89
+ * ```
90
+ * auth.requestAccessToken(authCode, sessionState).then((token)=>{
91
+ * // console.log(token);
92
+ * }).catch((error)=>{
93
+ * // console.error(error);
94
+ * });
95
+ * ```
96
+ *
97
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestAccessToken
98
+ *
99
+ * @memberof AsgardeoAuthClient
100
+ *
101
+ * @preserve
102
+ */requestAccessToken(e,t,i,n){return Ly(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(e,t,i,n):this._authenticationCore.getOIDCProviderMetaData(!1).then((()=>this._authenticationCore.requestAccessToken(e,t,i,n)))}))}
103
+ /**
104
+ * This method returns the sign-out URL.
105
+ *
106
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
107
+ * scenarios where each user should be uniquely identified.
108
+ *
109
+ * **This doesn't clear the authentication data.**
110
+ *
111
+ * @return {Promise<string>} - A Promise that resolves with the sign-out URL.
112
+ *
113
+ * @example
114
+ * ```
115
+ * const signOutUrl = await auth.getSignOutURL();
116
+ * ```
117
+ *
118
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getSignOutURL
119
+ *
120
+ * @memberof AsgardeoAuthClient
121
+ *
122
+ * @preserve
123
+ */getSignOutURL(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL(e)}))}
124
+ /**
125
+ * This method returns OIDC service endpoints that are fetched from the `.well-known` endpoint.
126
+ *
127
+ * @return {Promise<OIDCEndpoints>} - A Promise that resolves with an object containing the OIDC service endpoints.
128
+ *
129
+ * @example
130
+ * ```
131
+ * const endpoints = await auth.getOIDCServiceEndpoints();
132
+ * ```
133
+ *
134
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getOIDCServiceEndpoints
135
+ *
136
+ * @memberof AsgardeoAuthClient
137
+ *
138
+ * @preserve
139
+ */getOIDCServiceEndpoints(){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}
140
+ /**
141
+ * This method decodes the payload of the ID token and returns it.
142
+ *
143
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
144
+ * scenarios where each user should be uniquely identified.
145
+ *
146
+ * @return {Promise<DecodedIDTokenPayload>} - A Promise that resolves with the decoded ID token payload.
147
+ *
148
+ * @example
149
+ * ```
150
+ * const decodedIdToken = await auth.getDecodedIDToken();
151
+ * ```
152
+ *
153
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDecodedIDToken
154
+ *
155
+ * @memberof AsgardeoAuthClient
156
+ *
157
+ * @preserve
158
+ */getDecodedIDToken(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken(e)}))}
159
+ /**
160
+ * This method returns the ID token.
161
+ *
162
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
163
+ * scenarios where each user should be uniquely identified.
164
+ *
165
+ * @return {Promise<string>} - A Promise that resolves with the ID token.
166
+ *
167
+ * @example
168
+ * ```
169
+ * const idToken = await auth.getIDToken();
170
+ * ```
171
+ *
172
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
173
+ *
174
+ * @memberof AsgardeoAuthClient
175
+ *
176
+ * @preserve
177
+ */getIDToken(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken(e)}))}
178
+ /**
179
+ * This method returns the basic user information obtained from the ID token.
180
+ *
181
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
182
+ * scenarios where each user should be uniquely identified.
183
+ *
184
+ * @return {Promise<BasicUserInfo>} - A Promise that resolves with an object containing the basic user information.
185
+ *
186
+ * @example
187
+ * ```
188
+ * const userInfo = await auth.getBasicUserInfo();
189
+ * ```
190
+ *
191
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getBasicUserInfo
192
+ *
193
+ * @memberof AsgardeoAuthClient
194
+ *
195
+ * @preserve
196
+ */getBasicUserInfo(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo(e)}))}
197
+ /**
198
+ * This method returns the crypto helper object.
199
+ *
200
+ * @return {Promise<CryptoHelper>} - A Promise that resolves with a CryptoHelper object.
201
+ *
202
+ * @example
203
+ * ```
204
+ * const cryptoHelper = await auth.CryptoHelper();
205
+ * ```
206
+ *
207
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getCryptoHelper
208
+ *
209
+ * @memberof AsgardeoAuthClient
210
+ *
211
+ * @preserve
212
+ */getCryptoHelper(){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getCryptoHelper()}))}
213
+ /**
214
+ * This method revokes the access token.
215
+ *
216
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
217
+ * scenarios where each user should be uniquely identified.
218
+ *
219
+ * **This method also clears the authentication data.**
220
+ *
221
+ * @return {Promise<FetchResponse>} - A Promise that returns the response of the revoke-access-token request.
222
+ *
223
+ * @example
224
+ * ```
225
+ * auth.revokeAccessToken().then((response)=>{
226
+ * // console.log(response);
227
+ * }).catch((error)=>{
228
+ * // console.error(error);
229
+ * });
230
+ * ```
231
+ *
232
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#revokeAccessToken
233
+ *
234
+ * @memberof AsgardeoAuthClient
235
+ *
236
+ * @preserve
237
+ */revokeAccessToken(e){return this._authenticationCore.revokeAccessToken(e)}
238
+ /**
239
+ * This method refreshes the access token and returns a Promise that resolves with the new access
240
+ * token and other relevant data.
241
+ *
242
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
243
+ * scenarios where each user should be uniquely identified.
244
+ *
245
+ * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
246
+ *
247
+ * @example
248
+ * ```
249
+ * auth.refreshAccessToken().then((response)=>{
250
+ * // console.log(response);
251
+ * }).catch((error)=>{
252
+ * // console.error(error);
253
+ * });
254
+ * ```
255
+ *
256
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#refreshAccessToken
257
+ *
258
+ * @memberof AsgardeoAuthClient
259
+ *
260
+ * @preserve
261
+ */refreshAccessToken(e){return this._authenticationCore.refreshAccessToken(e)}
262
+ /**
263
+ * This method returns the access token.
264
+ *
265
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
266
+ * scenarios where each user should be uniquely identified.
267
+ *
268
+ * @return {Promise<string>} - A Promise that resolves with the access token.
269
+ *
270
+ * @example
271
+ * ```
272
+ * const accessToken = await auth.getAccessToken();
273
+ * ```
274
+ *
275
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAccessToken
276
+ *
277
+ * @memberof AsgardeoAuthClient
278
+ *
279
+ * @preserve
280
+ */getAccessToken(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken(e)}))}
281
+ /**
282
+ * This method sends a custom-grant request and returns a Promise that resolves with the response
283
+ * depending on the config passed.
284
+ *
285
+ * @param {CustomGrantConfig} config - A config object containing the custom grant configurations.
286
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
287
+ * scenarios where each user should be uniquely identified.
288
+ *
289
+ * @return {Promise<TokenResponse | FetchResponse>} - A Promise that resolves with the response depending
290
+ * on your configurations.
291
+ *
292
+ * @example
293
+ * ```
294
+ * const config = {
295
+ * attachToken: false,
296
+ * data: {
297
+ * client_id: "{{clientID}}",
298
+ * grant_type: "account_switch",
299
+ * scope: "{{scope}}",
300
+ * token: "{{token}}",
301
+ * },
302
+ * id: "account-switch",
303
+ * returnResponse: true,
304
+ * returnsSession: true,
305
+ * signInRequired: true
306
+ * }
307
+ *
308
+ * auth.requestCustomGrant(config).then((response)=>{
309
+ * // console.log(response);
310
+ * }).catch((error)=>{
311
+ * // console.error(error);
312
+ * });
313
+ * ```
314
+ *
315
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestCustomGrant
316
+ *
317
+ * @memberof AsgardeoAuthClient
318
+ *
319
+ * @preserve
320
+ */requestCustomGrant(e,t){return this._authenticationCore.requestCustomGrant(e,t)}
321
+ /**
322
+ * This method returns if the user is authenticated or not.
323
+ *
324
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
325
+ * scenarios where each user should be uniquely identified.
326
+ *
327
+ * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated, `false` otherwise.
328
+ *
329
+ * @example
330
+ * ```
331
+ * await auth.isAuthenticated();
332
+ * ```
333
+ *
334
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isAuthenticated
335
+ *
336
+ * @memberof AsgardeoAuthClient
337
+ *
338
+ * @preserve
339
+ */isAuthenticated(e){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated(e)}))}
340
+ /**
341
+ * This method returns the PKCE code generated during the generation of the authentication URL.
342
+ *
343
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
344
+ * scenarios where each user should be uniquely identified.
345
+ * @param {string} state - The state parameter that was passed in the authentication URL.
346
+ *
347
+ * @return {Promise<string>} - A Promise that resolves with the PKCE code.
348
+ *
349
+ * @example
350
+ * ```
351
+ * const pkce = await getPKCECode();
352
+ * ```
353
+ *
354
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getPKCECode
355
+ *
356
+ * @memberof AsgardeoAuthClient
357
+ *
358
+ * @preserve
359
+ */getPKCECode(e,t){return Ly(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode(e,t)}))}
360
+ /**
361
+ * This method sets the PKCE code to the data store.
362
+ *
363
+ * @param {string} pkce - The PKCE code.
364
+ * @param {string} state - The state parameter that was passed in the authentication URL.
365
+ * @param {string} userID - (Optional) A unique ID of the user to be authenticated. This is useful in multi-user
366
+ * scenarios where each user should be uniquely identified.
367
+ *
368
+ * @example
369
+ * ```
370
+ * await auth.setPKCECode("pkce_code")
371
+ * ```
372
+ *
373
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#setPKCECode
374
+ *
375
+ * @memberof AsgardeoAuthClient
376
+ *
377
+ * @preserve
378
+ */setPKCECode(e,t,i){return Ly(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(e,t,i)}))}
379
+ /**
380
+ * This method returns if the sign-out is successful or not.
381
+ *
382
+ * @param {string} signOutRedirectUrl - The URL to which the user has been redirected to after signing-out.
383
+ *
384
+ * **The server appends path parameters to the `signOutRedirectURL` and these path parameters
385
+ * are required for this method to function.**
386
+ *
387
+ * @return {boolean} - `true` if successful, `false` otherwise.
388
+ *
389
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isSignOutSuccessful
390
+ *
391
+ * @memberof AsgardeoAuthClient
392
+ *
393
+ * @preserve
394
+ */static isSignOutSuccessful(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&!n}
395
+ /**
396
+ * This method returns if the sign-out has failed or not.
397
+ *
398
+ * @param {string} signOutRedirectUrl - The URL to which the user has been redirected to after signing-out.
399
+ *
400
+ * **The server appends path parameters to the `signOutRedirectURL` and these path parameters
401
+ * are required for this method to function.**
402
+ *
403
+ * @return {boolean} - `true` if successful, `false` otherwise.
404
+ *
405
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#didSignOutFail
406
+ *
407
+ * @memberof AsgardeoAuthClient
408
+ *
409
+ * @preserve
410
+ */static didSignOutFail(e){const t=new URL(e),i=t.searchParams.get("state"),n=Boolean(t.searchParams.get("error"));return!!i&&"sign_out_success"===i&&n}
411
+ /**
412
+ * This method updates the configuration that was passed into the constructor when instantiating this class.
413
+ *
414
+ * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
415
+ *
416
+ * @example
417
+ * ```
418
+ * const config = {
419
+ * signInRedirectURL: "http://localhost:3000/sign-in",
420
+ * clientID: "client ID",
421
+ * baseUrl: "https://localhost:9443"
422
+ * }
423
+ *
424
+ * await auth.updateConfig(config);
425
+ * ```
426
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#updateConfig
427
+ *
428
+ * @memberof AsgardeoAuthClient
429
+ *
430
+ * @preserve
431
+ */updateConfig(e){return Ly(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(e)}))}static clearUserSessionData(e){return Ly(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(e)}))}}function _y(e,t,i){var n=void 0===t?null:t,l=function(e,t){var i=atob(e);if(t){for(var n=new Uint8Array(i.length),l=0,o=i.length;l<o;++l)n[l]=i.charCodeAt(l);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(e,void 0!==i&&i),o=l.indexOf("\n",10)+1,c=l.substring(o)+(n?"//# sourceMappingURL="+n:""),a=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(a)}var qy,$y,eX,tX,iX=(qy="Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKGU9PntsZXRbdCxyXT1lO2NvbnN0IGk9dC5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO25baV09cn0pKSxufXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fXN0YXRpYyBnZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZSx0KXtjb25zdCBuPXBhcnNlSW50KGUuc3BsaXQoIiMiKVsxXSk7cmV0dXJuIHQ/IiIuY29uY2F0KHQsIl9yZXF1ZXN0XyIpLmNvbmNhdChuKToicmVxdWVzdF8iLmNvbmNhdChuKX1zdGF0aWMgZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKXtyZXR1cm4icGtjZV9jb2RlX3ZlcmlmaWVyIyIuY29uY2F0KHBhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pKX19dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJAIjtjb25zdCBuPWUuc3ViLnNwbGl0KHQpO3JldHVybiBuLmxlbmd0aD4yP25bbi5sZW5ndGgtMV06IiJ9O2NsYXNzIGx7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9bn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiBuLmVuZHBvaW50cyYmT2JqZWN0LmtleXMobi5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7dFtyXT0obnVsbD09bj92b2lkIDA6bi5lbmRwb2ludHMpP24uZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7cmV0dXJuIG4uaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLG49dC5iYXNlVXJsO2lmKCFuKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKG49Pntjb25zdCByPW4ucmVwbGFjZSgvW0EtWl0vZywoZT0+Il8iLmNvbmNhdChlLnRvTG93ZXJDYXNlKCkpKSk7ZVtyXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW25dOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9hdXRob3JpemUiKSxlbmRfc2Vzc2lvbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2lkYy9sb2dvdXQiKSxpc3N1ZXI6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpLGp3a3NfdXJpOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vYXV0aDIvandrcyIpLGNoZWNrX3Nlc3Npb25faWZyYW1lOiIiLmNvbmNhdChuKS5jb25jYXQoIi9vaWRjL2NoZWNrc2Vzc2lvbiIpLHJldm9jYXRpb25fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi9yZXZva2UiKSx0b2tlbl9lbmRwb2ludDoiIi5jb25jYXQobikuY29uY2F0KCIvb2F1dGgyL3Rva2VuIiksdXNlcmluZm9fZW5kcG9pbnQ6IiIuY29uY2F0KG4pLmNvbmNhdCgiL29hdXRoMi91c2VyaW5mbyIpfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLGUpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKU19BVVRIX0hFTFBFUi1WSVQtTkYwMSIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtsZXQgcjt0cnl7cj15aWVsZCBmZXRjaCh0LHtjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2lufSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1ORTAyIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZigyMDAhPT1yLnN0YXR1c3x8IXIub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLVZJVC1IRTAzIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdCAoIi5jb25jYXQoci5zdGF0dXNUZXh0LCIpLiIpLHlpZWxkIHIuanNvbigpKTtjb25zdCBpPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIse2tleXM6b309eWllbGQgci5qc29uKCkscz15aWVsZCB0aGlzLl9jcnlwdG9IZWxwZXIuZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sbyk7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5pc1ZhbGlkSWRUb2tlbihlLHMsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbGllbnRJRCxudWxsIT1pP2k6IiIsdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkuc3ViLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xvY2tUb2xlcmFuY2UpfSkpfWdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhlKXt2YXIgdCxuLHIsaTtjb25zdCBvPXRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLHM9dS5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIixjPW51bGwhPT0obj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1uP246IiIsbD1udWxsIT09KHI9by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixkPWMmJmw/IiIuY29uY2F0KGMsIiAiKS5jb25jYXQobCk6Y3x8bHx8IiIsaD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6ZDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6aCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx1LmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgdD0ib3BlbmlkIjtjb25zdCBpPXlpZWxkIHRoaXMuX2NvbmZpZygpLG89eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pO3JldHVybiBpLnNjb3BlJiZpLnNjb3BlLmxlbmd0aD4wJiYoaS5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fGkuc2NvcGUucHVzaCgib3BlbmlkIiksdD1pLnNjb3BlLmpvaW4oIiAiKSksZS5yZXBsYWNlKCJ7e3Rva2VufX0iLG8uYWNjZXNzX3Rva2VuKS5yZXBsYWNlKCJ7e3VzZXJuYW1lfX0iLHRoaXMuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG8uaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHQpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsaS5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PShyPWkuY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09cj9yOiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKGUpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVTZXNzaW9uRGF0YShlKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSLUhUUi1ORTAxIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGUuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBlLmpzb24oKSk7Y29uc3Qgcj15aWVsZCBlLmpzb24oKTtpZihyLmNyZWF0ZWRfYXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKHIuaWRfdG9rZW4pLnRoZW4oKCgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbik7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZShlKX0pKSkpO3tjb25zdCBlPXthY2Nlc3NUb2tlbjpyLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6ci5jcmVhdGVkX2F0LGV4cGlyZXNJbjpyLmV4cGlyZXNfaW4saWRUb2tlbjpyLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpyLnJlZnJlc2hfdG9rZW4sc2NvcGU6ci5zY29wZSx0b2tlblR5cGU6ci50b2tlbl90eXBlfTtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhKHIsbiksUHJvbWlzZS5yZXNvbHZlKGUpfX0pKX1nZW5lcmF0ZVBLQ0VLZXkoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhKGUpLHI9W107T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZT0+e2Uuc3RhcnRzV2l0aCgicGtjZV9jb2RlX3ZlcmlmaWVyIikmJnIucHVzaChlKX0pKTtjb25zdCBpPXIuc29ydCgpLnBvcCgpO3JldHVybiJwa2NlX2NvZGVfdmVyaWZpZXIjIi5jb25jYXQocGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxKX0pKX19Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9jcnlwdG9VdGlscz1lfWdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuZ2VuZXJhdGVSYW5kb21CeXRlcygzMikpfWdldENvZGVDaGFsbGVuZ2UoZSl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5oYXNoU2hhMjU2KGUpKX1nZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgbj1KU09OLnBhcnNlKHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihuLmtpZD09PWUua2lkKXJldHVybiBlO3Rocm93IG5ldyBjKCJKUy1DUllQVE9fVVRJTC1HSkZUSVQtSVYwMSIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK24ua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKX1pc1ZhbGlkSWRUb2tlbihlLHQsbixyLGkscyl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLnZlcmlmeUp3dChlLHQsbyxuLHIsaSxzKS50aGVuKChlPT5lP1Byb21pc2UucmVzb2x2ZSghMCk6UHJvbWlzZS5yZWplY3QobmV3IGMoIkpTLUNSWVBUT19IRUxQRVItSVZJVC1JVjAxIiwiSW52YWxpZCBJRCB0b2tlbi4iLCJJRCB0b2tlbiB2YWxpZGF0aW9uIHJldHVybmVkIGZhbHNlIikpKSl9ZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD10aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZS5zcGxpdCgiLiIpWzFdKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGh7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9jcnlwdG9VdGlscz1uLHRoaXMuX2NyeXB0b0hlbHBlcj1uZXcgZChuKSx0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgbChlLHRoaXMuX2NyeXB0b0hlbHBlciksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9Z2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3ZhciByLGksbztyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdBVS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBhPW5ldyBVUkwodCksbD1uZXcgTWFwO2wuc2V0KCJyZXNwb25zZV90eXBlIiwiY29kZSIpLGwuc2V0KCJjbGllbnRfaWQiLHMuY2xpZW50SUQpO2xldCBkPSJvcGVuaWQiO3Muc2NvcGUmJnMuc2NvcGUubGVuZ3RoPjAmJihzLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8cy5zY29wZS5wdXNoKCJvcGVuaWQiKSxkPXMuc2NvcGUuam9pbigiICIpKSxsLnNldCgic2NvcGUiLGQpLGwuc2V0KCJyZWRpcmVjdF91cmkiLHMuc2lnbkluUmVkaXJlY3RVUkwpLHMucmVzcG9uc2VNb2RlJiZsLnNldCgicmVzcG9uc2VfbW9kZSIscy5yZXNwb25zZU1vZGUpO2NvbnN0IGg9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2VuZXJhdGVQS0NFS2V5KG4pO2lmKHMuZW5hYmxlUEtDRSl7Y29uc3QgZT1udWxsPT09KHI9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5nZXRDb2RlVmVyaWZpZXIoKSx0PW51bGw9PT0oaT10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaCxlLG4pLGwuc2V0KCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2IiksbC5zZXQoImNvZGVfY2hhbGxlbmdlIix0KX1zLnByb21wdCYmbC5zZXQoInByb21wdCIscy5wcm9tcHQpO2NvbnN0IGY9ZTtpZihmKWZvcihjb25zdFtlLHRdb2YgT2JqZWN0LmVudHJpZXMoZikpaWYoIiIhPWUmJiIiIT10JiYic3RhdGUiIT09ZSl7Y29uc3Qgbj1lLnJlcGxhY2UoL1tBLVpdL2csKGU9PiJfIi5jb25jYXQoZS50b0xvd2VyQ2FzZSgpKSkpO2wuc2V0KG4sdC50b1N0cmluZygpKX1sLnNldCgic3RhdGUiLHUuZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGgsZj9udWxsPT09KG89Zi5zdGF0ZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8udG9TdHJpbmcoKToiIikpO2Zvcihjb25zdFtlLHRdb2YgbC5lbnRyaWVzKCkpYS5zZWFyY2hQYXJhbXMuYXBwZW5kKGUsdCk7cmV0dXJuIGEudG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO24mJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLG4saSkpO2NvbnN0IHM9W107cy5wdXNoKCJjbGllbnRfaWQ9Ii5jb25jYXQoby5jbGllbnRJRCkpLG8uY2xpZW50U2VjcmV0JiZvLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJnMucHVzaCgiY2xpZW50X3NlY3JldD0iLmNvbmNhdChvLmNsaWVudFNlY3JldCkpO2NvbnN0IGw9ZTtsZXQgZDtzLnB1c2goImNvZGU9Ii5jb25jYXQobCkpLHMucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxzLnB1c2goInJlZGlyZWN0X3VyaT0iLmNvbmNhdChvLnNpZ25JblJlZGlyZWN0VVJMKSksby5lbmFibGVQS0NFJiYocy5wdXNoKCJjb2RlX3ZlcmlmaWVyPSIuY29uY2F0KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKSk7dHJ5e2Q9eWllbGQgZmV0Y2godCx7Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczpvLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkUwMiIsIlJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byBnZXQgdGhlIGFjY2VzcyB0b2tlbiBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKCFkLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMS1IRTAzIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggIi5jb25jYXQoZC5zdGF0dXNUZXh0KSx5aWVsZCBkLmpzb24oKSk7cmV0dXJuIHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxpKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpO2lmKCFyLnJlZnJlc2hfdG9rZW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDEiLCJObyByZWZyZXNoIHRva2VuIGZvdW5kLiIsIlRoZXJlIHdhcyBubyByZWZyZXNoIHRva2VuIGZvdW5kLiBBc2dhcmRlbyBkb2Vzbid0IHJldHVybiBhIHJlZnJlc2ggdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gZ3JhbnQgaXMgbm90IGVuYWJsZWQuIik7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLU5GMDIiLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBpPVtdO2xldCBvO2kucHVzaCgiY2xpZW50X2lkPSIuY29uY2F0KG4uY2xpZW50SUQpKSxpLnB1c2goInJlZnJlc2hfdG9rZW49Ii5jb25jYXQoci5yZWZyZXNoX3Rva2VuKSksaS5wdXNoKCJncmFudF90eXBlPXJlZnJlc2hfdG9rZW4iKSxuLmNsaWVudFNlY3JldCYmbi5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZpLnB1c2goImNsaWVudF9zZWNyZXQ9Ii5jb25jYXQobi5jbGllbnRTZWNyZXQpKTt0cnl7bz15aWVsZCBmZXRjaCh0LHtib2R5Omkuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1OUjAzIiwiUmVmcmVzaCBhY2Nlc3MgdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoIW8ub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQyLUhFMDQiLCJSZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAiLmNvbmNhdChvLnN0YXR1c1RleHQpLHlpZWxkIG8uanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShvLGUpfSkpfXJldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkucmV2b2NhdGlvbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORjAxIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcj1bXTtsZXQgaTtyLnB1c2goImNsaWVudF9pZD0iLmNvbmNhdChuLmNsaWVudElEKSksci5wdXNoKCJ0b2tlbj0iLmNvbmNhdCgoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW4pKSxyLnB1c2goInRva2VuX3R5cGVfaGludD1hY2Nlc3NfdG9rZW4iKTt0cnl7aT15aWVsZCBmZXRjaCh0LHtib2R5OnIuam9pbigiJiIpLGNyZWRlbnRpYWxzOm4uc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyh1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMy1ORTAyIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gcmV2b2tlIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKDIwMCE9PWkuc3RhdHVzfHwhaS5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtSEUwMyIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciByZXZva2UgYWNjZXNzIHRva2VuIHJlcXVlc3QgKCIuY29uY2F0KGkuc3RhdHVzVGV4dCwiKS4iKSx5aWVsZCBpLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpLFByb21pc2UucmVzb2x2ZShpKX0pKX1yZXF1ZXN0Q3VzdG9tR3JhbnQoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBvO2lmKG89ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnIudG9rZW5fZW5kcG9pbnQsIW98fDA9PT1vLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPXlpZWxkIFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGUuZGF0YSkubWFwKChlPT57bGV0W3IsaV09ZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGksbik7cmV0dXJuIiIuY29uY2F0KHIsIj0iKS5jb25jYXQoZSl9KSl9KSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sdS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEobikpLmFjY2Vzc190b2tlbil9KSk7Y29uc3QgZD17Ym9keTpzLmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGg7dHJ5e2g9eWllbGQgZmV0Y2gobyxkKX1jYXRjaChlKXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09aC5zdGF0dXN8fCFoLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoIi5jb25jYXQoaC5zdGF0dXNUZXh0LCIpIikseWllbGQgaC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoaCxuKTpQcm9taXNlLnJlc29sdmUoeWllbGQgaC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxuPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChlPT57dm9pZCAwIT09bltlXSYmIiIhPT1uW2VdJiZudWxsIT09bltlXXx8ZGVsZXRlIG5bZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksbikscn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlcn0pKX1nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW59KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFlJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IG49dC53ZWxsS25vd25FbmRwb2ludDtpZihuKXtsZXQgZTt0cnl7aWYoZT15aWVsZCBmZXRjaChuKSwyMDAhPT1lLnN0YXR1c3x8IWUub2spdGhyb3cgbmV3IEVycm9yfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSEUwMSIsIkludmFsaWQgd2VsbC1rbm93biByZXNwb25zZSIsIlRoZSB3ZWxsIGtub3duIGVuZHBvaW50IHJlc3BvbnNlIGhhcyBiZWVuIGZhaWxlZCB3aXRoIGFuIGVycm9yLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh5aWVsZCBlLmpzb24oKSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9aWYodC5iYXNlVXJsKXt0cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNCeUJhc2VVUkwoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAyIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgYmFzZSB1cmwgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfXRyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0V4cGxpY2l0bHkoKSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HT1BNRC1JVjAzIiwiUmVzb2x2aW5nIGVuZHBvaW50cyBmYWlsZWQuIixudWxsIT10P3Q6IlJlc29sdmluZyBlbmRwb2ludHMgYnkgZXhwbGljaXRseSBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXt2YXIgZSxuLHIsaSxvLHMsYSxjLHUsbDtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKTtyZXR1cm57YXV0aG9yaXphdGlvbkVuZHBvaW50Om51bGwhPT0oZT10LmF1dGhvcml6YXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1lP2U6IiIsY2hlY2tTZXNzaW9uSWZyYW1lOm51bGwhPT0obj10LmNoZWNrX3Nlc3Npb25faWZyYW1lKSYmdm9pZCAwIT09bj9uOiIiLGVuZFNlc3Npb25FbmRwb2ludDpudWxsIT09KHI9dC5lbmRfc2Vzc2lvbl9lbmRwb2ludCkmJnZvaWQgMCE9PXI/cjoiIixpbnRyb3NwZWN0aW9uRW5kcG9pbnQ6bnVsbCE9PShpPXQuaW50cm9zcGVjdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWk/aToiIixpc3N1ZXI6bnVsbCE9PShvPXQuaXNzdWVyKSYmdm9pZCAwIT09bz9vOiIiLGp3a3NVcmk6bnVsbCE9PShzPXQuandrc191cmkpJiZ2b2lkIDAhPT1zP3M6IiIscmVnaXN0cmF0aW9uRW5kcG9pbnQ6bnVsbCE9PShhPXQucmVnaXN0cmF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09YT9hOiIiLHJldm9jYXRpb25FbmRwb2ludDpudWxsIT09KGM9dC5yZXZvY2F0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09Yz9jOiIiLHRva2VuRW5kcG9pbnQ6bnVsbCE9PSh1PXQudG9rZW5fZW5kcG9pbnQpJiZ2b2lkIDAhPT11P3U6IiIsdXNlcmluZm9FbmRwb2ludDpudWxsIT09KGw9dC51c2VyaW5mb19lbmRwb2ludCkmJnZvaWQgMCE9PWw/bDoiIn19KSl9Z2V0U2lnbk91dFVSTChlKXt2YXIgbixyLGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGw9PT0obj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5lbmRfc2Vzc2lvbl9lbmRwb2ludCxvPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAxIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHM9bnVsbD09PShyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWRfdG9rZW47aWYoIXN8fDA9PT1zLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDIiLCJJRCB0b2tlbiBub3QgZm91bmQuIiwiTm8gSUQgdG9rZW4gY291bGQgYmUgZm91bmQuIEVpdGhlciB0aGUgc2Vzc2lvbiBpbmZvcm1hdGlvbiBpcyBsb3N0IG9yIHlvdSBoYXZlIG5vdCBzaWduZWQgaW4uIik7Y29uc3QgYT1udWxsIT09KGk9bnVsbD09bz92b2lkIDA6by5zaWduT3V0UmVkaXJlY3RVUkwpJiZ2b2lkIDAhPT1pP2k6bnVsbD09bz92b2lkIDA6by5zaWduSW5SZWRpcmVjdFVSTDtpZighYXx8MD09PWEudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMyIsIk5vIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBmb3VuZC4iLCJUaGUgc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGNhbm5vdCBiZSBmb3VuZCBvciB0aGUgVVJMIHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiBObyBzaWduLWluIHJlZGlyZWN0IFVSTCBoYXMgYmVlbiBmb3VuZCBlaXRoZXIuICIpO3JldHVybiIiLmNvbmNhdCh0LCI/aWRfdG9rZW5faGludD0iKS5jb25jYXQocywiJnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0iKS5jb25jYXQoYSwiJnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3MiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfWdldEFjY2Vzc1Rva2VuKGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGw9PT0obj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmFjY2Vzc190b2tlbn0pKX1pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gQm9vbGVhbih5aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuKGUpKX0pKX1nZXRQS0NFQ29kZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShlKSxuKX0pKX1zZXRQS0NFQ29kZShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUscil9KSl9dXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoZSkseWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCl9KSl9fWNsYXNzIGZ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9pZD1lLHRoaXMuX3N0b3JlPXR9c2V0RGF0YUluQnVsayhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSxuKSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLG4scil7dmFyIGk7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0oaT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09aT9pOm51bGwsbz10JiZKU09OLnBhcnNlKHQpLHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtbbl06cn0pLGE9SlNPTi5zdHJpbmdpZnkocyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLGEpfSkpfXJlbW92ZVZhbHVlKGUsbil7dmFyIHI7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PW51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKGUpKSYmdm9pZCAwIT09cj9yOm51bGwsaT10JiZKU09OLnBhcnNlKHQpLG89T2JqZWN0LmFzc2lnbih7fSxpKTtkZWxldGUgb1tuXTtjb25zdCBzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1fcmVzb2x2ZUtleShlLHQpe3JldHVybiB0PyIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkLCItIikuY29uY2F0KHQpOiIiLmNvbmNhdChlLCItIikuY29uY2F0KHRoaXMuX2lkKX1zZXRDb25maWdEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXNldFRlbXBvcmFyeURhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1zZXRTZXNzaW9uRGF0YShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5zZXREYXRhSW5CdWxrKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX1zZXRDdXN0b21EYXRhKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KGUsciksbil9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PW4/bjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0obj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0Q3VzdG9tRGF0YShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShlLG4pKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1yZW1vdmVDb25maWdEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsZSkpfSkpfXJlbW92ZVNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsZSkpfSkpfWdldENvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbikpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLG4pKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1zZXRDb25maWdEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlLG4pfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSxuKX0pKX1zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsaSksZSxuKX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxpKSxlLG4pfSkpfXJlbW92ZUNvbmZpZ0RhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSxlKX0pKX19Y29uc3QgcD17Y2xvY2tUb2xlcmFuY2U6MzAwLGVuYWJsZVBLQ0U6ITAscmVzcG9uc2VNb2RlOm4ucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBnewovKioKICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1N0b3JlfSBzdG9yZSAtIFRoZSBzdG9yZSBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgX3N0b3JlOiBTdG9yZSA9IG5ldyBEYXRhU3RvcmUoKTsKICAgICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi8KY29uc3RydWN0b3IoZSx0KXtnLl9pbnN0YW5jZUlEP2cuX2luc3RhbmNlSUQrPTE6Zy5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgZigiaW5zdGFuY2VfIi5jb25jYXQoZy5faW5zdGFuY2VJRCksZSksdGhpcy5fYXV0aGVudGljYXRpb25Db3JlPW5ldyBoKHRoaXMuX2RhdGFMYXllcix0KSxnLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAgICoKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBTREsgd2l0aCB0aGUgY29uZmlnIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciBuLHIsaTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHApLGUpLHtzY29wZTpbLi4ubnVsbCE9PShuPXAuc2NvcGUpJiZ2b2lkIDAhPT1uP246W10sLi4ubnVsbCE9PShpPW51bGw9PT0ocj1lLnNjb3BlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1wP3ZvaWQgMDpwLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LG4pOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbikpKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpKSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0U2lnbk91dFVSTChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0U2lnbk91dFVSTChlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8T0lEQ0VuZHBvaW50cz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKGUpfSkpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNyeXB0byBoZWxwZXIgb2JqZWN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvSGVscGVyPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgQ3J5cHRvSGVscGVyIG9iamVjdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjcnlwdG9IZWxwZXIgPSBhd2FpdCBhdXRoLkNyeXB0b0hlbHBlcigpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldENyeXB0b0hlbHBlcgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL2dldENyeXB0b0hlbHBlcigpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRDcnlwdG9IZWxwZXIoKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXZva2VzIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmVmcmVzaGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFjY2VzcwogICAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICogfSk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICoKICAgICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgICAqICAgZGF0YTogewogICAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICAgKiAgIH0sCiAgICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgKiB9KTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IHBrY2UgPSBhd2FpdCBnZXRQS0NFQ29kZSgpOwogICAgICAgICAgICogYGBgCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFBLQ0VDb2RlCiAgICAgICAgICAgKgogICAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAgICoKICAgICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBQS0NFIGNvZGUgdG8gdGhlIGRhdGEgc3RvcmUuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIC0gVGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICoKICAgICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaXMgc3VjY2Vzc2Z1bCBvciBub3QuCiAgICAgICAgICAgKgogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICAgKgogICAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICAgKgogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzU2lnbk91dFN1Y2Nlc3NmdWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBoYXMgZmFpbGVkIG9yIG5vdC4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAgICoKICAgICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZGlkU2lnbk91dEZhaWwKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICAgKgogICAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgd2FzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcyBjbGFzcy4KICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAgICoKICAgICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICAgKiBgYGAKICAgICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICAgKiB9CiAgICAgICAgICAgKgogICAgICAgICAgICogYXdhaXQgYXV0aC51cGRhdGVDb25maWcoY29uZmlnKTsKICAgICAgICAgICAqIGBgYAogICAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAgICoKICAgICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgICAqCiAgICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9c3RhdGljIGNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmNsZWFyVXNlclNlc3Npb25EYXRhKGUpfSkpfX1jb25zdCB2PSJpbml0Ijt2YXIgeSxtOyFmdW5jdGlvbihlKXtlLkxvY2FsU3RvcmFnZT0ibG9jYWxTdG9yYWdlIixlLlNlc3Npb25TdG9yYWdlPSJzZXNzaW9uU3RvcmFnZSIsZS5XZWJXb3JrZXI9IndlYldvcmtlciIsZS5Ccm93c2VyTWVtb3J5PSJicm93c2VyTWVtb3J5In0oeXx8KHk9e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50IixlLlNpZ25PdXRGYWlsZWQ9InNpZ24tb3V0LWZhaWxlZCJ9KG18fChtPXt9KSk7Y29uc3Qgdz0icHJvbXB0Tm9uZVJlcXVlc3RTZW50IixfPSJlcnJvciIsUz0iZXJyb3JfZGVzY3JpcHRpb24iLGI9ImN1c3RvbV9ncmFudF9jb25maWciLGs9IkFjY2VzcyB0b2tlbiBpcyBpbnZhbGlkIjt2YXIgRT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFQoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX1mdW5jdGlvbiBBKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbixyLmdldD9yOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW25dfX0pfSkpLHR9dmFyIFI9e2V4cG9ydHM6e319LEM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZS5hcHBseSh0LG4pfX0sUD1DLEQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBJKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09RC5jYWxsKGUpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gSChlKXtpZigiW29iamVjdCBPYmplY3RdIiE9PUQuY2FsbChlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT10fHx0PT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBNKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1ELmNhbGwoZSl9ZnVuY3Rpb24gaihlLHQpe2lmKG51bGwhPWUpaWYoIm9iamVjdCIhPXR5cGVvZiBlJiYoZT1bZV0pLEkoZSkpZm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKXQuY2FsbChudWxsLGVbbl0sbixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIE49e2lzQXJyYXk6SSxpc0FycmF5QnVmZmVyOlUsaXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhTyhlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFPKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGb3JtRGF0YV0iPT09RC5jYWxsKGUpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZVKGUuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9LGlzT2JqZWN0OkwsaXNQbGFpbk9iamVjdDpILGlzVW5kZWZpbmVkOk8saXNEYXRlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PUQuY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PUQuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PUQuY2FsbChlKX0saXNGdW5jdGlvbjpNLGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBMKGUpJiZNKGUucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10iPT09RC5jYWxsKGUpfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybigidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOmosbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIG4obixyKXtIKHRbcl0pJiZIKG4pP3Rbcl09ZSh0W3JdLG4pOkgobik/dFtyXT1lKHt9LG4pOkkobik/dFtyXT1uLnNsaWNlKCk6dFtyXT1ufWZvcih2YXIgcj0wLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKWooYXJndW1lbnRzW3JdLG4pO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqKHQsKGZ1bmN0aW9uKHQscil7ZVtyXT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdD9QKHQsbik6dH0pKSxlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKGUpe3JldHVybiA2NTI3OT09PWUuY2hhckNvZGVBdCgwKSYmKGU9ZS5zbGljZSgxKSksZX19LHE9TjtmdW5jdGlvbiB4KGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBLPWZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4gZTt2YXIgcjtpZihuKXI9bih0KTtlbHNlIGlmKHEuaXNVUkxTZWFyY2hQYXJhbXModCkpcj10LnRvU3RyaW5nKCk7ZWxzZXt2YXIgaT1bXTtxLmZvckVhY2godCwoZnVuY3Rpb24oZSx0KXtudWxsIT1lJiYocS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0scS5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3EuaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOnEuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2goeCh0KSsiPSIreChlKSl9KSkpfSkpLHI9aS5qb2luKCImIil9aWYocil7dmFyIG89ZS5pbmRleE9mKCIjIik7LTEhPT1vJiYoZT1lLnNsaWNlKDAsbykpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK3J9cmV0dXJuIGV9LEI9TjtmdW5jdGlvbiBKKCl7dGhpcy5oYW5kbGVycz1bXX1KLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFuJiZuLnN5bmNocm9ub3VzLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEoucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfSxKLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe0IuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIEY9SixXPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e307ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIFkoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBWPXosRz1ZO2Z1bmN0aW9uIFgoZSl7aWYoVj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigoVj09PXp8fCFWKSYmc2V0VGltZW91dClyZXR1cm4gVj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIFYoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFYuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIFYuY2FsbCh0aGlzLGUsMCl9fX0iZnVuY3Rpb24iPT10eXBlb2YgVy5zZXRUaW1lb3V0JiYoVj1zZXRUaW1lb3V0KSwiZnVuY3Rpb24iPT10eXBlb2YgVy5jbGVhclRpbWVvdXQmJihHPWNsZWFyVGltZW91dCk7dmFyICQsWj1bXSxRPSExLGVlPS0xO2Z1bmN0aW9uIHRlKCl7USYmJCYmKFE9ITEsJC5sZW5ndGg/Wj0kLmNvbmNhdChaKTplZT0tMSxaLmxlbmd0aCYmbmUoKSl9ZnVuY3Rpb24gbmUoKXtpZighUSl7dmFyIGU9WCh0ZSk7UT0hMDtmb3IodmFyIHQ9Wi5sZW5ndGg7dDspe2ZvcigkPVosWj1bXTsrK2VlPHQ7KSQmJiRbZWVdLnJ1bigpO2VlPS0xLHQ9Wi5sZW5ndGh9JD1udWxsLFE9ITEsZnVuY3Rpb24oZSl7aWYoRz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChHPT09WXx8IUcpJiZjbGVhclRpbWVvdXQpcmV0dXJuIEc9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7RyhlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEcuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBHLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcmUoZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1yZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07ZnVuY3Rpb24gaWUoKXt9dmFyIG9lPWllLHNlPWllLGFlPWllLGNlPWllLHVlPWllLGxlPWllLGRlPWllO3ZhciBoZT1XLnBlcmZvcm1hbmNlfHx7fSxmZT1oZS5ub3d8fGhlLm1vek5vd3x8aGUubXNOb3d8fGhlLm9Ob3d8fGhlLndlYmtpdE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07dmFyIHBlPW5ldyBEYXRlO3ZhciBnZT17bmV4dFRpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTtaLnB1c2gobmV3IHJlKGUsdCkpLDEhPT1aLmxlbmd0aHx8UXx8WChuZSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246b2UsYWRkTGlzdGVuZXI6c2Usb25jZTphZSxvZmY6Y2UscmVtb3ZlTGlzdGVuZXI6dWUscmVtb3ZlQWxsTGlzdGVuZXJzOmxlLGVtaXQ6ZGUsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqZmUuY2FsbChoZSksbj1NYXRoLmZsb29yKHQpLHI9TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKG4tPWVbMF0sKHItPWVbMV0pPDAmJihuLS0scis9MWU5KSksW24scl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtcGUpLzFlM319LHZlPWdlLHllPU4sbWU9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1yLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHdlPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxfZT1tZSxTZT1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gX2Uobyx0LG4scixpKX0sYmU9U2Usa2U9TixFZT1rZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksa2UuaXNOdW1iZXIobikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKG4pLnRvR01UU3RyaW5nKCkpLGtlLmlzU3RyaW5nKHIpJiZzLnB1c2goInBhdGg9IityKSxrZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFRlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LEFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LFJlPU4sQ2U9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxQZT1OLERlPVBlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gcihlKXt2YXIgcj1lO3JldHVybiB0JiYobi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIpLHI9bi5ocmVmKSxuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6bi5ob3N0LHNlYXJjaDpuLnNlYXJjaD9uLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGhuYW1lOiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6Ii8iK24ucGF0aG5hbWV9fXJldHVybiBlPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciBuPVBlLmlzU3RyaW5nKHQpP3IodCk6dDtyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gSWUoZSl7dGhpcy5tZXNzYWdlPWV9SWUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LEllLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBPZT1JZSxVZT1OLExlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QoYmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIituLnN0YXR1cyxuLmNvbmZpZyxudWxsLG4ucmVxdWVzdCxuKSk6ZShuKX0sSGU9RWUsTWU9SyxqZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhVGUodCk/QWUoZSx0KTp0fSxOZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaT17fTtyZXR1cm4gZT8oUmUuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihyPWUuaW5kZXhPZigiOiIpLHQ9UmUudHJpbShlLnN1YnN0cigwLHIpKS50b0xvd2VyQ2FzZSgpLG49UmUudHJpbShlLnN1YnN0cihyKzEpKSx0KXtpZihpW3RdJiZDZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtuXSk6aVt0XT9pW3RdKyIsICIrbjpufX0pKSxpKTppfSxxZT1EZSx4ZT1TZSxLZT13ZSxCZT1PZSxKZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7dmFyIHIsaT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShyKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpfVVlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgZD1qZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGgoKXtpZihjKXt2YXIgcj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TmUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpyLGNvbmZpZzplLHJlcXVlc3Q6Y307TGUoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe24oZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxNZShkLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWg6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChoKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKG4oeGUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7bih4ZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHI9ZS50cmFuc2l0aW9uYWx8fEtlO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxuKHhlKHQsZSxyLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sVWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxxZShkKSkmJmUueHNyZkNvb2tpZU5hbWU/SGUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmVWUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFVlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihyPWZ1bmN0aW9uKGUpe2MmJihuKCFlfHxlJiZlLnR5cGU/bmV3IEJlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShyKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/cigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixyKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sRmU9TixXZT1mdW5jdGlvbihlLHQpe3llLmZvckVhY2goZSwoZnVuY3Rpb24obixyKXtyIT09dCYmci50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1uLGRlbGV0ZSBlW3JdKX0pKX0semU9bWUsWWU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBWZShlLHQpeyFGZS5pc1VuZGVmaW5lZChlKSYmRmUuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyIEdlLFhlPXt0cmFuc2l0aW9uYWw6d2UsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PXZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmUpKSYmKEdlPUplKSxHZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gV2UodCwiQWNjZXB0IiksV2UodCwiQ29udGVudC1UeXBlIiksRmUuaXNGb3JtRGF0YShlKXx8RmUuaXNBcnJheUJ1ZmZlcihlKXx8RmUuaXNCdWZmZXIoZSl8fEZlLmlzU3RyZWFtKGUpfHxGZS5pc0ZpbGUoZSl8fEZlLmlzQmxvYihlKT9lOkZlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkZlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhWZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6RmUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhWZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LG4pe2lmKEZlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksRmUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKG58fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fFhlLnRyYW5zaXRpb25hbCxuPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IW4mJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fHImJkZlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyB6ZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0ZlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe1hlLmhlYWRlcnNbZV09e319KSksRmUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtYZS5oZWFkZXJzW2VdPUZlLm1lcmdlKFllKX0pKTt2YXIgJGU9WGUsWmU9TixRZT0kZSxldD1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sdHQ9TixudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpc3x8UWU7cmV0dXJuIFplLmZvckVhY2gobiwoZnVuY3Rpb24obil7ZT1uLmNhbGwocixlLHQpfSkpLGV9LHJ0PWV0LGl0PSRlLG90PU9lO2Z1bmN0aW9uIHN0KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBvdCgiY2FuY2VsZWQiKX12YXIgYXQ9TixjdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49e307ZnVuY3Rpb24gcihlLHQpe3JldHVybiBhdC5pc1BsYWluT2JqZWN0KGUpJiZhdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKGUsdCk6YXQuaXNQbGFpbk9iamVjdCh0KT9hdC5tZXJnZSh7fSx0KTphdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKGVbbl0sdFtuXSl9ZnVuY3Rpb24gbyhlKXtpZighYXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIHIodm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMobil7cmV0dXJuIGF0LmlzVW5kZWZpbmVkKHRbbl0pP2F0LmlzVW5kZWZpbmVkKGVbbl0pP3ZvaWQgMDpyKHZvaWQgMCxlW25dKTpyKHZvaWQgMCx0W25dKX1mdW5jdGlvbiBhKG4pe3JldHVybiBuIGluIHQ/cihlW25dLHRbbl0pOm4gaW4gZT9yKHZvaWQgMCxlW25dKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGF0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxyPXQoZSk7YXQuaXNVbmRlZmluZWQocikmJnQhPT1hfHwobltlXT1yKX0pKSxufSx1dD0iMC4yNi4xIixsdD11dCxkdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7ZHRbZV09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBodD17fTtkdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2x0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsobj8iLiAiK246IiIpfXJldHVybiBmdW5jdGlvbihuLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihyKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIWh0W2ldJiYoaHRbaV09ITAsY29uc29sZS53YXJuKHIoaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShuLGksbyl9fTt2YXIgZnQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGg7aS0tID4wOyl7dmFyIG89cltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1uKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpkdH0scHQ9TixndD1LLHZ0PUYseXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHN0KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1udC5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz10dC5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLHR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8aXQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHN0KGUpLHQuZGF0YT1udC5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBydCh0KXx8KHN0KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9bnQuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sbXQ9Y3Qsd3Q9ZnQsX3Q9d3QudmFsaWRhdG9ycztmdW5jdGlvbiBTdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZ0LHJlc3BvbnNlOm5ldyB2dH19U3QucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9bXQodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1uJiZ3dC5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpfdC50cmFuc2l0aW9uYWwoX3QuYm9vbGVhbil9LCExKTt2YXIgcj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsci51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3l0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsciksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7ci5sZW5ndGg7KXt2YXIgdT1yLnNoaWZ0KCksbD1yLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz15dChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LFN0LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bXQodGhpcy5kZWZhdWx0cyxlKSxndChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxwdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdChtdChufHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToobnx8e30pLmRhdGF9KSl9fSkpLHB0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7U3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOm59KSl9fSkpO3ZhciBidD1TdCxrdD1PZTtmdW5jdGlvbiBFdChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIG49dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYobi5fbGlzdGVuZXJzKXt2YXIgdCxyPW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKW4uX2xpc3RlbmVyc1t0XShlKTtuLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIHIuY2FuY2VsPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSh0KX0scn0sZSgoZnVuY3Rpb24oZSl7bi5yZWFzb258fChuLnJlYXNvbj1uZXcga3QoZSksdChuLnJlYXNvbikpfSkpfUV0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LEV0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LEV0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sRXQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgRXQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBUdD1FdCxBdD1OLFJ0PU4sQ3Q9QyxQdD1idCxEdD1jdDt2YXIgSXQ9ZnVuY3Rpb24gZSh0KXt2YXIgbj1uZXcgUHQodCkscj1DdChQdC5wcm90b3R5cGUucmVxdWVzdCxuKTtyZXR1cm4gUnQuZXh0ZW5kKHIsUHQucHJvdG90eXBlLG4pLFJ0LmV4dGVuZChyLG4pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBlKER0KHQsbikpfSxyfSgkZSk7SXQuQXhpb3M9UHQsSXQuQ2FuY2VsPU9lLEl0LkNhbmNlbFRva2VuPVR0LEl0LmlzQ2FuY2VsPWV0LEl0LlZFUlNJT049dXQsSXQuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sSXQuc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sSXQuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBBdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0sUi5leHBvcnRzPUl0LFIuZXhwb3J0cy5kZWZhdWx0PUl0O3ZhciBPdCxVdD1SLmV4cG9ydHM7bGV0IEx0PU90PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVV0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IE90KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1VdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1VdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLG49bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntuLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1ufXJldHVybiB0LnN0YXJ0VGltZUluTXM9KG5ldyBEYXRlKS5nZXRUaW1lKCksT3QuaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgT3QuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIE90LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPdC5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtPdC5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOk90LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e090LmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07THQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsTHQ9T3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxMdCk7Y2xhc3MgSHR7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIGp0e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyByZW1vdmVBdXRob3JpemF0aW9uQ29kZSgpe2NvbnN0IGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9c3RhdGljIGdldFBLQ0UoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGUpKSYmdm9pZCAwIT09dD90OiIifXN0YXRpYyBzZXRQS0NFKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfXN0YXRpYyBzZXRTaWduT3V0VVJMKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0ocyxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTCgpe3ZhciBlO3JldHVybiBudWxsIT09KGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzKSkmJnZvaWQgMCE9PWU/ZToiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIWp0Lmhhc0Vycm9ySW5VUkwoKSYmIWp0Lmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4ganQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFqdC5oYXNFcnJvckluVVJMKCkmJiFqdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93LmxvY2F0aW9uLmhyZWY7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fXZhciBOdD1bXSxxdD1bXSx4dD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxLdD0hMTtmdW5jdGlvbiBCdCgpe0t0PSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClOdFt0XT1lW3RdLHF0W2UuY2hhckNvZGVBdCh0KV09dDtxdFsiLSIuY2hhckNvZGVBdCgwKV09NjIscXRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIEp0KGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChOdFsoaT1yKT4+MTgmNjNdK050W2k+PjEyJjYzXStOdFtpPj42JjYzXStOdFs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ7S3R8fEJ0KCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goSnQoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1OdFt0Pj4yXSxpKz1OdFt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPU50W3Q+PjEwXSxpKz1OdFt0Pj40JjYzXSxpKz1OdFt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIFd0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uIHp0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgWXQ9e30udG9TdHJpbmcsVnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WXQuY2FsbChlKX07WnQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1XLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFcuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgR3Q9WHQoKTtmdW5jdGlvbiBYdCgpe3JldHVybiBadC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiAkdChlLHQpe2lmKFh0KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVp0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBadCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBadChlLHQsbil7aWYoIShadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgWnQpKXJldHVybiBuZXcgWnQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdG4odGhpcyxlKX1yZXR1cm4gUXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gUXQoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTtadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6ZT1ubihlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFadC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8c24odCxuKSxpPShlPSR0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKG9uKHQpKXt2YXIgbj0wfHJuKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPSR0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj8kdChlLDApOm5uKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJlZ0KHQuZGF0YSkpcmV0dXJuIG5uKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gZW4oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB0bihlLHQpe2lmKGVuKHQpLGU9JHQoZSx0PDA/MDowfHJuKHQpKSwhWnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBubihlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfHJuKHQubGVuZ3RoKTtlPSR0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBybihlKXtpZihlPj1YdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitYdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gc24oZSx0KXtpZihvbihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVW4oZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBMbihlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBVbihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBhbihlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBibih0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gbW4odGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gU24odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4ga24odGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gY24oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB1bihlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9WnQuZnJvbSh0LHIpKSxvbih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmxuKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsWnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOmxuKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsbihlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBkbihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIEhuKFVuKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBmbihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gSG4oTG4odCksZSxuLHIpfWZ1bmN0aW9uIHZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9GdChlKTpGdChlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9d24pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPXduKSk7cmV0dXJuIG59KHIpfVp0LnBvb2xTaXplPTgxOTIsWnQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVp0LnByb3RvdHlwZSxlfSxadC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUXQobnVsbCxlLHQsbil9LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihadC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLFp0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxadC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlbih0KSx0PD0wPyR0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/JHQoZSx0KS5maWxsKG4scik6JHQoZSx0KS5maWxsKG4pOiR0KGUsdCl9KG51bGwsZSx0LG4pfSxadC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB0bihudWxsLGUpfSxadC5pc0J1ZmZlcj1NbixadC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW9uKGUpfHwhb24odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LFp0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFp0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBadC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPVp0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LFp0LmJ5dGVMZW5ndGg9c24sWnQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxadC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWNuKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWNuKHRoaXMsdCx0KzMpLGNuKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpY24odGhpcyx0LHQrNyksY24odGhpcyx0KzEsdCs2KSxjbih0aGlzLHQrMix0KzUpLGNuKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP21uKHRoaXMsMCxlKTphbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFp0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1adC5jb21wYXJlKHRoaXMsZSl9LFp0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LFp0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sWnQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LFp0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdW4odGhpcyxlLHQsbiwhMCl9LFp0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITEpfSxadC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIGRuKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGhuKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdm4odGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sWnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHduPTQwOTY7ZnVuY3Rpb24gX24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1PbihlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBrbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEVuKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBUbihlLHQsbixyLGksbyl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBBbihlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gUm4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gQ24oZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw0KSx6dChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBEbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw4KSx6dChlLHQsbixyLDUyLDgpLG4rOH1adC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgWnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LFp0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFp0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LFp0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxadC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxadC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sWnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFp0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSwyMyw0KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMCw1Miw4KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSw1Miw4KX0sWnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VG4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMjU1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMSwxMjcsLTEyOCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkFuKHRoaXMsZSx0LCEwKSx0KzJ9LFp0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMCxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxadC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhWnQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9b24oZSk/ZTpVbihuZXcgWnQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBJbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPbihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIExuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7S3R8fEJ0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHh0KDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPXF0W2UuY2hhckNvZGVBdCh0KV08PDE4fHF0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8cXRbZS5jaGFyQ29kZUF0KHQrMildPDw2fHF0W2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPXF0W2UuY2hhckNvZGVBdCh0KV08PDJ8cXRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPXF0W2UuY2hhckNvZGVBdCh0KV08PDEwfHF0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxxdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShJbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSG4oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxqbihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZqbihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gam4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgTm49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOlp0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLFp0LmFsbG9jKCtlKX0saXNCdWZmZXI6TW4sa01heExlbmd0aDpHdH0pLHFuPXtleHBvcnRzOnt9fSx4bj17fSxLbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEtuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10JTQ7aWYoIW4pcmV0dXJuIGU7dmFyIHI9dCxpPTQtbixvPXQraSxzPVp0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIscisrKTtyZXR1cm4gcy50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCbj1LbjtmdW5jdGlvbiBKbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmlzQnVmZmVyKGUpP1duKGUudG9TdHJpbmcoImJhc2U2NCIpKTpXbihadC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksQm4uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciB6bixZbj1KbjtZbi5lbmNvZGU9Sm4sWW4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksWnQuZnJvbShGbihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LFluLnRvQmFzZTY0PUZuLFluLmZyb21CYXNlNjQ9V24sWW4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0LmZyb20oRm4oZSksImJhc2U2NCIpfSx4bi5kZWZhdWx0PVluLCh6bj1xbikuZXhwb3J0cz14bi5kZWZhdWx0LHpuLmV4cG9ydHMuZGVmYXVsdD16bi5leHBvcnRzO3ZhciBWbj1xbi5leHBvcnRzLEduPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsbil7dmFyIHI9e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIG4oZSxuLHIsaSxvKXtmb3IodmFyIHMsYSxjLHUsbCxkLGgsZixwLGcsdix5LG07bz49NjQ7KXtmb3Iocz1uWzBdLGE9blsxXSxjPW5bMl0sdT1uWzNdLGw9bls0XSxkPW5bNV0saD1uWzZdLGY9bls3XSxnPTA7ZzwxNjtnKyspdj1pKzQqZyxlW2ddPSgyNTUmclt2XSk8PDI0fCgyNTUmclt2KzFdKTw8MTZ8KDI1NSZyW3YrMl0pPDw4fDI1NSZyW3YrM107Zm9yKGc9MTY7Zzw2NDtnKyspeT0oKHA9ZVtnLTJdKT4+PjE3fHA8PDE1KV4ocD4+PjE5fHA8PDEzKV5wPj4+MTAsbT0oKHA9ZVtnLTE1XSk+Pj43fHA8PDI1KV4ocD4+PjE4fHA8PDE0KV5wPj4+MyxlW2ddPSh5K2VbZy03XXwwKSsobStlW2ctMTZdfDApO2ZvcihnPTA7Zzw2NDtnKyspeT0oKChsPj4+NnxsPDwyNileKGw+Pj4xMXxsPDwyMSleKGw+Pj4yNXxsPDw3KSkrKGwmZF5+bCZoKXwwKSsoZisodFtnXStlW2ddfDApfDApfDAsbT0oKHM+Pj4yfHM8PDMwKV4ocz4+PjEzfHM8PDE5KV4ocz4+PjIyfHM8PDEwKSkrKHMmYV5zJmNeYSZjKXwwLGY9aCxoPWQsZD1sLGw9dSt5fDAsdT1jLGM9YSxhPXMscz15K218MDtuWzBdKz1zLG5bMV0rPWEsblsyXSs9YyxuWzNdKz11LG5bNF0rPWwsbls1XSs9ZCxuWzZdKz1oLG5bN10rPWYsaSs9NjQsby09NjR9cmV0dXJuIGl9dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5kaWdlc3RMZW5ndGg9ZS5kaWdlc3RMZW5ndGgsdGhpcy5ibG9ja1NpemU9ZS5ibG9ja1NpemUsdGhpcy5zdGF0ZT1uZXcgSW50MzJBcnJheSg4KSx0aGlzLnRlbXA9bmV3IEludDMyQXJyYXkoNjQpLHRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDEyOCksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzLnJlc2V0KCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGVbMF09MTc3OTAzMzcwMyx0aGlzLnN0YXRlWzFdPTMxNDQxMzQyNzcsdGhpcy5zdGF0ZVsyXT0xMDEzOTA0MjQyLHRoaXMuc3RhdGVbM109Mjc3MzQ4MDc2Mix0aGlzLnN0YXRlWzRdPTEzNTk4OTMxMTksdGhpcy5zdGF0ZVs1XT0yNjAwODIyOTI0LHRoaXMuc3RhdGVbNl09NTI4NzM0NjM1LHRoaXMuc3RhdGVbN109MTU0MTQ1OTIyNSx0aGlzLmJ1ZmZlckxlbmd0aD0wLHRoaXMuYnl0ZXNIYXNoZWQ9MCx0aGlzLmZpbmlzaGVkPSExLHRoaXN9LHQucHJvdG90eXBlLmNsZWFuPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmJ1ZmZlci5sZW5ndGg7ZSsrKXRoaXMuYnVmZmVyW2VdPTA7Zm9yKGU9MDtlPHRoaXMudGVtcC5sZW5ndGg7ZSsrKXRoaXMudGVtcFtlXT0wO3RoaXMucmVzZXQoKX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ZS5sZW5ndGgpLHRoaXMuZmluaXNoZWQpdGhyb3cgbmV3IEVycm9yKCJTSEEyNTY6IGNhbid0IHVwZGF0ZSBiZWNhdXNlIGhhc2ggd2FzIGZpbmlzaGVkLiIpO3ZhciByPTA7aWYodGhpcy5ieXRlc0hhc2hlZCs9dCx0aGlzLmJ1ZmZlckxlbmd0aD4wKXtmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPDY0JiZ0PjA7KXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWVbcisrXSx0LS07NjQ9PT10aGlzLmJ1ZmZlckxlbmd0aCYmKG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCw2NCksdGhpcy5idWZmZXJMZW5ndGg9MCl9Zm9yKHQ+PTY0JiYocj1uKHRoaXMudGVtcCx0aGlzLnN0YXRlLGUscix0KSx0JT02NCk7dD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW3IrK10sdC0tO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZmluaXNoZWQpe3ZhciB0PXRoaXMuYnl0ZXNIYXNoZWQscj10aGlzLmJ1ZmZlckxlbmd0aCxpPXQvNTM2ODcwOTEyfDAsbz10PDwzLHM9dCU2NDw1Nj82NDoxMjg7dGhpcy5idWZmZXJbcl09MTI4O2Zvcih2YXIgYT1yKzE7YTxzLTg7YSsrKXRoaXMuYnVmZmVyW2FdPTA7dGhpcy5idWZmZXJbcy04XT1pPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtN109aT4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTZdPWk+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTVdPWk+Pj4wJjI1NSx0aGlzLmJ1ZmZlcltzLTRdPW8+Pj4yNCYyNTUsdGhpcy5idWZmZXJbcy0zXT1vPj4+MTYmMjU1LHRoaXMuYnVmZmVyW3MtMl09bz4+PjgmMjU1LHRoaXMuYnVmZmVyW3MtMV09bz4+PjAmMjU1LG4odGhpcy50ZW1wLHRoaXMuc3RhdGUsdGhpcy5idWZmZXIsMCxzKSx0aGlzLmZpbmlzaGVkPSEwfWZvcihhPTA7YTw4O2ErKyllWzQqYSswXT10aGlzLnN0YXRlW2FdPj4+MjQmMjU1LGVbNCphKzFdPXRoaXMuc3RhdGVbYV0+Pj4xNiYyNTUsZVs0KmErMl09dGhpcy5zdGF0ZVthXT4+PjgmMjU1LGVbNCphKzNdPXRoaXMuc3RhdGVbYV0+Pj4wJjI1NTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kaWdlc3RMZW5ndGgpO3JldHVybiB0aGlzLmZpbmlzaChlKSxlfSx0LnByb3RvdHlwZS5fc2F2ZVN0YXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dGhpcy5zdGF0ZS5sZW5ndGg7dCsrKWVbdF09dGhpcy5zdGF0ZVt0XX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVTdGF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5zdGF0ZS5sZW5ndGg7bisrKXRoaXMuc3RhdGVbbl09ZVtuXTt0aGlzLmJ5dGVzSGFzaGVkPXQsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmJ1ZmZlckxlbmd0aD0wfSx0fSgpO2UuSGFzaD1yO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlubmVyPW5ldyByLHRoaXMub3V0ZXI9bmV3IHIsdGhpcy5ibG9ja1NpemU9dGhpcy5pbm5lci5ibG9ja1NpemUsdGhpcy5kaWdlc3RMZW5ndGg9dGhpcy5pbm5lci5kaWdlc3RMZW5ndGg7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja1NpemUpO2lmKGUubGVuZ3RoPnRoaXMuYmxvY2tTaXplKShuZXcgcikudXBkYXRlKGUpLmZpbmlzaCh0KS5jbGVhbigpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdFtuXT1lW25dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXV49NTQ7dGhpcy5pbm5lci51cGRhdGUodCk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dXj0xMDY7dGhpcy5vdXRlci51cGRhdGUodCksdGhpcy5pc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMub3N0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLmlubmVyLl9zYXZlU3RhdGUodGhpcy5pc3RhdGUpLHRoaXMub3V0ZXIuX3NhdmVTdGF0ZSh0aGlzLm9zdGF0ZSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl0W25dPTB9cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLmlzdGF0ZSx0aGlzLmlubmVyLmJsb2NrU2l6ZSksdGhpcy5vdXRlci5fcmVzdG9yZVN0YXRlKHRoaXMub3N0YXRlLHRoaXMub3V0ZXIuYmxvY2tTaXplKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5pc3RhdGUubGVuZ3RoO2UrKyl0aGlzLm9zdGF0ZVtlXT10aGlzLmlzdGF0ZVtlXT0wO3RoaXMuaW5uZXIuY2xlYW4oKSx0aGlzLm91dGVyLmNsZWFuKCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZSksdGhpc30sZS5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLmZpbmlzaGVkP3RoaXMub3V0ZXIuZmluaXNoKGUpOih0aGlzLmlubmVyLmZpbmlzaChlKSx0aGlzLm91dGVyLnVwZGF0ZShlLHRoaXMuZGlnZXN0TGVuZ3RoKS5maW5pc2goZSkpLHRoaXN9LGUucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sZX0oKTtmdW5jdGlvbiBvKGUpe3ZhciB0PShuZXcgcikudXBkYXRlKGUpLG49dC5kaWdlc3QoKTtyZXR1cm4gdC5jbGVhbigpLG59ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPW5ldyBpKGUpLnVwZGF0ZSh0KSxyPW4uZGlnZXN0KCk7cmV0dXJuIG4uY2xlYW4oKSxyfWZ1bmN0aW9uIGEoZSx0LG4scil7dmFyIGk9clswXTtpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoImhrZGY6IGNhbm5vdCBleHBhbmQgbW9yZSIpO3QucmVzZXQoKSxpPjEmJnQudXBkYXRlKGUpLG4mJnQudXBkYXRlKG4pLHQudXBkYXRlKHIpLHQuZmluaXNoKGUpLHJbMF0rK31lLkhNQUM9aSxlLmhhc2g9byxlLmRlZmF1bHQ9byxlLmhtYWM9czt2YXIgYz1uZXcgVWludDhBcnJheShlLmRpZ2VzdExlbmd0aCk7ZnVuY3Rpb24gdShlLHQsbixyKXt2b2lkIDA9PT10JiYodD1jKSx2b2lkIDA9PT1yJiYocj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksdT1zKHQsZSksbD1uZXcgaSh1KSxkPW5ldyBVaW50OEFycmF5KGwuZGlnZXN0TGVuZ3RoKSxoPWQubGVuZ3RoLGY9bmV3IFVpbnQ4QXJyYXkocikscD0wO3A8cjtwKyspaD09PWQubGVuZ3RoJiYoYShkLGwsbixvKSxoPTApLGZbcF09ZFtoKytdO3JldHVybiBsLmNsZWFuKCksZC5maWxsKDApLG8uZmlsbCgwKSxmfWZ1bmN0aW9uIGwoZSx0LG4scil7Zm9yKHZhciBvPW5ldyBpKGUpLHM9by5kaWdlc3RMZW5ndGgsYT1uZXcgVWludDhBcnJheSg0KSxjPW5ldyBVaW50OEFycmF5KHMpLHU9bmV3IFVpbnQ4QXJyYXkocyksbD1uZXcgVWludDhBcnJheShyKSxkPTA7ZCpzPHI7ZCsrKXt2YXIgaD1kKzE7YVswXT1oPj4+MjQmMjU1LGFbMV09aD4+PjE2JjI1NSxhWzJdPWg+Pj44JjI1NSxhWzNdPWg+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUoYSksby5maW5pc2godSk7Zm9yKHZhciBmPTA7ZjxzO2YrKyljW2ZdPXVbZl07Zm9yKGY9MjtmPD1uO2YrKyl7by5yZXNldCgpLG8udXBkYXRlKHUpLmZpbmlzaCh1KTtmb3IodmFyIHA9MDtwPHM7cCsrKWNbcF1ePXVbcF19Zm9yKGY9MDtmPHMmJmQqcytmPHI7ZisrKWxbZCpzK2ZdPWNbZl19Zm9yKGQ9MDtkPHM7ZCsrKWNbZF09dVtkXT0wO2ZvcihkPTA7ZDw0O2QrKylhW2RdPTA7cmV0dXJuIG8uY2xlYW4oKSxsfWUuaGtkZj11LGUucGJrZGYyPWx9KHIpO3ZhciBpPXIuZGVmYXVsdDtmb3IodmFyIG8gaW4gcilpW29dPXJbb107ZS5leHBvcnRzPWl9KCl9KEduKTt2YXIgWG49VChHbi5leHBvcnRzKSwkbj1jcnlwdG87Y29uc3QgWm49ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxRbj1uZXcgVGV4dEVuY29kZXIsZXI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHRyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1lci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBuciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIHJyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ1bnNwZWNpZmllZCIsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InVuc3BlY2lmaWVkIjtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgaXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InVuc3BlY2lmaWVkIixuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToidW5zcGVjaWZpZWQiO3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3Mgb3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBzciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgYXIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBjciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIHVyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBsciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIGRyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzIGhyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBmcigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIHByKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYWxnb3JpdGhtLm5hbWUiO3JldHVybiBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICIuY29uY2F0KHQsIiBtdXN0IGJlICIpLmNvbmNhdChlKSl9ZnVuY3Rpb24gZ3IoZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiB2cihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiB5cihlKXtzd2l0Y2goZSl7Y2FzZSJFUzI1NiI6cmV0dXJuIlAtMjU2IjtjYXNlIkVTMzg0IjpyZXR1cm4iUC0zODQiO2Nhc2UiRVM1MTIiOnJldHVybiJQLTUyMSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fWZ1bmN0aW9uIG1yKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9Im9uZSBvZiAiLmNvbmNhdCh0LmpvaW4oIiwgIiksIiwgb3IgIikuY29uY2F0KG4sIi4iKX1lbHNlIDI9PT10Lmxlbmd0aD9lKz0ib25lIG9mICIuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSwiLiIpOmUrPSIiLmNvbmNhdCh0WzBdLCIuIik7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19dmFyIHdyPWZ1bmN0aW9uKGUpe2xldCB0PSJLZXkgbXVzdCBiZSAiO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtpZihyLmxlbmd0aD4yKXtjb25zdCBlPXIucG9wKCk7dCs9Im9uZSBvZiB0eXBlICIuY29uY2F0KHIuam9pbigiLCAiKSwiLCBvciAiKS5jb25jYXQoZSwiLiIpfWVsc2UgMj09PXIubGVuZ3RoP3QrPSJvbmUgb2YgdHlwZSAiLmNvbmNhdChyWzBdLCIgb3IgIikuY29uY2F0KHJbMV0sIi4iKTp0Kz0ib2YgdHlwZSAiLmNvbmNhdChyWzBdLCIuIik7cmV0dXJuIG51bGw9PWU/dCs9IiBSZWNlaXZlZCAiLmNvbmNhdChlKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5uYW1lP3QrPSIgUmVjZWl2ZWQgZnVuY3Rpb24gIi5jb25jYXQoZS5uYW1lKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZSYmKHQrPSIgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgIi5jb25jYXQoZS5jb25zdHJ1Y3Rvci5uYW1lKSksdH0sX3I9ZT0+Wm4oZSk7Y29uc3QgU3I9WyJDcnlwdG9LZXkiXTtmdW5jdGlvbiBicihlKXtpZigib2JqZWN0IiE9dHlwZW9mKHQ9ZSl8fG51bGw9PT10fHwiW29iamVjdCBPYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4hMTt2YXIgdDtpZihudWxsPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiEwO2xldCBuPWU7Zm9yKDtudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pOyluPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bn1jb25zdCBrcj1hc3luYyBlPT57dmFyIHQsbjtjb25zdHthbGdvcml0aG06cixrZXlVc2FnZXM6aX09ZnVuY3Rpb24oZSl7bGV0IHQsbjtzd2l0Y2goZS5rdHkpe2Nhc2Uib2N0Ijpzd2l0Y2goZS5hbGcpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnQ9e25hbWU6IkhNQUMiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPVsic2lnbiIsInZlcmlmeSJdO2JyZWFrO2Nhc2UiQTEyOENCQy1IUzI1NiI6Y2FzZSJBMTkyQ0JDLUhTMzg0IjpjYXNlIkEyNTZDQkMtSFM1MTIiOnRocm93IG5ldyBzcigiIi5jb25jYXQoZS5hbGcsIiBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzIikpO2Nhc2UiQTEyOEdDTSI6Y2FzZSJBMTkyR0NNIjpjYXNlIkEyNTZHQ00iOmNhc2UiQTEyOEdDTUtXIjpjYXNlIkExOTJHQ01LVyI6Y2FzZSJBMjU2R0NNS1ciOnQ9e25hbWU6IkFFUy1HQ00ifSxuPVsiZW5jcnlwdCIsImRlY3J5cHQiXTticmVhaztjYXNlIkExMjhLVyI6Y2FzZSJBMTkyS1ciOmNhc2UiQTI1NktXIjp0PXtuYW1lOiJBRVMtS1cifSxuPVsid3JhcEtleSIsInVud3JhcEtleSJdO2JyZWFrO2Nhc2UiUEJFUzItSFMyNTYrQTEyOEtXIjpjYXNlIlBCRVMyLUhTMzg0K0ExOTJLVyI6Y2FzZSJQQkVTMi1IUzUxMitBMjU2S1ciOnQ9e25hbWU6IlBCS0RGMiJ9LG49WyJkZXJpdmVCaXRzIl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiUlNBIjpzd2l0Y2goZS5hbGcpe2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnQ9e25hbWU6IlJTQS1QU1MiLGhhc2g6IlNIQS0iLmNvbmNhdChlLmFsZy5zbGljZSgtMykpfSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOiJTSEEtIi5jb25jYXQoZS5hbGcuc2xpY2UoLTMpKX0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTQS1PQUVQIjpjYXNlIlJTQS1PQUVQLTI1NiI6Y2FzZSJSU0EtT0FFUC0zODQiOmNhc2UiUlNBLU9BRVAtNTEyIjp0PXtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLSIuY29uY2F0KHBhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDEpfSxuPWUuZD9bImRlY3J5cHQiLCJ1bndyYXBLZXkiXTpbImVuY3J5cHQiLCJ3cmFwS2V5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UiRUMiOnN3aXRjaChlLmFsZyl7Y2FzZSJFUzI1NiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTMzg0Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0zODQifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVM1MTIiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTUyMSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFQ0RILUVTIjpjYXNlIkVDREgtRVMrQTEyOEtXIjpjYXNlIkVDREgtRVMrQTE5MktXIjpjYXNlIkVDREgtRVMrQTI1NktXIjp0PXtuYW1lOiJFQ0RIIixuYW1lZEN1cnZlOmUuY3J2fSxuPWUuZD9bImRlcml2ZUJpdHMiXTpbXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBzcignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSBmcigpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtpZigiRWQyNTUxOSIhPT1lLmNydil0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJjcnYiIChTdWJ0eXBlIG9mIEtleSBQYWlyKSBQYXJhbWV0ZXIgdmFsdWUnKTt0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuICRuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdHIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCRuLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgRXI9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIV9yKGUpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IoZSwuLi5TciwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKX19KSh0KTooKGUsdCk9PntpZighX3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih3cihlLC4uLlNyKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBub3QgYmUgb2YgdHlwZSAic2VjcmV0IicpKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHNpZ25pbmcgbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChTci5qb2luKCIgb3IgIiksJyBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGRlY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwcml2YXRlIicpKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSB2ZXJpZnlpbmcgbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiJykpO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiIi5jb25jYXQoU3Iuam9pbigiIG9yICIpLCcgaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBlbmNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHVibGljIicpKX0pKHQsbil9O2Z1bmN0aW9uIFRyKGUsdCxuKXtpZihabih0KSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IHByKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIWdyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IHByKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYodnIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IHByKCJTSEEtIi5jb25jYXQobiksImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IHByKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih2cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgcHIoIlNIQS0iLmNvbmNhdChuKSwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIGZyKCkmJiJFZERTQSI6aWYoIWdyKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBwcigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFncihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBwcigiRUNEU0EiKTtjb25zdCBuPXlyKHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1uKXRocm93IHByKG4sImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfWZvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4+Mj9uLTI6MCksaT0yO2k8bjtpKyspcltpLTJdPWFyZ3VtZW50c1tpXTttcihlLHIpfSh0LGUsbiksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHdyKHQsLi4uU3IpKTtyZXR1cm4gJG4uc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOiJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpLG5hbWU6IkhNQUMifSwhMSxbbl0pfXRocm93IG5ldyBUeXBlRXJyb3Iod3IodCwuLi5TciwiVWludDhBcnJheSIpKX1jb25zdCBBcj1hc3luYyhlLHQsbixyKT0+e2NvbnN0IGk9YXdhaXQgVHIoZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpufT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIG58fG48MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKCIiLmNvbmNhdChlLCIgcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlciIpKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCBuPSJTSEEtIi5jb25jYXQoZS5zbGljZSgtMykpO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpuLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZSBmcigpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgc3IoImFsZyAiLmNvbmNhdChlLCIgaXMgbm90IHN1cHBvcnRlZCBlaXRoZXIgYnkgSk9TRSBvciB5b3VyIGphdmFzY3JpcHQgcnVudGltZSIpKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgJG4uc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIFJyKGUsdCxuKXt2YXIgcjtpZighYnIoZSkpdGhyb3cgbmV3IGFyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyBhcignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyBhcigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFicihlLmhlYWRlcikpdGhyb3cgbmV3IGFyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9dHIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07Y29uc3Qgcj10LmZpbHRlcihCb29sZWFuKTtpZigwPT09ci5sZW5ndGh8fDE9PT1yLmxlbmd0aClyZXR1cm4hMDtsZXQgaTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKGkmJjAhPT1pLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoaS5oYXMoZSkpcmV0dXJuITE7aS5hZGQoZSl9ZWxzZSBpPW5ldyBTZXQodCl9cmV0dXJuITB9KGksZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IHNyKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBub3QgcmVjb2duaXplZCcpKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBpcyBtaXNzaW5nJykpO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKCdFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJy5jb25jYXQodCwnIiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKSl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oYXIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IGFyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IGFyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignIicuY29uY2F0KGUsJyIgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBvcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLEVyKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO2NvbnN0IHI9dC5yZWR1Y2UoKChlLHQpPT57bGV0e2xlbmd0aDpufT10O3JldHVybiBlK259KSwwKSxpPW5ldyBVaW50OEFycmF5KHIpO2xldCBvPTA7cmV0dXJuIHQuZm9yRWFjaCgoZT0+e2kuc2V0KGUsbyksbys9ZS5sZW5ndGh9KSksaX0oUW4uZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksUW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/UW4uZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXRyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgQXIoYyx0LGgsZCkpdGhyb3cgbmV3IGhyO2xldCBmO2Y9YT90cihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH12YXIgQ3I9ZT0+TWF0aC5mbG9vcihlLmdldFRpbWUoKS8xZTMpO2NvbnN0IFByPTg2NDAwLERyPS9eKFxkK3xcZCtcLlxkKykgPyhzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpJC9pO3ZhciBJcj1lPT57Y29uc3QgdD1Eci5leGVjKGUpO2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGltZSBwZXJpb2QgZm9ybWF0Iik7Y29uc3Qgbj1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCh0WzJdLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2VjIjpjYXNlInNlY3MiOmNhc2Uic2Vjb25kIjpjYXNlInNlY29uZHMiOmNhc2UicyI6cmV0dXJuIE1hdGgucm91bmQobik7Y2FzZSJtaW51dGUiOmNhc2UibWludXRlcyI6Y2FzZSJtaW4iOmNhc2UibWlucyI6Y2FzZSJtIjpyZXR1cm4gTWF0aC5yb3VuZCg2MCpuKTtjYXNlImhvdXIiOmNhc2UiaG91cnMiOmNhc2UiaHIiOmNhc2UiaHJzIjpjYXNlImgiOnJldHVybiBNYXRoLnJvdW5kKDM2MDAqbik7Y2FzZSJkYXkiOmNhc2UiZGF5cyI6Y2FzZSJkIjpyZXR1cm4gTWF0aC5yb3VuZChuKlByKTtjYXNlIndlZWsiOmNhc2Uid2Vla3MiOmNhc2UidyI6cmV0dXJuIE1hdGgucm91bmQoNjA0ODAwKm4pO2RlZmF1bHQ6cmV0dXJuIE1hdGgucm91bmQoMzE1NTc2MDAqbil9fTtjb25zdCBPcj1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXmFwcGxpY2F0aW9uXC8vLCIiKSxVcj0oZSx0KT0+InN0cmluZyI9PXR5cGVvZiBlP3QuaW5jbHVkZXMoZSk6ISFBcnJheS5pc0FycmF5KGUpJiZ0LnNvbWUoU2V0LnByb3RvdHlwZS5oYXMuYmluZChuZXcgU2V0KGUpKSk7YXN5bmMgZnVuY3Rpb24gTHIoZSx0LG4pe3ZhciByO2NvbnN0IGk9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LG4pe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT1lci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgYXIoIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6ciwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IGFyKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBScih7cGF5bG9hZDppLHByb3RlY3RlZDpyLHNpZ25hdHVyZTpvfSx0LG4pLGM9e3BheWxvYWQ6YS5wYXlsb2FkLHByb3RlY3RlZEhlYWRlcjphLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLmMsa2V5OmEua2V5fTpjfShlLHQsbik7aWYoKG51bGw9PT0ocj1pLnByb3RlY3RlZEhlYWRlci5jcml0KXx8dm9pZCAwPT09cj92b2lkIDA6ci5pbmNsdWRlcygiYjY0IikpJiYhMT09PWkucHJvdGVjdGVkSGVhZGVyLmI2NCl0aHJvdyBuZXcgY3IoIkpXVHMgTVVTVCBOT1QgdXNlIHVuZW5jb2RlZCBwYXlsb2FkIik7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8T3IoZS50eXApIT09T3IocikpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShlci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYnIoaSkpdGhyb3cgbmV3IGNyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJiFVcihpLmF1ZCwic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO2xldCBjO3N3aXRjaCh0eXBlb2Ygbi5jbG9ja1RvbGVyYW5jZSl7Y2FzZSJzdHJpbmciOmM9SXIobi5jbG9ja1RvbGVyYW5jZSk7YnJlYWs7Y2FzZSJudW1iZXIiOmM9bi5jbG9ja1RvbGVyYW5jZTticmVhaztjYXNlInVuZGVmaW5lZCI6Yz0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjbG9ja1RvbGVyYW5jZSBvcHRpb24gdHlwZSIpfWNvbnN0e2N1cnJlbnREYXRlOnV9PW4sbD1Dcih1fHxuZXcgRGF0ZSk7aWYoKHZvaWQgMCE9PWkuaWF0fHxuLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcnIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IHJyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmwrYyl0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgcnIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWwtYyl0aHJvdyBuZXcgaXIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihuLm1heFRva2VuQWdlKXtjb25zdCBlPWwtaS5pYXQ7aWYoZS1jPigibnVtYmVyIj09dHlwZW9mIG4ubWF4VG9rZW5BZ2U/bi5tYXhUb2tlbkFnZTpJcihuLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IGlyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1jKXRocm93IG5ldyBycignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfShpLnByb3RlY3RlZEhlYWRlcixpLnBheWxvYWQsbikscz17cGF5bG9hZDpvLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLnMsa2V5Omkua2V5fTpzfWZ1bmN0aW9uIEhyKGUpe3JldHVybiBicihlKX1jbGFzcyBNcntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KEhyKX0oZSkpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBzcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgbHI7aWYoMSE9PWEpdGhyb3cgbmV3IGRyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/a3Ioey4uLmUsYWxnOnQsZXh0OiExfSk6dHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHNyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGtyKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgdXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIganI9e2V4cG9ydHM6e319LE5yPXtleHBvcnRzOnt9fSxxcj1BKE5uKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciBuPXFyLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oTnIsTnIuZXhwb3J0cyk7dmFyIHhyPTY1NTM2LEtyPTQyOTQ5NjcyOTU7dmFyIEJyPU5yLmV4cG9ydHMuQnVmZmVyLEpyPUUuY3J5cHRvfHxFLm1zQ3J5cHRvO0pyJiZKci5nZXRSYW5kb21WYWx1ZXM/anIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+S3IpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj1Cci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT54cilmb3IodmFyIHI9MDtyPGU7cis9eHIpSnIuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK3hyKSk7ZWxzZSBKci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06anIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIEZyPWpyLmV4cG9ydHM7Y2xhc3MgV3J7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBWbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gWnQuZnJvbShYbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBGcihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyl7cmV0dXJuIExyKGUsKGE9e2tleXM6W3RdfSxNci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IE1yKGEpKSkse2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1DUllQVE8tVVRJTFMtVkotSVYwMSIsbnVsbD09ZT92b2lkIDA6ZS5yZWFzb24sIiIuY29uY2F0KG51bGw9PWU/dm9pZCAwOmUuY29kZSwiICIpLmNvbmNhdChudWxsPT1lP3ZvaWQgMDplLmNsYWltKSkpKSk7dmFyIGF9fW9yaWdpbix5LlNlc3Npb25TdG9yYWdlO2NsYXNzIHpye2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKG4ucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludChuLmV4cGlyZXNfaW4pLG89c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobykpfX0pKX1nZXRSZWZyZXNoVGltZW91dFRpbWVyKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpP0pTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpOi0xfSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHQpcmV0dXJuIHZvaWQgY2xlYXJUaW1lb3V0KHQpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRSZWZyZXNoVGltZW91dFRpbWVyKCk7LTEhPT1lJiZjbGVhclRpbWVvdXQoZSl9KSl9fWNsYXNzIFlye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCksdGhpcy5fc3BhSGVscGVyPXR9ZW5hYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZW5hYmxlSGFuZGxlcikmJmUuZW5hYmxlSGFuZGxlcigpfWRpc2FibGVIdHRwSGFuZGxlcihlKXsobnVsbD09ZT92b2lkIDA6ZS5kaXNhYmxlSGFuZGxlcikmJmUuZGlzYWJsZUhhbmRsZXIoKX1pbml0aWFsaXplU2Vzc2lvbk1hbmdlcihlLHQsbixyLGkpe3ZhciBvLHMsYTtpLmluaXRpYWxpemUoZS5jbGllbnRJRCxudWxsIT09KG89dC5jaGVja1Nlc3Npb25JZnJhbWUpJiZ2b2lkIDAhPT1vP286IiIsbixudWxsIT09KHM9ZS5jaGVja1Nlc3Npb25JbnRlcnZhbCkmJnZvaWQgMCE9PXM/czozLG51bGwhPT0oYT1lLnNlc3Npb25SZWZyZXNoSW50ZXJ2YWwpJiZ2b2lkIDAhPT1hP2E6MzAwLGUuc2lnbkluUmVkaXJlY3RVUkwscil9cmVxdWVzdEN1c3RvbUdyYW50KHQsbil7dmFyIHIsaSxvO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHM9ITAsYT0hMTtpZihudWxsPT10P3ZvaWQgMDp0LnRva2VuRW5kcG9pbnQpe3M9ITE7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShpPW51bGw9PT0ocj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sdC5iYXNlVXJsXSlpZihlJiYobnVsbD09PShvPXQudG9rZW5FbmRwb2ludCl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RhcnRzV2l0aChlKSkpe2E9ITA7YnJlYWt9fXJldHVybiB0LnNob3VsZFJlcGxheUFmdGVyUmVmcmVzaCYmdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYixKU09OLnN0cmluZ2lmeSh0KSksc3x8YT90aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZXF1ZXN0Q3VzdG9tR3JhbnQodCkudGhlbigocj0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbih0KSx0LnJldHVybnNTZXNzaW9uPyh0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLU1BSU5fVEhSRUFEX0NMSUVOVC1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiKTtyZXR1cm4gZT9KU09OLnBhcnNlKGUpOm51bGx9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKTtyZXR1cm4gZSYmKHlpZWxkIHRoaXMucmVxdWVzdEN1c3RvbUdyYW50KGUsdCkpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KHRoaXMpLHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpfWh0dHBSZXF1ZXN0KHQsbixyLGksbyxzKXt2YXIgYSx1O3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IGw9ITE7Y29uc3QgZD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oYT15aWVsZCBudWxsPT1kP3ZvaWQgMDpkLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKGUmJihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgoZSkpKXtsPSEwO2JyZWFrfXJldHVybiBsP3QucmVxdWVzdChuKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoYT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHUsbDtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PWE/dm9pZCAwOmEucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cyl8fCEobnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSkpe2xldCBlO3RyeXtlPXlpZWxkIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKHMpfWNhdGNoKGUpe3Rocm93IHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtjb2RlOmt9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFItU0UwMSIsbnVsbCE9PSh1PW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PXU/dToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0obD1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT1sP2w6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihlKXRyeXtjb25zdCBlPXlpZWxkIHQucmVxdWVzdChuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfWNhdGNoKGUpe3JldHVybiByJiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJih5aWVsZCBpKGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbyYmbygpKSxQcm9taXNlLnJlamVjdChlKX19cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoYSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGEpfSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSl9aHR0cFJlcXVlc3RBbGwodCxuLHIsaSxvKXt2YXIgcyxhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMDtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2YgdCl7bGV0IHQ9ITE7Zm9yKGNvbnN0IG4gb2ZbLi4ubnVsbCE9PShhPW51bGw9PT0ocz15aWVsZCBkKXx8dm9pZCAwPT09cz92b2lkIDA6cy5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1hP2E6W10sZC5iYXNlVXJsXSlpZihuJiYobnVsbD09PSh1PWUudXJsKXx8dm9pZCAwPT09dT92b2lkIDA6dS5zdGFydHNXaXRoKG4pKSl7dD0hMDticmVha31pZighdCl7bD0hMTticmVha319Y29uc3QgaD1bXTtpZihsKXJldHVybiB0LmZvckVhY2goKGU9PntoLnB1c2gobi5yZXF1ZXN0KGUpKX0pKSwobnVsbD09bj92b2lkIDA6bi5hbGwpJiZuLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBzLGEsdTtpZig0MDE9PT0obnVsbD09PShzPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXR1cyl8fCEobnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSkpe2xldCBzO3RyeXtzPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3Rocm93IHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQpLHtjb2RlOmt9KSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLG5ldyBjKCJTUEEtQVVUSF9IRUxQRVItSFJBLVNFMDEiLG51bGwhPT0oYT1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1hP2E6IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09dT91OiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYocylyZXR1cm4gbi5hbGwmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSl9cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkodCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KHQpfSkpKSk7dGhyb3cgbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIil9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKHQsbixyLGksbyl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBzPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7aWYocy5zdG9yYWdlPT09eS5Ccm93c2VyTWVtb3J5JiZzLmVuYWJsZVBLQ0UmJm4pe2NvbnN0IGU9anQuZ2V0UEtDRSh1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obikpO3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnNldFBLQ0VDb2RlKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlKX1lbHNlIHMuc3RvcmFnZT09PXkuV2ViV29ya2VyJiZpJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUoaSxudWxsIT1vP286IiIpKTtyZXR1cm4gdD90aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZXF1ZXN0QWNjZXNzVG9rZW4odCxudWxsIT1uP246IiIsbnVsbCE9bz9vOiIiKS50aGVuKCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBzLnN0b3JhZ2UhPT15LldlYldvcmtlcj8oanQuc2V0U2lnbk91dFVSTCh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRTaWduT3V0VVJMKCkpLHRoaXMuX3NwYUhlbHBlciYmKHRoaXMuX3NwYUhlbHBlci5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSx0aGlzLl9zcGFIZWxwZXIucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSh0aGlzKSksciYmImZ1bmN0aW9uIj09dHlwZW9mIHImJnMuZW5hYmxlT0lEQ1Nlc3Npb25NYW5hZ2VtZW50JiZyKCkpOnRoaXMuX3NwYUhlbHBlciYmdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSl9dHJ5U2lnbkluU2lsZW50bHkodCxuLHIpe3ZhciBpO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoanQuaXNJbml0aWFsaXplZFNpbGVudFNpZ25JbigpKXJldHVybiB5aWVsZCByLnJlY2VpdmVQcm9tcHROb25lUmVzcG9uc2UoKSxQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJycElGcmFtZSIpLHM9bnVsbD09PShpPW51bGw9PW8/dm9pZCAwOm8uY29udGVudERvY3VtZW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRFbGVtZW50QnlJZCgicHJvbXB0Tm9uZUlGcmFtZSIpO3RyeXtjb25zdCBlPXlpZWxkIHQoKTtzLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxvPXM9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxhLGMsdTtjb25zdCBsPXMuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvZGUsbnVsbD09PShjPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc2Vzc2lvblN0YXRlLG51bGw9PT0odT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXRlKS50aGVuKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHQoZSl9KSkuY2F0Y2goKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihlKX0pKS5maW5hbGx5KCgoKT0+e2NsZWFyVGltZW91dChpKX0pKX0pKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyl9KSl9KSl9aGFuZGxlU2lnbkluKHQsbixyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZih5aWVsZCB0KCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2lmKGUuc3RvcmFnZSE9PXkuV2ViV29ya2VyJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpKXJldHVybiB0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkodGhpcyksZS5lbmFibGVPSURDU2Vzc2lvbk1hbmFnZW1lbnQmJm4oKSxQcm9taXNlLnJlc29sdmUoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpKTtjb25zdCBpPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoXyksbz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KFMpO2lmKGkpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7dGhyb3cgZS5zZWFyY2hQYXJhbXMuZGVsZXRlKF8pLGUuc2VhcmNoUGFyYW1zLmRlbGV0ZShTKSxoaXN0b3J5LnB1c2hTdGF0ZShudWxsLGRvY3VtZW50LnRpdGxlLGUudG9TdHJpbmcoKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1TSS1TRTAxIixpLG51bGwhPW8/bzoiIil9aWYoZS5zdG9yYWdlPT09eS5XZWJXb3JrZXImJnIpe2NvbnN0IGU9eWllbGQgcigpO2lmKGUpcmV0dXJuIGV9fSkpfWdldEJhc2ljVXNlckluZm8oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Z2V0RGVjb2RlZElEVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREZWNvZGVkSURUb2tlbigpfSkpfWdldERlY29kZWRJRFBJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKX1nZXRDcnlwdG9IZWxwZXIoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRDcnlwdG9IZWxwZXIoKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0SURUb2tlbigpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX1nZXRBY2Nlc3NUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEFjY2Vzc1Rva2VuKCl9KSl9Z2V0SURQQWNjZXNzVG9rZW4oKXt2YXIgdDtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmFjY2Vzc190b2tlbn0pKX1nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfWlzQXV0aGVudGljYXRlZCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmlzQXV0aGVudGljYXRlZCgpfSkpfX0odD0+e2NvbnN0IG49c2VsZjtsZXQgcjtuLm9ubWVzc2FnZT1uPT57bGV0e2RhdGE6YSxwb3J0czp1fT1uO3JldHVybiBlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixsLGQsaDtjb25zdCBmPXVbMF07aWYoYS50eXBlPT09dnx8cilzd2l0Y2goYS50eXBlKXtjYXNlIHY6dHJ5e2NvbnN0IG49T2JqZWN0LmFzc2lnbih7fSxhLmRhdGEpO3I9eWllbGQoKHQsbik9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEh0LGk9bmV3IFdyLG89bmV3IGcocixpKTt5aWVsZCBvLmluaXRpYWxpemUodCk7Y29uc3Qgcz1uZXcgenIobyksYT1uKG8scyksYz1vLmdldERhdGFMYXllcigpLHU9THQuZ2V0SW5zdGFuY2UoKTtyZXR1cm4obnVsbD09dT92b2lkIDA6dS5pbml0KSYmKHlpZWxkIHUuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCk7ZS5hdHRhY2hUb2tlbiYmKGUuc2hvdWxkQXR0YWNoSURQQWNjZXNzVG9rZW4/dC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIi5jb25jYXQoeWllbGQgYS5nZXRJRFBBY2Nlc3NUb2tlbigpKX0pOnQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIuY29uY2F0KHlpZWxkIGEuZ2V0QWNjZXNzVG9rZW4oKSl9KSl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e2EuZGlzYWJsZUh0dHBIYW5kbGVyKHUpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2EuZW5hYmxlSHR0cEhhbmRsZXIodSl9LGdldEFjY2Vzc1Rva2VuOigpPT5hLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IG49bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixyPXlpZWxkIG8uZ2V0UEtDRUNvZGUobik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnJ9fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBjLmdldENvbmZpZ0RhdGEoKX0pKSxnZXRDcnlwdG9IZWxwZXI6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldENyeXB0b0hlbHBlcigpfSkpLGdldERlY29kZWRJRFBJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURQSURUb2tlbigpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEuaHR0cFJlcXVlc3QodSx0KX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdEFsbCh0LHUpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+YS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgYS5yZWZyZXNoQWNjZXNzVG9rZW4oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxuLHIsaSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG4sdm9pZCAwLHIsaSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnJlcXVlc3RDdXN0b21HcmFudCh0KX0pKSxyZXZva2VBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBzLmdldFJlZnJlc2hUaW1lb3V0VGltZXIoKTtyZXR1cm4gby5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT4ocy5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoZSksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09dT92b2lkIDA6dS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmdS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT11P3ZvaWQgMDp1LnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZ1LnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5nZXRTaWduT3V0VVJMKCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseShhKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby51cGRhdGVDb25maWcodCl9KSl9fSkpKShuLHQpLHIuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhzKSxyLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhpKSxyLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKG8pLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpyLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09YT92b2lkIDA6YS5kYXRhKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJyZXF1ZXN0X2dldF90b2tlbiI6ci5yZXF1ZXN0QWNjZXNzVG9rZW4obnVsbD09PShuPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uY29kZSxudWxsPT09KGw9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09bD92b2lkIDA6bC5zZXNzaW9uU3RhdGUsbnVsbD09PShkPW51bGw9PWE/dm9pZCAwOmEuZGF0YSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucGtjZSxudWxsPT09KGg9bnVsbD09YT92b2lkIDA6YS5kYXRhKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdGF0ZSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0IjpyLmh0dHBSZXF1ZXN0KGEuZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6ci5odHRwUmVxdWVzdEFsbChhLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInNpZ24tb3V0Ijp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuc2lnbk91dCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50IjpyLnJlcXVlc3RDdXN0b21HcmFudChhLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOnIucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJnZXQtb2lkYy1zZXJ2aWNlLWVuZHBvaW50cyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCByLmdldERlY29kZWRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWNyeXB0by1oZWxwZXIiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRDcnlwdG9IZWxwZXIoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09YT92b2lkIDA6YS5kYXRhKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PWE/dm9pZCAwOmEuZGF0YSkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWZ8fGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLCJUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAiLmNvbmNhdChhLnR5cGUsIiwgaXMgaW52YWxpZC4iKSkpKX1lbHNlIGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSl9O2NvbnN0IGk9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LXN0YXJ0In0pfSxvPWU9PntuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxzPSgpPT57bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9fSkoKChlLHQpPT5uZXcgWXIoZSx0KSkpO3JldHVybnt9fSgpOwoK",$y=null,eX=!1,function(e){return tX=tX||_y(qy,$y,eX),new Worker(tX,e)});const nX="init",lX="sign-out",oX="http-request",cX="http-request-all",aX="request-custom-grant",rX="revoke-access-token",dX="request-start",sX="request-success",uX="request-finish",hX="get-oidc-service-endpoints",ZX="get-basic-user-info",bX="get-decoded-id-token",mX="get-crypto-helper",pX="enable_http_handler",IX="disable_http_handler",gX="get_auth_url",GX="request_get_token",yX="is_authenticated",XX="get_sign_out_url",WX="refresh_access-token",VX="set_session_state",CX="start_auto_refresh_token",RX="update_config",SX="get_id_token",vX="check_session_signed_in",fX="check_session_signed_out",YX="get_config_data",KX="set_session_state_from_iframe";var NX,JX;e.Storage=void 0,(NX=e.Storage||(e.Storage={})).LocalStorage="localStorage",NX.SessionStorage="sessionStorage",NX.WebWorker="webWorker",NX.BrowserMemory="browserMemory",e.Hooks=void 0,(JX=e.Hooks||(e.Hooks={})).SignIn="sign-in",JX.SignOut="sign-out",JX.Initialize="initialize",JX.HttpRequestStart="http-request-start",JX.HttpRequestFinish="http-request-finish",JX.HttpRequestError="http-request-error",JX.HttpRequestSuccess="http-request-success",JX.RevokeAccessToken="revoke-access-token",JX.CustomGrant="custom-grant",JX.SignOutFailed="sign-out-failed";const HX="rpIFrame",LX="promptNoneIFrame",kX="Y2hlY2tTZXNzaW9u",AX="sign-in-silently",UX="initialized-silent-sign-in",TX="promptNoneRequestSent",BX="error",FX="error_description",wX="custom_grant_config",zX="state",xX="Access token is invalid";class PX{constructor(e,t){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=t}enableHttpHandler(e){(null==e?void 0:e.enableHandler)&&e.enableHandler()}disableHttpHandler(e){(null==e?void 0:e.disableHandler)&&e.disableHandler()}initializeSessionManger(e,t,i,n,l){var o,c,a;l.initialize(e.clientID,null!==(o=t.checkSessionIframe)&&void 0!==o?o:"",i,null!==(c=e.checkSessionInterval)&&void 0!==c?c:3,null!==(a=e.sessionRefreshInterval)&&void 0!==a?a:300,e.signInRedirectURL,n)}requestCustomGrant(e,t){var i,n,l;return Hy(this,void 0,void 0,(function*(){let o=!0,c=!1;if(null==e?void 0:e.tokenEndpoint){o=!1;for(const t of[...null!==(n=null===(i=yield this._dataLayer.getConfigData())||void 0===i?void 0:i.resourceServerURLs)&&void 0!==n?n:[],e.baseUrl])if(t&&(null===(l=e.tokenEndpoint)||void 0===l?void 0:l.startsWith(t))){c=!0;break}}return e.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter(wX,JSON.stringify(e)),o||c?this._authenticationClient.requestCustomGrant(e).then((i=>Hy(this,void 0,void 0,(function*(){return t&&"function"==typeof t&&t(e),e.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()):i})))).catch((e=>Promise.reject(e))):Promise.reject(new xy("SPA-MAIN_THREAD_CLIENT-RCG-IV01","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))}))}getCustomGrantConfigData(){return Hy(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getTemporaryDataParameter(wX);return e?JSON.parse(e):null}))}refreshAccessToken(e){return Hy(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const t=yield this.getCustomGrantConfigData();return t&&(yield this.requestCustomGrant(t,e)),this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()}catch(e){return Promise.reject(e)}}))}httpRequest(e,t,i,n,l,o){var c,a;return Hy(this,void 0,void 0,(function*(){let r=!1;const d=yield this._dataLayer.getConfigData();for(const e of[...null!==(c=yield null==d?void 0:d.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(e&&(null===(a=null==t?void 0:t.url)||void 0===a?void 0:a.startsWith(e))){r=!0;break}return r?e.request(t).then((e=>Promise.resolve(e))).catch((c=>Hy(this,void 0,void 0,(function*(){var a,r,d;if(401===(null===(a=null==c?void 0:c.response)||void 0===a?void 0:a.status)||!(null==c?void 0:c.response)){let a;try{a=yield this.refreshAccessToken(o)}catch(e){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},c),{code:xX}))),"function"==typeof l&&l()),new xy("SPA-AUTH_HELPER-HR-SE01",null!==(r=null==e?void 0:e.name)&&void 0!==r?r:"Refresh token request failed.",null!==(d=null==e?void 0:e.message)&&void 0!==d?d:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(a)try{const i=yield e.request(t);return Promise.resolve(i)}catch(e){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}}return i&&("function"==typeof n&&(yield n(c)),"function"==typeof l&&l()),Promise.reject(c)})))):Promise.reject(new xy("SPA-AUTH_HELPER-HR-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))}))}httpRequestAll(e,t,i,n,l){var o,c,a;return Hy(this,void 0,void 0,(function*(){let r=!0;const d=yield this._dataLayer.getConfigData();for(const t of e){let e=!1;for(const i of[...null!==(c=null===(o=yield d)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==c?c:[],d.baseUrl])if(i&&(null===(a=t.url)||void 0===a?void 0:a.startsWith(i))){e=!0;break}if(!e){r=!1;break}}const s=[];if(r)return e.forEach((e=>{s.push(t.request(e))})),(null==t?void 0:t.all)&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>Hy(this,void 0,void 0,(function*(){var o,c,a;if(401===(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.status)||!(null==e?void 0:e.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(t){throw i&&("function"==typeof n&&(yield n(Object.assign(Object.assign({},e),{code:xX}))),"function"==typeof l&&l()),new xy("SPA-AUTH_HELPER-HRA-SE01",null!==(c=null==t?void 0:t.name)&&void 0!==c?c:"Refresh token request failed.",null!==(a=null==t?void 0:t.message)&&void 0!==a?a:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(o)return t.all&&t.all(s).then((e=>Promise.resolve(e))).catch((e=>Hy(this,void 0,void 0,(function*(){return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))))}return i&&("function"==typeof n&&(yield n(e)),"function"==typeof l&&l()),Promise.reject(e)}))));throw new xy("SPA-AUTH_HELPER-HRA-IV02","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`")}))}requestAccessToken(t,i,n,l,o){return Hy(this,void 0,void 0,(function*(){const c=yield this._dataLayer.getConfigData();if(c.storage===e.Storage.BrowserMemory&&c.enablePKCE&&i){const e=MX.getPKCE(Py.extractPKCEKeyFromStateParam(i));yield this._authenticationClient.setPKCECode(Py.extractPKCEKeyFromStateParam(i),e)}else c.storage===e.Storage.WebWorker&&l&&(yield this._authenticationClient.setPKCECode(l,null!=o?o:""));return t?this._authenticationClient.requestAccessToken(t,null!=i?i:"",null!=o?o:"").then((()=>Hy(this,void 0,void 0,(function*(){return c.storage!==e.Storage.WebWorker?(MX.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this)),n&&"function"==typeof n&&c.enableOIDCSessionManagement&&n()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(this),this._authenticationClient.getBasicUserInfo()})))).catch((e=>Promise.reject(e))):Promise.reject(new xy("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(e,t,i){var n;return Hy(this,void 0,void 0,(function*(){if(MX.isInitializedSilentSignIn())return yield i.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById(HX),o=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.getElementById(LX);try{const t=yield e();o.src=t}catch(e){return Promise.reject(e)}return new Promise(((e,i)=>{const n=setTimeout((()=>{e(!1)}),1e4),l=o=>Hy(this,void 0,void 0,(function*(){var c,a,r,d;const s=o.data;(null==s?void 0:s.type)==fX&&(window.removeEventListener("message",l),clearTimeout(n),e(!1)),(null==s?void 0:s.type)==vX&&(null===(c=null==s?void 0:s.data)||void 0===c?void 0:c.code)&&t(null===(a=null==s?void 0:s.data)||void 0===a?void 0:a.code,null===(r=null==s?void 0:s.data)||void 0===r?void 0:r.sessionState,null===(d=null==s?void 0:s.data)||void 0===d?void 0:d.state).then((t=>{window.removeEventListener("message",l),e(t)})).catch((e=>{window.removeEventListener("message",l),i(e)})).finally((()=>{clearTimeout(n)}))}));window.addEventListener("message",l)}))}))}handleSignIn(t,i,n){return Hy(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(l.storage!==e.Storage.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(this),l.enableOIDCSessionManagement&&i(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const o=new URL(window.location.href).searchParams.get(BX),c=new URL(window.location.href).searchParams.get(FX);if(o){const e=new URL(window.location.href);throw e.searchParams.delete(BX),e.searchParams.delete(FX),history.pushState(null,document.title,e.toString()),new xy("SPA-AUTH_HELPER-SI-SE01",o,null!=c?c:"")}if(l.storage===e.Storage.WebWorker&&n){const e=yield n();if(e)return e}}))}getBasicUserInfo(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getDecodedIDPIDToken(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getCryptoHelper(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getCryptoHelper()}))}getIDToken(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getIDPAccessToken(){var e;return Hy(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData())||void 0===e?void 0:e.access_token}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return Hy(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class jX{constructor(e){this._authenticationClient=e,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(e){return Hy(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const i=parseInt(t.expires_in),n=setTimeout((()=>Hy(this,void 0,void 0,(function*(){yield e.refreshAccessToken()}))),1e3*(i<=10?i:i-10));yield this._dataLayer.setTemporaryDataParameter(ky,JSON.stringify(n))}}))}getRefreshTimeoutTimer(){return Hy(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter(ky))?JSON.parse(yield this._dataLayer.getTemporaryDataParameter(ky)):-1}))}clearRefreshTokenTimeout(e){return Hy(this,void 0,void 0,(function*(){if(e)return void clearTimeout(e);const t=yield this.getRefreshTimeoutTimer();-1!==t&&clearTimeout(t)}))}}class QX{constructor(){}static generateSuccessMessage(e){return{blob:(null==e?void 0:e.data)instanceof Blob?null==e?void 0:e.data:null,data:JSON.stringify(null!=e?e:""),success:!0}}static generateFailureMessage(e){return(null==e?void 0:e.toJSON)&&delete e.toJSON,{error:JSON.stringify(null!=e?e:""),success:!1}}}class MX{constructor(){}static removeAuthorizationCode(){const e=location.href;history.pushState({},document.title,e.replace(/\?code=.*$/,""))}static getPKCE(e){var t;return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:""}static setPKCE(e,t){sessionStorage.setItem(e,t)}static setSignOutURL(e){sessionStorage.setItem(By,e)}static getSignOutURL(){var e;return null!==(e=sessionStorage.getItem(By))&&void 0!==e?e:""}static removePKCE(e){sessionStorage.removeItem(e)}static canContinueSignIn(e,t){return!(e&&!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()&&!t)}static isInitializedSilentSignIn(){return MX.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!MX.hasErrorInURL()&&!MX.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const e=sessionStorage.getItem(UX),t=e?JSON.parse(e):null;return Boolean(t)}static isSignOutSuccessful(){return Hy(this,void 0,void 0,(function*(){if(Oy.isSignOutSuccessful(window.location.href)){const e=window.location.href.split("?")[0];return history.pushState({},document.title,e),yield Oy.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(Oy.didSignOutFail(window.location.href)){const e=new URL(window.location.href),t=e.searchParams.get(BX),i=e.searchParams.get(FX),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=i?i:"",error:null!=t?t:""}}return!1}static isSilentStatePresentInURL(){var e;const t=new URL(window.location.href).searchParams.get("state");return null!==(e=null==t?void 0:t.includes(AX))&&void 0!==e&&e}static hasAuthSearchParamsInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return/[?&]code=[^&]+/.test(e)}static hasErrorInURL(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const t=new URL(e);return!!t.searchParams.get(BX)&&t.searchParams.get(zX)!==Fy}static canSendPromptNoneRequest(){const e=sessionStorage.getItem(TX);return!(e?JSON.parse(e):null)}static setPromptNoneRequestSent(e){sessionStorage.setItem(TX,JSON.stringify(e))}static waitTillPageRedirect(e){return Hy(this,void 0,void 0,(function*(){const t=null!=e?e:3e3;yield new Promise((e=>setTimeout(e,1e3*t)))}))}}const EX=(()=>{let t,i,n,l,o,c,a,r,d,s,u;const h=(e,a,r,d,s,h,b)=>{t=e,i=a,n=r,l=d,o=h,c=s,u=b,l>-1&&Z(),c>-1&&(s=setInterval((()=>{p()}),1e3*c))},Z=()=>Hy(void 0,void 0,void 0,(function*(){var e;if(!i||!t||!o)return;const c="opIFrame";const a=document.getElementById(HX);(null===(e=null==a?void 0:a.contentDocument)||void 0===e?void 0:e.getElementById(c)).src=i+"?client_id="+t+"&redirect_uri="+o,r=setInterval((function(){var e;return Hy(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n="".concat(t," ").concat(l),o=document.getElementById(HX),a=(null===(e=null==o?void 0:o.contentDocument)||void 0===e?void 0:e.getElementById(c)).contentWindow;null==a||a.postMessage(n,i)}}))}),1e3*l),m()})),b=()=>{clearInterval(r),clearInterval(undefined)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(e){var t;return Hy(this,void 0,void 0,(function*(){const n=i;!n||(null==n?void 0:n.indexOf(e.origin))<0||(null===(t=null==e?void 0:e.data)||void 0===t?void 0:t.type)===KX||"unchanged"===e.data||("error"===e.data?window.location.href=yield a():"changed"===e.data&&p())}))}),!1)},p=()=>Hy(void 0,void 0,void 0,(function*(){var t;const i=document.getElementById(HX),n=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById(LX);if(MX.canSendPromptNoneRequest()){MX.setPromptNoneRequestSent(!0);const t=e=>{var i,n,l;(null===(i=null==e?void 0:e.data)||void 0===i?void 0:i.type)===KX&&(s(null!==(l=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==l?l:""),null===window||void 0===window||window.removeEventListener("message",t))};d!==e.Storage.BrowserMemory&&d!==e.Storage.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const i=yield u({prompt:"none",responseMode:"query",state:kX});n.src=i}})),I=t=>Hy(void 0,void 0,void 0,(function*(){var i,n;const l=new URL(window.location.href).searchParams.get(zX),o=new URL(window.location.href).searchParams.get(Ty),c=window.parent.parent;if(null!==l&&(l.includes(kX)||l.includes(AX))){const r=new URL(window.location.href).searchParams.get("code");if(null!==r&&0!==r.length){if(l.includes(AX)){const e={data:{code:r,sessionState:null!=o?o:"",state:l},type:vX};return sessionStorage.setItem(UX,"false"),c.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}const a=new URL(window.location.href).searchParams.get("session_state");if(d===e.Storage.LocalStorage||d===e.Storage.SessionStorage)t&&(yield t(a));else{const e={data:null!=a?a:"",type:KX};null===(n=null===(i=null===window||void 0===window?void 0:window.parent)||void 0===i?void 0:i.parent)||void 0===n||n.postMessage(e)}return MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}{if(l.includes(AX)){const e={type:fX};return window.parent.parent.postMessage(e,c.origin),MX.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}MX.setPromptNoneRequestSent(!1);const e=yield a();return yield Oy.clearUserSessionData(),c.location.href=e,window.location.href="about:blank",yield MX.waitTillPageRedirect(),!0}}return!1}));return(e,t,i)=>Hy(void 0,void 0,void 0,(function*(){var n;let l=document.createElement("iframe");l.setAttribute("id",HX),l.style.display="none";let o=!1;l.onload=()=>{var e,t,i,n;l=document.getElementById(HX);const c=null==l?void 0:l.contentDocument,a=null==c?void 0:c.createElement("iframe");a&&(a.setAttribute("id","opIFrame"),a.style.display="none");const r=null==c?void 0:c.createElement("iframe");r&&(r.setAttribute("id",LX),r.style.display="none"),a&&(null===(t=null===(e=null==l?void 0:l.contentDocument)||void 0===e?void 0:e.body)||void 0===t||t.appendChild(a)),r&&(null===(n=null===(i=null==l?void 0:l.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(r)),o=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(l),a=e,d=t,s=i;for(;!1===o;)yield new Promise((e=>setTimeout(e,1)));return{initialize:h,receivePromptNoneResponse:I,reset:b}}))})();var DX={exports:{}},OX=function(e,t){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return e.apply(t,i)}},_X=OX,qX=Object.prototype.toString;function $X(e){return Array.isArray(e)}function eW(e){return void 0===e}function tW(e){return"[object ArrayBuffer]"===qX.call(e)}function iW(e){return null!==e&&"object"==typeof e}function nW(e){if("[object Object]"!==qX.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function lW(e){return"[object Function]"===qX.call(e)}function oW(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),$X(e))for(var i=0,n=e.length;i<n;i++)t.call(null,e[i],i,e);else for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&t.call(null,e[l],l,e)}var cW={isArray:$X,isArrayBuffer:tW,isBuffer:function(e){return null!==e&&!eW(e)&&null!==e.constructor&&!eW(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"[object FormData]"===qX.call(e)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&tW(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:iW,isPlainObject:nW,isUndefined:eW,isDate:function(e){return"[object Date]"===qX.call(e)},isFile:function(e){return"[object File]"===qX.call(e)},isBlob:function(e){return"[object Blob]"===qX.call(e)},isFunction:lW,isStream:function(e){return iW(e)&&lW(e.pipe)},isURLSearchParams:function(e){return"[object URLSearchParams]"===qX.call(e)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:oW,merge:function e(){var t={};function i(i,n){nW(t[n])&&nW(i)?t[n]=e(t[n],i):nW(i)?t[n]=e({},i):$X(i)?t[n]=i.slice():t[n]=i}for(var n=0,l=arguments.length;n<l;n++)oW(arguments[n],i);return t},extend:function(e,t,i){return oW(t,(function(t,n){e[n]=i&&"function"==typeof t?_X(t,i):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}},aW=cW;function rW(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var dW=function(e,t,i){if(!t)return e;var n;if(i)n=i(t);else if(aW.isURLSearchParams(t))n=t.toString();else{var l=[];aW.forEach(t,(function(e,t){null!=e&&(aW.isArray(e)?t+="[]":e=[e],aW.forEach(e,(function(e){aW.isDate(e)?e=e.toISOString():aW.isObject(e)&&(e=JSON.stringify(e)),l.push(rW(t)+"="+rW(e))})))})),n=l.join("&")}if(n){var o=e.indexOf("#");-1!==o&&(e=e.slice(0,o)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e},sW=cW;function uW(){this.handlers=[]}uW.prototype.use=function(e,t,i){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},uW.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},uW.prototype.forEach=function(e){sW.forEach(this.handlers,(function(t){null!==t&&e(t)}))};var hW=uW,ZW="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function bW(){throw new Error("setTimeout has not been defined")}function mW(){throw new Error("clearTimeout has not been defined")}var pW=bW,IW=mW;function gW(e){if(pW===setTimeout)return setTimeout(e,0);if((pW===bW||!pW)&&setTimeout)return pW=setTimeout,setTimeout(e,0);try{return pW(e,0)}catch(t){try{return pW.call(null,e,0)}catch(t){return pW.call(this,e,0)}}}"function"==typeof ZW.setTimeout&&(pW=setTimeout),"function"==typeof ZW.clearTimeout&&(IW=clearTimeout);var GW,yW=[],XW=!1,WW=-1;function VW(){XW&&GW&&(XW=!1,GW.length?yW=GW.concat(yW):WW=-1,yW.length&&CW())}function CW(){if(!XW){var e=gW(VW);XW=!0;for(var t=yW.length;t;){for(GW=yW,yW=[];++WW<t;)GW&&GW[WW].run();WW=-1,t=yW.length}GW=null,XW=!1,function(e){if(IW===clearTimeout)return clearTimeout(e);if((IW===mW||!IW)&&clearTimeout)return IW=clearTimeout,clearTimeout(e);try{IW(e)}catch(t){try{return IW.call(null,e)}catch(t){return IW.call(this,e)}}}(e)}}function RW(e,t){this.fun=e,this.array=t}RW.prototype.run=function(){this.fun.apply(null,this.array)};function SW(){}var vW=SW,fW=SW,YW=SW,KW=SW,NW=SW,JW=SW,HW=SW;var LW=ZW.performance||{},kW=LW.now||LW.mozNow||LW.msNow||LW.oNow||LW.webkitNow||function(){return(new Date).getTime()};var AW=new Date;var UW={nextTick:function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];yW.push(new RW(e,t)),1!==yW.length||XW||gW(CW)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:vW,addListener:fW,once:YW,off:KW,removeListener:NW,removeAllListeners:JW,emit:HW,binding:function(e){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(e){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(e){var t=.001*kW.call(LW),i=Math.floor(t),n=Math.floor(t%1*1e9);return e&&(i-=e[0],(n-=e[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-AW)/1e3}},TW=UW,BW=cW,FW=function(e,t,i,n,l){return e.config=t,i&&(e.code=i),e.request=n,e.response=l,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},e},wW={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},zW=FW,xW=function(e,t,i,n,l){var o=new Error(e);return zW(o,t,i,n,l)},PW=xW,jW=cW,QW=jW.isStandardBrowserEnv()?{write:function(e,t,i,n,l,o){var c=[];c.push(e+"="+encodeURIComponent(t)),jW.isNumber(i)&&c.push("expires="+new Date(i).toGMTString()),jW.isString(n)&&c.push("path="+n),jW.isString(l)&&c.push("domain="+l),!0===o&&c.push("secure"),document.cookie=c.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},MW=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)},EW=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e},DW=cW,OW=["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"],_W=cW,qW=_W.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(e){var n=e;return t&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=n(window.location.href),function(t){var i=_W.isString(t)?n(t):t;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0};function $W(e){this.message=e}$W.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},$W.prototype.__CANCEL__=!0;var eV=$W,tV=cW,iV=function(e,t,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?t(PW("Request failed with status code "+i.status,i.config,null,i.request,i)):e(i)},nV=QW,lV=dW,oV=function(e,t){return e&&!MW(t)?EW(e,t):t},cV=function(e){var t,i,n,l={};return e?(DW.forEach(e.split("\n"),(function(e){if(n=e.indexOf(":"),t=DW.trim(e.substr(0,n)).toLowerCase(),i=DW.trim(e.substr(n+1)),t){if(l[t]&&OW.indexOf(t)>=0)return;l[t]="set-cookie"===t?(l[t]?l[t]:[]).concat([i]):l[t]?l[t]+", "+i:i}})),l):l},aV=qW,rV=xW,dV=wW,sV=eV,uV=function(e){return new Promise((function(t,i){var n,l=e.data,o=e.headers,c=e.responseType;function a(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}tV.isFormData(l)&&delete o["Content-Type"];var r=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",s=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.Authorization="Basic "+btoa(d+":"+s)}var u=oV(e.baseURL,e.url);function h(){if(r){var n="getAllResponseHeaders"in r?cV(r.getAllResponseHeaders()):null,l={data:c&&"text"!==c&&"json"!==c?r.response:r.responseText,status:r.status,statusText:r.statusText,headers:n,config:e,request:r};iV((function(e){t(e),a()}),(function(e){i(e),a()}),l),r=null}}if(r.open(e.method.toUpperCase(),lV(u,e.params,e.paramsSerializer),!0),r.timeout=e.timeout,"onloadend"in r?r.onloadend=h:r.onreadystatechange=function(){r&&4===r.readyState&&(0!==r.status||r.responseURL&&0===r.responseURL.indexOf("file:"))&&setTimeout(h)},r.onabort=function(){r&&(i(rV("Request aborted",e,"ECONNABORTED",r)),r=null)},r.onerror=function(){i(rV("Network Error",e,null,r)),r=null},r.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||dV;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),i(rV(t,e,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",r)),r=null},tV.isStandardBrowserEnv()){var Z=(e.withCredentials||aV(u))&&e.xsrfCookieName?nV.read(e.xsrfCookieName):void 0;Z&&(o[e.xsrfHeaderName]=Z)}"setRequestHeader"in r&&tV.forEach(o,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete o[t]:r.setRequestHeader(t,e)})),tV.isUndefined(e.withCredentials)||(r.withCredentials=!!e.withCredentials),c&&"json"!==c&&(r.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&r.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&r.upload&&r.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(n=function(e){r&&(i(!e||e&&e.type?new sV("canceled"):e),r.abort(),r=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n))),l||(l=null),r.send(l)}))},hV=cW,ZV=function(e,t){BW.forEach(e,(function(i,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=i,delete e[n])}))},bV=FW,mV={"Content-Type":"application/x-www-form-urlencoded"};function pV(e,t){!hV.isUndefined(e)&&hV.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var IV,gV={transitional:wW,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==TW&&"[object process]"===Object.prototype.toString.call(TW))&&(IV=uV),IV),transformRequest:[function(e,t){return ZV(t,"Accept"),ZV(t,"Content-Type"),hV.isFormData(e)||hV.isArrayBuffer(e)||hV.isBuffer(e)||hV.isStream(e)||hV.isFile(e)||hV.isBlob(e)?e:hV.isArrayBufferView(e)?e.buffer:hV.isURLSearchParams(e)?(pV(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):hV.isObject(e)||t&&"application/json"===t["Content-Type"]?(pV(t,"application/json"),function(e,t,i){if(hV.isString(e))try{return(t||JSON.parse)(e),hV.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(i||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||gV.transitional,i=t&&t.silentJSONParsing,n=t&&t.forcedJSONParsing,l=!i&&"json"===this.responseType;if(l||n&&hV.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(l){if("SyntaxError"===e.name)throw bV(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, */*"}}};hV.forEach(["delete","get","head"],(function(e){gV.headers[e]={}})),hV.forEach(["post","put","patch"],(function(e){gV.headers[e]=hV.merge(mV)}));var GV=gV,yV=cW,XV=GV,WV=function(e){return!(!e||!e.__CANCEL__)},VV=cW,CV=function(e,t,i){var n=this||XV;return yV.forEach(i,(function(i){e=i.call(n,e,t)})),e},RV=WV,SV=GV,vV=eV;function fV(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new vV("canceled")}var YV=cW,KV=function(e,t){t=t||{};var i={};function n(e,t){return YV.isPlainObject(e)&&YV.isPlainObject(t)?YV.merge(e,t):YV.isPlainObject(t)?YV.merge({},t):YV.isArray(t)?t.slice():t}function l(i){return YV.isUndefined(t[i])?YV.isUndefined(e[i])?void 0:n(void 0,e[i]):n(e[i],t[i])}function o(e){if(!YV.isUndefined(t[e]))return n(void 0,t[e])}function c(i){return YV.isUndefined(t[i])?YV.isUndefined(e[i])?void 0:n(void 0,e[i]):n(void 0,t[i])}function a(i){return i in t?n(e[i],t[i]):i in e?n(void 0,e[i]):void 0}var r={url:o,method:o,data:o,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:a};return YV.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=r[e]||l,n=t(e);YV.isUndefined(n)&&t!==a||(i[e]=n)})),i},NV="0.26.1",JV=NV,HV={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){HV[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}}));var LV={};HV.transitional=function(e,t,i){function n(e,t){return"[Axios v"+JV+"] Transitional option '"+e+"'"+t+(i?". "+i:"")}return function(i,l,o){if(!1===e)throw new Error(n(l," has been removed"+(t?" in "+t:"")));return t&&!LV[l]&&(LV[l]=!0,console.warn(n(l," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(i,l,o)}};var kV={assertOptions:function(e,t,i){if("object"!=typeof e)throw new TypeError("options must be an object");for(var n=Object.keys(e),l=n.length;l-- >0;){var o=n[l],c=t[o];if(c){var a=e[o],r=void 0===a||c(a,o,e);if(!0!==r)throw new TypeError("option "+o+" must be "+r)}else if(!0!==i)throw Error("Unknown option "+o)}},validators:HV},AV=cW,UV=dW,TV=hW,BV=function(e){return fV(e),e.headers=e.headers||{},e.data=CV.call(e,e.data,e.headers,e.transformRequest),e.headers=VV.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),VV.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||SV.adapter)(e).then((function(t){return fV(e),t.data=CV.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return RV(t)||(fV(e),t&&t.response&&(t.response.data=CV.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))},FV=KV,wV=kV,zV=wV.validators;function xV(e){this.defaults=e,this.interceptors={request:new TV,response:new TV}}xV.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=FV(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var i=t.transitional;void 0!==i&&wV.assertOptions(i,{silentJSONParsing:zV.transitional(zV.boolean),forcedJSONParsing:zV.transitional(zV.boolean),clarifyTimeoutError:zV.transitional(zV.boolean)},!1);var n=[],l=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(l=l&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));var o,c=[];if(this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)})),!l){var a=[BV,void 0];for(Array.prototype.unshift.apply(a,n),a=a.concat(c),o=Promise.resolve(t);a.length;)o=o.then(a.shift(),a.shift());return o}for(var r=t;n.length;){var d=n.shift(),s=n.shift();try{r=d(r)}catch(e){s(e);break}}try{o=BV(r)}catch(e){return Promise.reject(e)}for(;c.length;)o=o.then(c.shift(),c.shift());return o},xV.prototype.getUri=function(e){return e=FV(this.defaults,e),UV(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},AV.forEach(["delete","get","head","options"],(function(e){xV.prototype[e]=function(t,i){return this.request(FV(i||{},{method:e,url:t,data:(i||{}).data}))}})),AV.forEach(["post","put","patch"],(function(e){xV.prototype[e]=function(t,i,n){return this.request(FV(n||{},{method:e,url:t,data:i}))}}));var PV=xV,jV=eV;function QV(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var i=this;this.promise.then((function(e){if(i._listeners){var t,n=i._listeners.length;for(t=0;t<n;t++)i._listeners[t](e);i._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){i.subscribe(e),t=e})).then(e);return n.cancel=function(){i.unsubscribe(t)},n},e((function(e){i.reason||(i.reason=new jV(e),t(i.reason))}))}QV.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},QV.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},QV.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},QV.source=function(){var e,t=new QV((function(t){e=t}));return{token:t,cancel:e}};var MV=QV,EV=cW,DV=cW,OV=OX,_V=PV,qV=KV;var $V=function e(t){var i=new _V(t),n=OV(_V.prototype.request,i);return DV.extend(n,_V.prototype,i),DV.extend(n,i),n.create=function(i){return e(qV(t,i))},n}(GV);$V.Axios=_V,$V.Cancel=eV,$V.CancelToken=MV,$V.isCancel=WV,$V.VERSION=NV,$V.all=function(e){return Promise.all(e)},$V.spread=function(e){return function(t){return e.apply(null,t)}},$V.isAxiosError=function(e){return EV.isObject(e)&&!0===e.isAxiosError},DX.exports=$V,DX.exports.default=$V;var eC,tC=DX.exports;let iC=eC=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=tC.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new eC),this.axiosInstance.interceptors.request.use((e=>Hy(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(e)})))),this.axiosInstance.interceptors.response.use((e=>this.clientInstance.successHandler(e)),(e=>this.clientInstance.errorHandler(e))),this.axiosInstance.all=tC.all,this.axiosInstance.spread=tC.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(e){return Hy(this,void 0,void 0,(function*(){if(yield this.attachToken(e),null==e?void 0:e.shouldEncodeToFormData){const t=null==e?void 0:e.data,i=new FormData;Object.keys(t).forEach((e=>{i.append(e,t[e])})),e.data=i}return e.startTimeInMs=(new Date).getTime(),eC.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(e),e}))}errorHandler(e){throw eC.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}successHandler(e){return eC.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(e),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),e}init(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0;return Hy(this,void 0,void 0,(function*(){eC.isHandlerEnabled=e,this.attachToken=t}))}enableHandler(){eC.isHandlerEnabled=!0}disableHandler(){eC.isHandlerEnabled=!1}disableHandlerWithTimeout(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:eC.DEFAULT_HANDLER_DISABLE_TIMEOUT;eC.isHandlerEnabled=!1,setTimeout((()=>{eC.isHandlerEnabled=!0}),e)}setHttpRequestStartCallback(e){this.requestStartCallback=e}setHttpRequestSuccessCallback(e){this.requestSuccessCallback=e}setHttpRequestErrorCallback(e){this.requestErrorCallback=e}setHttpRequestFinishCallback(e){this.requestFinishCallback=e}};iC.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,iC=eC=function(e,t,i,n){var l,o=arguments.length,c=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(l=e[a])&&(c=(o<3?l(c):o>3?l(t,i,c):l(t,i))||c);return o>3&&c&&Object.defineProperty(t,i,c),c}([e=>{}],iC);class nC{setData(e,t){return Hy(this,void 0,void 0,(function*(){localStorage.setItem(e,t)}))}getData(e){var t;return Hy(this,void 0,void 0,(function*(){return null!==(t=localStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return Hy(this,void 0,void 0,(function*(){localStorage.removeItem(e)}))}}class lC{constructor(){this._data=new Map}setData(e,t){return Hy(this,void 0,void 0,(function*(){this._data.set(e,t)}))}getData(e){var t,i;return Hy(this,void 0,void 0,(function*(){return null!==(i=null===(t=this._data)||void 0===t?void 0:t.get(e))&&void 0!==i?i:"{}"}))}removeData(e){return Hy(this,void 0,void 0,(function*(){this._data.delete(e)}))}}class oC{setData(e,t){return Hy(this,void 0,void 0,(function*(){sessionStorage.setItem(e,t)}))}getData(e){var t;return Hy(this,void 0,void 0,(function*(){return null!==(t=sessionStorage.getItem(e))&&void 0!==t?t:"{}"}))}removeData(e){return Hy(this,void 0,void 0,(function*(){sessionStorage.removeItem(e)}))}}var cC=[],aC=[],rC="undefined"!=typeof Uint8Array?Uint8Array:Array,dC=!1;function sC(){dC=!0;for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,i=e.length;t<i;++t)cC[t]=e[t],aC[e.charCodeAt(t)]=t;aC["-".charCodeAt(0)]=62,aC["_".charCodeAt(0)]=63}function uC(e,t,i){for(var n,l,o=[],c=t;c<i;c+=3)n=(e[c]<<16)+(e[c+1]<<8)+e[c+2],o.push(cC[(l=n)>>18&63]+cC[l>>12&63]+cC[l>>6&63]+cC[63&l]);return o.join("")}function hC(e){var t;dC||sC();for(var i=e.length,n=i%3,l="",o=[],c=16383,a=0,r=i-n;a<r;a+=c)o.push(uC(e,a,a+c>r?r:a+c));return 1===n?(t=e[i-1],l+=cC[t>>2],l+=cC[t<<4&63],l+="=="):2===n&&(t=(e[i-2]<<8)+e[i-1],l+=cC[t>>10],l+=cC[t>>4&63],l+=cC[t<<2&63],l+="="),o.push(l),o.join("")}function ZC(e,t,i,n,l){var o,c,a=8*l-n-1,r=(1<<a)-1,d=r>>1,s=-7,u=i?l-1:0,h=i?-1:1,Z=e[t+u];for(u+=h,o=Z&(1<<-s)-1,Z>>=-s,s+=a;s>0;o=256*o+e[t+u],u+=h,s-=8);for(c=o&(1<<-s)-1,o>>=-s,s+=n;s>0;c=256*c+e[t+u],u+=h,s-=8);if(0===o)o=1-d;else{if(o===r)return c?NaN:1/0*(Z?-1:1);c+=Math.pow(2,n),o-=d}return(Z?-1:1)*c*Math.pow(2,o-n)}function bC(e,t,i,n,l,o){var c,a,r,d=8*o-l-1,s=(1<<d)-1,u=s>>1,h=23===l?Math.pow(2,-24)-Math.pow(2,-77):0,Z=n?0:o-1,b=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,c=s):(c=Math.floor(Math.log(t)/Math.LN2),t*(r=Math.pow(2,-c))<1&&(c--,r*=2),(t+=c+u>=1?h/r:h*Math.pow(2,1-u))*r>=2&&(c++,r/=2),c+u>=s?(a=0,c=s):c+u>=1?(a=(t*r-1)*Math.pow(2,l),c+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,l),c=0));l>=8;e[i+Z]=255&a,Z+=b,a/=256,l-=8);for(c=c<<l|a,d+=l;d>0;e[i+Z]=255&c,Z+=b,c/=256,d-=8);e[i+Z-b]|=128*m}var mC={}.toString,pC=Array.isArray||function(e){return"[object Array]"==mC.call(e)};yC.TYPED_ARRAY_SUPPORT=void 0===ZW.TYPED_ARRAY_SUPPORT||ZW.TYPED_ARRAY_SUPPORT;var IC=gC();function gC(){return yC.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function GC(e,t){if(gC()<t)throw new RangeError("Invalid typed array length");return yC.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=yC.prototype:(null===e&&(e=new yC(t)),e.length=t),e}function yC(e,t,i){if(!(yC.TYPED_ARRAY_SUPPORT||this instanceof yC))return new yC(e,t,i);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return VC(this,e)}return XC(this,e,t,i)}function XC(e,t,i,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,i,n){if(t.byteLength,i<0||t.byteLength<i)throw new RangeError("'offset' is out of bounds");if(t.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===i&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,i):new Uint8Array(t,i,n);yC.TYPED_ARRAY_SUPPORT?(e=t).__proto__=yC.prototype:e=CC(e,t);return e}(e,t,i,n):"string"==typeof t?function(e,t,i){"string"==typeof i&&""!==i||(i="utf8");if(!yC.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|vC(t,i),l=(e=GC(e,n)).write(t,i);l!==n&&(e=e.slice(0,l));return e}(e,t,i):function(e,t){if(SC(t)){var i=0|RC(t.length);return 0===(e=GC(e,i)).length||t.copy(e,0,0,i),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?GC(e,0):CC(e,t);if("Buffer"===t.type&&pC(t.data))return CC(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function WC(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 VC(e,t){if(WC(t),e=GC(e,t<0?0:0|RC(t)),!yC.TYPED_ARRAY_SUPPORT)for(var i=0;i<t;++i)e[i]=0;return e}function CC(e,t){var i=t.length<0?0:0|RC(t.length);e=GC(e,i);for(var n=0;n<i;n+=1)e[n]=255&t[n];return e}function RC(e){if(e>=gC())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+gC().toString(16)+" bytes");return 0|e}function SC(e){return!(null==e||!e._isBuffer)}function vC(e,t){if(SC(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var i=e.length;if(0===i)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return eR(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return tR(e).length;default:if(n)return eR(e).length;t=(""+t).toLowerCase(),n=!0}}function fC(e,t,i){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return xC(this,t,i);case"utf8":case"utf-8":return BC(this,t,i);case"ascii":return wC(this,t,i);case"latin1":case"binary":return zC(this,t,i);case"base64":return TC(this,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return PC(this,t,i);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function YC(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function KC(e,t,i,n,l){if(0===e.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=l?0:e.length-1),i<0&&(i=e.length+i),i>=e.length){if(l)return-1;i=e.length-1}else if(i<0){if(!l)return-1;i=0}if("string"==typeof t&&(t=yC.from(t,n)),SC(t))return 0===t.length?-1:NC(e,t,i,n,l);if("number"==typeof t)return t&=255,yC.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?l?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):NC(e,[t],i,n,l);throw new TypeError("val must be string, number or Buffer")}function NC(e,t,i,n,l){var o,c=1,a=e.length,r=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;c=2,a/=2,r/=2,i/=2}function d(e,t){return 1===c?e[t]:e.readUInt16BE(t*c)}if(l){var s=-1;for(o=i;o<a;o++)if(d(e,o)===d(t,-1===s?0:o-s)){if(-1===s&&(s=o),o-s+1===r)return s*c}else-1!==s&&(o-=o-s),s=-1}else for(i+r>a&&(i=a-r),o=i;o>=0;o--){for(var u=!0,h=0;h<r;h++)if(d(e,o+h)!==d(t,h)){u=!1;break}if(u)return o}return-1}function JC(e,t,i,n){i=Number(i)||0;var l=e.length-i;n?(n=Number(n))>l&&(n=l):n=l;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var c=0;c<n;++c){var a=parseInt(t.substr(2*c,2),16);if(isNaN(a))return c;e[i+c]=a}return c}function HC(e,t,i,n){return iR(eR(t,e.length-i),e,i,n)}function LC(e,t,i,n){return iR(function(e){for(var t=[],i=0;i<e.length;++i)t.push(255&e.charCodeAt(i));return t}(t),e,i,n)}function kC(e,t,i,n){return LC(e,t,i,n)}function AC(e,t,i,n){return iR(tR(t),e,i,n)}function UC(e,t,i,n){return iR(function(e,t){for(var i,n,l,o=[],c=0;c<e.length&&!((t-=2)<0);++c)n=(i=e.charCodeAt(c))>>8,l=i%256,o.push(l),o.push(n);return o}(t,e.length-i),e,i,n)}function TC(e,t,i){return 0===t&&i===e.length?hC(e):hC(e.slice(t,i))}function BC(e,t,i){i=Math.min(e.length,i);for(var n=[],l=t;l<i;){var o,c,a,r,d=e[l],s=null,u=d>239?4:d>223?3:d>191?2:1;if(l+u<=i)switch(u){case 1:d<128&&(s=d);break;case 2:128==(192&(o=e[l+1]))&&(r=(31&d)<<6|63&o)>127&&(s=r);break;case 3:o=e[l+1],c=e[l+2],128==(192&o)&&128==(192&c)&&(r=(15&d)<<12|(63&o)<<6|63&c)>2047&&(r<55296||r>57343)&&(s=r);break;case 4:o=e[l+1],c=e[l+2],a=e[l+3],128==(192&o)&&128==(192&c)&&128==(192&a)&&(r=(15&d)<<18|(63&o)<<12|(63&c)<<6|63&a)>65535&&r<1114112&&(s=r)}null===s?(s=65533,u=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),l+=u}return function(e){var t=e.length;if(t<=FC)return String.fromCharCode.apply(String,e);var i="",n=0;for(;n<t;)i+=String.fromCharCode.apply(String,e.slice(n,n+=FC));return i}(n)}yC.poolSize=8192,yC._augment=function(e){return e.__proto__=yC.prototype,e},yC.from=function(e,t,i){return XC(null,e,t,i)},yC.TYPED_ARRAY_SUPPORT&&(yC.prototype.__proto__=Uint8Array.prototype,yC.__proto__=Uint8Array),yC.alloc=function(e,t,i){return function(e,t,i,n){return WC(t),t<=0?GC(e,t):void 0!==i?"string"==typeof n?GC(e,t).fill(i,n):GC(e,t).fill(i):GC(e,t)}(null,e,t,i)},yC.allocUnsafe=function(e){return VC(null,e)},yC.allocUnsafeSlow=function(e){return VC(null,e)},yC.isBuffer=nR,yC.compare=function(e,t){if(!SC(e)||!SC(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var i=e.length,n=t.length,l=0,o=Math.min(i,n);l<o;++l)if(e[l]!==t[l]){i=e[l],n=t[l];break}return i<n?-1:n<i?1:0},yC.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}},yC.concat=function(e,t){if(!pC(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return yC.alloc(0);var i;if(void 0===t)for(t=0,i=0;i<e.length;++i)t+=e[i].length;var n=yC.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){var o=e[i];if(!SC(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,l),l+=o.length}return n},yC.byteLength=vC,yC.prototype._isBuffer=!0,yC.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)YC(this,t,t+1);return this},yC.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)YC(this,t,t+3),YC(this,t+1,t+2);return this},yC.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)YC(this,t,t+7),YC(this,t+1,t+6),YC(this,t+2,t+5),YC(this,t+3,t+4);return this},yC.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?BC(this,0,e):fC.apply(this,arguments)},yC.prototype.equals=function(e){if(!SC(e))throw new TypeError("Argument must be a Buffer");return this===e||0===yC.compare(this,e)},yC.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+">"},yC.prototype.compare=function(e,t,i,n,l){if(!SC(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===i&&(i=e?e.length:0),void 0===n&&(n=0),void 0===l&&(l=this.length),t<0||i>e.length||n<0||l>this.length)throw new RangeError("out of range index");if(n>=l&&t>=i)return 0;if(n>=l)return-1;if(t>=i)return 1;if(this===e)return 0;for(var o=(l>>>=0)-(n>>>=0),c=(i>>>=0)-(t>>>=0),a=Math.min(o,c),r=this.slice(n,l),d=e.slice(t,i),s=0;s<a;++s)if(r[s]!==d[s]){o=r[s],c=d[s];break}return o<c?-1:c<o?1:0},yC.prototype.includes=function(e,t,i){return-1!==this.indexOf(e,t,i)},yC.prototype.indexOf=function(e,t,i){return KC(this,e,t,i,!0)},yC.prototype.lastIndexOf=function(e,t,i){return KC(this,e,t,i,!1)},yC.prototype.write=function(e,t,i,n){if(void 0===t)n="utf8",i=this.length,t=0;else if(void 0===i&&"string"==typeof t)n=t,i=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var l=this.length-t;if((void 0===i||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return JC(this,e,t,i);case"utf8":case"utf-8":return HC(this,e,t,i);case"ascii":return LC(this,e,t,i);case"latin1":case"binary":return kC(this,e,t,i);case"base64":return AC(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return UC(this,e,t,i);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},yC.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var FC=4096;function wC(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(127&e[l]);return n}function zC(e,t,i){var n="";i=Math.min(e.length,i);for(var l=t;l<i;++l)n+=String.fromCharCode(e[l]);return n}function xC(e,t,i){var n=e.length;(!t||t<0)&&(t=0),(!i||i<0||i>n)&&(i=n);for(var l="",o=t;o<i;++o)l+=$C(e[o]);return l}function PC(e,t,i){for(var n=e.slice(t,i),l="",o=0;o<n.length;o+=2)l+=String.fromCharCode(n[o]+256*n[o+1]);return l}function jC(e,t,i){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>i)throw new RangeError("Trying to access beyond buffer length")}function QC(e,t,i,n,l,o){if(!SC(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>l||t<o)throw new RangeError('"value" argument is out of bounds');if(i+n>e.length)throw new RangeError("Index out of range")}function MC(e,t,i,n){t<0&&(t=65535+t+1);for(var l=0,o=Math.min(e.length-i,2);l<o;++l)e[i+l]=(t&255<<8*(n?l:1-l))>>>8*(n?l:1-l)}function EC(e,t,i,n){t<0&&(t=4294967295+t+1);for(var l=0,o=Math.min(e.length-i,4);l<o;++l)e[i+l]=t>>>8*(n?l:3-l)&255}function DC(e,t,i,n,l,o){if(i+n>e.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function OC(e,t,i,n,l){return l||DC(e,0,i,4),bC(e,t,i,n,23,4),i+4}function _C(e,t,i,n,l){return l||DC(e,0,i,8),bC(e,t,i,n,52,8),i+8}yC.prototype.slice=function(e,t){var i,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),yC.TYPED_ARRAY_SUPPORT)(i=this.subarray(e,t)).__proto__=yC.prototype;else{var l=t-e;i=new yC(l,void 0);for(var o=0;o<l;++o)i[o]=this[o+e]}return i},yC.prototype.readUIntLE=function(e,t,i){e|=0,t|=0,i||jC(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n},yC.prototype.readUIntBE=function(e,t,i){e|=0,t|=0,i||jC(e,t,this.length);for(var n=this[e+--t],l=1;t>0&&(l*=256);)n+=this[e+--t]*l;return n},yC.prototype.readUInt8=function(e,t){return t||jC(e,1,this.length),this[e]},yC.prototype.readUInt16LE=function(e,t){return t||jC(e,2,this.length),this[e]|this[e+1]<<8},yC.prototype.readUInt16BE=function(e,t){return t||jC(e,2,this.length),this[e]<<8|this[e+1]},yC.prototype.readUInt32LE=function(e,t){return t||jC(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},yC.prototype.readUInt32BE=function(e,t){return t||jC(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},yC.prototype.readIntLE=function(e,t,i){e|=0,t|=0,i||jC(e,t,this.length);for(var n=this[e],l=1,o=0;++o<t&&(l*=256);)n+=this[e+o]*l;return n>=(l*=128)&&(n-=Math.pow(2,8*t)),n},yC.prototype.readIntBE=function(e,t,i){e|=0,t|=0,i||jC(e,t,this.length);for(var n=t,l=1,o=this[e+--n];n>0&&(l*=256);)o+=this[e+--n]*l;return o>=(l*=128)&&(o-=Math.pow(2,8*t)),o},yC.prototype.readInt8=function(e,t){return t||jC(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},yC.prototype.readInt16LE=function(e,t){t||jC(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},yC.prototype.readInt16BE=function(e,t){t||jC(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},yC.prototype.readInt32LE=function(e,t){return t||jC(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},yC.prototype.readInt32BE=function(e,t){return t||jC(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},yC.prototype.readFloatLE=function(e,t){return t||jC(e,4,this.length),ZC(this,e,!0,23,4)},yC.prototype.readFloatBE=function(e,t){return t||jC(e,4,this.length),ZC(this,e,!1,23,4)},yC.prototype.readDoubleLE=function(e,t){return t||jC(e,8,this.length),ZC(this,e,!0,52,8)},yC.prototype.readDoubleBE=function(e,t){return t||jC(e,8,this.length),ZC(this,e,!1,52,8)},yC.prototype.writeUIntLE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QC(this,e,t,i,Math.pow(2,8*i)-1,0);var l=1,o=0;for(this[t]=255&e;++o<i&&(l*=256);)this[t+o]=e/l&255;return t+i},yC.prototype.writeUIntBE=function(e,t,i,n){(e=+e,t|=0,i|=0,n)||QC(this,e,t,i,Math.pow(2,8*i)-1,0);var l=i-1,o=1;for(this[t+l]=255&e;--l>=0&&(o*=256);)this[t+l]=e/o&255;return t+i},yC.prototype.writeUInt8=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,1,255,0),yC.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},yC.prototype.writeUInt16LE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,2,65535,0),yC.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MC(this,e,t,!0),t+2},yC.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,2,65535,0),yC.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MC(this,e,t,!1),t+2},yC.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,4,4294967295,0),yC.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):EC(this,e,t,!0),t+4},yC.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,4,4294967295,0),yC.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EC(this,e,t,!1),t+4},yC.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QC(this,e,t,i,l-1,-l)}var o=0,c=1,a=0;for(this[t]=255&e;++o<i&&(c*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},yC.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t|=0,!n){var l=Math.pow(2,8*i-1);QC(this,e,t,i,l-1,-l)}var o=i-1,c=1,a=0;for(this[t+o]=255&e;--o>=0&&(c*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/c>>0)-a&255;return t+i},yC.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,1,127,-128),yC.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},yC.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,2,32767,-32768),yC.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):MC(this,e,t,!0),t+2},yC.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,2,32767,-32768),yC.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):MC(this,e,t,!1),t+2},yC.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,4,2147483647,-2147483648),yC.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):EC(this,e,t,!0),t+4},yC.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||QC(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),yC.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):EC(this,e,t,!1),t+4},yC.prototype.writeFloatLE=function(e,t,i){return OC(this,e,t,!0,i)},yC.prototype.writeFloatBE=function(e,t,i){return OC(this,e,t,!1,i)},yC.prototype.writeDoubleLE=function(e,t,i){return _C(this,e,t,!0,i)},yC.prototype.writeDoubleBE=function(e,t,i){return _C(this,e,t,!1,i)},yC.prototype.copy=function(e,t,i,n){if(i||(i=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);var l,o=n-i;if(this===e&&i<t&&t<n)for(l=o-1;l>=0;--l)e[l+t]=this[l+i];else if(o<1e3||!yC.TYPED_ARRAY_SUPPORT)for(l=0;l<o;++l)e[l+t]=this[l+i];else Uint8Array.prototype.set.call(e,this.subarray(i,i+o),t);return o},yC.prototype.fill=function(e,t,i,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===e.length){var l=e.charCodeAt(0);l<256&&(e=l)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!yC.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;var o;if(t>>>=0,i=void 0===i?this.length:i>>>0,e||(e=0),"number"==typeof e)for(o=t;o<i;++o)this[o]=e;else{var c=SC(e)?e:eR(new yC(e,n).toString()),a=c.length;for(o=0;o<i-t;++o)this[o+t]=c[o%a]}return this};var qC=/[^+\/0-9A-Za-z-_]/g;function $C(e){return e<16?"0"+e.toString(16):e.toString(16)}function eR(e,t){var i;t=t||1/0;for(var n=e.length,l=null,o=[],c=0;c<n;++c){if((i=e.charCodeAt(c))>55295&&i<57344){if(!l){if(i>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(c+1===n){(t-=3)>-1&&o.push(239,191,189);continue}l=i;continue}if(i<56320){(t-=3)>-1&&o.push(239,191,189),l=i;continue}i=65536+(l-55296<<10|i-56320)}else l&&(t-=3)>-1&&o.push(239,191,189);if(l=null,i<128){if((t-=1)<0)break;o.push(i)}else if(i<2048){if((t-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((t-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function tR(e){return function(e){var t,i,n,l,o,c;dC||sC();var a=e.length;if(a%4>0)throw new Error("Invalid string. Length must be a multiple of 4");o="="===e[a-2]?2:"="===e[a-1]?1:0,c=new rC(3*a/4-o),n=o>0?a-4:a;var r=0;for(t=0,i=0;t<n;t+=4,i+=3)l=aC[e.charCodeAt(t)]<<18|aC[e.charCodeAt(t+1)]<<12|aC[e.charCodeAt(t+2)]<<6|aC[e.charCodeAt(t+3)],c[r++]=l>>16&255,c[r++]=l>>8&255,c[r++]=255&l;return 2===o?(l=aC[e.charCodeAt(t)]<<2|aC[e.charCodeAt(t+1)]>>4,c[r++]=255&l):1===o&&(l=aC[e.charCodeAt(t)]<<10|aC[e.charCodeAt(t+1)]<<4|aC[e.charCodeAt(t+2)]>>2,c[r++]=l>>8&255,c[r++]=255&l),c}(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(qC,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function iR(e,t,i,n){for(var l=0;l<n&&!(l+i>=t.length||l>=e.length);++l)t[l+i]=e[l];return l}function nR(e){return null!=e&&(!!e._isBuffer||lR(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&lR(e.slice(0,0))}(e))}function lR(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}var oR=Object.freeze({__proto__:null,Buffer:yC,INSPECT_MAX_BYTES:50,SlowBuffer:function(e){return+e!=e&&(e=0),yC.alloc(+e)},isBuffer:nR,kMaxLength:IC}),cR={exports:{}},aR={},rR={};Object.defineProperty(rR,"__esModule",{value:!0}),rR.default=function(e){var t=e.length,i=t%4;if(!i)return e;var n=t,l=4-i,o=t+l,c=yC.alloc(o);for(c.write(e);l--;)c.write("=",n++);return c.toString()},Object.defineProperty(aR,"__esModule",{value:!0});var dR=rR;function sR(e,t){return void 0===t&&(t="utf8"),yC.isBuffer(e)?hR(e.toString("base64")):hR(yC.from(e,t).toString("base64"))}function uR(e){return e=e.toString(),dR.default(e).replace(/\-/g,"+").replace(/_/g,"/")}function hR(e){return e.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var ZR=sR;ZR.encode=sR,ZR.decode=function(e,t){return void 0===t&&(t="utf8"),yC.from(uR(e),"base64").toString(t)},ZR.toBase64=uR,ZR.fromBase64=hR,ZR.toBuffer=function(e){return yC.from(uR(e),"base64")},aR.default=ZR,function(e){e.exports=aR.default,e.exports.default=e.exports}(cR);var bR=cR.exports,mR={exports:{}};!function(e){!function(t,i){var n={};!function(e){e.__esModule=!0,e.digestLength=32,e.blockSize=64;var t=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(e,i,n,l,o){for(var c,a,r,d,s,u,h,Z,b,m,p,I,g;o>=64;){for(c=i[0],a=i[1],r=i[2],d=i[3],s=i[4],u=i[5],h=i[6],Z=i[7],m=0;m<16;m++)p=l+4*m,e[m]=(255&n[p])<<24|(255&n[p+1])<<16|(255&n[p+2])<<8|255&n[p+3];for(m=16;m<64;m++)I=((b=e[m-2])>>>17|b<<15)^(b>>>19|b<<13)^b>>>10,g=((b=e[m-15])>>>7|b<<25)^(b>>>18|b<<14)^b>>>3,e[m]=(I+e[m-7]|0)+(g+e[m-16]|0);for(m=0;m<64;m++)I=(((s>>>6|s<<26)^(s>>>11|s<<21)^(s>>>25|s<<7))+(s&u^~s&h)|0)+(Z+(t[m]+e[m]|0)|0)|0,g=((c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10))+(c&a^c&r^a&r)|0,Z=h,h=u,u=s,s=d+I|0,d=r,r=a,a=c,c=I+g|0;i[0]+=c,i[1]+=a,i[2]+=r,i[3]+=d,i[4]+=s,i[5]+=u,i[6]+=h,i[7]+=Z,l+=64,o-=64}return l}var n=function(){function t(){this.digestLength=e.digestLength,this.blockSize=e.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return t.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},t.prototype.clean=function(){for(var e=0;e<this.buffer.length;e++)this.buffer[e]=0;for(e=0;e<this.temp.length;e++)this.temp[e]=0;this.reset()},t.prototype.update=function(e,t){if(void 0===t&&(t=e.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=t,this.bufferLength>0){for(;this.bufferLength<64&&t>0;)this.buffer[this.bufferLength++]=e[n++],t--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(t>=64&&(n=i(this.temp,this.state,e,n,t),t%=64);t>0;)this.buffer[this.bufferLength++]=e[n++],t--;return this},t.prototype.finish=function(e){if(!this.finished){var t=this.bytesHashed,n=this.bufferLength,l=t/536870912|0,o=t<<3,c=t%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<c-8;a++)this.buffer[a]=0;this.buffer[c-8]=l>>>24&255,this.buffer[c-7]=l>>>16&255,this.buffer[c-6]=l>>>8&255,this.buffer[c-5]=l>>>0&255,this.buffer[c-4]=o>>>24&255,this.buffer[c-3]=o>>>16&255,this.buffer[c-2]=o>>>8&255,this.buffer[c-1]=o>>>0&255,i(this.temp,this.state,this.buffer,0,c),this.finished=!0}for(a=0;a<8;a++)e[4*a+0]=this.state[a]>>>24&255,e[4*a+1]=this.state[a]>>>16&255,e[4*a+2]=this.state[a]>>>8&255,e[4*a+3]=this.state[a]>>>0&255;return this},t.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},t.prototype._saveState=function(e){for(var t=0;t<this.state.length;t++)e[t]=this.state[t]},t.prototype._restoreState=function(e,t){for(var i=0;i<this.state.length;i++)this.state[i]=e[i];this.bytesHashed=t,this.finished=!1,this.bufferLength=0},t}();e.Hash=n;var l=function(){function e(e){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var t=new Uint8Array(this.blockSize);if(e.length>this.blockSize)(new n).update(e).finish(t).clean();else for(var i=0;i<e.length;i++)t[i]=e[i];for(i=0;i<t.length;i++)t[i]^=54;this.inner.update(t);for(i=0;i<t.length;i++)t[i]^=106;this.outer.update(t),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate);for(i=0;i<t.length;i++)t[i]=0}return e.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},e.prototype.clean=function(){for(var e=0;e<this.istate.length;e++)this.ostate[e]=this.istate[e]=0;this.inner.clean(),this.outer.clean()},e.prototype.update=function(e){return this.inner.update(e),this},e.prototype.finish=function(e){return this.outer.finished?this.outer.finish(e):(this.inner.finish(e),this.outer.update(e,this.digestLength).finish(e)),this},e.prototype.digest=function(){var e=new Uint8Array(this.digestLength);return this.finish(e),e},e}();function o(e){var t=(new n).update(e),i=t.digest();return t.clean(),i}function c(e,t){var i=new l(e).update(t),n=i.digest();return i.clean(),n}function a(e,t,i,n){var l=n[0];if(0===l)throw new Error("hkdf: cannot expand more");t.reset(),l>1&&t.update(e),i&&t.update(i),t.update(n),t.finish(e),n[0]++}e.HMAC=l,e.hash=o,e.default=o,e.hmac=c;var r=new Uint8Array(e.digestLength);function d(e,t,i,n){void 0===t&&(t=r),void 0===n&&(n=32);for(var o=new Uint8Array([1]),d=c(t,e),s=new l(d),u=new Uint8Array(s.digestLength),h=u.length,Z=new Uint8Array(n),b=0;b<n;b++)h===u.length&&(a(u,s,i,o),h=0),Z[b]=u[h++];return s.clean(),u.fill(0),o.fill(0),Z}function s(e,t,i,n){for(var o=new l(e),c=o.digestLength,a=new Uint8Array(4),r=new Uint8Array(c),d=new Uint8Array(c),s=new Uint8Array(n),u=0;u*c<n;u++){var h=u+1;a[0]=h>>>24&255,a[1]=h>>>16&255,a[2]=h>>>8&255,a[3]=h>>>0&255,o.reset(),o.update(t),o.update(a),o.finish(d);for(var Z=0;Z<c;Z++)r[Z]=d[Z];for(Z=2;Z<=i;Z++){o.reset(),o.update(d).finish(d);for(var b=0;b<c;b++)r[b]^=d[b]}for(Z=0;Z<c&&u*c+Z<n;Z++)s[u*c+Z]=r[Z]}for(u=0;u<c;u++)r[u]=d[u]=0;for(u=0;u<4;u++)a[u]=0;return o.clean(),s}e.hkdf=d,e.pbkdf2=s}(n);var l=n.default;for(var o in n)l[o]=n[o];e.exports=l}()}(mR);var pR=i(mR.exports),IR=crypto;const gR=e=>e instanceof CryptoKey,GR=new TextEncoder,yR=new TextDecoder;const XR=e=>{let t=e;t instanceof Uint8Array&&(t=yR.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),i=new Uint8Array(t.length);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);return i})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class WR extends Error{constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class VR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class CR extends WR{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unspecified",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"unspecified";super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=i}static get code(){return"ERR_JWT_EXPIRED"}}class RR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class SR extends WR{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class vR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class fR extends WR{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class YR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class KR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_NO_MATCHING_KEY",this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}class NR extends WR{constructor(){super(...arguments),this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS",this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}class JR extends WR{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function HR(){return"function"==typeof WebSocketPair}function LR(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"algorithm.name";return new TypeError("CryptoKey does not support this operation, its ".concat(t," must be ").concat(e))}function kR(e,t){return e.name===t}function AR(e){return parseInt(e.name.slice(4),10)}function UR(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function TR(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const i=t.pop();e+="one of ".concat(t.join(", "),", or ").concat(i,".")}else 2===t.length?e+="one of ".concat(t[0]," or ").concat(t[1],"."):e+="".concat(t[0],".");throw new TypeError(e)}}var BR=function(e){let t="Key must be ";for(var i=arguments.length,n=new Array(i>1?i-1:0),l=1;l<i;l++)n[l-1]=arguments[l];if(n.length>2){const e=n.pop();t+="one of type ".concat(n.join(", "),", or ").concat(e,".")}else 2===n.length?t+="one of type ".concat(n[0]," or ").concat(n[1],"."):t+="of type ".concat(n[0],".");return null==e?t+=" Received ".concat(e):"function"==typeof e&&e.name?t+=" Received function ".concat(e.name):"object"==typeof e&&null!=e&&e.constructor&&e.constructor.name&&(t+=" Received an instance of ".concat(e.constructor.name)),t},FR=e=>gR(e);const wR=["CryptoKey"];function zR(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let i=e;for(;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(e)===i}const xR=async e=>{var t,i;const{algorithm:n,keyUsages:l}=function(e){let t,i;switch(e.kty){case"oct":switch(e.alg){case"HS256":case"HS384":case"HS512":t={name:"HMAC",hash:"SHA-".concat(e.alg.slice(-3))},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new SR("".concat(e.alg," keys cannot be imported as CryptoKey instances"));case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":t={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":t={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":t={name:"PBKDF2"},i=["deriveBits"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:"SHA-".concat(e.alg.slice(-3))},i=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:"SHA-".concat(parseInt(e.alg.slice(-3),10)||1)},i=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},i=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},i=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},i=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},i=e.d?["deriveBits"]:[];break;default:throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case HR()&&"OKP":if("EdDSA"!==e.alg)throw new SR('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');if("Ed25519"!==e.crv)throw new SR('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value');t={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},i=e.d?["sign"]:["verify"];break;default:throw new SR('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:i}}(e),o=[n,null!==(t=e.ext)&&void 0!==t&&t,null!==(i=e.key_ops)&&void 0!==i?i:l];if("PBKDF2"===n.name)return IR.subtle.importKey("raw",XR(e.k),...o);const c={...e};return delete c.alg,IR.subtle.importKey("jwk",c,...o)};const PR=(e,t,i)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?(e=>{if(!(e instanceof Uint8Array)){if(!FR(e))throw new TypeError(BR(e,...wR,"Uint8Array"));if("secret"!==e.type)throw new TypeError("".concat(wR.join(" or "),' instances for symmetric algorithms must be of type "secret"'))}})(t):((e,t)=>{if(!FR(e))throw new TypeError(BR(e,...wR));if("secret"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithms must not be of type "secret"'));if("sign"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm signing must be of type "private"'));if("decrypt"===t&&"public"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm decryption must be of type "private"'));if(e.algorithm&&"verify"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm verifying must be of type "public"'));if(e.algorithm&&"encrypt"===t&&"private"===e.type)throw new TypeError("".concat(wR.join(" or "),' instances for asymmetric algorithm encryption must be of type "public"'))})(t,i)};function jR(e,t,i){if(gR(t))return function(e,t){switch(t){case"HS256":case"HS384":case"HS512":{if(!kR(e.algorithm,"HMAC"))throw LR("HMAC");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!kR(e.algorithm,"RSASSA-PKCS1-v1_5"))throw LR("RSASSA-PKCS1-v1_5");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!kR(e.algorithm,"RSA-PSS"))throw LR("RSA-PSS");const i=parseInt(t.slice(2),10);if(AR(e.algorithm.hash)!==i)throw LR("SHA-".concat(i),"algorithm.hash");break}case HR()&&"EdDSA":if(!kR(e.algorithm,"NODE-ED25519"))throw LR("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!kR(e.algorithm,"ECDSA"))throw LR("ECDSA");const i=UR(t);if(e.algorithm.namedCurve!==i)throw LR(i,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}for(var i=arguments.length,n=new Array(i>2?i-2:0),l=2;l<i;l++)n[l-2]=arguments[l];TR(e,n)}(t,e,i),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(BR(t,...wR));return IR.subtle.importKey("raw",t,{hash:"SHA-".concat(e.slice(-3)),name:"HMAC"},!1,[i])}throw new TypeError(BR(t,...wR,"Uint8Array"))}const QR=async(e,t,i,n)=>{const l=await jR(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:i}=t.algorithm;if("number"!=typeof i||i<2048)throw new TypeError("".concat(e," requires key modulusLength to be 2048 bits or larger"))}})(e,l);const o=function(e,t){const i="SHA-".concat(e.slice(-3));switch(e){case"HS256":case"HS384":case"HS512":return{hash:i,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:i,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:i,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:i,name:"ECDSA",namedCurve:t.namedCurve};case HR()&&"EdDSA":const{namedCurve:n}=t;return{name:n,namedCurve:n};default:throw new SR("alg ".concat(e," is not supported either by JOSE or your javascript runtime"))}}(e,l.algorithm);try{return await IR.subtle.verify(o,l,i,n)}catch(e){return!1}};async function MR(e,t,i){var n;if(!zR(e))throw new vR("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new vR('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new vR("JWS Protected Header incorrect type");if(void 0===e.payload)throw new vR("JWS Payload missing");if("string"!=typeof e.signature)throw new vR("JWS Signature missing or incorrect type");if(void 0!==e.header&&!zR(e.header))throw new vR("JWS Unprotected Header incorrect type");let l={};if(e.protected){const t=XR(e.protected);try{l=JSON.parse(yR.decode(t))}catch(e){throw new vR("JWS Protected Header is invalid")}}if(!function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const e of n){const t=Object.keys(e);if(l&&0!==l.size)for(const e of t){if(l.has(e))return!1;l.add(e)}else l=new Set(t)}return!0}(l,e.header))throw new vR("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const o={...l,...e.header},c=function(e,t,i,n,l){if(void 0!==l.crit&&void 0===n.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!n||void 0===n.crit)return new Set;if(!Array.isArray(n.crit)||0===n.crit.length||n.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let o;o=void 0!==i?new Map([...Object.entries(i),...t.entries()]):t;for(const t of n.crit){if(!o.has(t))throw new SR('Extension Header Parameter "'.concat(t,'" is not recognized'));if(void 0===l[t])throw new e('Extension Header Parameter "'.concat(t,'" is missing'));if(o.get(t)&&void 0===n[t])throw new e('Extension Header Parameter "'.concat(t,'" MUST be integrity protected'))}return new Set(n.crit)}(vR,new Map([["b64",!0]]),null==i?void 0:i.crit,l,o);let a=!0;if(c.has("b64")&&(a=l.b64,"boolean"!=typeof a))throw new vR('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=o;if("string"!=typeof r||!r)throw new vR('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError('"'.concat(e,'" option must be an array of strings'));if(t)return new Set(t)})("algorithms",i.algorithms);if(d&&!d.has(r))throw new RR('"alg" (Algorithm) Header Parameter not allowed');if(a){if("string"!=typeof e.payload)throw new vR("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new vR("JWS Payload must be a string or an Uint8Array instance");let s=!1;"function"==typeof t&&(t=await t(l,e),s=!0),PR(r,t,"verify");const u=function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const n=t.reduce(((e,t)=>{let{length:i}=t;return e+i}),0),l=new Uint8Array(n);let o=0;return t.forEach((e=>{l.set(e,o),o+=e.length})),l}(GR.encode(null!==(n=e.protected)&&void 0!==n?n:""),GR.encode("."),"string"==typeof e.payload?GR.encode(e.payload):e.payload),h=XR(e.signature);if(!await QR(r,t,h,u))throw new JR;let Z;Z=a?XR(e.payload):"string"==typeof e.payload?GR.encode(e.payload):e.payload;const b={payload:Z};return void 0!==e.protected&&(b.protectedHeader=l),void 0!==e.header&&(b.unprotectedHeader=e.header),s?{...b,key:t}:b}var ER=e=>Math.floor(e.getTime()/1e3);const DR=86400,OR=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var _R=e=>{const t=OR.exec(e);if(!t)throw new TypeError("Invalid time period format");const i=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(i*DR);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const qR=e=>e.toLowerCase().replace(/^application\//,""),$R=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function eS(e,t,i){var n;const l=await async function(e,t,i){if(e instanceof Uint8Array&&(e=yR.decode(e)),"string"!=typeof e)throw new vR("Compact JWS must be a string or Uint8Array");const{0:n,1:l,2:o,length:c}=e.split(".");if(3!==c)throw new vR("Invalid Compact JWS");const a=await MR({payload:l,protected:n,signature:o},t,i),r={payload:a.payload,protectedHeader:a.protectedHeader};return"function"==typeof t?{...r,key:a.key}:r}(e,t,i);if((null===(n=l.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===l.protectedHeader.b64)throw new fR("JWTs MUST NOT use unencoded payload");const o=function(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{typ:n}=i;if(n&&("string"!=typeof e.typ||qR(e.typ)!==qR(n)))throw new VR('unexpected "typ" JWT header value',"typ","check_failed");let l;try{l=JSON.parse(yR.decode(t))}catch(e){}if(!zR(l))throw new fR("JWT Claims Set must be a top-level JSON object");const{issuer:o}=i;if(o&&!(Array.isArray(o)?o:[o]).includes(l.iss))throw new VR('unexpected "iss" claim value',"iss","check_failed");const{subject:c}=i;if(c&&l.sub!==c)throw new VR('unexpected "sub" claim value',"sub","check_failed");const{audience:a}=i;if(a&&!$R(l.aud,"string"==typeof a?[a]:a))throw new VR('unexpected "aud" claim value',"aud","check_failed");let r;switch(typeof i.clockTolerance){case"string":r=_R(i.clockTolerance);break;case"number":r=i.clockTolerance;break;case"undefined":r=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:d}=i,s=ER(d||new Date);if((void 0!==l.iat||i.maxTokenAge)&&"number"!=typeof l.iat)throw new VR('"iat" claim must be a number',"iat","invalid");if(void 0!==l.nbf){if("number"!=typeof l.nbf)throw new VR('"nbf" claim must be a number',"nbf","invalid");if(l.nbf>s+r)throw new VR('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==l.exp){if("number"!=typeof l.exp)throw new VR('"exp" claim must be a number',"exp","invalid");if(l.exp<=s-r)throw new CR('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const e=s-l.iat;if(e-r>("number"==typeof i.maxTokenAge?i.maxTokenAge:_R(i.maxTokenAge)))throw new CR('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-r)throw new VR('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return l}(l.protectedHeader,l.payload,i),c={payload:o,protectedHeader:l.protectedHeader};return"function"==typeof t?{...c,key:l.key}:c}function tS(e){return zR(e)}class iS{constructor(e){if(this._cached=new WeakMap,!function(e){return e&&"object"==typeof e&&Array.isArray(e.keys)&&e.keys.every(tS)}(e))throw new YR("JSON Web Key Set malformed");var t;this._jwks=(t=e,"function"==typeof structuredClone?structuredClone(t):JSON.parse(JSON.stringify(t)))}async getKey(e,t){const{alg:i,kid:n}={...e,...t.header},l=function(e){switch("string"==typeof e&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new SR('Unsupported "alg" value for a JSON Web Key Set')}}(i),o=this._jwks.keys.filter((e=>{let t=l===e.kty;if(t&&"string"==typeof n&&(t=n===e.kid),t&&"string"==typeof e.alg&&(t=i===e.alg),t&&"string"==typeof e.use&&(t="sig"===e.use),t&&Array.isArray(e.key_ops)&&(t=e.key_ops.includes("verify")),t&&"EdDSA"===i&&(t="Ed25519"===e.crv||"Ed448"===e.crv),t)switch(i){case"ES256":t="P-256"===e.crv;break;case"ES256K":t="secp256k1"===e.crv;break;case"ES384":t="P-384"===e.crv;break;case"ES512":t="P-521"===e.crv}return t})),{0:c,length:a}=o;if(0===a)throw new KR;if(1!==a)throw new NR;const r=this._cached.get(c)||this._cached.set(c,{}).get(c);if(void 0===r[i]){const e=await async function(e,t,i){if(!zR(e))throw new TypeError("JWK must be an object");if(t||(t=e.alg),"string"!=typeof t||!t)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(e.kty){case"oct":if("string"!=typeof e.k||!e.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==e.ext),i?xR({...e,alg:t,ext:!1}):XR(e.k);case"RSA":if(void 0!==e.oth)throw new SR('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return xR({...e,alg:t});default:throw new SR('Unsupported "kty" (Key Type) Parameter value')}}({...c,ext:!0},i);if(e instanceof Uint8Array||"public"!==e.type)throw new YR("JSON Web Key Set members must be public keys");r[i]=e}return r[i]}}var nS={exports:{}},lS={exports:{}},oS=n(oR);
454
432
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
455
- !function(t,e){var n=zP,r=n.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function c(t,e,n){return r(t,e,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=c),c.prototype=Object.create(r.prototype),i(r,c),c.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return r(t,e,n)},c.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=r(t);return void 0!==e?"string"==typeof n?i.fill(e,n):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return r(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}}(FP,FP.exports);var BP=65536,jP=4294967295;var MP=FP.exports.Buffer,QP=e.crypto||e.msCrypto;QP&&QP.getRandomValues?AP.exports=function(t,e){if(t>jP)throw new RangeError("requested too many random bytes");var n=MP.allocUnsafe(t);if(t>0)if(t>BP)for(var r=0;r<t;r+=BP)QP.getRandomValues(n.slice(r,r+BP));else QP.getRandomValues(n);if("function"==typeof e)return aj.nextTick((function(){e(null,n)}));return n}:AP.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var PP=AP.exports,EP=function(){function t(){s(this,t)}return m(t,[{key:"base64URLEncode",value:function(t){return kQ.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}},{key:"base64URLDecode",value:function(t){return kQ.decode(t).toString()}},{key:"hashSha256",value:function(t){return zM.from(TQ((new TextEncoder).encode(t)))}},{key:"generateRandomBytes",value:function(t){return PP(t)}},{key:"verifyJwt",value:function(t,e,n,r,i,c,a){return function(t,e,n){return kP.apply(this,arguments)}(t,(o={keys:[e]},wP.prototype.getKey.bind(new wP(o))),{algorithms:n,audience:r,clockTolerance:a,issuer:i,subject:c}).then((function(){return Promise.resolve(!0)}));var o}}]),t}(),DP=function(e){switch(e){case t.Storage.LocalStorage:return new vM;case t.Storage.SessionStorage:return new YM;case t.Storage.BrowserMemory:return new CM;default:return new YM}},OP=function(e,n){return TF(void 0,void 0,void 0,a().mark((function r(){var i,c,o,l,u,s,d,m,h,b,Z,p,I,y,g,X,G,f,V,W,v,C,Y,S,R,K,L,N,J,H,x,k,U,T,w,A,F,z,B,j,M,Q,P;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return c=DP(e.storage),o=new EP,l=new ez(c,o),r.next=5,l.initialize(e);case 5:return u=new hB(l),s=l.getDataLayer(),r.next=9,pB((function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getSignOutURL());case 1:case"end":return t.stop()}}),t)})))}),null!==(i=e.storage)&&void 0!==i?i:t.Storage.SessionStorage,(function(t){return s.setSessionDataParameter(jF,null!=t?t:"")}));case 9:if(d=r.sent,m=n(l,u),h=!1,b=WM.getInstance(),Z=!0,y=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=Object.assign({attachToken:!0},t)).attachToken){e.next=23;break}if(!n.shouldAttachIDPAccessToken){e.next=14;break}return e.t0=Object,e.t1=Object.assign({},t.headers),e.t2="Bearer ",e.next=8,m.getIDPAccessToken();case 8: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),e.next=23;break;case 14:return e.t6=Object,e.t7=Object.assign({},t.headers),e.t8="Bearer ",e.next=19,m.getAccessToken();case 19:e.t9=e.sent,e.t10=e.t8.concat.call(e.t8,e.t9),e.t11={Authorization:e.t10},t.headers=e.t6.assign.call(e.t6,e.t7,e.t11);case 23:case"end":return e.stop()}}),e)})))},r.t0=null==b?void 0:b.init,!r.t0){r.next=19;break}return r.next=19,b.init(!0,y);case 19:return g=function(t){(null==b?void 0:b.setHttpRequestStartCallback)&&b.setHttpRequestStartCallback(t)},X=function(t){(null==b?void 0:b.setHttpRequestSuccessCallback)&&b.setHttpRequestSuccessCallback(t)},G=function(t){(null==b?void 0:b.setHttpRequestFinishCallback)&&b.setHttpRequestFinishCallback(t)},f=function(t){p=t},V=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.httpRequest(b,t,Z,p,I);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},W=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.httpRequestAll(t,b,Z,p,I);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},v=function(){return b},C=function(){return m.enableHttpHandler(b),Z=!0,!0},Y=function(){return m.disableHttpHandler(b),Z=!1,!0},S=function(){return TF(void 0,void 0,void 0,a().mark((function t(){var e,n;return a().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,s.getConfigData();case 5:n=t.sent,m.initializeSessionManger(n,e,(function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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 TF(void 0,void 0,void 0,a().mark((function e(){return a().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)})))}),d);case 7:case"end":return t.stop()}}),t)})))},R=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,d.receivePromptNoneResponse((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.setSessionDataParameter(jF,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)})))},K=function(n,r,i,c){return TF(void 0,void 0,void 0,a().mark((function o(){var u,s,d,h,b,Z,p;return a().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,m.handleSignIn(R,S);case 2:if(!(h=o.sent)){o.next=7;break}return o.abrupt("return",h);case 7:if((null==e?void 0:e.responseMode)===t.ResponseMode.formPost&&r?(b=r,Z=null!=i?i:"",p=null!=c?c:""):(b=null!==(u=new URL(window.location.href).searchParams.get(BF))&&void 0!==u?u:"",Z=null!==(s=new URL(window.location.href).searchParams.get(jF))&&void 0!==s?s:"",p=null!==(d=new URL(window.location.href).searchParams.get(PF))&&void 0!==d?d:"",ZB.removeAuthorizationCode()),!b||!p){o.next=10;break}return o.abrupt("return",k(b,Z,p));case 10:return o.abrupt("return",l.getAuthorizationURL(n).then((function(n){return TF(void 0,void 0,void 0,a().mark((function r(){var i;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(e.storage!==t.Storage.BrowserMemory||!e.enablePKCE){r.next=8;break}return i=DF.extractPKCEKeyFromStateParam(p),r.t0=ZB,r.t1=i,r.next=6,l.getPKCECode(p);case 6:r.t2=r.sent,r.t0.setPKCE.call(r.t0,r.t1,r.t2);case 8:return location.href=n,r.next=11,ZB.waitTillPageRedirect();case 11:return r.abrupt("return",Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""}));case 12:case"end":return r.stop()}}),r)})))})));case 11:case"end":return o.stop()}}),o)})))},L=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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.getSignOutURL();case 8:location.href=t.sent,t.next=18;break;case 11:return location.href=ZB.getSignOutURL(),t.next=14,s.removeOIDCProviderMetaData();case 14:return t.next=16,s.removeTemporaryData();case 16:return t.next=18,s.removeSessionData();case 18:return u.clearRefreshTokenTimeout(),t.next=21,ZB.waitTillPageRedirect();case 21:return t.abrupt("return",!0);case 22:case"end":return t.stop()}}),t)})))},N=function(t){t.preventSignOutURLUpdate&&(h=!0)},J=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().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)})))},H=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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 d.reset(),u.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},k=function(t,e,n){return TF(void 0,void 0,void 0,a().mark((function r(){return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,m.requestAccessToken(t,e,S,void 0,n);case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}}),r)})))},U=function(){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r,i,c,o;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.getConfigData();case 2:return n=e.sent,e.next=5,l.getAuthorizationURL({prompt:"none",state:iB});case 5:if(r=e.sent,(i=new URL(r)).searchParams.set("response_mode","query"),c=i.toString(),n.storage!==t.Storage.BrowserMemory||!n.enablePKCE){e.next=17;break}return o=i.searchParams.get(PF),e.t0=ZB,e.t1=DF.extractPKCEKeyFromStateParam(null!=o?o:""),e.next=15,l.getPKCECode(null!=o?o:"");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)})))},T=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,m.trySignInSilently(U,k,d);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},w=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},A=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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 TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getCryptoHelper());case 1:case"end":return t.stop()}}),t)})))},z=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},B=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},j=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},M=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",m.getDataLayer());case 1:case"end":return t.stop()}}),t)})))},Q=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},P=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r,i;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,s.getConfigData();case 2:return n=e.sent,r=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),t),e.next=7,l.updateConfig(i);case 7:i.enableOIDCSessionManagement&&r&&(d.reset(),S());case 8:case"end":return e.stop()}}),e)})))},r.abrupt("return",{disableHttpHandler:Y,enableHttpHandler:C,getAccessToken:j,getBasicUserInfo:w,getCryptoHelper:F,getDataLayer:M,getDecodedIDToken:A,getHttpClient:v,getIDToken:z,getOIDCServiceEndpoints:B,httpRequest:V,httpRequestAll:W,isAuthenticated:Q,refreshAccessToken:H,requestCustomGrant:J,revokeAccessToken:x,setHttpRequestErrorCallback:f,setHttpRequestFinishCallback:G,setHttpRequestStartCallback:g,setHttpRequestSuccessCallback:X,signIn:K,signOut:L,trySignInSilently:T,updateConfig:P});case 49:case"end":return r.stop()}}),r)})))},_P=function(e){switch(e){case t.Storage.LocalStorage:return new vM;case t.Storage.SessionStorage:return new YM;case t.Storage.BrowserMemory:return new CM;default:return new YM}},qP=function(e,n,r){return TF(void 0,void 0,void 0,a().mark((function i(){var c,o,l,u,s,d,m,h,b,Z,p,I,y,g,X,G,f,V,W,v,C,Y,S,R,K,L,N,J,H,x,k,U,T,w,A,F,z,B,j,M,Q,P,E,D,O;return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return l=null!==(c=null==e?void 0:e.requestTimeout)&&void 0!==c?c:6e4,u=!0,s=!1,d=_P(e.storage),m=new EP,h=new ez(d,m),i.next=8,h.initialize(e);case 8:return b=new hB(h),i.next=11,pB((function(){return TF(void 0,void 0,void 0,a().mark((function t(){var e,n;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e={type:dz},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",ZB.getSignOutURL());case 11:case"end":return t.stop()}}),t,null,[[1,8]])})))}),e.storage,(function(t){return v(t)}));case 11:return Z=i.sent,p=r(h,b),I=new n,y=function(t){var e=new MessageChannel;return I.postMessage(t,[e.port2]),new Promise((function(t,n){var r=setTimeout((function(){n(new EF("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 i=e.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),t(c)}else n(i.error?JSON.parse(i.error):null)}}))},g=function(t){return y({data:t,type:bz}).then((function(e){return t.preventSignOutURLUpdate&&(s=!0),Promise.resolve(e)})).catch((function(t){return Promise.reject(t)}))},X=function(t){return y({data:t,type:mz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u){e.next=5;break}if("function"!=typeof o.requestErrorCallback){e.next=4;break}return e.next=4,o.requestErrorCallback(t);case 4:"function"==typeof o.requestFinishCallback&&o.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:hz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!u){e.next=5;break}if("function"!=typeof o.requestErrorCallback){e.next=4;break}return e.next=4,o.requestErrorCallback(t);case 4:"function"==typeof o.requestFinishCallback&&o.requestFinishCallback();case 5:return e.abrupt("return",Promise.reject(t));case 6:case"end":return e.stop()}}),e)})))}))},f=function(){return y({type:Vz}).then((function(){return u=!0,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},V=function(){return y({type:Wz}).then((function(){return u=!1,Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},W=function(){return o||(o={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 yz:(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case pz:(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case Iz:(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(e.data?JSON.parse(e.data):null))}},y({data:e,type:sz}).then((function(){return Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},v=function(t){return y({data:t,type:Kz})},C=function(){return y({type:Lz})},Y=function(){return TF(void 0,void 0,void 0,a().mark((function t(){var e,n;return a().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,p.initializeSessionManger(n,e,(function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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 TF(void 0,void 0,void 0,a().mark((function e(){return a().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)})))}),Z);case 7:case"end":return t.stop()}}),t)})))},S=function(){return TF(void 0,void 0,void 0,a().mark((function t(){var e,n,r,i,c,o,l,u;return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,T();case 2:return n=t.sent,r={data:{prompt:"none",state:iB},type:vz},t.next=6,y(r);case 6:return i=t.sent,c=DF.extractPKCEKeyFromStateParam(null!==(e=new URL(i.authorizationURL).searchParams.get(PF))&&void 0!==e?e:""),i.pkce&&n.enablePKCE&&ZB.setPKCE(c,i.pkce),o=i.authorizationURL,(l=new URL(o)).searchParams.set("response_mode","query"),u=l.toString(),t.abrupt("return",u);case 14:case"end":return t.stop()}}),t)})))},R=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,p.trySignInSilently(S,L,Z);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})))},K=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T();case 2:return n=e.sent,r={data:t,type:vz},e.abrupt("return",y(r).then((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var r,i;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.pkce&&n.enablePKCE&&(i=DF.extractPKCEKeyFromStateParam(null!==(r=new URL(t.authorizationURL).searchParams.get(PF))&&void 0!==r?r:""),ZB.setPKCE(i,t.pkce)),e.abrupt("return",Promise.resolve(t));case 2:case"end":return e.stop()}}),e)})))})));case 5:case"end":return e.stop()}}),e)})))},L=function(t,e,n){return TF(void 0,void 0,void 0,a().mark((function r(){var i,c,o;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,T();case 2:return i=r.sent,c=DF.extractPKCEKeyFromStateParam(n),o={data:{code:t,pkce:i.enablePKCE?ZB.getPKCE(c):void 0,sessionState:e,state:n},type:Cz},i.enablePKCE&&ZB.removePKCE(c),r.abrupt("return",y(o).then((function(t){return y({type:Sz}).then((function(e){return ZB.setSignOutURL(e),i.enableOIDCSessionManagement&&Y(),C(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))})).catch((function(t){return Promise.reject(t)})));case 7:case"end":return r.stop()}}),r)})))},N=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Z.receivePromptNoneResponse((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().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 TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,j();case 2:if(!t.sent){t.next=7;break}return t.next=5,C();case 5:return e.enableOIDCSessionManagement&&Y(),t.abrupt("return",w());case 7:case"end":return t.stop()}}),t)})))},H=function(n,r,i,c){return TF(void 0,void 0,void 0,a().mark((function o(){var l,u,s,d,m,h,b;return a().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,p.handleSignIn(N,Y,J);case 2:if(!(d=o.sent)){o.next=7;break}return o.abrupt("return",d);case 7:if((null==e?void 0:e.responseMode)===t.ResponseMode.formPost&&r?(m=r,h=null!=i?i:"",b=null!=c?c:""):(m=null!==(l=new URL(window.location.href).searchParams.get(BF))&&void 0!==l?l:"",h=null!==(u=new URL(window.location.href).searchParams.get(jF))&&void 0!==u?u:"",b=null!==(s=new URL(window.location.href).searchParams.get(PF))&&void 0!==s?s:"",ZB.removeAuthorizationCode()),!m||!b){o.next=10;break}return o.abrupt("return",L(m,h,b));case 10:return o.abrupt("return",K(n).then((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return location.href=t.authorizationURL,e.next=3,ZB.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 o.stop()}}),o)})))},x=function(){return j().then((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t||s){e.next=5;break}return n={type:dz},e.abrupt("return",y(n).then((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return window.location.href=t,e.next=3,ZB.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=ZB.getSignOutURL(),e.next=8,ZB.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:Zz}).then((function(t){return Z.reset(),Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},U=function(){return y({type:gz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},T=function(){return y({type:kz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},w=function(){return y({type:Xz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},A=function(){return y({type:Gz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},F=function(){return y({type:"get-decoded-idp-id-token"}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},z=function(){return y({type:fz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},B=function(){return y({type:Jz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},j=function(){return y({type:Yz}).then((function(t){return Promise.resolve(t)})).catch((function(t){return Promise.reject(t)}))},M=function(){return y({type:Rz})},Q=function(t){t&&"function"==typeof t&&(o.requestSuccessCallback=t)},P=function(t){t&&"function"==typeof t&&(o.requestErrorCallback=t)},E=function(t){t&&"function"==typeof t&&(o.requestStartCallback=t)},D=function(t){t&&"function"==typeof t&&(o.requestFinishCallback=t)},O=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r,i,c;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T();case 2:return n=e.sent,r=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),t),c={data:i,type:Nz},e.next=8,y(c);case 8:i.enableOIDCSessionManagement&&r&&(Z.reset(),Y());case 9:case"end":return e.stop()}}),e)})))},i.abrupt("return",{disableHttpHandler:V,enableHttpHandler:f,getBasicUserInfo:w,getCryptoHelper:z,getDecodedIDPIDToken:F,getDecodedIDToken:A,getIDToken:B,getOIDCServiceEndpoints:U,httpRequest:X,httpRequestAll:G,initialize:W,isAuthenticated:j,refreshAccessToken:M,requestCustomGrant:g,revokeAccessToken:k,setHttpRequestErrorCallback:P,setHttpRequestFinishCallback:D,setHttpRequestStartCallback:E,setHttpRequestSuccessCallback:Q,signIn:H,signOut:x,trySignInSilently:R,updateConfig:O});case 48:case"end":return i.stop()}}),i)})))},$P={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:t.Storage.SessionStorage},tE="primaryInstance",eE=function(){function e(t){s(this,e),this._authHelper=mB,this._worker=uz,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||mB}},{key:"instantiateWorker",value:function(t){this._worker=t||uz}},{key:"_isInitialized",value:function(){return TF(this,void 0,void 0,a().mark((function t(){var e,n;return a().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 TF(this,void 0,void 0,a().mark((function t(){return a().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)})))}
456
- /**
457
- * This method returns the instance of the singleton class.
458
- *
459
- * @return {AsgardeoSPAClient} - Returns the instance of the singleton class.
460
- *
461
- * @example
462
- * ```
463
- * const auth = AsgardeoSPAClient.getInstance();
464
- * ```
465
- *
466
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getinstance
467
- *
468
- * @memberof AsgardeoSPAClient
469
- *
470
- * @preserve
471
- */},{key:"initialize",value:
472
- /**
473
- * This method initializes the `AsgardeoSPAClient` instance.
474
- *
475
- * @param {ConfigInterface} config The config object to initialize with.
476
- *
477
- * @return {Promise<boolean>} - Resolves to `true` if initialization is successful.
478
- *
479
- * @example
480
- * ```
481
- * auth.initialize({
482
- * signInRedirectURL: "http://localhost:3000/sign-in",
483
- * clientID: "client ID",
484
- * baseUrl: "https://api.asgardeo.io"
485
- * });
486
- * ```
487
- *
488
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#initialize
489
- *
490
- * @memberof AsgardeoSPAClient
491
- *
492
- * @preserve
493
- */
494
- function(e,n,r){var i;return TF(this,void 0,void 0,a().mark((function c(){var o,l,u,s=this;return a().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:if(this._storage=null!==(i=e.storage)&&void 0!==i?i:t.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,n&&this.instantiateAuthHelper(n),r&&this.instantiateWorker(r),this._storage===t.Storage.WebWorker){c.next=17;break}if(this._client){c.next=12;break}return o=e,l=Object.assign({},$P),c.next=11,OP(Object.assign(Object.assign({},l),o),(function(t,e){return new s._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,qP(Object.assign(Object.assign({},$P),u),this._worker,(function(t,e){return new s._authHelper(t,e)}));case 21:return this._client=c.sent,c.abrupt("return",this._client.initialize().then((function(){return s._onInitialize&&s._onInitialize(!0),s._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)})))}
495
- /**
496
- * This method returns a Promise that resolves with the basic user information obtained from the ID token.
497
- *
498
- * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
499
- *
500
- * @example
501
- * ```
502
- * auth.getBasicUserInfo().then((response) => {
503
- * // console.log(response);
504
- * }).catch((error) => {
505
- * // console.error(error);
506
- * });
507
- * ```
508
- *
509
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getuserinfo
510
- *
511
- * @memberof AsgardeoSPAClient
512
- *
513
- * @preserve
514
- */},{key:"getBasicUserInfo",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
515
- /**
516
- * This method initiates the authentication flow. This should be called twice.
517
- * 1. To initiate the authentication flow.
518
- * 2. To obtain the access token after getting the authorization code.
519
- *
520
- * To satisfy the second condition, one of the two strategies mentioned below can be used:
521
- * 1. Redirect the user back to the same login page that initiated the authentication flow.
522
- * 2. Call the `signIn()` method in the page the user is redirected to after authentication.
523
- *
524
- * **To fire a callback function after signing in, use the `on()` method.**
525
- * **To learn more about the `on()` method:**
526
- * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
527
- *
528
- * @param {SignInConfig} config - The sign-in config.
529
- * The `SignInConfig` object has these two attributes in addition to any custom key-value pairs.
530
- * 1. fidp - Specifies the FIDP parameter that is used to take the user directly to an IdP login page.
531
- * 2. forceInit: Specifies if the OIDC Provider Meta Data should be loaded again from the `well-known`
532
- * endpoint.
533
- * 3. Any other parameters that should be appended to the authorization request.
534
- * @param {string} authorizationCode - The authorization code. (Optional)
535
- * @param {string} sessionState - The session state. (Optional)
536
- * @param {string} state - The state. (Optional)
537
- *
538
- * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
539
- *
540
- * @example
541
- * ```
542
- * auth.signIn();
543
- * ```
544
- *
545
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signin
546
- *
547
- * @memberof AsgardeoSPAClient
548
- *
549
- * @preserve
550
- */},{key:"signIn",value:function(t,e,n,r){var i;return TF(this,void 0,void 0,a().mark((function c(){var o=this;return a().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return c.next=2,this._isInitialized();case 2:if(ZB.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===(i=this._client)||void 0===i?void 0:i.signIn(t,e,n,r).then((function(t){return o._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&o._onSignInCallback(t),t})));case 6:case"end":return c.stop()}}),c,this)})))}},{key:"trySignInSilently",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){var n=this;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._isInitialized();case 2:if(!ZB.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)})))}
551
- /**
552
- * This method initiates the sign-out flow.
553
- *
554
- * **To fire a callback function after signing out, use the `on()` method.**
555
- * **To learn more about the `on()` method:**
556
- * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
557
- *
558
- * @return {Promise<boolean>} - Returns a promise that resolves with `true` if sign out is successful.
559
- *
560
- * @example
561
- * ```
562
- * auth.signOut();
563
- * ```
564
- *
565
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signout
566
- *
567
- * @memberof AsgardeoSPAClient
568
- *
569
- * @preserve
570
- */},{key:"signOut",value:function(){var t,e;return TF(this,void 0,void 0,a().mark((function n(){var r;return a().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 r=n.t2,n.abrupt("return",r);case 15:case"end":return n.stop()}}),n,this)})))}
571
- /**
572
- * This method sends an API request to a protected endpoint.
573
- * The access token is automatically attached to the header of the request.
574
- * This is the only way by which protected endpoints can be accessed
575
- * when the web worker is used to store session information.
576
- *
577
- * @param {HttpRequestConfig} config - The config object containing attributes necessary to send a request.
578
- *
579
- * @return {Promise<HttpResponse>} - Returns a Promise that resolves with the response to the request.
580
- *
581
- * @example
582
- * ```
583
- * const requestConfig = {
584
- * headers: {
585
- * "Accept": "application/json",
586
- * "Access-Control-Allow-Origin": "https://api.asgardeo.io/myaccount",
587
- * "Content-Type": "application/scim+json"
588
- * },
589
- * method: "GET",
590
- * url: "https://api.asgardeo.io/scim2/me"
591
- * };
592
- *
593
- * return auth.httpRequest(requestConfig)
594
- * .then((response) => {
595
- * // console.log(response);
596
- * })
597
- * .catch((error) => {
598
- * // console.error(error);
599
- * });
600
- * ```
601
- *
602
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequest
603
- *
604
- * @memberof AsgardeoSPAClient
605
- *
606
- * @preserve
607
- */},{key:"httpRequest",value:function(t){var e;return TF(this,void 0,void 0,a().mark((function n(){return a().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)})))}
608
- /**
609
- * This method sends multiple API requests to a protected endpoint.
610
- * The access token is automatically attached to the header of the request.
611
- * This is the only way by which multiple requests can be sent to protected endpoints
612
- * when the web worker is used to store session information.
613
- *
614
- * @param {HttpRequestConfig[]} config - The config object containing attributes necessary to send a request.
615
- *
616
- * @return {Promise<HttpResponse[]>} - Returns a Promise that resolves with the responses to the requests.
617
- *
618
- * @example
619
- * ```
620
- * const requestConfig = {
621
- * headers: {
622
- * "Accept": "application/json",
623
- * "Content-Type": "application/scim+json"
624
- * },
625
- * method: "GET",
626
- * url: "https://api.asgardeo.io/scim2/me"
627
- * };
628
- *
629
- * const requestConfig2 = {
630
- * headers: {
631
- * "Accept": "application/json",
632
- * "Content-Type": "application/scim+json"
633
- * },
634
- * method: "GET",
635
- * url: "https://api.asgardeo.io/scim2/me"
636
- * };
637
- *
638
- * return auth.httpRequest([requestConfig, requestConfig2])
639
- * .then((responses) => {
640
- * response.forEach((response)=>{
641
- * // console.log(response);
642
- * });
643
- * })
644
- * .catch((error) => {
645
- * // console.error(error);
646
- * });
647
- * ```
648
- *
649
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequestall
650
- *
651
- * @memberof AsgardeoSPAClient
652
- *
653
- * @preserve
654
- */},{key:"httpRequestAll",value:function(t){var e;return TF(this,void 0,void 0,a().mark((function n(){return a().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)})))}
655
- /**
656
- * This method allows you to send a request with a custom grant.
657
- *
658
- * @param {CustomGrantRequestParams} config - The request parameters.
659
- *
660
- * @return {Promise<HttpResponse<any> | SignInResponse>} - A Promise that resolves with
661
- * the value returned by the custom grant request.
662
- *
663
- * @example
664
- * ```
665
- * auth.customGrant({
666
- * attachToken: false,
667
- * data: {
668
- * client_id: "{{clientId}}",
669
- * grant_type: "account_switch",
670
- * scope: "{{scope}}",
671
- * token: "{{token}}",
672
- * },
673
- * id: "account-switch",
674
- * returnResponse: true,
675
- * returnsSession: true,
676
- * signInRequired: true
677
- * });
678
- * ```
679
- *
680
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#customgrant
681
- *
682
- * @memberof AsgardeoSPAClient
683
- *
684
- * @preserve
685
- */},{key:"requestCustomGrant",value:function(t){var e,n;return TF(this,void 0,void 0,a().mark((function r(){var i,c;return a().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(!t.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(t.id){r.next=9;break}return r.abrupt("return",Promise.reject(new EF("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===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t);case 11:return i=r.sent,(c=this._onCustomGrant.get(t.id))&&c(null===(n=this._onCustomGrant)||void 0===n?void 0:n.get(t.id)),r.abrupt("return",i);case 15:case"end":return r.stop()}}),r,this)})))}
686
- /**
687
- * This method ends a user session. The access token is revoked and the session information is destroyed.
688
- *
689
- * **To fire a callback function after ending user session, use the `on()` method.**
690
- * **To learn more about the `on()` method:**
691
- * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
692
- *
693
- * @return {Promise<boolean>} - A promise that resolves with `true` if the process is successful.
694
- *
695
- * @example
696
- * ```
697
- * auth.endUserSession();
698
- * ```
699
- *
700
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#endusersession
701
- *
702
- * @memberof AsgardeoSPAClient
703
- *
704
- * @preserve
705
- */},{key:"revokeAccessToken",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){var n;return a().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)})))}
706
- /**
707
- * This method returns a Promise that resolves with an object containing the service endpoints.
708
- *
709
- * @return {Promise<ServiceResourcesType} - A Promise that resolves with an object containing the service endpoints.
710
- *
711
- * @example
712
- * ```
713
- * auth.getServiceEndpoints().then((endpoints) => {
714
- * // console.log(endpoints);
715
- * }).error((error) => {
716
- * // console.error(error);
717
- * });
718
- * ```
719
- *
720
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getserviceendpoints
721
- *
722
- * @memberof AsgardeoSPAClient
723
- *
724
- * @preserve
725
- */},{key:"getOIDCServiceEndpoints",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
726
- /**
727
- * This methods returns the Axios http client.
728
- *
729
- * @return {HttpClientInstance} - The Axios HTTP client.
730
- *
731
- * @memberof AsgardeoSPAClient
732
- *
733
- * @preserve
734
- */},{key:"getHttpClient",value:function(){if(this._client){if(this._storage!==t.Storage.WebWorker)return this._client.getHttpClient();throw new EF("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 EF("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.")}
735
- /**
736
- * This method decodes the payload of the id token and returns it.
737
- *
738
- * @return {Promise<DecodedIdTokenPayloadInterface>} - A Promise that resolves with
739
- * the decoded payload of the id token.
740
- *
741
- * @example
742
- * ```
743
- * auth.getDecodedIDToken().then((response)=>{
744
- * // console.log(response);
745
- * }).catch((error)=>{
746
- * // console.error(error);
747
- * });
748
- * ```
749
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdecodedidtoken
750
- *
751
- * @memberof AsgardeoSPAClient
752
- *
753
- * @preserve
754
- */},{key:"getDecodedIDToken",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
755
- /**
756
- * This method returns the CryptoHelper instance.
757
- *
758
- * @return {Promise<DecodedIdTokenPayloadInterface>} - A Promise that resolves with
759
- * the CryptoHelper instance.
760
- *
761
- * @example
762
- * ```
763
- * auth.getCryptoHelper().then((response)=>{
764
- * // console.log(response);
765
- * }).catch((error)=>{
766
- * // console.error(error);
767
- * });
768
- * ```
769
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getCryptoHelper
770
- *
771
- * @memberof AsgardeoSPAClient
772
- *
773
- * @preserve
774
- */},{key:"getCryptoHelper",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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.getCryptoHelper());case 3:case"end":return e.stop()}}),e,this)})))}
775
- /**
776
- * This method return the ID token.
777
- *
778
- * @return {Promise<string>} - A Promise that resolves with the ID token.
779
- *
780
- * @example
781
- * ```
782
- * const idToken = await auth.getIDToken();
783
- * ```
784
- *
785
- * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
786
- *
787
- * @memberof AsgardeoAuthClient
788
- *
789
- * @preserve
790
- */},{key:"getIDToken",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
791
- /**
792
- * This method return a Promise that resolves with the access token.
793
- *
794
- * **This method will not return the access token if the storage type is set to `webWorker`.**
795
- *
796
- * @return {Promise<string>} - A Promise that resolves with the access token.
797
- *
798
- * @example
799
- * ```
800
- * auth.getAccessToken().then((token) => {
801
- * // console.log(token);
802
- * }).catch((error) => {
803
- * // console.error(error);
804
- * });
805
- * ```
806
- *
807
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
808
- *
809
- * @memberof AsgardeoSPAClient
810
- *
811
- * @preserve
812
- */},{key:"getAccessToken",value:function(){return TF(this,void 0,void 0,a().mark((function e(){var n;return a().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 EF("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)})))}
813
- /**
814
- * This method return a Promise that resolves with the idp access token.
815
- *
816
- * **This method will not return the access token if the storage type is set to `webWorker`.**
817
- *
818
- * @return {Promise<string>} - A Promise that resolves with the idp access token.
819
- *
820
- * @example
821
- * ```
822
- * auth.getIDPAccessToken().then((token) => {
823
- * // console.log(token);
824
- * }).catch((error) => {
825
- * // console.error(error);
826
- * });
827
- * ```
828
- *
829
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
830
- *
831
- * @memberof AsgardeoSPAClient
832
- *
833
- * @preserve
834
- */},{key:"getIDPAccessToken",value:function(){return TF(this,void 0,void 0,a().mark((function e(){var n;return a().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 EF("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")));case 4:return n=this._client,e.abrupt("return",n.getAccessToken());case 6:case"end":return e.stop()}}),e,this)})))}
835
- /**
836
- * This method return a Promise that resolves with the data layer object.
837
- *
838
- * **This method will not return the data layer object, if the storage type is set to `webWorker`.**
839
- *
840
- * @return {Promise<string>} - A Promise that resolves with the data layer object.
841
- *
842
- * @example
843
- * ```
844
- * auth.getDataLayer().then((dataLayer) => {
845
- * // console.log(dataLayer);
846
- * }).catch((error) => {
847
- * // console.error(error);
848
- * });
849
- * ```
850
- *
851
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdatalayer
852
- *
853
- * @memberof AsgardeoSPAClient
854
- *
855
- * @preserve
856
- */},{key:"getDataLayer",value:function(){return TF(this,void 0,void 0,a().mark((function e(){var n;return a().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 EF("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory.")));case 4:return n=this._client,e.abrupt("return",n.getDataLayer());case 6:case"end":return e.stop()}}),e,this)})))}
857
- /**
858
- * This method refreshes the access token.
859
- *
860
- * @return {TokenResponseInterface} - A Promise that resolves with an object containing
861
- * information about the refreshed access token.
862
- *
863
- * @example
864
- * ```
865
- * auth.refreshToken().then((response)=>{
866
- * // console.log(response);
867
- * }).catch((error)=>{
868
- * // console.error(error);
869
- * });
870
- * ```
871
- *
872
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#refreshtoken
873
- *
874
- * @memberof AsgardeoSPAClient
875
- *
876
- * @preserve
877
- */},{key:"refreshAccessToken",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
878
- /**
879
- * This method specifies if the user is authenticated or not.
880
- *
881
- * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated.
882
- *
883
- * @memberof AsgardeoSPAClient
884
- *
885
- * @preserve
886
- */},{key:"isAuthenticated",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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,r){var i,c,o,l;return TF(this,void 0,void 0,a().mark((function u(){var s;return a().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return a.next=2,this._isInitialized();case 2:if(!n||"function"!=typeof n){a.next=35;break}a.t0=e,a.next=a.t0===t.Hooks.SignIn?6:a.t0===t.Hooks.SignOut?8:a.t0===t.Hooks.RevokeAccessToken?14:a.t0===t.Hooks.Initialize?16:a.t0===t.Hooks.HttpRequestError?18:a.t0===t.Hooks.HttpRequestFinish?20:a.t0===t.Hooks.HttpRequestStart?22:a.t0===t.Hooks.HttpRequestSuccess?24:a.t0===t.Hooks.CustomGrant?26:a.t0===t.Hooks.SignOutFailed?28:32;break;case 6:return this._onSignInCallback=n,a.abrupt("break",33);case 8:return this._onSignOutCallback=n,a.next=11,ZB.isSignOutSuccessful();case 11:if(!a.sent){a.next=13;break}this._onSignOutCallback();case 13:return a.abrupt("break",33);case 14:return this._onEndUserSession=n,a.abrupt("break",33);case 16:return this._onInitialize=n,a.abrupt("break",33);case 18:return null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(n),a.abrupt("break",33);case 20:return null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n),a.abrupt("break",33);case 22:return null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(n),a.abrupt("break",33);case 24:return null===(l=this._client)||void 0===l||l.setHttpRequestSuccessCallback(n),a.abrupt("break",33);case 26:return r&&this._onCustomGrant.set(r,n),a.abrupt("break",33);case 28:return this._onSignOutFailedCallback=n,(s=ZB.didSignOutFail())&&this._onSignOutFailedCallback(s),a.abrupt("break",33);case 32:throw new EF("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.");case 33:a.next=36;break;case 35:throw new EF("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");case 36:case"end":return a.stop()}}),u,this)})))}
887
- /**
888
- * This method enables callback functions attached to the http client.
889
- *
890
- * @return {Promise<boolean>} - A promise that resolves with True.
891
- *
892
- * @example
893
- * ```
894
- * auth.enableHttpHandler();
895
- * ```
896
- *
897
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#enableHttpHandler
898
- *
899
- * @memberof AsgardeoSPAClient
900
- *
901
- * @preserve
902
- */},{key:"enableHttpHandler",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
903
- /**
904
- * This method disables callback functions attached to the http client.
905
- *
906
- * @return {Promise<boolean>} - A promise that resolves with True.
907
- *
908
- * @example
909
- * ```
910
- * auth.disableHttpHandler();
911
- * ```
912
- *
913
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#disableHttpHandler
914
- *
915
- * @memberof AsgardeoSPAClient
916
- *
917
- * @preserve
918
- */},{key:"disableHttpHandler",value:function(){var t;return TF(this,void 0,void 0,a().mark((function e(){return a().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)})))}
919
- /**
920
- * This method updates the configuration that was passed into the constructor when instantiating this class.
921
- *
922
- * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
923
- *
924
- * @example
925
- * ```
926
- * const config = {
927
- * signInRedirectURL: "http://localhost:3000/sign-in",
928
- * clientID: "client ID",
929
- * baseUrl: "https://api.asgardeo.io"
930
- * }
931
- * const auth.updateConfig(config);
932
- * ```
933
- * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master/lib#updateConfig
934
- *
935
- * @memberof AsgardeoAuthClient
936
- *
937
- * @preserve
938
- */},{key:"updateConfig",value:function(e){return TF(this,void 0,void 0,a().mark((function n(){var r,i;return a().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 r=this._client,n.next=6,r.updateConfig(e);case 6:n.next=11;break;case 8:return i=this._client,n.next=11,i.updateConfig(e);case 11:return n.abrupt("return");case 12:case"end":return n.stop()}}),n,this)})))}}],[{key:"getInstance",value:function(t){var n,r;return t&&(null===(n=this._instances)||void 0===n?void 0:n.get(t))?this._instances.get(t):!t&&(null===(r=this._instances)||void 0===r?void 0:r.get(tE))?this._instances.get(tE):t?(this._instances.set(t,new e(t)),this._instances.get(t)):(this._instances.set(tE,new e(tE)),this._instances.get(tE))}}]),e}();eE._instances=new Map;var nE=function(t){b(n,t);var e=f(n);function n(){var t;return s(this,n),(t=e.apply(this,arguments)).onmessage=function(){return null},t}return m(n)}(g(Worker)),rE=function(t,e){return TF(void 0,void 0,void 0,a().mark((function n(){var r,i,c,o,l,u,s,d,m,h,b,Z,p,I,y,g,X,G,f,V,W,v,C,Y,S,R,K,L,N,J,H,x,k,U;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=new CM,i=new EP,c=new ez(r,i),n.next=5,c.initialize(t);case 5:if(o=new hB(c),l=e(c,o),u=c.getDataLayer(),s=WM.getInstance(),d=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=Object.assign({attachToken:!0},t)).attachToken){e.next=23;break}if(!n.shouldAttachIDPAccessToken){e.next=14;break}return e.t0=Object,e.t1=Object.assign({},t.headers),e.t2="Bearer ",e.next=8,l.getIDPAccessToken();case 8: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),e.next=23;break;case 14:return e.t6=Object,e.t7=Object.assign({},t.headers),e.t8="Bearer ",e.next=19,l.getAccessToken();case 19:e.t9=e.sent,e.t10=e.t8.concat.call(e.t8,e.t9),e.t11={Authorization:e.t10},t.headers=e.t6.assign.call(e.t6,e.t7,e.t11);case 23:case"end":return e.stop()}}),e)})))},n.t0=null==s?void 0:s.init,!n.t0){n.next=14;break}return n.next=14,s.init(!0,d);case 14:return m=function(t){(null==s?void 0:s.setHttpRequestStartCallback)&&s.setHttpRequestStartCallback(t)},h=function(t){(null==s?void 0:s.setHttpRequestSuccessCallback)&&s.setHttpRequestSuccessCallback(t)},b=function(t){(null==s?void 0:s.setHttpRequestFinishCallback)&&s.setHttpRequestFinishCallback(t)},Z=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.httpRequest(s,t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},p=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.httpRequestAll(t,s);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))},I=function(){l.enableHttpHandler(s)},y=function(){l.disableHttpHandler(s)},g=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",c.getAuthorizationURL(t).then((function(t){return TF(void 0,void 0,void 0,a().mark((function e(){var n,r,i,o;return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new URL(t),i=null!==(n=r.searchParams.get(PF))&&void 0!==n?n:"",e.next=4,c.getPKCECode(i);case 4:return o=e.sent,e.abrupt("return",{authorizationURL:t,pkce:o});case 6:case"end":return e.stop()}}),e)})))})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e)})))},X=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(l),t.abrupt("return");case 3:case"end":return t.stop()}}),t)})))},G=function(t,e,n,r){return TF(void 0,void 0,void 0,a().mark((function i(){return a().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,l.requestAccessToken(t,e,void 0,n,r);case 2:return i.abrupt("return",i.sent);case 3:case"end":return i.stop()}}),i)})))},f=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o.clearRefreshTokenTimeout(),t.next=3,c.getSignOutURL();case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})))},V=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},W=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().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)})))},v=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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]])})))},C=function(){return c.revokeAccessToken().then((function(){return o.clearRefreshTokenTimeout(),Promise.resolve(!0)})).catch((function(t){return Promise.reject(t)}))},Y=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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 TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},R=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getCryptoHelper());case 1:case"end":return t.stop()}}),t)})))},K=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",l.getDecodedIDPIDToken());case 1:case"end":return t.stop()}}),t)})))},L=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},N=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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)})))},J=function(){return l.getAccessToken()},H=function(){return l.isAuthenticated()},x=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u.setSessionDataParameter(jF,t);case 2:return e.abrupt("return");case 3:case"end":return e.stop()}}),e)})))},k=function(t){return TF(void 0,void 0,void 0,a().mark((function e(){return a().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)})))},U=function(){return TF(void 0,void 0,void 0,a().mark((function t(){return a().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:y,enableHttpHandler:I,getAccessToken:J,getAuthorizationURL:g,getBasicUserInfo:Y,getConfigData:U,getCryptoHelper:R,getDecodedIDPIDToken:K,getDecodedIDToken:S,getIDToken:L,getOIDCServiceEndpoints:N,getSignOutURL:V,httpRequest:Z,httpRequestAll:p,isAuthenticated:H,refreshAccessToken:v,requestAccessToken:G,requestCustomGrant:W,revokeAccessToken:C,setHttpRequestFinishCallback:b,setHttpRequestStartCallback:m,setHttpRequestSuccessCallback:h,setSessionState:x,signOut:f,startAutoRefreshToken:X,updateConfig:k});case 41:case"end":return n.stop()}}),n)})))};t.AUTHORIZATION_CODE=BF,t.AsgardeoAuthClient=ez,t.AsgardeoAuthException=EF,t.AsgardeoSPAClient=eE,t.AuthenticationHelper=mB,t.AuthenticationUtils=DF,t.CLAIM_VALIDATION_ERROR="ERR_JWT_CLAIM_VALIDATION_FAILED",t.CLIENT_ID_TAG="{{clientID}}",t.CLIENT_SECRET_TAG="{{clientSecret}}",t.CryptoHelper=_F,t.DataLayer=$F,t.MainThreadClient=OP,t.NBF_CLAIM="nbf",t.OIDC_SCOPE="openid",t.PKCE_CODE_VERIFIER="pkce_code_verifier",t.PKCE_SEPARATOR="#",t.REFRESH_TOKEN_TIMER=FF,t.SCOPE_TAG="{{scope}}",t.SESSION_STATE=jF,t.SIGN_OUT_SUCCESS_PARAM=QF,t.SIGN_OUT_URL=MF,t.SPAHelper=hB,t.SPAUtils=ZB,t.STATE=PF,t.SUPPORTED_SIGNATURE_ALGORITHMS=zF,t.TOKEN_TAG="{{token}}",t.USERNAME_TAG="{{username}}",t.WebWorkerClass=nE,t.WebWorkerClient=qP,t.workerReceiver=function(t){var e,n=self;n.onmessage=function(n){var o=n.data,l=n.ports;return TF(void 0,void 0,void 0,a().mark((function n(){var u,s,d,m,h,b;return a().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(h=l[0],o.type===sz||e){n.next=4;break}return h.postMessage(bB.generateFailureMessage(new EF("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=o.type,n.next=n.t0===sz?7:n.t0===vz?22:n.t0===Cz?24:n.t0===mz?26:n.t0===hz?28:n.t0===dz?30:n.t0===bz?44:n.t0===Zz?46:n.t0===gz?48:n.t0===Xz?62:n.t0===Gz?76:n.t0===fz?90:n.t0===Jz?104:n.t0===Vz?118:n.t0===Wz?121:n.t0===Yz?124:n.t0===Sz?138:n.t0===Rz?152:n.t0===Lz?166:n.t0===Kz?168:n.t0===Nz?182:n.t0===kz?196:210;break;case 7:return n.prev=7,b=Object.assign({},o.data),n.next=11,rE(b,t);case 11:(e=n.sent).setHttpRequestFinishCallback(c),e.setHttpRequestStartCallback(r),e.setHttpRequestSuccessCallback(i),h.postMessage(bB.generateSuccessMessage()),n.next=21;break;case 18:n.prev=18,n.t1=n.catch(7),h.postMessage(bB.generateFailureMessage(n.t1));case 21:return n.abrupt("break",211);case 22:return e.getAuthorizationURL(null==o?void 0:o.data).then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 24:return e.requestAccessToken(null===(u=null==o?void 0:o.data)||void 0===u?void 0:u.code,null===(s=null==o?void 0:o.data)||void 0===s?void 0:s.sessionState,null===(d=null==o?void 0:o.data)||void 0===d?void 0:d.pkce,null===(m=null==o?void 0:o.data)||void 0===m?void 0:m.state).then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 26:return e.httpRequest(o.data).then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 28:return e.httpRequestAll(o.data).then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 30:return n.prev=30,n.t2=h,n.t3=bB,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(bB.generateFailureMessage(n.t6));case 43:return n.abrupt("break",211);case 44:return e.requestCustomGrant(o.data).then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 46:return e.revokeAccessToken().then((function(t){h.postMessage(bB.generateSuccessMessage(t))})).catch((function(t){h.postMessage(bB.generateFailureMessage(t))})),n.abrupt("break",211);case 48:return n.prev=48,n.t7=h,n.t8=bB,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(bB.generateFailureMessage(n.t11));case 61:return n.abrupt("break",211);case 62:return n.prev=62,n.t12=h,n.t13=bB,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(bB.generateFailureMessage(n.t16));case 75:return n.abrupt("break",211);case 76:return n.prev=76,n.t17=h,n.t18=bB,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(bB.generateFailureMessage(n.t21));case 89:return n.abrupt("break",211);case 90:return n.prev=90,n.t22=h,n.t23=bB,n.next=95,e.getCryptoHelper();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(bB.generateFailureMessage(n.t26));case 103:return n.abrupt("break",211);case 104:return n.prev=104,n.t27=h,n.t28=bB,n.next=109,e.getIDToken();case 109:n.t29=n.sent,n.t30=n.t28.generateSuccessMessage.call(n.t28,n.t29),n.t27.postMessage.call(n.t27,n.t30),n.next=117;break;case 114:n.prev=114,n.t31=n.catch(104),h.postMessage(bB.generateFailureMessage(n.t31));case 117:return n.abrupt("break",211);case 118:return e.enableHttpHandler(),h.postMessage(bB.generateSuccessMessage()),n.abrupt("break",211);case 121:return e.disableHttpHandler(),h.postMessage(bB.generateSuccessMessage()),n.abrupt("break",211);case 124:return n.prev=124,n.t32=h,n.t33=bB,n.next=129,e.isAuthenticated();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(bB.generateFailureMessage(n.t36));case 137:return n.abrupt("break",211);case 138:return n.prev=138,n.t37=h,n.t38=bB,n.next=143,e.getSignOutURL();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(bB.generateFailureMessage(n.t41));case 151:return n.abrupt("break",211);case 152:return n.prev=152,n.t42=h,n.t43=bB,n.next=157,e.refreshAccessToken();case 157:n.t44=n.sent,n.t45=n.t43.generateSuccessMessage.call(n.t43,n.t44),n.t42.postMessage.call(n.t42,n.t45),n.next=165;break;case 162:n.prev=162,n.t46=n.catch(152),h.postMessage(bB.generateFailureMessage(n.t46));case 165:return n.abrupt("break",211);case 166:try{h.postMessage(bB.generateSuccessMessage(e.startAutoRefreshToken()))}catch(t){h.postMessage(bB.generateFailureMessage(t))}return n.abrupt("break",211);case 168:return n.prev=168,n.t47=h,n.t48=bB,n.next=173,e.setSessionState(null==o?void 0:o.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(bB.generateFailureMessage(n.t51));case 181:return n.abrupt("break",211);case 182:return n.prev=182,n.t52=h,n.t53=bB,n.next=187,e.updateConfig(null==o?void 0:o.data);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(bB.generateFailureMessage(n.t56));case 195:return n.abrupt("break",211);case 196:return n.prev=196,n.t57=h,n.t58=bB,n.next=201,e.getConfigData();case 201:n.t59=n.sent,n.t60=n.t58.generateSuccessMessage.call(n.t58,n.t59),n.t57.postMessage.call(n.t57,n.t60),n.next=209;break;case 206:n.prev=206,n.t61=n.catch(196),h.postMessage(bB.generateFailureMessage(n.t61));case 209:return n.abrupt("break",211);case 210:null==h||h.postMessage(bB.generateFailureMessage(new EF("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(o.type,", is invalid."))));case 211:case"end":return n.stop()}}),n,null,[[7,18],[30,40],[48,58],[62,72],[76,86],[90,100],[104,114],[124,134],[138,148],[152,162],[168,178],[182,192],[196,206]])})))};var r=function(){n.postMessage({type:pz})},i=function(t){n.postMessage({data:JSON.stringify(null!=t?t:""),type:Iz})},c=function(){n.postMessage({type:yz})}},Object.defineProperty(t,"__esModule",{value:!0})}));
433
+ !function(e,t){var i=oS,n=i.Buffer;function l(e,t){for(var i in e)t[i]=e[i]}function o(e,t,i){return n(e,t,i)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=i:(l(i,t),t.Buffer=o),o.prototype=Object.create(n.prototype),l(n,o),o.from=function(e,t,i){if("number"==typeof e)throw new TypeError("Argument must not be a number");return n(e,t,i)},o.alloc=function(e,t,i){if("number"!=typeof e)throw new TypeError("Argument must be a number");var l=n(e);return void 0!==t?"string"==typeof i?l.fill(t,i):l.fill(t):l.fill(0),l},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}}(lS,lS.exports);var cS=65536,aS=4294967295;var rS=lS.exports.Buffer,dS=t.crypto||t.msCrypto;dS&&dS.getRandomValues?nS.exports=function(e,t){if(e>aS)throw new RangeError("requested too many random bytes");var i=rS.allocUnsafe(e);if(e>0)if(e>cS)for(var n=0;n<e;n+=cS)dS.getRandomValues(i.slice(n,n+cS));else dS.getRandomValues(i);if("function"==typeof t)return TW.nextTick((function(){t(null,i)}));return i}:nS.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var sS=nS.exports;class uS{base64URLEncode(e){return bR.encode(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(e){return bR.decode(e).toString()}hashSha256(e){return yC.from(pR((new TextEncoder).encode(e)))}generateRandomBytes(e){return sS(e)}verifyJwt(e,t,i,n,l,o,c){return eS(e,(a={keys:[t]},iS.prototype.getKey.bind(new iS(a))),{algorithms:i,audience:n,clockTolerance:c,issuer:l,subject:o}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(new xy("SPA-CRYPTO-UTILS-VJ-IV01",null==e?void 0:e.reason,"".concat(null==e?void 0:e.code," ").concat(null==e?void 0:e.claim)))));var a}}const hS=(t,i)=>Hy(void 0,void 0,void 0,(function*(){var n;const l=(t=>{switch(t){case e.Storage.LocalStorage:return new nC;case e.Storage.SessionStorage:return new oC;case e.Storage.BrowserMemory:return new lC;default:return new oC}})(t.storage),o=new uS,c=new Oy(l,o);yield c.initialize(t);const a=new jX(c),r=c.getDataLayer(),d=yield EX((()=>Hy(void 0,void 0,void 0,(function*(){return c.getSignOutURL()}))),null!==(n=t.storage)&&void 0!==n?n:e.Storage.SessionStorage,(e=>r.setSessionDataParameter(Ty,null!=e?e:""))),s=i(c,a);let u=!1;const h=iC.getInstance();let Z,b,m=!0;(null==h?void 0:h.init)&&(yield h.init(!0,(e=>Hy(void 0,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield s.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield s.getAccessToken())}))})))));const p=()=>Hy(void 0,void 0,void 0,(function*(){const e=yield c.getOIDCServiceEndpoints(),t=yield r.getConfigData();s.initializeSessionManger(t,e,(()=>Hy(void 0,void 0,void 0,(function*(){return(yield c.getBasicUserInfo()).sessionState}))),(e=>Hy(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(e)}))),d)})),I=()=>Hy(void 0,void 0,void 0,(function*(){return yield d.receivePromptNoneResponse((e=>Hy(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(Ty,null!=e?e:"")}))))})),g=e=>{e.preventSignOutURLUpdate&&(u=!0)},G=(e,t,i)=>Hy(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(e,t,p,void 0,i)})),y=()=>Hy(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=yield c.getAuthorizationURL({prompt:"none",state:AX}),n=new URL(i);n.searchParams.set("response_mode","query");const l=n.toString();if(t.storage===e.Storage.BrowserMemory&&t.enablePKCE){const e=n.searchParams.get(wy);MX.setPKCE(Py.extractPKCEKeyFromStateParam(null!=e?e:""),yield c.getPKCECode(null!=e?e:""))}return l}));return{disableHttpHandler:()=>(s.disableHttpHandler(h),m=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(h),m=!0,!0),getAccessToken:()=>Hy(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>Hy(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getCryptoHelper:()=>Hy(void 0,void 0,void 0,(function*(){return s.getCryptoHelper()})),getDataLayer:()=>Hy(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>Hy(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>h,getIDToken:()=>Hy(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>Hy(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:e=>Hy(void 0,void 0,void 0,(function*(){return yield s.httpRequest(h,e,m,Z,b)})),httpRequestAll:e=>Hy(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(e,h,m,Z,b)})),isAuthenticated:()=>Hy(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),refreshAccessToken:()=>Hy(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(g)}catch(e){return Promise.reject(e)}})),requestCustomGrant:e=>Hy(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(e,g)})),revokeAccessToken:()=>Hy(void 0,void 0,void 0,(function*(){const e=yield a.getRefreshTimeoutTimer();return c.revokeAccessToken().then((()=>(d.reset(),a.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestErrorCallback:e=>{Z=e},setHttpRequestFinishCallback:e=>{(null==h?void 0:h.setHttpRequestFinishCallback)&&h.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==h?void 0:h.setHttpRequestStartCallback)&&h.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==h?void 0:h.setHttpRequestSuccessCallback)&&h.setHttpRequestSuccessCallback(e)},signIn:(i,n,l,o)=>Hy(void 0,void 0,void 0,(function*(){var a,r,d;const u=yield s.handleSignIn(I,p);if(u)return u;{let s,u,h;return(null==t?void 0:t.responseMode)===e.ResponseMode.formPost&&n?(s=n,u=null!=l?l:"",h=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(Uy))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(Ty))&&void 0!==r?r:"",h=null!==(d=new URL(window.location.href).searchParams.get(wy))&&void 0!==d?d:"",MX.removeAuthorizationCode()),s&&h?G(s,u,h):c.getAuthorizationURL(i).then((i=>Hy(void 0,void 0,void 0,(function*(){if(t.storage===e.Storage.BrowserMemory&&t.enablePKCE){const e=Py.extractPKCEKeyFromStateParam(h);MX.setPKCE(e,yield c.getPKCECode(h))}return location.href=i,yield MX.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))))}})),signOut:()=>Hy(void 0,void 0,void 0,(function*(){return(yield c.isAuthenticated())&&!u?location.href=yield c.getSignOutURL():location.href=MX.getSignOutURL(),a.clearRefreshTokenTimeout(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData(),yield MX.waitTillPageRedirect(),!0})),trySignInSilently:()=>Hy(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(y,G,d)})),updateConfig:e=>Hy(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e);yield c.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),p())}))}})),ZS=(t,i,n)=>Hy(void 0,void 0,void 0,(function*(){var l;let o;const c=null!==(l=null==t?void 0:t.requestTimeout)&&void 0!==l?l:6e4;let a=!0,r=!1;const d=(t=>{switch(t){case e.Storage.LocalStorage:return new nC;case e.Storage.SessionStorage:return new oC;case e.Storage.BrowserMemory:return new lC;default:return new oC}})(t.storage),s=new uS,u=new Oy(d,s);yield u.initialize(t);const h=new jX(u),Z=yield EX((()=>Hy(void 0,void 0,void 0,(function*(){const e={type:lX};try{return yield p(e)}catch(e){return MX.getSignOutURL()}}))),t.storage,(e=>I(e))),b=n(u,h),m=new i,p=e=>{const t=new MessageChannel;return m.postMessage(e,[t.port2]),new Promise(((e,i)=>{const n=setTimeout((()=>{i(new xy("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=t=>{let{data:l}=t;if(clearTimeout(n),null==l?void 0:l.success){const t=(null==l?void 0:l.data)?JSON.parse(null==l?void 0:l.data):null;(null==l?void 0:l.blob)&&(t.data=null==l?void 0:l.blob),e(t)}else i(l.error?JSON.parse(l.error):null)}}))},I=e=>p({data:e,type:VX}),g=()=>p({type:CX}),G=()=>Hy(void 0,void 0,void 0,(function*(){const e=yield R(),t=yield S();b.initializeSessionManger(t,e,(()=>Hy(void 0,void 0,void 0,(function*(){return(yield v()).sessionState}))),(e=>Hy(void 0,void 0,void 0,(function*(){return(yield X(e)).authorizationURL}))),Z)})),y=()=>Hy(void 0,void 0,void 0,(function*(){var e;const t=yield S(),i={data:{prompt:"none",state:AX},type:gX},n=yield p(i),l=Py.extractPKCEKeyFromStateParam(null!==(e=new URL(n.authorizationURL).searchParams.get(wy))&&void 0!==e?e:"");n.pkce&&t.enablePKCE&&MX.setPKCE(l,n.pkce);const o=n.authorizationURL,c=new URL(o);c.searchParams.set("response_mode","query");return c.toString()})),X=e=>Hy(void 0,void 0,void 0,(function*(){const t=yield S();return p({data:e,type:gX}).then((e=>Hy(void 0,void 0,void 0,(function*(){var i;if(e.pkce&&t.enablePKCE){const t=Py.extractPKCEKeyFromStateParam(null!==(i=new URL(e.authorizationURL).searchParams.get(wy))&&void 0!==i?i:"");MX.setPKCE(t,e.pkce)}return Promise.resolve(e)}))))})),W=(e,t,i)=>Hy(void 0,void 0,void 0,(function*(){const n=yield S(),l=Py.extractPKCEKeyFromStateParam(i),o={data:{code:e,pkce:n.enablePKCE?MX.getPKCE(l):void 0,sessionState:t,state:i},type:GX};return n.enablePKCE&&MX.removePKCE(l),p(o).then((e=>p({type:XX}).then((t=>(MX.setSignOutURL(t),n.enableOIDCSessionManagement&&G(),g(),Promise.resolve(e)))).catch((e=>Promise.reject(e))))).catch((e=>Promise.reject(e)))})),V=()=>Hy(void 0,void 0,void 0,(function*(){return yield Z.receivePromptNoneResponse((e=>Hy(void 0,void 0,void 0,(function*(){return I(e)}))))})),C=()=>Hy(void 0,void 0,void 0,(function*(){if(yield f())return yield g(),t.enableOIDCSessionManagement&&G(),v()})),R=()=>p({type:hX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),S=()=>p({type:YX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),v=()=>p({type:ZX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),f=()=>p({type:yX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e)));return{disableHttpHandler:()=>p({type:IX}).then((()=>(a=!1,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),enableHttpHandler:()=>p({type:pX}).then((()=>(a=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e))),getBasicUserInfo:v,getCryptoHelper:()=>p({type:mX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDPIDToken:()=>p({type:"get-decoded-idp-id-token"}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getDecodedIDToken:()=>p({type:bX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getIDToken:()=>p({type:SX}).then((e=>Promise.resolve(e))).catch((e=>Promise.reject(e))),getOIDCServiceEndpoints:R,httpRequest:e=>p({data:e,type:oX}).then((e=>Promise.resolve(e))).catch((e=>Hy(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)})))),httpRequestAll:e=>p({data:e,type:cX}).then((e=>Promise.resolve(e))).catch((e=>Hy(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(e)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(e)})))),initialize:()=>{o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),m.onmessage=e=>{let{data:t}=e;switch(t.type){case uX:(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case dX:(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case sX:(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}};return p({data:t,type:nX}).then((()=>Promise.resolve(!0))).catch((e=>Promise.reject(e)))},isAuthenticated:f,refreshAccessToken:()=>p({type:WX}),requestCustomGrant:e=>p({data:e,type:aX}).then((t=>(e.preventSignOutURLUpdate&&(r=!0),Promise.resolve(t)))).catch((e=>Promise.reject(e))),revokeAccessToken:()=>p({type:rX}).then((e=>(Z.reset(),Promise.resolve(e)))).catch((e=>Promise.reject(e))),setHttpRequestErrorCallback:e=>{e&&"function"==typeof e&&(o.requestErrorCallback=e)},setHttpRequestFinishCallback:e=>{e&&"function"==typeof e&&(o.requestFinishCallback=e)},setHttpRequestStartCallback:e=>{e&&"function"==typeof e&&(o.requestStartCallback=e)},setHttpRequestSuccessCallback:e=>{e&&"function"==typeof e&&(o.requestSuccessCallback=e)},signIn:(i,n,l,o)=>Hy(void 0,void 0,void 0,(function*(){var c,a,r;const d=yield b.handleSignIn(V,G,C);if(d)return d;{let d,s,u;return(null==t?void 0:t.responseMode)===e.ResponseMode.formPost&&n?(d=n,s=null!=l?l:"",u=null!=o?o:""):(d=null!==(c=new URL(window.location.href).searchParams.get(Uy))&&void 0!==c?c:"",s=null!==(a=new URL(window.location.href).searchParams.get(Ty))&&void 0!==a?a:"",u=null!==(r=new URL(window.location.href).searchParams.get(wy))&&void 0!==r?r:"",MX.removeAuthorizationCode()),d&&u?W(d,s,u):X(i).then((e=>Hy(void 0,void 0,void 0,(function*(){return location.href=e.authorizationURL,yield MX.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))).catch((e=>Promise.reject(e)))}})),signOut:()=>f().then((e=>Hy(void 0,void 0,void 0,(function*(){if(e&&!r){return p({type:lX}).then((e=>Hy(void 0,void 0,void 0,(function*(){return window.location.href=e,yield MX.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e)))}return window.location.href=MX.getSignOutURL(),yield MX.waitTillPageRedirect(),Promise.resolve(!0)})))).catch((e=>Promise.reject(e))),trySignInSilently:()=>Hy(void 0,void 0,void 0,(function*(){return yield b.trySignInSilently(y,W,Z)})),updateConfig:e=>Hy(void 0,void 0,void 0,(function*(){const t=yield S(),i=!(t&&t.endpoints&&t.endpoints.checkSessionIframe&&e&&e.endpoints&&e.endpoints.checkSessionIframe&&t.endpoints.checkSessionIframe===e.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},t),e),l={data:n,type:RX};yield p(l),n.enableOIDCSessionManagement&&i&&(Z.reset(),G())}))}})),bS={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:e.Storage.SessionStorage},mS="primaryInstance";class pS{constructor(e){this._authHelper=PX,this._worker=iX,this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onSignOutFailedCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=e}instantiateAuthHelper(e){this._authHelper=e||PX}instantiateWorker(e){this._worker=e||iX}_isInitialized(){return Hy(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let e=0;for(;!this._initialized;)1e4===e&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise((e=>setTimeout(e,1))),e++;return!0}))}_validateMethod(){return Hy(this,void 0,void 0,(function*(){return(yield this._isInitialized())?!!(yield this.isAuthenticated())||Promise.reject(new xy("SPA-AUTH_CLIENT-VM-IV02","The user is not authenticated.","The user must be authenticated first.")):Promise.reject(new xy("SPA-AUTH_CLIENT-VM-NF01","The SDK is not initialized.","The SDK must be initialized first."))}))}
434
+ /**
435
+ * This method returns the instance of the singleton class.
436
+ *
437
+ * @return {AsgardeoSPAClient} - Returns the instance of the singleton class.
438
+ *
439
+ * @example
440
+ * ```
441
+ * const auth = AsgardeoSPAClient.getInstance();
442
+ * ```
443
+ *
444
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getinstance
445
+ *
446
+ * @memberof AsgardeoSPAClient
447
+ *
448
+ * @preserve
449
+ */static getInstance(e){var t,i;return e&&(null===(t=this._instances)||void 0===t?void 0:t.get(e))?this._instances.get(e):!e&&(null===(i=this._instances)||void 0===i?void 0:i.get(mS))?this._instances.get(mS):e?(this._instances.set(e,new pS(e)),this._instances.get(e)):(this._instances.set(mS,new pS(mS)),this._instances.get(mS))}
450
+ /**
451
+ * This method initializes the `AsgardeoSPAClient` instance.
452
+ *
453
+ * @param {ConfigInterface} config The config object to initialize with.
454
+ *
455
+ * @return {Promise<boolean>} - Resolves to `true` if initialization is successful.
456
+ *
457
+ * @example
458
+ * ```
459
+ * auth.initialize({
460
+ * signInRedirectURL: "http://localhost:3000/sign-in",
461
+ * clientID: "client ID",
462
+ * baseUrl: "https://api.asgardeo.io"
463
+ * });
464
+ * ```
465
+ *
466
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#initialize
467
+ *
468
+ * @memberof AsgardeoSPAClient
469
+ *
470
+ * @preserve
471
+ */initialize(t,i,n){var l;return Hy(this,void 0,void 0,(function*(){if(this._storage=null!==(l=t.storage)&&void 0!==l?l:e.Storage.SessionStorage,this._initialized=!1,this._startedInitialize=!0,i&&this.instantiateAuthHelper(i),n&&this.instantiateWorker(n),this._storage!==e.Storage.WebWorker){if(!this._client){const e=t,i=Object.assign({},bS);this._client=yield hS(Object.assign(Object.assign({},i),e),((e,t)=>new this._authHelper(e,t)))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),Promise.resolve(!0)}if(!this._client){const e=t;return this._client=yield ZS(Object.assign(Object.assign({},bS),e),this._worker,((e,t)=>new this._authHelper(e,t))),this._client.initialize().then((()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0)))).catch((e=>Promise.reject(e)))}return Promise.resolve(!0)}))}
472
+ /**
473
+ * This method returns a Promise that resolves with the basic user information obtained from the ID token.
474
+ *
475
+ * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
476
+ *
477
+ * @example
478
+ * ```
479
+ * auth.getBasicUserInfo().then((response) => {
480
+ * // console.log(response);
481
+ * }).catch((error) => {
482
+ * // console.error(error);
483
+ * });
484
+ * ```
485
+ *
486
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getuserinfo
487
+ *
488
+ * @memberof AsgardeoSPAClient
489
+ *
490
+ * @preserve
491
+ */getBasicUserInfo(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getBasicUserInfo()}))}
492
+ /**
493
+ * This method initiates the authentication flow. This should be called twice.
494
+ * 1. To initiate the authentication flow.
495
+ * 2. To obtain the access token after getting the authorization code.
496
+ *
497
+ * To satisfy the second condition, one of the two strategies mentioned below can be used:
498
+ * 1. Redirect the user back to the same login page that initiated the authentication flow.
499
+ * 2. Call the `signIn()` method in the page the user is redirected to after authentication.
500
+ *
501
+ * **To fire a callback function after signing in, use the `on()` method.**
502
+ * **To learn more about the `on()` method:**
503
+ * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
504
+ *
505
+ * @param {SignInConfig} config - The sign-in config.
506
+ * The `SignInConfig` object has these two attributes in addition to any custom key-value pairs.
507
+ * 1. fidp - Specifies the FIDP parameter that is used to take the user directly to an IdP login page.
508
+ * 2. forceInit: Specifies if the OIDC Provider Meta Data should be loaded again from the `well-known`
509
+ * endpoint.
510
+ * 3. Any other parameters that should be appended to the authorization request.
511
+ * @param {string} authorizationCode - The authorization code. (Optional)
512
+ * @param {string} sessionState - The session state. (Optional)
513
+ * @param {string} state - The state. (Optional)
514
+ *
515
+ * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
516
+ *
517
+ * @example
518
+ * ```
519
+ * auth.signIn();
520
+ * ```
521
+ *
522
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signin
523
+ *
524
+ * @memberof AsgardeoSPAClient
525
+ *
526
+ * @preserve
527
+ */signIn(e,t,i,n){var l;return Hy(this,void 0,void 0,(function*(){if(yield this._isInitialized(),MX.canContinueSignIn(Boolean(null==e?void 0:e.callOnlyOnRedirect),t))return null==e||delete e.callOnlyOnRedirect,null===(l=this._client)||void 0===l?void 0:l.signIn(e,t,i,n).then((e=>(this._onSignInCallback&&(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e),e)))}))}trySignInSilently(){var e;return Hy(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!MX.wasSignInCalled())return null===(e=this._client)||void 0===e?void 0:e.trySignInSilently().then((e=>{if(this._onSignInCallback&&e){const t=e;(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t)}return e}))}))}
528
+ /**
529
+ * This method initiates the sign-out flow.
530
+ *
531
+ * **To fire a callback function after signing out, use the `on()` method.**
532
+ * **To learn more about the `on()` method:**
533
+ * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
534
+ *
535
+ * @return {Promise<boolean>} - Returns a promise that resolves with `true` if sign out is successful.
536
+ *
537
+ * @example
538
+ * ```
539
+ * auth.signOut();
540
+ * ```
541
+ *
542
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signout
543
+ *
544
+ * @memberof AsgardeoSPAClient
545
+ *
546
+ * @preserve
547
+ */signOut(){var e,t;return Hy(this,void 0,void 0,(function*(){yield this._validateMethod();return null!==(t=yield null===(e=this._client)||void 0===e?void 0:e.signOut())&&void 0!==t&&t}))}
548
+ /**
549
+ * This method sends an API request to a protected endpoint.
550
+ * The access token is automatically attached to the header of the request.
551
+ * This is the only way by which protected endpoints can be accessed
552
+ * when the web worker is used to store session information.
553
+ *
554
+ * @param {HttpRequestConfig} config - The config object containing attributes necessary to send a request.
555
+ *
556
+ * @return {Promise<HttpResponse>} - Returns a Promise that resolves with the response to the request.
557
+ *
558
+ * @example
559
+ * ```
560
+ * const requestConfig = {
561
+ * headers: {
562
+ * "Accept": "application/json",
563
+ * "Access-Control-Allow-Origin": "https://api.asgardeo.io/myaccount",
564
+ * "Content-Type": "application/scim+json"
565
+ * },
566
+ * method: "GET",
567
+ * url: "https://api.asgardeo.io/scim2/me"
568
+ * };
569
+ *
570
+ * return auth.httpRequest(requestConfig)
571
+ * .then((response) => {
572
+ * // console.log(response);
573
+ * })
574
+ * .catch((error) => {
575
+ * // console.error(error);
576
+ * });
577
+ * ```
578
+ *
579
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequest
580
+ *
581
+ * @memberof AsgardeoSPAClient
582
+ *
583
+ * @preserve
584
+ */httpRequest(e){var t;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.httpRequest(e)}))}
585
+ /**
586
+ * This method sends multiple API requests to a protected endpoint.
587
+ * The access token is automatically attached to the header of the request.
588
+ * This is the only way by which multiple requests can be sent to protected endpoints
589
+ * when the web worker is used to store session information.
590
+ *
591
+ * @param {HttpRequestConfig[]} config - The config object containing attributes necessary to send a request.
592
+ *
593
+ * @return {Promise<HttpResponse[]>} - Returns a Promise that resolves with the responses to the requests.
594
+ *
595
+ * @example
596
+ * ```
597
+ * const requestConfig = {
598
+ * headers: {
599
+ * "Accept": "application/json",
600
+ * "Content-Type": "application/scim+json"
601
+ * },
602
+ * method: "GET",
603
+ * url: "https://api.asgardeo.io/scim2/me"
604
+ * };
605
+ *
606
+ * const requestConfig2 = {
607
+ * headers: {
608
+ * "Accept": "application/json",
609
+ * "Content-Type": "application/scim+json"
610
+ * },
611
+ * method: "GET",
612
+ * url: "https://api.asgardeo.io/scim2/me"
613
+ * };
614
+ *
615
+ * return auth.httpRequest([requestConfig, requestConfig2])
616
+ * .then((responses) => {
617
+ * response.forEach((response)=>{
618
+ * // console.log(response);
619
+ * });
620
+ * })
621
+ * .catch((error) => {
622
+ * // console.error(error);
623
+ * });
624
+ * ```
625
+ *
626
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequestall
627
+ *
628
+ * @memberof AsgardeoSPAClient
629
+ *
630
+ * @preserve
631
+ */httpRequestAll(e){var t;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.httpRequestAll(e)}))}
632
+ /**
633
+ * This method allows you to send a request with a custom grant.
634
+ *
635
+ * @param {CustomGrantRequestParams} config - The request parameters.
636
+ *
637
+ * @return {Promise<HttpResponse<any> | SignInResponse>} - A Promise that resolves with
638
+ * the value returned by the custom grant request.
639
+ *
640
+ * @example
641
+ * ```
642
+ * auth.customGrant({
643
+ * attachToken: false,
644
+ * data: {
645
+ * client_id: "{{clientId}}",
646
+ * grant_type: "account_switch",
647
+ * scope: "{{scope}}",
648
+ * token: "{{token}}",
649
+ * },
650
+ * id: "account-switch",
651
+ * returnResponse: true,
652
+ * returnsSession: true,
653
+ * signInRequired: true
654
+ * });
655
+ * ```
656
+ *
657
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#customgrant
658
+ *
659
+ * @memberof AsgardeoSPAClient
660
+ *
661
+ * @preserve
662
+ */requestCustomGrant(e){var t,i;return Hy(this,void 0,void 0,(function*(){if(e.signInRequired,yield this._validateMethod(),!e.id)return Promise.reject(new xy("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(t=this._client)||void 0===t?void 0:t.requestCustomGrant(e),l=this._onCustomGrant.get(e.id);return l&&l(null===(i=this._onCustomGrant)||void 0===i?void 0:i.get(e.id)),n}))}
663
+ /**
664
+ * This method ends a user session. The access token is revoked and the session information is destroyed.
665
+ *
666
+ * **To fire a callback function after ending user session, use the `on()` method.**
667
+ * **To learn more about the `on()` method:**
668
+ * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
669
+ *
670
+ * @return {Promise<boolean>} - A promise that resolves with `true` if the process is successful.
671
+ *
672
+ * @example
673
+ * ```
674
+ * auth.endUserSession();
675
+ * ```
676
+ *
677
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#endusersession
678
+ *
679
+ * @memberof AsgardeoSPAClient
680
+ *
681
+ * @preserve
682
+ */revokeAccessToken(){var e;return Hy(this,void 0,void 0,(function*(){yield this._validateMethod();const t=yield null===(e=this._client)||void 0===e?void 0:e.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(t)),t}))}
683
+ /**
684
+ * This method returns a Promise that resolves with an object containing the service endpoints.
685
+ *
686
+ * @return {Promise<ServiceResourcesType} - A Promise that resolves with an object containing the service endpoints.
687
+ *
688
+ * @example
689
+ * ```
690
+ * auth.getServiceEndpoints().then((endpoints) => {
691
+ * // console.log(endpoints);
692
+ * }).error((error) => {
693
+ * // console.error(error);
694
+ * });
695
+ * ```
696
+ *
697
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getserviceendpoints
698
+ *
699
+ * @memberof AsgardeoSPAClient
700
+ *
701
+ * @preserve
702
+ */getOIDCServiceEndpoints(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.getOIDCServiceEndpoints()}))}
703
+ /**
704
+ * This methods returns the Axios http client.
705
+ *
706
+ * @return {HttpClientInstance} - The Axios HTTP client.
707
+ *
708
+ * @memberof AsgardeoSPAClient
709
+ *
710
+ * @preserve
711
+ */getHttpClient(){if(this._client){if(this._storage!==e.Storage.WebWorker){return this._client.getHttpClient()}throw new xy("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 xy("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}
712
+ /**
713
+ * This method decodes the payload of the id token and returns it.
714
+ *
715
+ * @return {Promise<DecodedIdTokenPayloadInterface>} - A Promise that resolves with
716
+ * the decoded payload of the id token.
717
+ *
718
+ * @example
719
+ * ```
720
+ * auth.getDecodedIDToken().then((response)=>{
721
+ * // console.log(response);
722
+ * }).catch((error)=>{
723
+ * // console.error(error);
724
+ * });
725
+ * ```
726
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdecodedidtoken
727
+ *
728
+ * @memberof AsgardeoSPAClient
729
+ *
730
+ * @preserve
731
+ */getDecodedIDToken(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getDecodedIDToken()}))}
732
+ /**
733
+ * This method returns the CryptoHelper instance.
734
+ *
735
+ * @return {Promise<DecodedIdTokenPayloadInterface>} - A Promise that resolves with
736
+ * the CryptoHelper instance.
737
+ *
738
+ * @example
739
+ * ```
740
+ * auth.getCryptoHelper().then((response)=>{
741
+ * // console.log(response);
742
+ * }).catch((error)=>{
743
+ * // console.error(error);
744
+ * });
745
+ * ```
746
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getCryptoHelper
747
+ *
748
+ * @memberof AsgardeoSPAClient
749
+ *
750
+ * @preserve
751
+ */getCryptoHelper(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getCryptoHelper()}))}
752
+ /**
753
+ * This method return the ID token.
754
+ *
755
+ * @return {Promise<string>} - A Promise that resolves with the ID token.
756
+ *
757
+ * @example
758
+ * ```
759
+ * const idToken = await auth.getIDToken();
760
+ * ```
761
+ *
762
+ * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
763
+ *
764
+ * @memberof AsgardeoAuthClient
765
+ *
766
+ * @preserve
767
+ */getIDToken(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.getIDToken()}))}
768
+ /**
769
+ * This method return a Promise that resolves with the access token.
770
+ *
771
+ * **This method will not return the access token if the storage type is set to `webWorker`.**
772
+ *
773
+ * @return {Promise<string>} - A Promise that resolves with the access token.
774
+ *
775
+ * @example
776
+ * ```
777
+ * auth.getAccessToken().then((token) => {
778
+ * // console.log(token);
779
+ * }).catch((error) => {
780
+ * // console.error(error);
781
+ * });
782
+ * ```
783
+ *
784
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
785
+ *
786
+ * @memberof AsgardeoSPAClient
787
+ *
788
+ * @preserve
789
+ */getAccessToken(){return Hy(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new xy("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
790
+ /**
791
+ * This method return a Promise that resolves with the idp access token.
792
+ *
793
+ * **This method will not return the access token if the storage type is set to `webWorker`.**
794
+ *
795
+ * @return {Promise<string>} - A Promise that resolves with the idp access token.
796
+ *
797
+ * @example
798
+ * ```
799
+ * auth.getIDPAccessToken().then((token) => {
800
+ * // console.log(token);
801
+ * }).catch((error) => {
802
+ * // console.error(error);
803
+ * });
804
+ * ```
805
+ *
806
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
807
+ *
808
+ * @memberof AsgardeoSPAClient
809
+ *
810
+ * @preserve
811
+ */getIDPAccessToken(){return Hy(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new xy("SPA-AUTH_CLIENT-GIAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getAccessToken()}))}
812
+ /**
813
+ * This method return a Promise that resolves with the data layer object.
814
+ *
815
+ * **This method will not return the data layer object, if the storage type is set to `webWorker`.**
816
+ *
817
+ * @return {Promise<string>} - A Promise that resolves with the data layer object.
818
+ *
819
+ * @example
820
+ * ```
821
+ * auth.getDataLayer().then((dataLayer) => {
822
+ * // console.log(dataLayer);
823
+ * }).catch((error) => {
824
+ * // console.error(error);
825
+ * });
826
+ * ```
827
+ *
828
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdatalayer
829
+ *
830
+ * @memberof AsgardeoSPAClient
831
+ *
832
+ * @preserve
833
+ */getDataLayer(){return Hy(this,void 0,void 0,(function*(){if(yield this._validateMethod(),this._storage&&[(e.Storage.WebWorker,e.Storage.BrowserMemory)].includes(this._storage))return Promise.reject(new xy("SPA-AUTH_CLIENT-GDL-IV01","The data layer cannot be returned.","The data layer cannot be returned when the storage type is set to webWorker or browserMemory."));return this._client.getDataLayer()}))}
834
+ /**
835
+ * This method refreshes the access token.
836
+ *
837
+ * @return {TokenResponseInterface} - A Promise that resolves with an object containing
838
+ * information about the refreshed access token.
839
+ *
840
+ * @example
841
+ * ```
842
+ * auth.refreshToken().then((response)=>{
843
+ * // console.log(response);
844
+ * }).catch((error)=>{
845
+ * // console.error(error);
846
+ * });
847
+ * ```
848
+ *
849
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#refreshtoken
850
+ *
851
+ * @memberof AsgardeoSPAClient
852
+ *
853
+ * @preserve
854
+ */refreshAccessToken(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.refreshAccessToken()}))}
855
+ /**
856
+ * This method specifies if the user is authenticated or not.
857
+ *
858
+ * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated.
859
+ *
860
+ * @memberof AsgardeoSPAClient
861
+ *
862
+ * @preserve
863
+ */isAuthenticated(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.isAuthenticated()}))}on(t,i,n){var l,o,c,a;return Hy(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!i||"function"!=typeof i)throw new xy("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case e.Hooks.SignIn:this._onSignInCallback=i;break;case e.Hooks.SignOut:this._onSignOutCallback=i,(yield MX.isSignOutSuccessful())&&this._onSignOutCallback();break;case e.Hooks.RevokeAccessToken:this._onEndUserSession=i;break;case e.Hooks.Initialize:this._onInitialize=i;break;case e.Hooks.HttpRequestError:null===(l=this._client)||void 0===l||l.setHttpRequestErrorCallback(i);break;case e.Hooks.HttpRequestFinish:null===(o=this._client)||void 0===o||o.setHttpRequestFinishCallback(i);break;case e.Hooks.HttpRequestStart:null===(c=this._client)||void 0===c||c.setHttpRequestStartCallback(i);break;case e.Hooks.HttpRequestSuccess:null===(a=this._client)||void 0===a||a.setHttpRequestSuccessCallback(i);break;case e.Hooks.CustomGrant:n&&this._onCustomGrant.set(n,i);break;case e.Hooks.SignOutFailed:{this._onSignOutFailedCallback=i;const e=MX.didSignOutFail();e&&this._onSignOutFailedCallback(e);break}default:throw new xy("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
864
+ /**
865
+ * This method enables callback functions attached to the http client.
866
+ *
867
+ * @return {Promise<boolean>} - A promise that resolves with True.
868
+ *
869
+ * @example
870
+ * ```
871
+ * auth.enableHttpHandler();
872
+ * ```
873
+ *
874
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#enableHttpHandler
875
+ *
876
+ * @memberof AsgardeoSPAClient
877
+ *
878
+ * @preserve
879
+ */enableHttpHandler(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.enableHttpHandler()}))}
880
+ /**
881
+ * This method disables callback functions attached to the http client.
882
+ *
883
+ * @return {Promise<boolean>} - A promise that resolves with True.
884
+ *
885
+ * @example
886
+ * ```
887
+ * auth.disableHttpHandler();
888
+ * ```
889
+ *
890
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#disableHttpHandler
891
+ *
892
+ * @memberof AsgardeoSPAClient
893
+ *
894
+ * @preserve
895
+ */disableHttpHandler(){var e;return Hy(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(e=this._client)||void 0===e?void 0:e.disableHttpHandler()}))}
896
+ /**
897
+ * This method updates the configuration that was passed into the constructor when instantiating this class.
898
+ *
899
+ * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
900
+ *
901
+ * @example
902
+ * ```
903
+ * const config = {
904
+ * signInRedirectURL: "http://localhost:3000/sign-in",
905
+ * clientID: "client ID",
906
+ * baseUrl: "https://api.asgardeo.io"
907
+ * }
908
+ * const auth.updateConfig(config);
909
+ * ```
910
+ * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master/lib#updateConfig
911
+ *
912
+ * @memberof AsgardeoAuthClient
913
+ *
914
+ * @preserve
915
+ */updateConfig(t){return Hy(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===e.Storage.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}pS._instances=new Map;class IS extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}e.AUTHORIZATION_CODE=Uy,e.AsgardeoAuthClient=Oy,e.AsgardeoAuthException=xy,e.AsgardeoSPAClient=pS,e.AuthenticationHelper=PX,e.AuthenticationUtils=Py,e.CLIENT_ID_TAG="{{clientID}}",e.CLIENT_SECRET_TAG="{{clientSecret}}",e.CryptoHelper=Qy,e.DataLayer=Ey,e.MainThreadClient=hS,e.OIDC_SCOPE="openid",e.PKCE_CODE_VERIFIER="pkce_code_verifier",e.PKCE_SEPARATOR="#",e.REFRESH_TOKEN_TIMER=ky,e.SCOPE_TAG="{{scope}}",e.SESSION_STATE=Ty,e.SIGN_OUT_SUCCESS_PARAM=Fy,e.SIGN_OUT_URL=By,e.SPAHelper=jX,e.SPAUtils=MX,e.STATE=wy,e.SUPPORTED_SIGNATURE_ALGORITHMS=Ay,e.TOKEN_TAG="{{token}}",e.USERNAME_TAG="{{username}}",e.WebWorkerClass=IS,e.WebWorkerClient=ZS,e.workerReceiver=e=>{const t=self;let i;t.onmessage=t=>{let{data:c,ports:a}=t;return Hy(void 0,void 0,void 0,(function*(){var t,r,d,s;const u=a[0];if(c.type===nX||i)switch(c.type){case nX:try{const t=Object.assign({},c.data);i=yield((e,t)=>Hy(void 0,void 0,void 0,(function*(){const i=new lC,n=new uS,l=new Oy(i,n);yield l.initialize(e);const o=new jX(l),c=t(l,o),a=l.getDataLayer(),r=iC.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,(e=>Hy(void 0,void 0,void 0,(function*(){const t=Object.assign({attachToken:!0},e);t.attachToken&&(t.shouldAttachIDPAccessToken?e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield c.getIDPAccessToken())}):e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer ".concat(yield c.getAccessToken())}))}))))),{disableHttpHandler:()=>{c.disableHttpHandler(r)},enableHttpHandler:()=>{c.enableHttpHandler(r)},getAccessToken:()=>c.getAccessToken(),getAuthorizationURL:e=>Hy(void 0,void 0,void 0,(function*(){return l.getAuthorizationURL(e).then((e=>Hy(void 0,void 0,void 0,(function*(){var t;const i=null!==(t=new URL(e).searchParams.get(wy))&&void 0!==t?t:"",n=yield l.getPKCECode(i);return{authorizationURL:e,pkce:n}})))).catch((e=>Promise.reject(e)))})),getBasicUserInfo:()=>Hy(void 0,void 0,void 0,(function*(){return c.getBasicUserInfo()})),getConfigData:()=>Hy(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getCryptoHelper:()=>Hy(void 0,void 0,void 0,(function*(){return c.getCryptoHelper()})),getDecodedIDPIDToken:()=>Hy(void 0,void 0,void 0,(function*(){return c.getDecodedIDPIDToken()})),getDecodedIDToken:()=>Hy(void 0,void 0,void 0,(function*(){return c.getDecodedIDToken()})),getIDToken:()=>Hy(void 0,void 0,void 0,(function*(){return c.getIDToken()})),getOIDCServiceEndpoints:()=>Hy(void 0,void 0,void 0,(function*(){return c.getOIDCServiceEndpoints()})),getSignOutURL:()=>Hy(void 0,void 0,void 0,(function*(){return yield l.getSignOutURL()})),httpRequest:e=>Hy(void 0,void 0,void 0,(function*(){return yield c.httpRequest(r,e)})),httpRequestAll:e=>Hy(void 0,void 0,void 0,(function*(){return yield c.httpRequestAll(e,r)})),isAuthenticated:()=>c.isAuthenticated(),refreshAccessToken:()=>Hy(void 0,void 0,void 0,(function*(){try{return yield c.refreshAccessToken()}catch(e){return Promise.reject(e)}})),requestAccessToken:(e,t,i,n)=>Hy(void 0,void 0,void 0,(function*(){return yield c.requestAccessToken(e,t,void 0,i,n)})),requestCustomGrant:e=>Hy(void 0,void 0,void 0,(function*(){return yield c.requestCustomGrant(e)})),revokeAccessToken:()=>Hy(void 0,void 0,void 0,(function*(){const e=yield o.getRefreshTimeoutTimer();return l.revokeAccessToken().then((()=>(o.clearRefreshTokenTimeout(e),Promise.resolve(!0)))).catch((e=>Promise.reject(e)))})),setHttpRequestFinishCallback:e=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(e)},setHttpRequestStartCallback:e=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(e)},setHttpRequestSuccessCallback:e=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(e)},setSessionState:e=>Hy(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(Ty,e)})),signOut:()=>Hy(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield l.getSignOutURL()})),startAutoRefreshToken:()=>Hy(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically(c)})),updateConfig:e=>Hy(void 0,void 0,void 0,(function*(){yield l.updateConfig(e)}))}})))(t,e),i.setHttpRequestFinishCallback(o),i.setHttpRequestStartCallback(n),i.setHttpRequestSuccessCallback(l),u.postMessage(QX.generateSuccessMessage())}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case gX:i.getAuthorizationURL(null==c?void 0:c.data).then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case GX:i.requestAccessToken(null===(t=null==c?void 0:c.data)||void 0===t?void 0:t.code,null===(r=null==c?void 0:c.data)||void 0===r?void 0:r.sessionState,null===(d=null==c?void 0:c.data)||void 0===d?void 0:d.pkce,null===(s=null==c?void 0:c.data)||void 0===s?void 0:s.state).then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case oX:i.httpRequest(c.data).then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case cX:i.httpRequestAll(c.data).then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case lX:try{u.postMessage(QX.generateSuccessMessage(yield i.signOut()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case aX:i.requestCustomGrant(c.data).then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case rX:i.revokeAccessToken().then((e=>{u.postMessage(QX.generateSuccessMessage(e))})).catch((e=>{u.postMessage(QX.generateFailureMessage(e))}));break;case hX:try{u.postMessage(QX.generateSuccessMessage(yield i.getOIDCServiceEndpoints()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case ZX:try{u.postMessage(QX.generateSuccessMessage(yield i.getBasicUserInfo()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case bX:try{u.postMessage(QX.generateSuccessMessage(yield i.getDecodedIDToken()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case mX:try{u.postMessage(QX.generateSuccessMessage(yield i.getCryptoHelper()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case SX:try{u.postMessage(QX.generateSuccessMessage(yield i.getIDToken()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case pX:i.enableHttpHandler(),u.postMessage(QX.generateSuccessMessage());break;case IX:i.disableHttpHandler(),u.postMessage(QX.generateSuccessMessage());break;case yX:try{u.postMessage(QX.generateSuccessMessage(yield i.isAuthenticated()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case XX:try{u.postMessage(QX.generateSuccessMessage(yield i.getSignOutURL()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case WX:try{u.postMessage(QX.generateSuccessMessage(yield i.refreshAccessToken()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case CX:try{u.postMessage(QX.generateSuccessMessage(i.startAutoRefreshToken()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case VX:try{u.postMessage(QX.generateSuccessMessage(yield i.setSessionState(null==c?void 0:c.data)))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case RX:try{u.postMessage(QX.generateSuccessMessage(yield i.updateConfig(null==c?void 0:c.data)))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;case YX:try{u.postMessage(QX.generateSuccessMessage(yield i.getConfigData()))}catch(e){u.postMessage(QX.generateFailureMessage(e))}break;default:null==u||u.postMessage(QX.generateFailureMessage(new xy("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.","The message type provided, ".concat(c.type,", is invalid."))))}else u.postMessage(QX.generateFailureMessage(new xy("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}))};const n=()=>{t.postMessage({type:dX})},l=e=>{t.postMessage({data:JSON.stringify(null!=e?e:""),type:sX})},o=()=>{t.postMessage({type:uX})}},Object.defineProperty(e,"__esModule",{value:!0})}));
939
916
  //# sourceMappingURL=asgardeo-spa.production.js.map