var echartsExampleTransformTs=function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t,n){"use strict";var r=this&&this.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),s=0;for(t=0;t<n;t++)for(var o=arguments[t],i=0,a=o.length;i<a;i++,s++)r[s]=o[i];return r};Object.defineProperty(t,"__esModule",{value:!0}),t.Checker=t.createCheckers=void 0;var s=n(2),o=n(1),i=n(2);Object.defineProperty(t,"TArray",{enumerable:!0,get:function(){return i.TArray}}),Object.defineProperty(t,"TEnumType",{enumerable:!0,get:function(){return i.TEnumType}}),Object.defineProperty(t,"TEnumLiteral",{enumerable:!0,get:function(){return i.TEnumLiteral}}),Object.defineProperty(t,"TFunc",{enumerable:!0,get:function(){return i.TFunc}}),Object.defineProperty(t,"TIface",{enumerable:!0,get:function(){return i.TIface}}),Object.defineProperty(t,"TLiteral",{enumerable:!0,get:function(){return i.TLiteral}}),Object.defineProperty(t,"TName",{enumerable:!0,get:function(){return i.TName}}),Object.defineProperty(t,"TOptional",{enumerable:!0,get:function(){return i.TOptional}}),Object.defineProperty(t,"TParam",{enumerable:!0,get:function(){return i.TParam}}),Object.defineProperty(t,"TParamList",{enumerable:!0,get:function(){return i.TParamList}}),Object.defineProperty(t,"TProp",{enumerable:!0,get:function(){return i.TProp}}),Object.defineProperty(t,"TTuple",{enumerable:!0,get:function(){return i.TTuple}}),Object.defineProperty(t,"TType",{enumerable:!0,get:function(){return i.TType}}),Object.defineProperty(t,"TUnion",{enumerable:!0,get:function(){return i.TUnion}}),Object.defineProperty(t,"TIntersection",{enumerable:!0,get:function(){return i.TIntersection}}),Object.defineProperty(t,"array",{enumerable:!0,get:function(){return i.array}}),Object.defineProperty(t,"enumlit",{enumerable:!0,get:function(){return i.enumlit}}),Object.defineProperty(t,"enumtype",{enumerable:!0,get:function(){return i.enumtype}}),Object.defineProperty(t,"func",{enumerable:!0,get:function(){return i.func}}),Object.defineProperty(t,"iface",{enumerable:!0,get:function(){return i.iface}}),Object.defineProperty(t,"lit",{enumerable:!0,get:function(){return i.lit}}),Object.defineProperty(t,"name",{enumerable:!0,get:function(){return i.name}}),Object.defineProperty(t,"opt",{enumerable:!0,get:function(){return i.opt}}),Object.defineProperty(t,"param",{enumerable:!0,get:function(){return i.param}}),Object.defineProperty(t,"tuple",{enumerable:!0,get:function(){return i.tuple}}),Object.defineProperty(t,"union",{enumerable:!0,get:function(){return i.union}}),Object.defineProperty(t,"intersection",{enumerable:!0,get:function(){return i.intersection}}),Object.defineProperty(t,"BasicType",{enumerable:!0,get:function(){return i.BasicType}});var a=n(1);Object.defineProperty(t,"VError",{enumerable:!0,get:function(){return a.VError}}),t.createCheckers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=Object.assign.apply(Object,r([{},s.basicTypes],e)),o={},i=0,a=e;i<a.length;i++)for(var h=a[i],u=0,l=Object.keys(h);u<l.length;u++){var p=l[u];o[p]=new c(n,h[p])}return o};var c=function(){function e(e,t,n){if(void 0===n&&(n="value"),this.suite=e,this.ttype=t,this._path=n,this.props=new Map,t instanceof s.TIface)for(var r=0,o=t.props;r<o.length;r++){var i=o[r];this.props.set(i.name,i.ttype)}this.checkerPlain=this.ttype.getChecker(e,!1),this.checkerStrict=this.ttype.getChecker(e,!0)}return e.prototype.setReportedPath=function(e){this._path=e},e.prototype.check=function(e){return this._doCheck(this.checkerPlain,e)},e.prototype.test=function(e){return this.checkerPlain(e,new o.NoopContext)},e.prototype.validate=function(e){return this._doValidate(this.checkerPlain,e)},e.prototype.strictCheck=function(e){return this._doCheck(this.checkerStrict,e)},e.prototype.strictTest=function(e){return this.checkerStrict(e,new o.NoopContext)},e.prototype.strictValidate=function(e){return this._doValidate(this.checkerStrict,e)},e.prototype.getProp=function(t){var n=this.props.get(t);if(!n)throw new Error("Type has no property "+t);return new e(this.suite,n,this._path+"."+t)},e.prototype.methodArgs=function(t){var n=this._getMethod(t);return new e(this.suite,n.paramList)},e.prototype.methodResult=function(t){var n=this._getMethod(t);return new e(this.suite,n.result)},e.prototype.getArgs=function(){if(!(this.ttype instanceof s.TFunc))throw new Error("getArgs() applied to non-function");return new e(this.suite,this.ttype.paramList)},e.prototype.getResult=function(){if(!(this.ttype instanceof s.TFunc))throw new Error("getResult() applied to non-function");return new e(this.suite,this.ttype.result)},e.prototype.getType=function(){return this.ttype},e.prototype._doCheck=function(e,t){if(!e(t,new o.NoopContext)){var n=new o.DetailContext;throw e(t,n),n.getError(this._path)}},e.prototype._doValidate=function(e,t){if(e(t,new o.NoopContext))return null;var n=new o.DetailContext;return e(t,n),n.getErrorDetail(this._path)},e.prototype._getMethod=function(e){var t=this.props.get(e);if(!t)throw new Error("Type has no property "+e);if(!(t instanceof s.TFunc))throw new Error("Property "+e+" is not a method");return t},e}();t.Checker=c},function(e,t,n){"use strict";var r,s=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.DetailContext=t.NoopContext=t.VError=void 0;var o=function(e){function t(n,r){var s=e.call(this,r)||this;return s.path=n,Object.setPrototypeOf(s,t.prototype),s}return s(t,e),t}(Error);t.VError=o;var i=function(){function e(){}return e.prototype.fail=function(e,t,n){return!1},e.prototype.unionResolver=function(){return this},e.prototype.createContext=function(){return this},e.prototype.resolveUnion=function(e){},e}();t.NoopContext=i;var a=function(){function e(){this._propNames=[""],this._messages=[null],this._score=0}return e.prototype.fail=function(e,t,n){return this._propNames.push(e),this._messages.push(t),this._score+=n,!1},e.prototype.unionResolver=function(){return new c},e.prototype.resolveUnion=function(e){for(var t,n,r=null,s=0,o=e.contexts;s<o.length;s++){var i=o[s];(!r||i._score>=r._score)&&(r=i)}r&&r._score>0&&((t=this._propNames).push.apply(t,r._propNames),(n=this._messages).push.apply(n,r._messages))},e.prototype.getError=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var r=this._propNames[n];e+="number"==typeof r?"["+r+"]":r?"."+r:"";var s=this._messages[n];s&&t.push(e+" "+s)}return new o(e,t.join("; "))},e.prototype.getErrorDetail=function(e){for(var t=[],n=this._propNames.length-1;n>=0;n--){var r=this._propNames[n];e+="number"==typeof r?"["+r+"]":r?"."+r:"";var s=this._messages[n];s&&t.push({path:e,message:s})}var o=null;for(n=t.length-1;n>=0;n--)o&&(t[n].nested=[o]),o=t[n];return o},e}();t.DetailContext=a;var c=function(){function e(){this.contexts=[]}return e.prototype.createContext=function(){var e=new a;return this.contexts.push(e),e},e}()},function(e,t,n){"use strict";(function(e){var r,s=this&&this.__extends||(r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.basicTypes=t.BasicType=t.TParamList=t.TParam=t.param=t.TFunc=t.func=t.TProp=t.TOptional=t.opt=t.TIface=t.iface=t.TEnumLiteral=t.enumlit=t.TEnumType=t.enumtype=t.TIntersection=t.intersection=t.TUnion=t.union=t.TTuple=t.tuple=t.TArray=t.array=t.TLiteral=t.lit=t.TName=t.name=t.TType=void 0;var o=n(1),i=function(){};function a(e){return"string"==typeof e?h(e):e}function c(e,t){var n=e[t];if(!n)throw new Error("Unknown type "+t);return n}function h(e){return new u(e)}t.TType=i,t.name=h;var u=function(e){function t(t){var n=e.call(this)||this;return n.name=t,n._failMsg="is not a "+t,n}return s(t,e),t.prototype.getChecker=function(e,n,r){var s=this,o=c(e,this.name),i=o.getChecker(e,n,r);return o instanceof I||o instanceof t?i:function(e,t){return!!i(e,t)||t.fail(null,s._failMsg,0)}},t}(i);t.TName=u,t.lit=function(e){return new l(e)};var l=function(e){function t(t){var n=e.call(this)||this;return n.value=t,n.name=JSON.stringify(t),n._failMsg="is not "+n.name,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return e===n.value||t.fail(null,n._failMsg,-1)}},t}(i);t.TLiteral=l,t.array=function(e){return new p(a(e))};var p=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var r=0;r<e.length;r++){if(!n(e[r],t))return t.fail(r,null,1)}return!0}},t}(i);t.TArray=p,t.tuple=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new f(e.map((function(e){return a(e)})))};var f=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttypes.map((function(n){return n.getChecker(e,t)})),r=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var r=0;r<n.length;r++){if(!n[r](e[r],t))return t.fail(r,null,1)}return!0};return t?function(e,t){return!!r(e,t)&&(e.length<=n.length||t.fail(n.length,"is extraneous",2))}:r},t}(i);t.TTuple=f,t.union=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new d(e.map((function(e){return a(e)})))};var d=function(e){function t(t){var n=e.call(this)||this;n.ttypes=t;var r=t.map((function(e){return e instanceof u||e instanceof l?e.name:null})).filter((function(e){return e})),s=t.length-r.length;return r.length?(s>0&&r.push(s+" more"),n._failMsg="is none of "+r.join(", ")):n._failMsg="is none of "+s+" types",n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,r=this.ttypes.map((function(n){return n.getChecker(e,t)}));return function(e,t){for(var s=t.unionResolver(),o=0;o<r.length;o++){if(r[o](e,s.createContext()))return!0}return t.resolveUnion(s),t.fail(null,n._failMsg,0)}},t}(i);t.TUnion=d,t.intersection=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new m(e.map((function(e){return a(e)})))};var m=function(e){function t(t){var n=e.call(this)||this;return n.ttypes=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=new Set,r=this.ttypes.map((function(r){return r.getChecker(e,t,n)}));return function(e,t){return!!r.every((function(n){return n(e,t)}))||t.fail(null,null,0)}},t}(i);t.TIntersection=m,t.enumtype=function(e){return new k(e)};var k=function(e){function t(t){var n=e.call(this)||this;return n.members=t,n.validValues=new Set,n._failMsg="is not a valid enum value",n.validValues=new Set(Object.keys(t).map((function(e){return t[e]}))),n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validValues.has(e)||t.fail(null,n._failMsg,0)}},t}(i);t.TEnumType=k,t.enumlit=function(e,t){return new g(e,t)};var g=function(e){function t(t,n){var r=e.call(this)||this;return r.enumName=t,r.prop=n,r._failMsg="is not "+t+"."+n,r}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,r=c(e,this.enumName);if(!(r instanceof k))throw new Error("Type "+this.enumName+" used in enumlit is not an enum type");var s=r.members[this.prop];if(!r.members.hasOwnProperty(this.prop))throw new Error("Unknown value "+this.enumName+"."+this.prop+" used in enumlit");return function(e,t){return e===s||t.fail(null,n._failMsg,-1)}},t}(i);function _(e){return Object.keys(e).map((function(t){return function(e,t){return t instanceof x?new T(e,t.ttype,!0):new T(e,a(t),!1)}(t,e[t])}))}t.TEnumLiteral=g,t.iface=function(e,t){return new y(e,_(t))};var y=function(e){function t(t,n){var r=e.call(this)||this;return r.bases=t,r.props=n,r.propSet=new Set(n.map((function(e){return e.name}))),r}return s(t,e),t.prototype.getChecker=function(e,t,n){var r=this,s=this.bases.map((function(n){return c(e,n).getChecker(e,t)})),i=this.props.map((function(n){return n.ttype.getChecker(e,t)})),a=new o.NoopContext,h=this.props.map((function(e,t){return!e.isOpt&&!i[t](void 0,a)})),u=function(e,t){if("object"!=typeof e||null===e)return t.fail(null,"is not an object",0);for(var n=0;n<s.length;n++)if(!s[n](e,t))return!1;for(n=0;n<i.length;n++){var o=r.props[n].name,a=e[o];if(void 0===a){if(h[n])return t.fail(o,"is missing",1)}else if(!i[n](a,t))return t.fail(o,null,1)}return!0};if(!t)return u;var l=this.propSet;return n&&(this.propSet.forEach((function(e){return n.add(e)})),l=n),function(e,t){if(!u(e,t))return!1;for(var n in e)if(!l.has(n))return t.fail(n,"is extraneous",2);return!0}},t}(i);t.TIface=y,t.opt=function(e){return new x(a(e))};var x=function(e){function t(t){var n=e.call(this)||this;return n.ttype=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this.ttype.getChecker(e,t);return function(e,t){return void 0===e||n(e,t)}},t}(i);t.TOptional=x;var T=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TProp=T,t.func=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return new b(new v(t),a(e))};var b=function(e){function t(t,n){var r=e.call(this)||this;return r.paramList=t,r.result=n,r}return s(t,e),t.prototype.getChecker=function(e,t){return function(e,t){return"function"==typeof e||t.fail(null,"is not a function",0)}},t}(i);t.TFunc=b,t.param=function(e,t,n){return new w(e,a(t),Boolean(n))};var w=function(e,t,n){this.name=e,this.ttype=t,this.isOpt=n};t.TParam=w;var v=function(e){function t(t){var n=e.call(this)||this;return n.params=t,n}return s(t,e),t.prototype.getChecker=function(e,t){var n=this,r=this.params.map((function(n){return n.ttype.getChecker(e,t)})),s=new o.NoopContext,i=this.params.map((function(e,t){return!e.isOpt&&!r[t](void 0,s)})),a=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var s=0;s<r.length;s++){var o=n.params[s];if(void 0===e[s]){if(i[s])return t.fail(o.name,"is missing",1)}else if(!r[s](e[s],t))return t.fail(o.name,null,1)}return!0};return t?function(e,t){return!!a(e,t)&&(e.length<=r.length||t.fail(r.length,"is extraneous",2))}:a},t}(i);t.TParamList=v;var I=function(e){function t(t,n){var r=e.call(this)||this;return r.validator=t,r.message=n,r}return s(t,e),t.prototype.getChecker=function(e,t){var n=this;return function(e,t){return!!n.validator(e)||t.fail(null,n.message,0)}},t}(i);t.BasicType=I,t.basicTypes={any:new I((function(e){return!0}),"is invalid"),number:new I((function(e){return"number"==typeof e}),"is not a number"),object:new I((function(e){return"object"==typeof e&&e}),"is not an object"),boolean:new I((function(e){return"boolean"==typeof e}),"is not a boolean"),string:new I((function(e){return"string"==typeof e}),"is not a string"),symbol:new I((function(e){return"symbol"==typeof e}),"is not a symbol"),void:new I((function(e){return null==e}),"is not void"),undefined:new I((function(e){return void 0===e}),"is not undefined"),null:new I((function(e){return null===e}),"is not null"),never:new I((function(e){return!1}),"is unexpected"),Date:new I(E("[object Date]"),"is not a Date"),RegExp:new I(E("[object RegExp]"),"is not a RegExp")};var A=Object.prototype.toString;function E(e){return function(t){return"object"==typeof t&&t&&A.call(t)===e}}void 0!==e&&(t.basicTypes.Buffer=new I((function(t){return e.isBuffer(t)}),"is not a Buffer"));for(var C=function(e){t.basicTypes[e.name]=new I((function(t){return t instanceof e}),"is not a "+e.name)},S=0,R=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,ArrayBuffer];S<R.length;S++){C(R[S])}}).call(this,n(4).Buffer)},function(e,t,n){"use strict";var r=function(){function e(e){this.string=e;for(var t=[0],n=0;n<e.length;)switch(e[n]){case"\n":n+="\n".length,t.push(n);break;case"\r":"\n"===e[n+="\r".length]&&(n+="\n".length),t.push(n);break;default:n++}this.offsets=t}return e.prototype.locationForIndex=function(e){if(e<0||e>this.string.length)return null;for(var t=0,n=this.offsets;n[t+1]<=e;)t++;return{line:t,column:e-n[t]}},e.prototype.indexForLocation=function(e){var t=e.line,n=e.column;return t<0||t>=this.offsets.length||n<0||n>this.lengthOfLine(t)?null:this.offsets[t]+n},e.prototype.lengthOfLine=function(e){var t=this.offsets[e];return(e===this.offsets.length-1?this.string.length:this.offsets[e+1])-t},e}();t.__esModule=!0,t.default=r},function(e,t,n){"use strict";(function(e){
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <http://feross.org>
 * @license  MIT
 */
var r=n(6),s=n(7),o=n(8);function i(){return c.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return c.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=c.prototype:(null===e&&(e=new c(t)),e.length=t),e}function c(e,t,n){if(!(c.TYPED_ARRAY_SUPPORT||this instanceof c))return new c(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return l(this,e)}return h(this,e,t,n)}function h(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,r){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");t=void 0===n&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r);c.TYPED_ARRAY_SUPPORT?(e=t).__proto__=c.prototype:e=p(e,t);return e}(e,t,n,r):"string"==typeof t?function(e,t,n){"string"==typeof n&&""!==n||(n="utf8");if(!c.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|d(t,n),s=(e=a(e,r)).write(t,n);s!==r&&(e=e.slice(0,s));return e}(e,t,n):function(e,t){if(c.isBuffer(t)){var n=0|f(t.length);return 0===(e=a(e,n)).length||t.copy(e,0,0,n),e}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(r=t.length)!=r?a(e,0):p(e,t);if("Buffer"===t.type&&o(t.data))return p(e,t.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function u(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 l(e,t){if(u(t),e=a(e,t<0?0:0|f(t)),!c.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function p(e,t){var n=t.length<0?0:0|f(t.length);e=a(e,n);for(var r=0;r<n;r+=1)e[r]=255&t[r];return e}function f(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function d(e,t){if(c.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return M(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return $(e).length;default:if(r)return M(e).length;t=(""+t).toLowerCase(),r=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return S(this,t,n);case"utf8":case"utf-8":return A(this,t,n);case"ascii":return E(this,t,n);case"latin1":case"binary":return C(this,t,n);case"base64":return I(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function k(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,s){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=s?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(s)return-1;n=e.length-1}else if(n<0){if(!s)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:_(e,t,n,r,s);if("number"==typeof t)return t&=255,c.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):_(e,[t],n,r,s);throw new TypeError("val must be string, number or Buffer")}function _(e,t,n,r,s){var o,i=1,a=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,a/=2,c/=2,n/=2}function h(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(s){var u=-1;for(o=n;o<a;o++)if(h(e,o)===h(t,-1===u?0:o-u)){if(-1===u&&(u=o),o-u+1===c)return u*i}else-1!==u&&(o-=o-u),u=-1}else for(n+c>a&&(n=a-c),o=n;o>=0;o--){for(var l=!0,p=0;p<c;p++)if(h(e,o+p)!==h(t,p)){l=!1;break}if(l)return o}return-1}function y(e,t,n,r){n=Number(n)||0;var s=e.length-n;r?(r=Number(r))>s&&(r=s):r=s;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var i=0;i<r;++i){var a=parseInt(t.substr(2*i,2),16);if(isNaN(a))return i;e[n+i]=a}return i}function x(e,t,n,r){return U(M(t,e.length-n),e,n,r)}function T(e,t,n,r){return U(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function b(e,t,n,r){return T(e,t,n,r)}function w(e,t,n,r){return U($(t),e,n,r)}function v(e,t,n,r){return U(function(e,t){for(var n,r,s,o=[],i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,s=n%256,o.push(s),o.push(r);return o}(t,e.length-n),e,n,r)}function I(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function A(e,t,n){n=Math.min(e.length,n);for(var r=[],s=t;s<n;){var o,i,a,c,h=e[s],u=null,l=h>239?4:h>223?3:h>191?2:1;if(s+l<=n)switch(l){case 1:h<128&&(u=h);break;case 2:128==(192&(o=e[s+1]))&&(c=(31&h)<<6|63&o)>127&&(u=c);break;case 3:o=e[s+1],i=e[s+2],128==(192&o)&&128==(192&i)&&(c=(15&h)<<12|(63&o)<<6|63&i)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:o=e[s+1],i=e[s+2],a=e[s+3],128==(192&o)&&128==(192&i)&&128==(192&a)&&(c=(15&h)<<18|(63&o)<<12|(63&i)<<6|63&a)>65535&&c<1114112&&(u=c)}null===u?(u=65533,l=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),s+=l}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=4096));return n}(r)}t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50,c.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=i(),c.poolSize=8192,c._augment=function(e){return e.__proto__=c.prototype,e},c.from=function(e,t,n){return h(null,e,t,n)},c.TYPED_ARRAY_SUPPORT&&(c.prototype.__proto__=Uint8Array.prototype,c.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&c[Symbol.species]===c&&Object.defineProperty(c,Symbol.species,{value:null,configurable:!0})),c.alloc=function(e,t,n){return function(e,t,n,r){return u(t),t<=0?a(e,t):void 0!==n?"string"==typeof r?a(e,t).fill(n,r):a(e,t).fill(n):a(e,t)}(null,e,t,n)},c.allocUnsafe=function(e){return l(null,e)},c.allocUnsafeSlow=function(e){return l(null,e)},c.isBuffer=function(e){return!(null==e||!e._isBuffer)},c.compare=function(e,t){if(!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,s=0,o=Math.min(n,r);s<o;++s)if(e[s]!==t[s]){n=e[s],r=t[s];break}return n<r?-1:r<n?1:0},c.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}},c.concat=function(e,t){if(!o(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=c.allocUnsafe(t),s=0;for(n=0;n<e.length;++n){var i=e[n];if(!c.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,s),s+=i.length}return r},c.byteLength=d,c.prototype._isBuffer=!0,c.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)k(this,t,t+1);return this},c.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)k(this,t,t+3),k(this,t+1,t+2);return this},c.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)k(this,t,t+7),k(this,t+1,t+6),k(this,t+2,t+5),k(this,t+3,t+4);return this},c.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?A(this,0,e):m.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),"<Buffer "+e+">"},c.prototype.compare=function(e,t,n,r,s){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===s&&(s=this.length),t<0||n>e.length||r<0||s>this.length)throw new RangeError("out of range index");if(r>=s&&t>=n)return 0;if(r>=s)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(s>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0),a=Math.min(o,i),h=this.slice(r,s),u=e.slice(t,n),l=0;l<a;++l)if(h[l]!==u[l]){o=h[l],i=u[l];break}return o<i?-1:i<o?1:0},c.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},c.prototype.indexOf=function(e,t,n){return g(this,e,t,n,!0)},c.prototype.lastIndexOf=function(e,t,n){return g(this,e,t,n,!1)},c.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var s=this.length-t;if((void 0===n||n>s)&&(n=s),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return y(this,e,t,n);case"utf8":case"utf-8":return x(this,e,t,n);case"ascii":return T(this,e,t,n);case"latin1":case"binary":return b(this,e,t,n);case"base64":return w(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function E(e,t,n){var r="";n=Math.min(e.length,n);for(var s=t;s<n;++s)r+=String.fromCharCode(127&e[s]);return r}function C(e,t,n){var r="";n=Math.min(e.length,n);for(var s=t;s<n;++s)r+=String.fromCharCode(e[s]);return r}function S(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var s="",o=t;o<n;++o)s+=F(e[o]);return s}function R(e,t,n){for(var r=e.slice(t,n),s="",o=0;o<r.length;o+=2)s+=String.fromCharCode(r[o]+256*r[o+1]);return s}function N(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,n,r,s,o){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||t<o)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function P(e,t,n,r){t<0&&(t=65535+t+1);for(var s=0,o=Math.min(e.length-n,2);s<o;++s)e[n+s]=(t&255<<8*(r?s:1-s))>>>8*(r?s:1-s)}function O(e,t,n,r){t<0&&(t=4294967295+t+1);for(var s=0,o=Math.min(e.length-n,4);s<o;++s)e[n+s]=t>>>8*(r?s:3-s)&255}function D(e,t,n,r,s,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function j(e,t,n,r,o){return o||D(e,0,n,4),s.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,o){return o||D(e,0,n,8),s.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e),c.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=c.prototype;else{var s=t-e;n=new c(s,void 0);for(var o=0;o<s;++o)n[o]=this[o+e]}return n},c.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=this[e],s=1,o=0;++o<t&&(s*=256);)r+=this[e+o]*s;return r},c.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=this[e+--t],s=1;t>0&&(s*=256);)r+=this[e+--t]*s;return r},c.prototype.readUInt8=function(e,t){return t||N(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return t||N(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return t||N(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return t||N(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return t||N(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=this[e],s=1,o=0;++o<t&&(s*=256);)r+=this[e+o]*s;return r>=(s*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||N(e,t,this.length);for(var r=t,s=1,o=this[e+--r];r>0&&(s*=256);)o+=this[e+--r]*s;return o>=(s*=128)&&(o-=Math.pow(2,8*t)),o},c.prototype.readInt8=function(e,t){return t||N(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){t||N(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){t||N(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return t||N(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return t||N(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return t||N(e,4,this.length),s.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return t||N(e,4,this.length),s.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return t||N(e,8,this.length),s.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return t||N(e,8,this.length),s.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var s=1,o=0;for(this[t]=255&e;++o<n&&(s*=256);)this[t+o]=e/s&255;return t+n},c.prototype.writeUIntBE=function(e,t,n,r){(e=+e,t|=0,n|=0,r)||L(this,e,t,n,Math.pow(2,8*n)-1,0);var s=n-1,o=1;for(this[t+s]=255&e;--s>=0&&(o*=256);)this[t+s]=e/o&255;return t+n},c.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,255,0),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,65535,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):O(this,e,t,!0),t+4},c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,4294967295,0),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var s=Math.pow(2,8*n-1);L(this,e,t,n,s-1,-s)}var o=0,i=1,a=0;for(this[t]=255&e;++o<n&&(i*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/i>>0)-a&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var s=Math.pow(2,8*n-1);L(this,e,t,n,s-1,-s)}var o=n-1,i=1,a=0;for(this[t+o]=255&e;--o>=0&&(i*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/i>>0)-a&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,1,127,-128),c.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,2,32767,-32768),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),c.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):O(this,e,t,!0),t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),c.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):O(this,e,t,!1),t+4},c.prototype.writeFloatLE=function(e,t,n){return j(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return j(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var s,o=r-n;if(this===e&&n<t&&t<r)for(s=o-1;s>=0;--s)e[s+t]=this[s+n];else if(o<1e3||!c.TYPED_ARRAY_SUPPORT)for(s=0;s<o;++s)e[s+t]=this[s+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},c.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var s=e.charCodeAt(0);s<256&&(e=s)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!c.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o<n;++o)this[o]=e;else{var i=c.isBuffer(e)?e:M(new c(e,r).toString()),a=i.length;for(o=0;o<n-t;++o)this[o+t]=i[o%a]}return this};var q=/[^+\/0-9A-Za-z-_]/g;function F(e){return e<16?"0"+e.toString(16):e.toString(16)}function M(e,t){var n;t=t||1/0;for(var r=e.length,s=null,o=[],i=0;i<r;++i){if((n=e.charCodeAt(i))>55295&&n<57344){if(!s){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&o.push(239,191,189);continue}s=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),s=n;continue}n=65536+(s-55296<<10|n-56320)}else s&&(t-=3)>-1&&o.push(239,191,189);if(s=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function $(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(q,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function U(e,t,n,r){for(var s=0;s<r&&!(s+n>=t.length||s>=e.length);++s)t[s+n]=e[s];return s}}).call(this,n(5))},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";t.byteLength=function(e){var t=h(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,r=h(e),i=r[0],a=r[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,a)),u=0,l=a>0?i-4:i;for(n=0;n<l;n+=4)t=s[e.charCodeAt(n)]<<18|s[e.charCodeAt(n+1)]<<12|s[e.charCodeAt(n+2)]<<6|s[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===a&&(t=s[e.charCodeAt(n)]<<2|s[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===a&&(t=s[e.charCodeAt(n)]<<10|s[e.charCodeAt(n+1)]<<4|s[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,n=e.length,s=n%3,o=[],i=0,a=n-s;i<a;i+=16383)o.push(u(e,i,i+16383>a?a:i+16383));1===s?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===s&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return o.join("")};for(var r=[],s=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,c=i.length;a<c;++a)r[a]=i[a],s[i.charCodeAt(a)]=a;function h(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function u(e,t,n){for(var s,o,i=[],a=t;a<n;a+=3)s=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(255&e[a+2]),i.push(r[(o=s)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return i.join("")}s["-".charCodeAt(0)]=62,s["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,r,s){var o,i,a=8*s-r-1,c=(1<<a)-1,h=c>>1,u=-7,l=n?s-1:0,p=n?-1:1,f=e[t+l];for(l+=p,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=256*o+e[t+l],l+=p,u-=8);for(i=o&(1<<-u)-1,o>>=-u,u+=r;u>0;i=256*i+e[t+l],l+=p,u-=8);if(0===o)o=1-h;else{if(o===c)return i?NaN:1/0*(f?-1:1);i+=Math.pow(2,r),o-=h}return(f?-1:1)*i*Math.pow(2,o-r)},t.write=function(e,t,n,r,s,o){var i,a,c,h=8*o-s-1,u=(1<<h)-1,l=u>>1,p=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,d=r?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,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+l>=1?p/c:p*Math.pow(2,1-l))*c>=2&&(i++,c/=2),i+l>=u?(a=0,i=u):i+l>=1?(a=(t*c-1)*Math.pow(2,s),i+=l):(a=t*Math.pow(2,l-1)*Math.pow(2,s),i=0));s>=8;e[n+f]=255&a,f+=d,a/=256,s-=8);for(i=i<<s|a,h+=s;h>0;e[n+f]=255&i,f+=d,i/=256,h-=8);e[n+f-d]|=128*m}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e){e.exports=JSON.parse('{"_args":[["sucrase@3.15.0","/Users/s/sushuangwork/met/act/tigall/echarts/echarts-examples"]],"_from":"sucrase@3.15.0","_id":"sucrase@3.15.0","_inBundle":false,"_integrity":"sha512-05TJOUfMgckH7wKqfk/1p4G6q16nIeW/GHQwD44vkT0mQMqqzgfHCwkX3whNmwyOo7nVF0jDLwVu/qOBTtsscw==","_location":"/sucrase","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"sucrase@3.15.0","name":"sucrase","escapedName":"sucrase","rawSpec":"3.15.0","saveSpec":null,"fetchSpec":"3.15.0"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/sucrase/-/sucrase-3.15.0.tgz","_spec":"3.15.0","_where":"/Users/s/sushuangwork/met/act/tigall/echarts/echarts-examples","author":{"name":"Alan Pierce","email":"alangpierce@gmail.com"},"bin":{"sucrase":"./bin/sucrase","sucrase-node":"./bin/sucrase-node"},"bugs":{"url":"https://github.com/alangpierce/sucrase/issues"},"dependencies":{"commander":"^4.0.0","glob":"7.1.6","lines-and-columns":"^1.1.6","mz":"^2.7.0","pirates":"^4.0.1","ts-interface-checker":"^0.1.9"},"description":"Super-fast alternative to Babel for when you can target modern JS runtimes","devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-class-properties":"^7.7.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-transform-modules-commonjs":"^7.7.0","@babel/preset-flow":"^7.0.0","@babel/preset-react":"^7.7.0","@babel/preset-typescript":"^7.7.2","@types/glob":"7.1.1","@types/mocha":"^5.2.7","@types/mz":"^0.0.32","@types/node":"^12.12.7","@types/yargs-parser":"^13.1.0","@typescript-eslint/parser":"^2.33.0","chalk":"2.4.1","codecov":"^3.6.1","eslint":"^6.6.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.5.0","eslint-plugin-import":"^2.18.2","eslint-plugin-prettier":"^3.1.1","eslint-plugin-typescript":"^0.14.0","mocha":"^7.1.1","nyc":"^14.1.1","prettier":"^2.0.5","sucrase":"^3.14.1","test262-harness":"^6.5.0","ts-interface-builder":"^0.2.1","tslint":"^5.20.1","typescript":"^3.7.2","typescript-tslint-plugin":"^0.5.4","yargs-parser":"^16.1.0"},"engines":{"node":">=8"},"homepage":"https://github.com/alangpierce/sucrase#readme","keywords":["babel","jsx","typescript","flow"],"license":"MIT","main":"dist/index","module":"dist/index.mjs","name":"sucrase","repository":{"type":"git","url":"git+https://github.com/alangpierce/sucrase.git"},"resolutions":{"**/eshost/socket.io":"^2"},"scripts":{"benchmark":"sucrase-node benchmark/benchmark.ts","benchmark-project":"sucrase-node benchmark/benchmark-project.ts","benchmark-react":"sucrase-node benchmark/benchmark-react.ts","build":"sucrase-node script/build.ts","clean":"rm -rf ./build ./dist ./dist-self-build ./dist-types ./example-runner/example-repos ./test262/test262-checkout","fast-build":"sucrase-node script/build.ts --fast","generate":"sucrase-node generator/generate.ts","lint":"sucrase-node script/lint.ts","microbenchmark":"sucrase-node benchmark/microbenchmark.ts","prepublishOnly":"yarn clean && yarn build","profile":"node --inspect-brk ./node_modules/.bin/sucrase-node ./benchmark/profile","profile-project":"node --inspect-brk ./node_modules/.bin/sucrase-node ./benchmark/benchmark-project.ts --profile","release":"sucrase-node script/release.ts","report-coverage":"nyc report --reporter=text-lcov > coverage.lcov && codecov","run-examples":"sucrase-node example-runner/example-runner.ts","test":"yarn lint && yarn test-only","test-only":"mocha \'./test/**/*.ts\'","test-with-coverage":"nyc mocha \'./test/**/*.ts\'","test262":"sucrase-node test262/run-test262.ts"},"types":"dist/index.d.ts","version":"3.15.0"}')},function(e,t,n){"use strict";var r,s,o;function i(e){switch(e){case s.num:return"num";case s.bigint:return"bigint";case s.regexp:return"regexp";case s.string:return"string";case s.name:return"name";case s.eof:return"eof";case s.bracketL:return"[";case s.bracketR:return"]";case s.braceL:return"{";case s.braceBarL:return"{|";case s.braceR:return"}";case s.braceBarR:return"|}";case s.parenL:return"(";case s.parenR:return")";case s.comma:return",";case s.semi:return";";case s.colon:return":";case s.doubleColon:return"::";case s.dot:return".";case s.question:return"?";case s.questionDot:return"?.";case s.arrow:return"=>";case s.template:return"template";case s.ellipsis:return"...";case s.backQuote:return"`";case s.dollarBraceL:return"${";case s.at:return"@";case s.hash:return"#";case s.eq:return"=";case s.assign:return"_=";case s.preIncDec:case s.postIncDec:return"++/--";case s.bang:return"!";case s.tilde:return"~";case s.pipeline:return"|>";case s.nullishCoalescing:return"??";case s.logicalOR:return"||";case s.logicalAND:return"&&";case s.bitwiseOR:return"|";case s.bitwiseXOR:return"^";case s.bitwiseAND:return"&";case s.equality:return"==/!=";case s.lessThan:return"<";case s.greaterThan:return">";case s.relationalOrEqual:return"<=/>=";case s.bitShift:return"<</>>";case s.plus:return"+";case s.minus:return"-";case s.modulo:return"%";case s.star:return"*";case s.slash:return"/";case s.exponent:return"**";case s.jsxName:return"jsxName";case s.jsxText:return"jsxText";case s.jsxTagStart:return"jsxTagStart";case s.jsxTagEnd:return"jsxTagEnd";case s.typeParameterStart:return"typeParameterStart";case s.nonNullAssertion:return"nonNullAssertion";case s._break:return"break";case s._case:return"case";case s._catch:return"catch";case s._continue:return"continue";case s._debugger:return"debugger";case s._default:return"default";case s._do:return"do";case s._else:return"else";case s._finally:return"finally";case s._for:return"for";case s._function:return"function";case s._if:return"if";case s._return:return"return";case s._switch:return"switch";case s._throw:return"throw";case s._try:return"try";case s._var:return"var";case s._let:return"let";case s._const:return"const";case s._while:return"while";case s._with:return"with";case s._new:return"new";case s._this:return"this";case s._super:return"super";case s._class:return"class";case s._extends:return"extends";case s._export:return"export";case s._import:return"import";case s._yield:return"yield";case s._null:return"null";case s._true:return"true";case s._false:return"false";case s._in:return"in";case s._instanceof:return"instanceof";case s._typeof:return"typeof";case s._void:return"void";case s._delete:return"delete";case s._async:return"async";case s._get:return"get";case s._set:return"set";case s._declare:return"declare";case s._readonly:return"readonly";case s._abstract:return"abstract";case s._static:return"static";case s._public:return"public";case s._private:return"private";case s._protected:return"protected";case s._as:return"as";case s._enum:return"enum";case s._type:return"type";case s._implements:return"implements";default:return""}}n.r(t),function(e){e[e.NONE=0]="NONE";e[e._abstract=1]="_abstract";e[e._as=2]="_as";e[e._asserts=3]="_asserts";e[e._async=4]="_async";e[e._await=5]="_await";e[e._checks=6]="_checks";e[e._constructor=7]="_constructor";e[e._declare=8]="_declare";e[e._enum=9]="_enum";e[e._exports=10]="_exports";e[e._from=11]="_from";e[e._get=12]="_get";e[e._global=13]="_global";e[e._implements=14]="_implements";e[e._infer=15]="_infer";e[e._interface=16]="_interface";e[e._is=17]="_is";e[e._keyof=18]="_keyof";e[e._mixins=19]="_mixins";e[e._module=20]="_module";e[e._namespace=21]="_namespace";e[e._of=22]="_of";e[e._opaque=23]="_opaque";e[e._private=24]="_private";e[e._protected=25]="_protected";e[e._proto=26]="_proto";e[e._public=27]="_public";e[e._readonly=28]="_readonly";e[e._require=29]="_require";e[e._set=30]="_set";e[e._static=31]="_static";e[e._type=32]="_type";e[e._unique=33]="_unique"}(r||(r={})),function(e){e[e.PRECEDENCE_MASK=15]="PRECEDENCE_MASK";e[e.IS_KEYWORD=16]="IS_KEYWORD";e[e.IS_ASSIGN=32]="IS_ASSIGN";e[e.IS_RIGHT_ASSOCIATIVE=64]="IS_RIGHT_ASSOCIATIVE";e[e.IS_PREFIX=128]="IS_PREFIX";e[e.IS_POSTFIX=256]="IS_POSTFIX";e[e.num=0]="num";e[e.bigint=512]="bigint";e[e.regexp=1024]="regexp";e[e.string=1536]="string";e[e.name=2048]="name";e[e.eof=2560]="eof";e[e.bracketL=3072]="bracketL";e[e.bracketR=3584]="bracketR";e[e.braceL=4096]="braceL";e[e.braceBarL=4608]="braceBarL";e[e.braceR=5120]="braceR";e[e.braceBarR=5632]="braceBarR";e[e.parenL=6144]="parenL";e[e.parenR=6656]="parenR";e[e.comma=7168]="comma";e[e.semi=7680]="semi";e[e.colon=8192]="colon";e[e.doubleColon=8704]="doubleColon";e[e.dot=9216]="dot";e[e.question=9728]="question";e[e.questionDot=10240]="questionDot";e[e.arrow=10752]="arrow";e[e.template=11264]="template";e[e.ellipsis=11776]="ellipsis";e[e.backQuote=12288]="backQuote";e[e.dollarBraceL=12800]="dollarBraceL";e[e.at=13312]="at";e[e.hash=13824]="hash";e[e.eq=14368]="eq";e[e.assign=14880]="assign";e[e.preIncDec=15744]="preIncDec";e[e.postIncDec=16256]="postIncDec";e[e.bang=16512]="bang";e[e.tilde=17024]="tilde";e[e.pipeline=17409]="pipeline";e[e.nullishCoalescing=17922]="nullishCoalescing";e[e.logicalOR=18434]="logicalOR";e[e.logicalAND=18947]="logicalAND";e[e.bitwiseOR=19460]="bitwiseOR";e[e.bitwiseXOR=19973]="bitwiseXOR";e[e.bitwiseAND=20486]="bitwiseAND";e[e.equality=20999]="equality";e[e.lessThan=21512]="lessThan";e[e.greaterThan=22024]="greaterThan";e[e.relationalOrEqual=22536]="relationalOrEqual";e[e.bitShift=23049]="bitShift";e[e.plus=23690]="plus";e[e.minus=24202]="minus";e[e.modulo=24587]="modulo";e[e.star=25099]="star";e[e.slash=25611]="slash";e[e.exponent=26188]="exponent";e[e.jsxName=26624]="jsxName";e[e.jsxText=27136]="jsxText";e[e.jsxTagStart=27648]="jsxTagStart";e[e.jsxTagEnd=28160]="jsxTagEnd";e[e.typeParameterStart=28672]="typeParameterStart";e[e.nonNullAssertion=29184]="nonNullAssertion";e[e._break=29712]="_break";e[e._case=30224]="_case";e[e._catch=30736]="_catch";e[e._continue=31248]="_continue";e[e._debugger=31760]="_debugger";e[e._default=32272]="_default";e[e._do=32784]="_do";e[e._else=33296]="_else";e[e._finally=33808]="_finally";e[e._for=34320]="_for";e[e._function=34832]="_function";e[e._if=35344]="_if";e[e._return=35856]="_return";e[e._switch=36368]="_switch";e[e._throw=37008]="_throw";e[e._try=37392]="_try";e[e._var=37904]="_var";e[e._let=38416]="_let";e[e._const=38928]="_const";e[e._while=39440]="_while";e[e._with=39952]="_with";e[e._new=40464]="_new";e[e._this=40976]="_this";e[e._super=41488]="_super";e[e._class=42e3]="_class";e[e._extends=42512]="_extends";e[e._export=43024]="_export";e[e._import=43536]="_import";e[e._yield=44048]="_yield";e[e._null=44560]="_null";e[e._true=45072]="_true";e[e._false=45584]="_false";e[e._in=46104]="_in";e[e._instanceof=46616]="_instanceof";e[e._typeof=47248]="_typeof";e[e._void=47760]="_void";e[e._delete=48272]="_delete";e[e._async=48656]="_async";e[e._get=49168]="_get";e[e._set=49680]="_set";e[e._declare=50192]="_declare";e[e._readonly=50704]="_readonly";e[e._abstract=51216]="_abstract";e[e._static=51728]="_static";e[e._public=52240]="_public";e[e._private=52752]="_private";e[e._protected=53264]="_protected";e[e._as=53776]="_as";e[e._enum=54288]="_enum";e[e._type=54800]="_type";e[e._implements=55312]="_implements"}(s||(s={}));class a{constructor(e,t,n){this.startTokenIndex=e,this.endTokenIndex=t,this.isFunctionScope=n}}class c{constructor(e,t,n,r,s,o,i,a,c,h,u,l){this.potentialArrowAt=e,this.noAnonFunctionType=t,this.tokensLength=n,this.scopesLength=r,this.pos=s,this.type=o,this.contextualKeyword=i,this.start=a,this.end=c,this.isType=h,this.scopeDepth=u,this.error=l}}class h{constructor(){h.prototype.__init.call(this),h.prototype.__init2.call(this),h.prototype.__init3.call(this),h.prototype.__init4.call(this),h.prototype.__init5.call(this),h.prototype.__init6.call(this),h.prototype.__init7.call(this),h.prototype.__init8.call(this),h.prototype.__init9.call(this),h.prototype.__init10.call(this),h.prototype.__init11.call(this),h.prototype.__init12.call(this)}__init(){this.potentialArrowAt=-1}__init2(){this.noAnonFunctionType=!1}__init3(){this.tokens=[]}__init4(){this.scopes=[]}__init5(){this.pos=0}__init6(){this.type=s.eof}__init7(){this.contextualKeyword=r.NONE}__init8(){this.start=0}__init9(){this.end=0}__init10(){this.isType=!1}__init11(){this.scopeDepth=0}__init12(){this.error=null}snapshot(){return new c(this.potentialArrowAt,this.noAnonFunctionType,this.tokens.length,this.scopes.length,this.pos,this.type,this.contextualKeyword,this.start,this.end,this.isType,this.scopeDepth,this.error)}restoreFromSnapshot(e){this.potentialArrowAt=e.potentialArrowAt,this.noAnonFunctionType=e.noAnonFunctionType,this.tokens.length=e.tokensLength,this.scopes.length=e.scopesLength,this.pos=e.pos,this.type=e.type,this.contextualKeyword=e.contextualKeyword,this.start=e.start,this.end=e.end,this.isType=e.isType,this.scopeDepth=e.scopeDepth,this.error=e.error}}let u,l,p,f,d,m;function k(){return m++}function g(e){if("pos"in e){const t=function(e){let t=1,n=1;for(let r=0;r<e;r++)d.charCodeAt(r)===o.lineFeed?(t++,n=1):n++;return new _(t,n)}(e.pos);e.message+=` (${t.line}:${t.column})`,e.loc=t}return e}!function(e){e[e.backSpace=8]="backSpace";e[e.lineFeed=10]="lineFeed";e[e.carriageReturn=13]="carriageReturn";e[e.shiftOut=14]="shiftOut";e[e.space=32]="space";e[e.exclamationMark=33]="exclamationMark";e[e.quotationMark=34]="quotationMark";e[e.numberSign=35]="numberSign";e[e.dollarSign=36]="dollarSign";e[e.percentSign=37]="percentSign";e[e.ampersand=38]="ampersand";e[e.apostrophe=39]="apostrophe";e[e.leftParenthesis=40]="leftParenthesis";e[e.rightParenthesis=41]="rightParenthesis";e[e.asterisk=42]="asterisk";e[e.plusSign=43]="plusSign";e[e.comma=44]="comma";e[e.dash=45]="dash";e[e.dot=46]="dot";e[e.slash=47]="slash";e[e.digit0=48]="digit0";e[e.digit1=49]="digit1";e[e.digit2=50]="digit2";e[e.digit3=51]="digit3";e[e.digit4=52]="digit4";e[e.digit5=53]="digit5";e[e.digit6=54]="digit6";e[e.digit7=55]="digit7";e[e.digit8=56]="digit8";e[e.digit9=57]="digit9";e[e.colon=58]="colon";e[e.semicolon=59]="semicolon";e[e.lessThan=60]="lessThan";e[e.equalsTo=61]="equalsTo";e[e.greaterThan=62]="greaterThan";e[e.questionMark=63]="questionMark";e[e.atSign=64]="atSign";e[e.uppercaseA=65]="uppercaseA";e[e.uppercaseB=66]="uppercaseB";e[e.uppercaseC=67]="uppercaseC";e[e.uppercaseD=68]="uppercaseD";e[e.uppercaseE=69]="uppercaseE";e[e.uppercaseF=70]="uppercaseF";e[e.uppercaseG=71]="uppercaseG";e[e.uppercaseH=72]="uppercaseH";e[e.uppercaseI=73]="uppercaseI";e[e.uppercaseJ=74]="uppercaseJ";e[e.uppercaseK=75]="uppercaseK";e[e.uppercaseL=76]="uppercaseL";e[e.uppercaseM=77]="uppercaseM";e[e.uppercaseN=78]="uppercaseN";e[e.uppercaseO=79]="uppercaseO";e[e.uppercaseP=80]="uppercaseP";e[e.uppercaseQ=81]="uppercaseQ";e[e.uppercaseR=82]="uppercaseR";e[e.uppercaseS=83]="uppercaseS";e[e.uppercaseT=84]="uppercaseT";e[e.uppercaseU=85]="uppercaseU";e[e.uppercaseV=86]="uppercaseV";e[e.uppercaseW=87]="uppercaseW";e[e.uppercaseX=88]="uppercaseX";e[e.uppercaseY=89]="uppercaseY";e[e.uppercaseZ=90]="uppercaseZ";e[e.leftSquareBracket=91]="leftSquareBracket";e[e.backslash=92]="backslash";e[e.rightSquareBracket=93]="rightSquareBracket";e[e.caret=94]="caret";e[e.underscore=95]="underscore";e[e.graveAccent=96]="graveAccent";e[e.lowercaseA=97]="lowercaseA";e[e.lowercaseB=98]="lowercaseB";e[e.lowercaseC=99]="lowercaseC";e[e.lowercaseD=100]="lowercaseD";e[e.lowercaseE=101]="lowercaseE";e[e.lowercaseF=102]="lowercaseF";e[e.lowercaseG=103]="lowercaseG";e[e.lowercaseH=104]="lowercaseH";e[e.lowercaseI=105]="lowercaseI";e[e.lowercaseJ=106]="lowercaseJ";e[e.lowercaseK=107]="lowercaseK";e[e.lowercaseL=108]="lowercaseL";e[e.lowercaseM=109]="lowercaseM";e[e.lowercaseN=110]="lowercaseN";e[e.lowercaseO=111]="lowercaseO";e[e.lowercaseP=112]="lowercaseP";e[e.lowercaseQ=113]="lowercaseQ";e[e.lowercaseR=114]="lowercaseR";e[e.lowercaseS=115]="lowercaseS";e[e.lowercaseT=116]="lowercaseT";e[e.lowercaseU=117]="lowercaseU";e[e.lowercaseV=118]="lowercaseV";e[e.lowercaseW=119]="lowercaseW";e[e.lowercaseX=120]="lowercaseX";e[e.lowercaseY=121]="lowercaseY";e[e.lowercaseZ=122]="lowercaseZ";e[e.leftCurlyBrace=123]="leftCurlyBrace";e[e.verticalBar=124]="verticalBar";e[e.rightCurlyBrace=125]="rightCurlyBrace";e[e.tilde=126]="tilde";e[e.nonBreakingSpace=160]="nonBreakingSpace";e[e.oghamSpaceMark=5760]="oghamSpaceMark";e[e.lineSeparator=8232]="lineSeparator";e[e.paragraphSeparator=8233]="paragraphSeparator"}(o||(o={}));class _{constructor(e,t){this.line=e,this.column=t}}function y(e){return f.contextualKeyword===e}function x(e){const t=Q();return t.type===s.name&&t.contextualKeyword===e}function T(e){return f.contextualKeyword===e&&z(s.name)}function b(e){T(e)||C()}function w(){return X(s.eof)||X(s.braceR)||v()}function v(){const e=f.tokens[f.tokens.length-1];for(let t=e?e.end:0;t<f.start;t++){const e=d.charCodeAt(t);if(e===o.lineFeed||e===o.carriageReturn||8232===e||8233===e)return!0}return!1}function I(){return z(s.semi)||w()}function A(){I()||C('Unexpected token, expected ";"')}function E(e){z(e)||C(`Unexpected token, expected "${i(e)}"`)}function C(e="Unexpected token",t=f.start){if(f.error)return;const n=new SyntaxError(e);n.pos=t,f.error=n,f.pos=d.length,re(s.eof)}const S=[9,11,12,o.space,o.nonBreakingSpace,o.oghamSpaceMark,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],R=new Uint8Array(65536);for(const e of S)R[e]=1;function N(e){if(e<48)return 36===e;if(e<58)return!0;if(e<65)return!1;if(e<91)return!0;if(e<97)return 95===e;if(e<123)return!0;if(e<128)return!1;throw new Error("Should not be called with non-ASCII char code.")}const L=new Uint8Array(65536);for(let e=0;e<128;e++)L[e]=N(e)?1:0;for(let e=128;e<65536;e++)L[e]=1;for(const e of S)L[e]=0;L[8232]=0,L[8233]=0;const P=L.slice();for(let e=o.digit0;e<=o.digit9;e++)P[e]=0;const O=new Int32Array([-1,27,594,729,1566,2187,2673,3294,-1,3510,-1,4428,4563,4644,4941,5319,5508,-1,6048,6507,6966,7398,7560,7722,-1,7938,-1,-1,-1,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,243,-1,-1,-1,486,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,108,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,216,-1,-1,-1,-1,-1,-1,r._abstract<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._as<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,405,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,-1,-1,-1,-1,-1,r._asserts<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,432,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,459,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._async<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,513,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,540,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,567,-1,-1,-1,-1,-1,-1,r._await<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,621,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,648,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,675,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,702,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._break<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,756,-1,-1,-1,-1,-1,-1,918,-1,-1,-1,1053,-1,-1,1161,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,783,837,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,810,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._case<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,864,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._catch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,945,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,972,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,999,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1026,-1,-1,-1,-1,-1,-1,-1,r._checks<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1080,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1107,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1134,-1,-1,-1,-1,-1,-1,-1,1+(s._class<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1215,1431,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1242,-1,-1,-1,-1,-1,-1,1+(s._const<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1269,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1296,-1,-1,-1,-1,-1,-1,-1,-1,1323,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1350,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1404,-1,-1,-1,-1,-1,-1,-1,-1,r._constructor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1458,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1485,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1512,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1539,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._continue<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1593,-1,-1,-1,-1,-1,-1,-1,-1,-1,2160,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1620,1782,-1,-1,1917,-1,-1,-1,-1,-1,2052,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1647,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1674,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1701,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1728,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1755,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._debugger<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1809,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1836,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1863,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1890,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._declare<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1944,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1971,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1998,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2025,-1,-1,-1,-1,-1,-1,1+(s._default<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2079,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2106,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2133,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._delete<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._do<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2214,-1,2295,-1,-1,-1,-1,-1,-1,-1,-1,-1,2376,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2241,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2268,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._else<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2322,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._enum<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2403,-1,-1,-1,2538,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2430,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2457,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2484,-1,-1,-1,-1,-1,-1,1+(s._export<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2511,-1,-1,-1,-1,-1,-1,-1,r._exports<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2565,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2592,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2619,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2646,-1,-1,-1,-1,-1,-1,-1,1+(s._extends<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,-1,-1,-1,-1,-1,-1,-1,2808,-1,-1,-1,-1,-1,2970,-1,-1,3024,-1,-1,3105,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2727,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2754,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._false<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2835,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2862,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2889,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2916,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2943,-1,1+(s._finally<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2997,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._for<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3051,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3078,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._from<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3132,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3186,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3213,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._function<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3321,-1,-1,-1,-1,-1,-1,3375,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3348,-1,-1,-1,-1,-1,-1,r._get<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3429,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3456,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3483,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._global<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3537,-1,-1,-1,-1,-1,-1,3564,3888,-1,-1,-1,-1,4401,-1,-1,-1,-1,-1,-1,-1,1+(s._if<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3591,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3618,-1,-1,3807,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3645,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3672,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3699,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3726,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3753,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3780,-1,-1,-1,-1,-1,-1,-1,r._implements<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3834,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3861,-1,-1,-1,-1,-1,-1,1+(s._import<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._in<<1),-1,-1,-1,-1,-1,3915,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3996,4212,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3942,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3969,-1,-1,-1,-1,-1,-1,-1,-1,r._infer<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4023,-1,-1,-1,-1,-1,-1,-1,4050,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4131,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4158,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4185,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._instanceof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4239,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4293,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4320,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4374,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._interface<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._is<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4455,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4482,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4509,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._keyof<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4590,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4617,-1,-1,-1,-1,-1,-1,1+(s._let<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4671,-1,-1,-1,-1,-1,4806,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4725,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4752,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4779,-1,-1,-1,-1,-1,-1,-1,r._mixins<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4833,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4860,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4887,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4914,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._module<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4968,-1,-1,-1,5184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5238,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4995,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5022,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5049,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5130,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5157,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._namespace<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5211,-1,-1,-1,1+(s._new<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5265,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5292,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._null<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5346,-1,-1,-1,-1,-1,-1,-1,-1,-1,5373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._of<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5427,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5454,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5481,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._opaque<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5535,-1,-1,5913,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5562,-1,-1,-1,-1,-1,5697,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5589,-1,-1,-1,-1,-1,5616,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5643,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5670,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._private<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5724,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5751,-1,-1,-1,-1,-1,-1,-1,-1,-1,5886,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5778,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5805,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5832,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._protected<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._proto<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5940,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5967,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5994,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6021,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._public<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6075,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6102,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6264,-1,-1,6399,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6156,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6183,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6237,-1,r._readonly<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6318,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6345,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6372,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._require<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6426,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6453,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6480,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._return<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6534,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6588,6723,-1,6831,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6561,-1,-1,-1,-1,-1,-1,r._set<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6615,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6642,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6669,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6696,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._static<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6750,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6777,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6804,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._super<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6885,-1,-1,-1,-1,-1,-1,-1,-1,-1,6912,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6939,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._switch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6993,-1,-1,-1,-1,-1,-1,-1,-1,-1,7155,-1,-1,-1,-1,-1,-1,7263,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7020,-1,-1,-1,-1,-1,-1,-1,-1,7074,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7047,-1,-1,-1,-1,-1,-1,-1,1+(s._this<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7128,-1,-1,-1,1+(s._throw<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7182,-1,-1,-1,7236,-1,-1,-1,-1,-1,-1,7209,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._true<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._try<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7290,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7317,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._type<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7344,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7371,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._typeof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7425,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7452,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7479,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7506,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7533,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,r._unique<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7587,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7641,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7614,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._var<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7668,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7695,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._void<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7749,7857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7776,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7803,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7830,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._while<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7884,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7911,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._with<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7965,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7992,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8019,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8046,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(s._yield<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);var D;function j(e){const t=e.identifierRole;return t===D.TopLevelDeclaration||t===D.FunctionScopedDeclaration||t===D.BlockScopedDeclaration||t===D.ObjectShorthandTopLevelDeclaration||t===D.ObjectShorthandFunctionScopedDeclaration||t===D.ObjectShorthandBlockScopedDeclaration}function B(e){const t=e.identifierRole;return t===D.FunctionScopedDeclaration||t===D.BlockScopedDeclaration||t===D.ObjectShorthandFunctionScopedDeclaration||t===D.ObjectShorthandBlockScopedDeclaration}function q(e){const t=e.identifierRole;return t===D.TopLevelDeclaration||t===D.ObjectShorthandTopLevelDeclaration||t===D.ImportDeclaration}function F(e){const t=e.identifierRole;return t===D.TopLevelDeclaration||t===D.BlockScopedDeclaration||t===D.ObjectShorthandTopLevelDeclaration||t===D.ObjectShorthandBlockScopedDeclaration}function M(e){const t=e.identifierRole;return t===D.FunctionScopedDeclaration||t===D.ObjectShorthandFunctionScopedDeclaration}function $(e){return e.identifierRole===D.ObjectShorthandTopLevelDeclaration||e.identifierRole===D.ObjectShorthandBlockScopedDeclaration||e.identifierRole===D.ObjectShorthandFunctionScopedDeclaration}!function(e){e[e.Access=0]="Access";e[e.ExportAccess=1]="ExportAccess";e[e.TopLevelDeclaration=2]="TopLevelDeclaration";e[e.FunctionScopedDeclaration=3]="FunctionScopedDeclaration";e[e.BlockScopedDeclaration=4]="BlockScopedDeclaration";e[e.ObjectShorthandTopLevelDeclaration=5]="ObjectShorthandTopLevelDeclaration";e[e.ObjectShorthandFunctionScopedDeclaration=6]="ObjectShorthandFunctionScopedDeclaration";e[e.ObjectShorthandBlockScopedDeclaration=7]="ObjectShorthandBlockScopedDeclaration";e[e.ObjectShorthand=8]="ObjectShorthand";e[e.ImportDeclaration=9]="ImportDeclaration";e[e.ObjectKey=10]="ObjectKey";e[e.ImportAccess=11]="ImportAccess"}(D||(D={}));class U{constructor(){this.type=f.type,this.contextualKeyword=f.contextualKeyword,this.start=f.start,this.end=f.end,this.scopeDepth=f.scopeDepth,this.isType=f.isType,this.identifierRole=null,this.shadowsGlobal=!1,this.contextId=null,this.rhsEndIndex=null,this.isExpression=!1,this.numNullishCoalesceStarts=0,this.numNullishCoalesceEnds=0,this.isOptionalChainStart=!1,this.isOptionalChainEnd=!1,this.subscriptStartIndex=null,this.nullishStartIndex=null}}function K(){f.tokens.push(new U),Z()}function Y(){f.tokens.push(new U),f.start=f.pos,function(){for(;;){if(f.pos>=d.length)return void C("Unterminated template");const e=d.charCodeAt(f.pos);if(e===o.graveAccent||e===o.dollarSign&&d.charCodeAt(f.pos+1)===o.leftCurlyBrace)return f.pos===f.start&&X(s.template)?e===o.dollarSign?(f.pos+=2,void re(s.dollarBraceL)):(++f.pos,void re(s.backQuote)):void re(s.template);e===o.backslash&&f.pos++,f.pos++}}()}function V(){f.type===s.assign&&--f.pos,function(){const e=f.pos;let t=!1,n=!1;for(;;){if(f.pos>=d.length)return void C("Unterminated regular expression",e);const r=d.charCodeAt(f.pos);if(t)t=!1;else{if(r===o.leftSquareBracket)n=!0;else if(r===o.rightSquareBracket&&n)n=!1;else if(r===o.slash&&!n)break;t=r===o.backslash}++f.pos}++f.pos,function(){for(;f.pos<d.length;){const e=d.charCodeAt(f.pos);if(L[e])f.pos++;else{if(e!==o.backslash)break;if(f.pos+=2,d.charCodeAt(f.pos)===o.leftCurlyBrace){for(;f.pos<d.length&&d.charCodeAt(f.pos)!==o.rightCurlyBrace;)f.pos++;f.pos++}}}}(),re(s.regexp)}()}function H(e){for(let t=f.tokens.length-e;t<f.tokens.length;t++)f.tokens[t].isType=!0;const t=f.isType;return f.isType=!0,t}function W(e){f.isType=e}function z(e){return!!X(e)&&(K(),!0)}function X(e){return f.type===e}function J(){const e=f.snapshot();K();const t=f.type;return f.restoreFromSnapshot(e),t}class G{constructor(e,t){this.type=e,this.contextualKeyword=t}}function Q(){const e=f.snapshot();K();const t=f.type,n=f.contextualKeyword;return f.restoreFromSnapshot(e),new G(t,n)}function Z(){if(ne(),f.start=f.pos,f.pos>=d.length){const e=f.tokens;return e.length>=2&&e[e.length-1].start>=d.length&&e[e.length-2].start>=d.length&&C("Unexpectedly reached the end of input."),void re(s.eof)}var e;e=d.charCodeAt(f.pos),P[e]||e===o.backslash||e===o.atSign&&d.charCodeAt(f.pos+1)===o.atSign?function(){let e=0,t=0,n=f.pos;for(;n<d.length&&(t=d.charCodeAt(n),!(t<o.lowercaseA||t>o.lowercaseZ));){const r=O[e+(t-o.lowercaseA)+1];if(-1===r)break;e=r,n++}const r=O[e];if(r>-1&&!L[t])return f.pos=n,void(1&r?re(r>>>1):re(s.name,r>>>1));for(;n<d.length;){const e=d.charCodeAt(n);if(L[e])n++;else if(e===o.backslash){if(n+=2,d.charCodeAt(n)===o.leftCurlyBrace){for(;n<d.length&&d.charCodeAt(n)!==o.rightCurlyBrace;)n++;n++}}else{if(e!==o.atSign||d.charCodeAt(n+1)!==o.atSign)break;n+=2}}f.pos=n,re(s.name)}():se(e)}function ee(){for(;d.charCodeAt(f.pos)!==o.asterisk||d.charCodeAt(f.pos+1)!==o.slash;)if(f.pos++,f.pos>d.length)return void C("Unterminated comment",f.pos-2);f.pos+=2}function te(e){let t=d.charCodeAt(f.pos+=e);if(f.pos<d.length)for(;t!==o.lineFeed&&t!==o.carriageReturn&&t!==o.lineSeparator&&t!==o.paragraphSeparator&&++f.pos<d.length;)t=d.charCodeAt(f.pos)}function ne(){for(;f.pos<d.length;){const e=d.charCodeAt(f.pos);switch(e){case o.carriageReturn:d.charCodeAt(f.pos+1)===o.lineFeed&&++f.pos;case o.lineFeed:case o.lineSeparator:case o.paragraphSeparator:++f.pos;break;case o.slash:switch(d.charCodeAt(f.pos+1)){case o.asterisk:f.pos+=2,ee();break;case o.slash:te(2);break;default:return}break;default:if(!R[e])return;++f.pos}}}function re(e,t=r.NONE){f.end=f.pos,f.type=e,f.contextualKeyword=t}function se(e){switch(e){case o.numberSign:return++f.pos,void re(s.hash);case o.dot:return void function(){const e=d.charCodeAt(f.pos+1);e>=o.digit0&&e<=o.digit9?ae(!0):e===o.dot&&d.charCodeAt(f.pos+2)===o.dot?(f.pos+=3,re(s.ellipsis)):(++f.pos,re(s.dot))}();case o.leftParenthesis:return++f.pos,void re(s.parenL);case o.rightParenthesis:return++f.pos,void re(s.parenR);case o.semicolon:return++f.pos,void re(s.semi);case o.comma:return++f.pos,void re(s.comma);case o.leftSquareBracket:return++f.pos,void re(s.bracketL);case o.rightSquareBracket:return++f.pos,void re(s.bracketR);case o.leftCurlyBrace:return void(p&&d.charCodeAt(f.pos+1)===o.verticalBar?oe(s.braceBarL,2):(++f.pos,re(s.braceL)));case o.rightCurlyBrace:return++f.pos,void re(s.braceR);case o.colon:return void(d.charCodeAt(f.pos+1)===o.colon?oe(s.doubleColon,2):(++f.pos,re(s.colon)));case o.questionMark:return void function(){const e=d.charCodeAt(f.pos+1),t=d.charCodeAt(f.pos+2);e!==o.questionMark||f.isType?e!==o.dot||t>=o.digit0&&t<=o.digit9?(++f.pos,re(s.question)):(f.pos+=2,re(s.questionDot)):t===o.equalsTo?oe(s.assign,3):oe(s.nullishCoalescing,2)}();case o.atSign:return++f.pos,void re(s.at);case o.graveAccent:return++f.pos,void re(s.backQuote);case o.digit0:{const e=d.charCodeAt(f.pos+1);if(e===o.lowercaseX||e===o.uppercaseX||e===o.lowercaseO||e===o.uppercaseO||e===o.lowercaseB||e===o.uppercaseB)return void function(){let e=!1;f.pos+=2,ie(),d.charCodeAt(f.pos)===o.lowercaseN&&(++f.pos,e=!0);if(e)return void re(s.bigint);re(s.num)}()}case o.digit1:case o.digit2:case o.digit3:case o.digit4:case o.digit5:case o.digit6:case o.digit7:case o.digit8:case o.digit9:return void ae(!1);case o.quotationMark:case o.apostrophe:return void function(e){for(f.pos++;;){if(f.pos>=d.length)return void C("Unterminated string constant");const t=d.charCodeAt(f.pos);if(t===o.backslash)f.pos++;else if(t===e)break;f.pos++}f.pos++,re(s.string)}(e);case o.slash:return void(d.charCodeAt(f.pos+1)===o.equalsTo?oe(s.assign,2):oe(s.slash,1));case o.percentSign:case o.asterisk:return void function(e){let t=e===o.asterisk?s.star:s.modulo,n=1,r=d.charCodeAt(f.pos+1);e===o.asterisk&&r===o.asterisk&&(n++,r=d.charCodeAt(f.pos+2),t=s.exponent),r===o.equalsTo&&d.charCodeAt(f.pos+2)!==o.greaterThan&&(n++,t=s.assign),oe(t,n)}(e);case o.verticalBar:case o.ampersand:return void function(e){const t=d.charCodeAt(f.pos+1);if(t!==e){if(e===o.verticalBar){if(t===o.greaterThan)return void oe(s.pipeline,2);if(t===o.rightCurlyBrace&&p)return void oe(s.braceBarR,2)}t!==o.equalsTo?oe(e===o.verticalBar?s.bitwiseOR:s.bitwiseAND,1):oe(s.assign,2)}else d.charCodeAt(f.pos+2)===o.equalsTo?oe(s.assign,3):oe(e===o.verticalBar?s.logicalOR:s.logicalAND,2)}(e);case o.caret:return void(d.charCodeAt(f.pos+1)===o.equalsTo?oe(s.assign,2):oe(s.bitwiseXOR,1));case o.plusSign:case o.dash:return void function(e){const t=d.charCodeAt(f.pos+1);t!==e?t===o.equalsTo?oe(s.assign,2):e===o.plusSign?oe(s.plus,1):oe(s.minus,1):oe(s.preIncDec,2)}(e);case o.lessThan:case o.greaterThan:return void function(e){if(e===o.greaterThan&&f.isType)return void oe(s.greaterThan,1);const t=d.charCodeAt(f.pos+1);if(t===e){const t=e===o.greaterThan&&d.charCodeAt(f.pos+2)===o.greaterThan?3:2;return d.charCodeAt(f.pos+t)===o.equalsTo?void oe(s.assign,t+1):void oe(s.bitShift,t)}t===o.equalsTo?oe(s.relationalOrEqual,2):e===o.lessThan?oe(s.lessThan,1):oe(s.greaterThan,1)}(e);case o.equalsTo:case o.exclamationMark:return void function(e){const t=d.charCodeAt(f.pos+1);if(t!==o.equalsTo)return e===o.equalsTo&&t===o.greaterThan?(f.pos+=2,void re(s.arrow)):void oe(e===o.equalsTo?s.eq:s.bang,1);oe(s.equality,d.charCodeAt(f.pos+2)===o.equalsTo?3:2)}(e);case o.tilde:return void oe(s.tilde,1)}C(`Unexpected character '${String.fromCharCode(e)}'`,f.pos)}function oe(e,t){f.pos+=t,re(e)}function ie(){for(;;){const e=d.charCodeAt(f.pos);if(!(e>=o.digit0&&e<=o.digit9||e>=o.lowercaseA&&e<=o.lowercaseF||e>=o.uppercaseA&&e<=o.uppercaseF||e===o.underscore))break;f.pos++}}function ae(e){let t=!1;e||ie();let n=d.charCodeAt(f.pos);n===o.dot&&(++f.pos,ie(),n=d.charCodeAt(f.pos)),n!==o.uppercaseE&&n!==o.lowercaseE||(n=d.charCodeAt(++f.pos),n!==o.plusSign&&n!==o.dash||++f.pos,ie(),n=d.charCodeAt(f.pos)),n===o.lowercaseN&&(++f.pos,t=!0),re(t?s.bigint:s.num)}var ce={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"};function he(e){const[t,n]=ue(e.jsxPragma||"React.createElement"),[r,s]=ue(e.jsxFragmentPragma||"React.Fragment");return{base:t,suffix:n,fragmentBase:r,fragmentSuffix:s}}function ue(e){let t=e.indexOf(".");return-1===t&&(t=e.length),[e.slice(0,t),e.slice(t)]}class le{getPrefixCode(){return""}getSuffixCode(){return""}}const pe=/^[\da-fA-F]+$/,fe=/^\d+$/;class de extends le{__init(){this.lastLineNumber=1}__init2(){this.lastIndex=0}__init3(){this.filenameVarName=null}constructor(e,t,n,r,s){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=r,this.options=s,de.prototype.__init.call(this),de.prototype.__init2.call(this),de.prototype.__init3.call(this),this.jsxPragmaInfo=he(s)}process(){return!!this.tokens.matches1(s.jsxTagStart)&&(this.processJSXTag(),!0)}getPrefixCode(){return this.filenameVarName?`const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath||"")};`:""}getLineNumberForIndex(e){const t=this.tokens.code;for(;this.lastIndex<e&&this.lastIndex<t.length;)"\n"===t[this.lastIndex]&&this.lastLineNumber++,this.lastIndex++;return this.lastLineNumber}getFilenameVarName(){return this.filenameVarName||(this.filenameVarName=this.nameManager.claimFreeName("_jsxFileName")),this.filenameVarName}processProps(e){const t=this.getLineNumberForIndex(e),n=this.options.production?"":`__self: this, __source: {fileName: ${this.getFilenameVarName()}, lineNumber: ${t}}`;if(this.tokens.matches1(s.jsxName)||this.tokens.matches1(s.braceL)){for(this.tokens.appendCode(", {");;){if(this.tokens.matches2(s.jsxName,s.eq))this.processPropKeyName(),this.tokens.replaceToken(": "),this.tokens.matches1(s.braceL)?(this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")):this.tokens.matches1(s.jsxTagStart)?this.processJSXTag():this.processStringPropValue();else if(this.tokens.matches1(s.jsxName))this.processPropKeyName(),this.tokens.appendCode(": true");else{if(!this.tokens.matches1(s.braceL))break;this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")}this.tokens.appendCode(",")}n?this.tokens.appendCode(` ${n}}`):this.tokens.appendCode("}")}else n?this.tokens.appendCode(`, {${n}}`):this.tokens.appendCode(", null")}processPropKeyName(){const e=this.tokens.identifierName();e.includes("-")?this.tokens.replaceToken(`'${e}'`):this.tokens.copyToken()}processStringPropValue(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start+1,e.end-1),n=ke(t),r=function(e){let t="";for(let n=0;n<e.length;n++){const r=e[n];if("\n"===r)if(/\s/.test(e[n+1]))for(t+=" ";n<e.length&&/\s/.test(e[n+1]);)n++;else t+="\n";else if("&"===r){const{entity:r,newI:s}=ge(e,n+1);t+=r,n=s-1}else t+=r}return JSON.stringify(t)}(t);this.tokens.replaceToken(r+n)}processTagIntro(){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType||!this.tokens.matches2AtIndex(e-1,s.jsxName,s.jsxName)&&!this.tokens.matches2AtIndex(e-1,s.greaterThan,s.jsxName)&&!this.tokens.matches1AtIndex(e,s.braceL)&&!this.tokens.matches1AtIndex(e,s.jsxTagEnd)&&!this.tokens.matches2AtIndex(e,s.slash,s.jsxTagEnd);)e++;if(e===this.tokens.currentIndex()+1){const e=this.tokens.identifierName();me(e)&&this.tokens.replaceToken(`'${e}'`)}for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}processChildren(){for(;;){if(this.tokens.matches2(s.jsxTagStart,s.slash))return;if(this.tokens.matches1(s.braceL))this.tokens.matches2(s.braceL,s.braceR)?(this.tokens.replaceToken(""),this.tokens.replaceToken("")):(this.tokens.replaceToken(", "),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken(""));else if(this.tokens.matches1(s.jsxTagStart))this.tokens.appendCode(", "),this.processJSXTag();else{if(!this.tokens.matches1(s.jsxText))throw new Error("Unexpected token when processing JSX children.");this.processChildTextElement()}}}processChildTextElement(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start,e.end),n=ke(t),r=function(e){let t="",n="",r=!1,s=!1;for(let o=0;o<e.length;o++){const i=e[o];if(" "===i||"\t"===i||"\r"===i)r||(n+=i);else if("\n"===i)n="",r=!0;else{if(s&&r&&(t+=" "),t+=n,n="","&"===i){const{entity:n,newI:r}=ge(e,o+1);o=r-1,t+=n}else t+=i;s=!0,r=!1}}r||(t+=n);return JSON.stringify(t)}(t);'""'===r?this.tokens.replaceToken(n):this.tokens.replaceToken(`, ${r}${n}`)}processJSXTag(){const{jsxPragmaInfo:e}=this,t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.base)||e.base,n=this.tokens.currentToken().start;if(this.tokens.replaceToken(`${t}${e.suffix}(`),this.tokens.matches1(s.jsxTagEnd)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.fragmentBase)||e.fragmentBase;for(this.tokens.replaceToken(`${t}${e.fragmentSuffix}, null`),this.processChildren();!this.tokens.matches1(s.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}else if(this.processTagIntro(),this.processProps(n),this.tokens.matches2(s.slash,s.jsxTagEnd))this.tokens.replaceToken(""),this.tokens.replaceToken(")");else{if(!this.tokens.matches1(s.jsxTagEnd))throw new Error("Expected either /> or > at the end of the tag.");for(this.tokens.replaceToken(""),this.processChildren();!this.tokens.matches1(s.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}}}function me(e){const t=e.charCodeAt(0);return t>=o.lowercaseA&&t<=o.lowercaseZ}function ke(e){let t=0,n=0;for(const r of e)"\n"===r?(t++,n=0):" "===r&&n++;return"\n".repeat(t)+" ".repeat(n)}function ge(e,t){let n,r="",s=0,o=t;for(;o<e.length&&s++<10;){const t=e[o];if(o++,";"===t){"#"===r[0]?"x"===r[1]?(r=r.substr(2),pe.test(r)&&(n=String.fromCodePoint(parseInt(r,16)))):(r=r.substr(1),fe.test(r)&&(n=String.fromCodePoint(parseInt(r,10)))):n=ce[r];break}r+=t}return n?{entity:n,newI:o}:{entity:"&",newI:t}}function _e(e,t){const n=he(t),r=new Set;for(let t=0;t<e.tokens.length;t++){const o=e.tokens[t];if(o.type!==s.name||o.isType||o.identifierRole!==D.Access&&o.identifierRole!==D.ObjectShorthand&&o.identifierRole!==D.ExportAccess||o.shadowsGlobal||r.add(e.identifierNameForToken(o)),o.type===s.jsxTagStart&&r.add(n.base),o.type===s.jsxTagStart&&t+1<e.tokens.length&&e.tokens[t+1].type===s.jsxTagEnd&&(r.add(n.base),r.add(n.fragmentBase)),o.type===s.jsxName&&o.identifierRole===D.Access){me(e.identifierNameForToken(o))&&e.tokens[t+1].type!==s.dot||r.add(e.identifierNameForToken(o))}}return r}class ye{__init(){this.nonTypeIdentifiers=new Set}__init2(){this.importInfoByPath=new Map}__init3(){this.importsToReplace=new Map}__init4(){this.identifierReplacements=new Map}__init5(){this.exportBindingsByLocalName=new Map}constructor(e,t,n,r,s,o){this.nameManager=e,this.tokens=t,this.enableLegacyTypeScriptModuleInterop=n,this.options=r,this.isTypeScriptTransformEnabled=s,this.helperManager=o,ye.prototype.__init.call(this),ye.prototype.__init2.call(this),ye.prototype.__init3.call(this),ye.prototype.__init4.call(this),ye.prototype.__init5.call(this)}preprocessTokens(){for(let e=0;e<this.tokens.tokens.length;e++)this.tokens.matches1AtIndex(e,s._import)&&!this.tokens.matches3AtIndex(e,s._import,s.name,s.eq)&&this.preprocessImportAtIndex(e),this.tokens.matches1AtIndex(e,s._export)&&!this.tokens.matches2AtIndex(e,s._export,s.eq)&&this.preprocessExportAtIndex(e);this.generateImportReplacements()}pruneTypeOnlyImports(){this.nonTypeIdentifiers=_e(this.tokens,this.options);for(const[e,t]of this.importInfoByPath.entries()){if(t.hasBareImport||t.hasStarExport||t.exportStarNames.length>0||t.namedExports.length>0)continue;[...t.defaultNames,...t.wildcardNames,...t.namedImports.map(({localName:e})=>e)].every(e=>this.isTypeName(e))&&this.importsToReplace.set(e,"")}}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}generateImportReplacements(){for(const[e,t]of this.importInfoByPath.entries()){const{defaultNames:n,wildcardNames:r,namedImports:s,namedExports:o,exportStarNames:i,hasStarExport:a}=t;if(0===n.length&&0===r.length&&0===s.length&&0===o.length&&0===i.length&&!a){this.importsToReplace.set(e,`require('${e}');`);continue}const c=this.getFreeIdentifierForPath(e);let h;h=this.enableLegacyTypeScriptModuleInterop?c:r.length>0?r[0]:this.getFreeIdentifierForPath(e);let u=`var ${c} = require('${e}');`;if(r.length>0)for(const e of r){u+=` var ${e} = ${this.enableLegacyTypeScriptModuleInterop?c:`${this.helperManager.getHelperName("interopRequireWildcard")}(${c})`};`}else i.length>0&&h!==c?u+=` var ${h} = ${this.helperManager.getHelperName("interopRequireWildcard")}(${c});`:n.length>0&&h!==c&&(u+=` var ${h} = ${this.helperManager.getHelperName("interopRequireDefault")}(${c});`);for(const{importedName:e,localName:t}of o)u+=` ${this.helperManager.getHelperName("createNamedExportFrom")}(${c}, '${t}', '${e}');`;for(const e of i)u+=` exports.${e} = ${h};`;a&&(u+=` ${this.helperManager.getHelperName("createStarExport")}(${c});`),this.importsToReplace.set(e,u);for(const e of n)this.identifierReplacements.set(e,h+".default");for(const{importedName:e,localName:t}of s)this.identifierReplacements.set(t,`${c}.${e}`)}}getFreeIdentifierForPath(e){const t=e.split("/"),n=t[t.length-1].replace(/\W/g,"");return this.nameManager.claimFreeName("_"+n)}preprocessImportAtIndex(e){const t=[],n=[];let o=[];if(e++,(this.tokens.matchesContextualAtIndex(e,r._type)||this.tokens.matches1AtIndex(e,s._typeof))&&!this.tokens.matches1AtIndex(e+1,s.comma)&&!this.tokens.matchesContextualAtIndex(e+1,r._from))return;if(this.tokens.matches1AtIndex(e,s.parenL))return;if(this.tokens.matches1AtIndex(e,s.name)&&(t.push(this.tokens.identifierNameAtIndex(e)),e++,this.tokens.matches1AtIndex(e,s.comma)&&e++),this.tokens.matches1AtIndex(e,s.star)&&(e+=2,n.push(this.tokens.identifierNameAtIndex(e)),e++),this.tokens.matches1AtIndex(e,s.braceL)&&(e++,({newIndex:e,namedImports:o}=this.getNamedImports(e))),this.tokens.matchesContextualAtIndex(e,r._from)&&e++,!this.tokens.matches1AtIndex(e,s.string))throw new Error("Expected string token at the end of import statement.");const i=this.tokens.stringValueAtIndex(e),a=this.getImportInfo(i);a.defaultNames.push(...t),a.wildcardNames.push(...n),a.namedImports.push(...o),0===t.length&&0===n.length&&0===o.length&&(a.hasBareImport=!0)}preprocessExportAtIndex(e){if(this.tokens.matches2AtIndex(e,s._export,s._var)||this.tokens.matches2AtIndex(e,s._export,s._let)||this.tokens.matches2AtIndex(e,s._export,s._const))this.preprocessVarExportAtIndex(e);else if(this.tokens.matches2AtIndex(e,s._export,s._function)||this.tokens.matches2AtIndex(e,s._export,s._class)){const t=this.tokens.identifierNameAtIndex(e+2);this.addExportBinding(t,t)}else if(this.tokens.matches3AtIndex(e,s._export,s.name,s._function)){const t=this.tokens.identifierNameAtIndex(e+3);this.addExportBinding(t,t)}else this.tokens.matches2AtIndex(e,s._export,s.braceL)?this.preprocessNamedExportAtIndex(e):this.tokens.matches2AtIndex(e,s._export,s.star)&&this.preprocessExportStarAtIndex(e)}preprocessVarExportAtIndex(e){let t=0;for(let n=e+2;;n++)if(this.tokens.matches1AtIndex(n,s.braceL)||this.tokens.matches1AtIndex(n,s.dollarBraceL)||this.tokens.matches1AtIndex(n,s.bracketL))t++;else if(this.tokens.matches1AtIndex(n,s.braceR)||this.tokens.matches1AtIndex(n,s.bracketR))t--;else{if(0===t&&!this.tokens.matches1AtIndex(n,s.name))break;if(this.tokens.matches1AtIndex(1,s.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");n=e-1}else{if(j(this.tokens.tokens[n])){const e=this.tokens.identifierNameAtIndex(n);this.identifierReplacements.set(e,"exports."+e)}}}}preprocessNamedExportAtIndex(e){e+=2;const{newIndex:t,namedImports:n}=this.getNamedImports(e);if(e=t,!this.tokens.matchesContextualAtIndex(e,r._from)){for(const{importedName:e,localName:t}of n)this.addExportBinding(e,t);return}if(e++,!this.tokens.matches1AtIndex(e,s.string))throw new Error("Expected string token at the end of import statement.");const o=this.tokens.stringValueAtIndex(e);this.getImportInfo(o).namedExports.push(...n)}preprocessExportStarAtIndex(e){let t=null;if(this.tokens.matches3AtIndex(e,s._export,s.star,s._as)?(e+=3,t=this.tokens.identifierNameAtIndex(e),e+=2):e+=3,!this.tokens.matches1AtIndex(e,s.string))throw new Error("Expected string token at the end of star export statement.");const n=this.tokens.stringValueAtIndex(e),r=this.getImportInfo(n);null!==t?r.exportStarNames.push(t):r.hasStarExport=!0}getNamedImports(e){const t=[];for(;;){if(this.tokens.matches1AtIndex(e,s.braceR)){e++;break}let n=!1;(this.tokens.matchesContextualAtIndex(e,r._type)||this.tokens.matches1AtIndex(e,s._typeof))&&this.tokens.matches1AtIndex(e+1,s.name)&&!this.tokens.matchesContextualAtIndex(e+1,r._as)&&(n=!0,e++);const o=this.tokens.identifierNameAtIndex(e);let i;if(e++,this.tokens.matchesContextualAtIndex(e,r._as)?(e++,i=this.tokens.identifierNameAtIndex(e),e++):i=o,n||t.push({importedName:o,localName:i}),this.tokens.matches2AtIndex(e,s.comma,s.braceR)){e+=2;break}if(this.tokens.matches1AtIndex(e,s.braceR)){e++;break}if(!this.tokens.matches1AtIndex(e,s.comma))throw new Error("Unexpected token: "+JSON.stringify(this.tokens.tokens[e]));e++}return{newIndex:e,namedImports:t}}getImportInfo(e){const t=this.importInfoByPath.get(e);if(t)return t;const n={defaultNames:[],wildcardNames:[],namedImports:[],namedExports:[],hasBareImport:!1,exportStarNames:[],hasStarExport:!1};return this.importInfoByPath.set(e,n),n}addExportBinding(e,t){this.exportBindingsByLocalName.has(e)||this.exportBindingsByLocalName.set(e,[]),this.exportBindingsByLocalName.get(e).push(t)}claimImportCode(e){const t=this.importsToReplace.get(e);return this.importsToReplace.set(e,""),t||""}getIdentifierReplacement(e){return this.identifierReplacements.get(e)||null}resolveExportBinding(e){const t=this.exportBindingsByLocalName.get(e);return t&&0!==t.length?t.map(e=>"exports."+e).join(" = "):null}getGlobalNames(){return new Set([...this.identifierReplacements.keys(),...this.exportBindingsByLocalName.keys()])}}function xe(e,t,{compiledFilename:n}){let r="AAAA";for(let t=0;t<e.length;t++)e.charCodeAt(t)===o.lineFeed&&(r+=";AACA");return{version:3,file:n||"",sources:[t],mappings:r,names:[]}}const Te={interopRequireWildcard:"\n    function interopRequireWildcard(obj) {\n      if (obj && obj.__esModule) {\n        return obj;\n      } else {\n        var newObj = {};\n        if (obj != null) {\n          for (var key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n        newObj.default = obj;\n        return newObj;\n      }\n    }\n  ",interopRequireDefault:"\n    function interopRequireDefault(obj) {\n      return obj && obj.__esModule ? obj : { default: obj };\n    }\n  ",createNamedExportFrom:"\n    function createNamedExportFrom(obj, localName, importedName) {\n      Object.defineProperty(exports, localName, {enumerable: true, get: () => obj[importedName]});\n    }\n  ",createStarExport:'\n    function createStarExport(obj) {\n      Object.keys(obj)\n        .filter((key) => key !== "default" && key !== "__esModule")\n        .forEach((key) => {\n          if (exports.hasOwnProperty(key)) {\n            return;\n          }\n          Object.defineProperty(exports, key, {enumerable: true, get: () => obj[key]});\n        });\n    }\n  ',nullishCoalesce:"\n    function nullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return rhsFn();\n      }\n    }\n  ",asyncNullishCoalesce:"\n    async function asyncNullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return await rhsFn();\n      }\n    }\n  ",optionalChain:"\n    function optionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",asyncOptionalChain:"\n    async function asyncOptionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = await fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = await fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",optionalChainDelete:"\n    function optionalChainDelete(ops) {\n      const result = OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  ",asyncOptionalChainDelete:"\n    async function asyncOptionalChainDelete(ops) {\n      const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  "};class be{__init(){this.helperNames={}}constructor(e){this.nameManager=e,be.prototype.__init.call(this)}getHelperName(e){let t=this.helperNames[e];return t||(t=this.nameManager.claimFreeName("_"+e),this.helperNames[e]=t,t)}emitHelpers(){let e="";this.helperNames.optionalChainDelete&&this.getHelperName("optionalChain"),this.helperNames.asyncOptionalChainDelete&&this.getHelperName("asyncOptionalChain");for(const[t,n]of Object.entries(Te)){const r=this.helperNames[t];let s=n;"optionalChainDelete"===t?s=s.replace("OPTIONAL_CHAIN_NAME",this.helperNames.optionalChain):"asyncOptionalChainDelete"===t&&(s=s.replace("ASYNC_OPTIONAL_CHAIN_NAME",this.helperNames.asyncOptionalChain)),r&&(e+=" ",e+=s.replace(t,r).replace(/\s+/g," ").trim())}return e}}function we(e,t,n){(function(e,t){for(const n of e.tokens)if(n.type===s.name&&B(n)&&t.has(e.identifierNameForToken(n)))return!0;return!1})(e,n)&&function(e,t,n){const r=[];let o=t.length-1;for(let i=e.tokens.length-1;;i--){for(;r.length>0&&r[r.length-1].startTokenIndex===i+1;)r.pop();for(;o>=0&&t[o].endTokenIndex===i+1;)r.push(t[o]),o--;if(i<0)break;const a=e.tokens[i],c=e.identifierNameForToken(a);if(r.length>1&&a.type===s.name&&n.has(c))if(F(a))ve(r[r.length-1],e,c);else if(M(a)){let t=r.length-1;for(;t>0&&!r[t].isFunctionScope;)t--;if(t<0)throw new Error("Did not find parent function scope.");ve(r[t],e,c)}}if(r.length>0)throw new Error("Expected empty scope stack after processing file.")}(e,t,n)}function ve(e,t,n){for(let r=e.startTokenIndex;r<e.endTokenIndex;r++){const e=t.tokens[r];e.type===s.name&&t.identifierNameForToken(e)===n&&(e.shadowsGlobal=!0)}}class Ie{__init(){this.usedNames=new Set}constructor(e,t){Ie.prototype.__init.call(this),this.usedNames=new Set(function(e,t){const n=[];for(const r of t)r.type===s.name&&n.push(e.slice(r.start,r.end));return n}(e,t))}claimFreeName(e){const t=this.findFreeName(e);return this.usedNames.add(t),t}findFreeName(e){if(!this.usedNames.has(e))return e;let t=2;for(;this.usedNames.has(e+t);)t++;return e+t}}var Ae=n(0);var Ee={Transform:Ae.union(Ae.lit("jsx"),Ae.lit("typescript"),Ae.lit("flow"),Ae.lit("imports"),Ae.lit("react-hot-loader")),SourceMapOptions:Ae.iface([],{compiledFilename:"string"}),Options:Ae.iface([],{transforms:Ae.array("Transform"),jsxPragma:Ae.opt("string"),jsxFragmentPragma:Ae.opt("string"),enableLegacyTypeScriptModuleInterop:Ae.opt("boolean"),enableLegacyBabel5ModuleInterop:Ae.opt("boolean"),sourceMapOptions:Ae.opt("SourceMapOptions"),filePath:Ae.opt("string"),production:Ae.opt("boolean")})};const{Options:Ce}=Object(Ae.createCheckers)(Ee);function Se(){K(),Mt(!1)}function Re(e){K(),Oe(e)}function Ne(e){kn(),Pe(e)}function Le(){kn(),f.tokens[f.tokens.length-1].identifierRole=D.ImportDeclaration}function Pe(e){0===f.scopeDepth?f.tokens[f.tokens.length-1].identifierRole=D.TopLevelDeclaration:f.tokens[f.tokens.length-1].identifierRole=e?D.BlockScopedDeclaration:D.FunctionScopedDeclaration}function Oe(e){switch(f.type){case s._this:{const e=H(0);return K(),void W(e)}case s._yield:case s.name:return f.type=s.name,void Ne(e);case s.bracketL:return K(),void De(s.bracketR,e,!0);case s.braceL:return void on(!0,e);default:C()}}function De(e,t,n=!1,r=!1,o=0){let i=!0,a=!1;const c=f.tokens.length;for(;!z(e)&&!f.error;)if(i?i=!1:(E(s.comma),f.tokens[f.tokens.length-1].contextId=o,!a&&f.tokens[c].isType&&(f.tokens[f.tokens.length-1].isType=!0,a=!0)),n&&X(s.comma));else{if(z(e))break;if(X(s.ellipsis)){Re(t),Be(),z(s.comma),E(e);break}je(r,t)}}function je(e,t){e&&(Et(),Me([r._readonly])),qe(t),Be(),qe(t,!0)}function Be(){p?function(){const e=H(0);z(s.question),X(s.colon)&&Un();W(e)}():l&&function(){const e=H(0);z(s.question),ct(),W(e)}()}function qe(e,t=!1){if(t||Oe(e),!z(s.eq))return;const n=f.tokens.length-1;Mt(),f.tokens[n].rhsEndIndex=f.tokens.length}function Fe(){return X(s.name)}function Me(e){if(!X(s.name))return null;const t=f.contextualKeyword;if(-1!==e.indexOf(t)&&function(){const e=f.snapshot();return K(),!!!(v()||X(s.parenL)||X(s.parenR)||X(s.colon)||X(s.eq)||X(s.question)||X(s.bang))||(f.restoreFromSnapshot(e),!1)}()){switch(t){case r._readonly:f.tokens[f.tokens.length-1].type=s._readonly;break;case r._abstract:f.tokens[f.tokens.length-1].type=s._abstract;break;case r._static:f.tokens[f.tokens.length-1].type=s._static;break;case r._public:f.tokens[f.tokens.length-1].type=s._public;break;case r._private:f.tokens[f.tokens.length-1].type=s._private;break;case r._protected:f.tokens[f.tokens.length-1].type=s._protected;break;case r._declare:f.tokens[f.tokens.length-1].type=s._declare}return t}return null}function $e(){for(kn();z(s.dot);)kn()}function Ue(){E(s._import),E(s.parenL),E(s.string),E(s.parenR),z(s.dot)&&$e(),X(s.lessThan)&&It()}function Ke(){X(s.lessThan)&&Ye()}function Ye(){const e=H(0);for(X(s.lessThan)||X(s.typeParameterStart)?K():C();!z(s.greaterThan)&&!f.error;)kn(),z(s._extends)&&ut(),z(s.eq)&&ut(),z(s.comma);W(e)}function Ve(e){const t=e===s.arrow;var n;Ke(),E(s.parenL),f.scopeDepth++,n=!1,De(s.parenR,n),f.scopeDepth--,(t||X(e))&&at(e)}function He(){z(s.comma)||A()}function We(){Ve(s.colon),He()}function ze(){if(!X(s.bracketL)||!function(){const e=f.snapshot();K();const t=z(s.name)&&X(s.colon);return f.restoreFromSnapshot(e),t}())return!1;const e=H(0);return E(s.bracketL),kn(),ht(),E(s.bracketR),ct(),He(),W(e),!0}function Xe(e){z(s.question),e||!X(s.parenL)&&!X(s.lessThan)?(ct(),He()):(Ve(s.colon),He())}function Je(){if(X(s.parenL)||X(s.lessThan))return void We();if(X(s._new))return K(),void(X(s.parenL)||X(s.lessThan)?We():Xe(!1));const e=!!Me([r._readonly]);ze()||(hn(-1),Xe(e))}function Ge(){for(E(s.braceL);!z(s.braceR)&&!f.error;)Je()}function Qe(){const e=f.snapshot(),t=function(){if(K(),z(s.plus)||z(s.minus))return y(r._readonly);y(r._readonly)&&K();if(!X(s.bracketL))return!1;if(K(),!Fe())return!1;return K(),X(s._in)}();return f.restoreFromSnapshot(e),t}function Ze(){E(s.braceL),X(s.plus)||X(s.minus)?(K(),b(r._readonly)):T(r._readonly),E(s.bracketL),kn(),E(s._in),ut(),E(s.bracketR),X(s.plus)||X(s.minus)?(K(),E(s.question)):z(s.question),z(s.colon)&&ut(),A(),E(s.braceR)}function et(){z(s.ellipsis)?ut():(ut(),z(s.question))}var tt;function nt(e){e===tt.TSConstructorType&&E(s._new),Ve(s.arrow)}function rt(){switch(f.type){case s.name:return $e(),void(!v()&&X(s.lessThan)&&It());case s._void:case s._null:return void K();case s.string:case s.num:case s._true:case s._false:return void en();case s.minus:return K(),void en();case s._this:return K(),void(y(r._is)&&!v()&&(K(),ht()));case s._typeof:return E(s._typeof),void(X(s._import)?Ue():$e());case s._import:return void Ue();case s.braceL:return void(Qe()?Ze():Ge());case s.bracketL:return void function(){for(E(s.bracketL);!z(s.bracketR)&&!f.error;)et(),z(s.comma)}();case s.parenL:return E(s.parenL),ut(),void E(s.parenR);case s.backQuote:return void sn();default:if(f.type&s.IS_KEYWORD)return K(),void(f.tokens[f.tokens.length-1].type=s.name)}C()}function st(){y(r._keyof)||y(r._unique)||y(r._readonly)?(K(),st()):y(r._infer)?(b(r._infer),kn()):function(){for(rt();!v()&&z(s.bracketL);)z(s.bracketR)||(ut(),E(s.bracketR))}()}function ot(){if(z(s.bitwiseAND),st(),X(s.bitwiseAND))for(;z(s.bitwiseAND);)st()}function it(){return!!X(s.lessThan)||X(s.parenL)&&function(){const e=f.snapshot(),t=function(){if(K(),X(s.parenR)||X(s.ellipsis))return!0;if(function(){if(X(s.name)||X(s._this))return K(),!0;if(X(s.braceL)||X(s.bracketL)){let e=1;for(K();e>0&&!f.error;)X(s.braceL)||X(s.bracketL)?e++:(X(s.braceR)||X(s.bracketR))&&e--,K();return!0}return!1}()){if(X(s.colon)||X(s.comma)||X(s.question)||X(s.eq))return!0;if(X(s.parenR)&&(K(),X(s.arrow)))return!0}return!1}();return f.restoreFromSnapshot(e),t}()}function at(e){const t=H(0);E(e);(function(){const e=f.snapshot();if(y(r._asserts)&&!v())return K(),T(r._is)?(ut(),!0):Fe()||X(s._this)?(K(),T(r._is)&&ut(),!0):(f.restoreFromSnapshot(e),!1);if(Fe()||X(s._this))return K(),y(r._is)&&!v()?(K(),ut(),!0):(f.restoreFromSnapshot(e),!1);return!1})()||ut(),W(t)}function ct(){X(s.colon)&&ht()}function ht(){const e=H(0);E(s.colon),ut(),W(e)}function ut(){lt(),!v()&&z(s._extends)&&(lt(),E(s.question),ut(),E(s.colon),ut())}function lt(){it()?nt(tt.TSFunctionType):X(s._new)?nt(tt.TSConstructorType):function(){if(z(s.bitwiseOR),ot(),X(s.bitwiseOR))for(;z(s.bitwiseOR);)ot()}()}function pt(){for(;!X(s.braceL)&&!f.error;)ft(),z(s.comma)}function ft(){$e(),X(s.lessThan)&&It()}function dt(){if(X(s.string)?en():kn(),z(s.eq)){const e=f.tokens.length-1;Mt(),f.tokens[e].rhsEndIndex=f.tokens.length}}function mt(){for(Ne(!1),E(s.braceL);!z(s.braceR)&&!f.error;)dt(),z(s.comma)}function kt(){E(s.braceL),Qn(s.braceR)}function gt(){Ne(!1),z(s.dot)?gt():kt()}function _t(){y(r._global)?kn():X(s.string)?Qt():C(),X(s.braceL)?kt():A()}function yt(){Le(),E(s.eq),y(r._require)&&J()===s.parenL?(b(r._require),E(s.parenL),X(s.string)||C(),en(),E(s.parenR)):$e(),A()}function xt(){return bt(f.contextualKeyword,!0)}function Tt(e){switch(e){case r._declare:{const e=f.tokens.length-1;if(function(){if(I())return!1;switch(f.type){case s._function:{const e=H(1);K();return rr(f.start,!0),W(e),!0}case s._class:{const e=H(1);return or(!0,!1),W(e),!0}case s._const:if(X(s._const)&&x(r._enum)){const e=H(1);return E(s._const),b(r._enum),f.tokens[f.tokens.length-1].type=s._enum,mt(),W(e),!0}case s._var:case s._let:{const e=H(1);return Jn(f.type),W(e),!0}case s.name:{const e=H(1),t=f.contextualKeyword;let n=!1;return t===r._global?(_t(),n=!0):n=bt(t,!0),W(e),n}default:return!1}}())return f.tokens[e].type=s._declare,!0;break}case r._global:if(X(s.braceL))return kt(),!0;break;default:return bt(e,!1)}return!1}function bt(e,t){switch(e){case r._abstract:if(wt(s._class,t))return t&&K(),f.tokens[f.tokens.length-1].type=s._abstract,or(!0,!1),!0;break;case r._enum:if(wt(s.name,t))return t&&K(),f.tokens[f.tokens.length-1].type=s._enum,mt(),!0;break;case r._interface:if(wt(s.name,t)){const e=H(1);return t&&K(),Ne(!1),Ke(),z(s._extends)&&pt(),Ge(),W(e),!0}break;case r._module:if(t&&K(),X(s.string)){const e=H(t?2:1);return _t(),W(e),!0}if(wt(s.name,t)){const e=H(t?2:1);return t&&K(),gt(),W(e),!0}break;case r._namespace:if(wt(s.name,t)){const e=H(1);return t&&K(),gt(),W(e),!0}break;case r._type:if(wt(s.name,t)){const e=H(1);return t&&K(),Ne(!1),Ke(),E(s.eq),ut(),A(),W(e),!0}}return!1}function wt(e,t){return!I()&&(t||X(e))}function vt(){const e=f.snapshot();return Ye(),sr(),X(s.colon)&&at(s.colon),E(s.arrow),f.error?(f.restoreFromSnapshot(e),!1):(fn(!0),!0)}function It(){const e=H(0);for(E(s.lessThan);!z(s.greaterThan)&&!f.error;)ut(),z(s.comma);W(e)}function At(){if(X(s.name))switch(f.contextualKeyword){case r._abstract:case r._declare:case r._enum:case r._interface:case r._module:case r._namespace:case r._type:return!0}return!1}function Et(){Me([r._public,r._protected,r._private])}function Ct(e,t){return u?function(e,t){if(!X(s.lessThan))return $t(e,t);const n=f.snapshot();let r=$t(e,t);if(!f.error)return r;f.restoreFromSnapshot(n);f.type=s.typeParameterStart,Ye(),r=$t(e,t),r||C();return r}(e,t):function(e,t){if(!X(s.lessThan))return $t(e,t);const n=f.snapshot();Ye();const r=$t(e,t);r||C();if(!f.error)return r;f.restoreFromSnapshot(n);return $t(e,t)}(e,t)}function St(){jt()}function Rt(e){St(),z(s.colon)?St():f.tokens[f.tokens.length-1].identifierRole=e}function Nt(){for(Rt(D.Access);X(s.dot);)jt(),St()}function Lt(){X(s.braceR)||Ft()}function Pt(){if(z(s.braceL))return E(s.ellipsis),Mt(),void jt();Rt(D.ObjectKey),X(s.eq)&&(jt(),function(){switch(f.type){case s.braceL:return K(),Lt(),void jt();case s.jsxTagStart:return Dt(),void jt();case s.string:return void jt();default:C("JSX value should be either an expression or a quoted JSX text")}}())}function Ot(){if(X(s.jsxTagEnd))return!1;for(Nt(),l&&function(){if(z(s.jsxTagStart)){f.tokens[f.tokens.length-1].type=s.typeParameterStart;const e=H(1);for(;!X(s.greaterThan)&&!f.error;)ut(),z(s.comma);jt(),W(e)}}();!X(s.slash)&&!X(s.jsxTagEnd)&&!f.error;)Pt();const e=X(s.slash);return e&&jt(),e}function Dt(){jt(),function e(){if(!Ot())for(Bt();;)switch(f.type){case s.jsxTagStart:if(jt(),X(s.slash))return jt(),void(X(s.jsxTagEnd)||Nt());e(),Bt();break;case s.jsxText:Bt();break;case s.braceL:K(),X(s.ellipsis)?(E(s.ellipsis),Ft(),Bt()):(Lt(),Bt());break;default:return void C()}}()}function jt(){f.tokens.push(new U),ne(),f.start=f.pos;const e=d.charCodeAt(f.pos);if(P[e])!function(){let e;do{if(f.pos>d.length)return void C("Unexpectedly reached the end of input.");e=d.charCodeAt(++f.pos)}while(L[e]||e===o.dash);re(s.jsxName)}();else if(e===o.quotationMark||e===o.apostrophe)!function(e){for(f.pos++;;){if(f.pos>=d.length)return void C("Unterminated string constant");if(d.charCodeAt(f.pos)===e){f.pos++;break}f.pos++}re(s.string)}(e);else switch(++f.pos,e){case o.greaterThan:re(s.jsxTagEnd);break;case o.lessThan:re(s.jsxTagStart);break;case o.slash:re(s.slash);break;case o.equalsTo:re(s.eq);break;case o.leftCurlyBrace:re(s.braceL);break;case o.dot:re(s.dot);break;case o.colon:re(s.colon);break;default:C()}}function Bt(){f.tokens.push(new U),f.start=f.pos,function(){for(;;){if(f.pos>=d.length)return void C("Unterminated JSX contents");const e=d.charCodeAt(f.pos);switch(e){case o.lessThan:case o.leftCurlyBrace:return f.pos===f.start?e===o.lessThan?(f.pos++,void re(s.jsxTagStart)):void se(e):void re(s.jsxText);default:f.pos++}}}()}!function(e){e[e.TSFunctionType=0]="TSFunctionType";e[e.TSConstructorType=1]="TSConstructorType"}(tt||(tt={}));class qt{constructor(e){this.stop=e}}function Ft(e=!1){if(Mt(e),X(s.comma))for(;z(s.comma);)Mt(e)}function Mt(e=!1,t=!1){return l?Ct(e,t):p?function(e,t){if(X(s.lessThan)){const n=f.snapshot();let r=$t(e,t);if(!f.error)return r;f.restoreFromSnapshot(n),f.type=s.typeParameterStart;const o=H(0);if(En(),W(o),r=$t(e,t),r)return!0;C()}return $t(e,t)}(e,t):$t(e,t)}function $t(e,t){if(X(s._yield))return K(),X(s.semi)||w()||(z(s.star),Mt()),!1;(X(s.parenL)||X(s.name)||X(s._yield))&&(f.potentialArrowAt=f.start);const n=function(e){if(function(e){const t=f.tokens.length;if(Kt())return!0;return function e(t,n,o){if(l&&(s._in&s.PRECEDENCE_MASK)>n&&!v()&&T(r._as)){f.tokens[f.tokens.length-1].type=s._as;const r=H(1);return ut(),W(r),void e(t,n,o)}const i=f.type&s.PRECEDENCE_MASK;if(i>0&&(!o||!X(s._in))&&i>n){const r=f.type;K(),r===s.nullishCoalescing&&(f.tokens[f.tokens.length-1].nullishStartIndex=t);const a=f.tokens.length;Kt(),e(a,r&s.IS_RIGHT_ASSOCIATIVE?i-1:i,o),r===s.nullishCoalescing&&(f.tokens[t].numNullishCoalesceStarts++,f.tokens[f.tokens.length-1].numNullishCoalesceEnds++),e(t,n,o)}}(t,-1,e),!1}(e))return!0;return function(e){l||p?function(e){if(X(s.question)){const e=J();if(e===s.colon||e===s.comma||e===s.parenR)return}Ut(e)}(e):Ut(e)}(e),!1}(e);return t&&rn(),f.type&s.IS_ASSIGN?(K(),Mt(e),!1):n}function Ut(e){z(s.question)&&(Mt(),E(s.colon),Mt(e))}function Kt(){if(l&&!u&&z(s.lessThan))return function(){const e=H(1);ut(),E(s.greaterThan),W(e),Kt()}(),!1;if(f.type&s.IS_PREFIX)return K(),Kt(),!1;if(Yt())return!0;for(;f.type&s.IS_POSTFIX&&!w();)f.type===s.preIncDec&&(f.type=s.postIncDec),K();return!1}function Yt(){const e=f.tokens.length;return!!Qt()||(Vt(e),f.tokens.length>e&&f.tokens[e].isOptionalChainStart&&(f.tokens[f.tokens.length-1].isOptionalChainEnd=!0),!1)}function Vt(e,t=!1){p?function(e,t=!1){if(f.tokens[f.tokens.length-1].contextualKeyword===r._async&&X(s.lessThan)){const e=f.snapshot();if(function(){f.scopeDepth++;const e=f.tokens.length;if(sr(),!nn())return!1;return ln(e),!0}()&&!f.error)return;f.restoreFromSnapshot(e)}Ht(e,t)}(e,t):Ht(e,t)}function Ht(e,t=!1){const n=new qt(!1);do{Wt(e,t,n)}while(!n.stop&&!f.error)}function Wt(e,t,n){l?function(e,t,n){if(v()||!z(s.bang)){if(X(s.lessThan)){const n=f.snapshot();if(!t&&Xt()){if(vt())return}if(It(),!t&&z(s.parenL)?(f.tokens[f.tokens.length-1].subscriptStartIndex=e,Jt()):X(s.backQuote)?sn():C(),!f.error)return;f.restoreFromSnapshot(n)}else!t&&X(s.questionDot)&&J()===s.lessThan&&(K(),f.tokens[e].isOptionalChainStart=!0,f.tokens[f.tokens.length-1].subscriptStartIndex=e,It(),E(s.parenL),Jt());zt(e,t,n)}else f.tokens[f.tokens.length-1].type=s.nonNullAssertion}(e,t,n):p?function(e,t,n){if(X(s.questionDot)&&J()===s.lessThan)return t?void(n.stop=!0):(K(),Cn(),E(s.parenL),void Jt());if(!t&&X(s.lessThan)){const e=f.snapshot();if(Cn(),E(s.parenL),Jt(),!f.error)return;f.restoreFromSnapshot(e)}zt(e,t,n)}(e,t,n):zt(e,t,n)}function zt(e,t,n){if(!t&&z(s.doubleColon))Gt(),n.stop=!0,Vt(e,t);else if(X(s.questionDot)){if(f.tokens[e].isOptionalChainStart=!0,t&&J()===s.parenL)return void(n.stop=!0);K(),f.tokens[f.tokens.length-1].subscriptStartIndex=e,z(s.bracketL)?(Ft(),E(s.bracketR)):z(s.parenL)?Jt():kn()}else if(z(s.dot))f.tokens[f.tokens.length-1].subscriptStartIndex=e,Zt();else if(z(s.bracketL))f.tokens[f.tokens.length-1].subscriptStartIndex=e,Ft(),E(s.bracketR);else if(!t&&X(s.parenL))if(Xt()){const t=f.snapshot(),r=f.tokens.length;K(),f.tokens[f.tokens.length-1].subscriptStartIndex=e;const o=k();f.tokens[f.tokens.length-1].contextId=o,Jt(),f.tokens[f.tokens.length-1].contextId=o,(X(s.colon)||X(s.arrow))&&(f.restoreFromSnapshot(t),n.stop=!0,f.scopeDepth++,sr(),function(e){l?X(s.colon)&&ht():p&&function(){if(X(s.colon)){const e=f.noAnonFunctionType;f.noAnonFunctionType=!0,Un(),f.noAnonFunctionType=e}}();E(s.arrow),ln(e)}(r))}else{K(),f.tokens[f.tokens.length-1].subscriptStartIndex=e;const t=k();f.tokens[f.tokens.length-1].contextId=t,Jt(),f.tokens[f.tokens.length-1].contextId=t}else X(s.backQuote)?sn():n.stop=!0}function Xt(){return f.tokens[f.tokens.length-1].contextualKeyword===r._async&&!w()}function Jt(){let e=!0;for(;!z(s.parenR)&&!f.error;){if(e)e=!1;else if(E(s.comma),z(s.parenR))break;mn(!1)}}function Gt(){const e=f.tokens.length;Qt(),Vt(e,!0)}function Qt(){if(z(s.modulo))return kn(),!1;if(X(s.jsxText))return en(),!1;if(X(s.lessThan)&&u)return f.type=s.jsxTagStart,Dt(),K(),!1;const e=f.potentialArrowAt===f.start;switch(f.type){case s.slash:case s.assign:V();case s._super:case s._this:case s.regexp:case s.num:case s.bigint:case s.string:case s._null:case s._true:case s._false:return K(),!1;case s._import:return K(),X(s.dot)&&(f.tokens[f.tokens.length-1].type=s.name,K(),kn()),!1;case s.name:{const t=f.tokens.length,n=f.start,o=f.contextualKeyword;return kn(),o===r._await?(Kt(),!1):o===r._async&&X(s._function)&&!w()?(K(),rr(n,!1),!1):e&&!w()&&o===r._async&&X(s.name)?(f.scopeDepth++,Ne(!1),E(s.arrow),ln(t),!0):e&&!w()&&X(s.arrow)?(f.scopeDepth++,Pe(!1),E(s.arrow),ln(t),!0):(f.tokens[f.tokens.length-1].identifierRole=D.Access,!1)}case s._do:return K(),Gn(!1),!1;case s.parenL:return function(e){const t=f.snapshot(),n=f.tokens.length;E(s.parenL);let r=!0;for(;!X(s.parenR)&&!f.error;){if(r)r=!1;else if(E(s.comma),X(s.parenR))break;if(X(s.ellipsis)){Re(!1),rn();break}Mt(!1,!0)}if(E(s.parenR),e&&function(){return X(s.colon)||!w()}()){if(nn())return f.restoreFromSnapshot(t),f.scopeDepth++,sr(),nn(),ln(n),!0}return!1}(e);case s.bracketL:return K(),dn(s.bracketR,!0),!1;case s.braceL:return on(!1,!1),!1;case s._function:return function(){const e=f.start;kn(),z(s.dot)&&kn();rr(e,!1)}(),!1;case s.at:Wn();case s._class:return or(!1),!1;case s._new:return function(){if(E(s._new),z(s.dot))return void kn();Gt(),z(s.questionDot),function(){l?function(){if(X(s.lessThan)){const e=f.snapshot();f.type=s.typeParameterStart,It(),X(s.parenL)||C(),f.error&&f.restoreFromSnapshot(e)}}():p&&function(){if(X(s.lessThan)){const e=f.snapshot();Cn(),f.error&&f.restoreFromSnapshot(e)}}();z(s.parenL)&&dn(s.parenR)}()}(),!1;case s.backQuote:return sn(),!1;case s.doubleColon:return K(),Gt(),!1;case s.hash:return K(),!1;default:return C(),!1}}function Zt(){z(s.hash),kn()}function en(){K()}function tn(){E(s.parenL),Ft(),E(s.parenR)}function nn(){return l?function(){if(X(s.colon)){const e=f.snapshot();at(s.colon),w()&&C(),X(s.arrow)||C(),f.error&&f.restoreFromSnapshot(e)}return z(s.arrow)}():p?function(){if(X(s.colon)){const e=H(0),t=f.snapshot(),n=f.noAnonFunctionType;f.noAnonFunctionType=!0,yn(),f.noAnonFunctionType=n,w()&&C(),X(s.arrow)||C(),f.error&&f.restoreFromSnapshot(t),W(e)}return z(s.arrow)}():z(s.arrow)}function rn(){(l||p)&&(z(s.question)&&(f.tokens[f.tokens.length-1].isType=!0),X(s.colon)&&(l?ht():p&&Un()))}function sn(){for(Y(),Y();!X(s.backQuote)&&!f.error;)E(s.dollarBraceL),Ft(),Y(),Y();K()}function on(e,t){const n=k();let o=!0;for(K(),f.tokens[f.tokens.length-1].contextId=n;!z(s.braceR)&&!f.error;){if(o)o=!1;else if(E(s.comma),z(s.braceR))break;let i=!1;if(X(s.ellipsis)){const n=f.tokens.length;if(Se(),e&&(f.tokens.length===n+2&&Pe(t),z(s.braceR)))break}else e||(i=z(s.star)),!e&&y(r._async)?(i&&C(),kn(),X(s.colon)||X(s.parenL)||X(s.braceR)||X(s.eq)||X(s.comma)||(X(s.star)&&(K(),i=!0),hn(n))):hn(n),cn(e,t,n)}f.tokens[f.tokens.length-1].contextId=n}function an(e,t){const n=f.start;return X(s.parenL)?(e&&C(),un(n,!1),!0):!!function(e){return!e&&(X(s.string)||X(s.num)||X(s.bracketL)||X(s.name)||!!(f.type&s.IS_KEYWORD))}(e)&&(hn(t),un(n,!1),!0)}function cn(e,t,n){l?Ke():p&&X(s.lessThan)&&(En(),X(s.parenL)||C());an(e,n)||function(e,t){z(s.colon)?e?qe(t):Mt(!1):(f.tokens[f.tokens.length-1].identifierRole=e?t?D.ObjectShorthandBlockScopedDeclaration:D.ObjectShorthandFunctionScopedDeclaration:D.ObjectShorthand,qe(t,!0))}(e,t)}function hn(e){p&&Yn(),z(s.bracketL)?(f.tokens[f.tokens.length-1].contextId=e,Mt(),E(s.bracketR),f.tokens[f.tokens.length-1].contextId=e):(X(s.num)||X(s.string)||X(s.bigint)?Qt():Zt(),f.tokens[f.tokens.length-1].identifierRole=D.ObjectKey,f.tokens[f.tokens.length-1].contextId=e)}function un(e,t){const n=k();f.scopeDepth++;const r=f.tokens.length;sr(t,n),pn(e,n);const s=f.tokens.length;f.scopes.push(new a(r,s,!0)),f.scopeDepth--}function ln(e){fn(!0);const t=f.tokens.length;f.scopes.push(new a(e,t,!0)),f.scopeDepth--}function pn(e,t=0){l?function(e,t){if(X(s.colon)&&at(s.colon),X(s.braceL)||!I())fn(!1,t);else{let t=f.tokens.length-1;for(;t>=0&&(f.tokens[t].start>=e||f.tokens[t].type===s._default||f.tokens[t].type===s._export);)f.tokens[t].isType=!0,t--}}(e,t):p?function(e){X(s.colon)&&yn();fn(!1,e)}(t):fn(!1,t)}function fn(e,t=0){e&&!X(s.braceL)?Mt():Gn(!0,!0,t)}function dn(e,t=!1){let n=!0;for(;!z(e)&&!f.error;){if(n)n=!1;else if(E(s.comma),z(e))break;mn(t)}}function mn(e){e&&X(s.comma)||(X(s.ellipsis)?(Se(),rn()):X(s.question)?K():Mt(!1,!0))}function kn(){K(),f.tokens[f.tokens.length-1].type=s.name}function gn(e){const t=H(0);E(e||s.colon),$n(),W(t)}function _n(){E(s.modulo),b(r._checks),z(s.parenL)&&(Ft(),E(s.parenR))}function yn(){const e=H(0);E(s.colon),X(s.modulo)?_n():($n(),X(s.modulo)&&_n()),W(e)}function xn(){X(s._class)?(K(),Tn(!0)):X(s._function)?(K(),kn(),X(s.lessThan)&&En(),E(s.parenL),jn(),E(s.parenR),yn(),A()):X(s._var)?(K(),Kn(),A()):T(r._module)?z(s.dot)?(b(r._exports),Un(),A()):function(){X(s.string)?Qt():kn();E(s.braceL);for(;!X(s.braceR)&&!f.error;)X(s._import)?(K(),_r()):C();E(s.braceR)}():y(r._type)?(K(),In()):y(r._opaque)?(K(),An(!0)):y(r._interface)?(K(),Tn()):X(s._export)?(E(s._export),z(s._default)?X(s._function)||X(s._class)?xn():($n(),A()):X(s._var)||X(s._function)||X(s._class)||y(r._opaque)?xn():X(s.star)||X(s.braceL)||y(r._interface)||y(r._type)||y(r._opaque)?fr():C()):C()}function Tn(e=!1){if(vn(),X(s.lessThan)&&En(),z(s._extends))do{bn()}while(!e&&z(s.comma));if(y(r._mixins)){K();do{bn()}while(z(s.comma))}if(y(r._implements)){K();do{bn()}while(z(s.comma))}Nn(e,!1,e)}function bn(){On(!1),X(s.lessThan)&&Cn()}function wn(){Tn()}function vn(){kn()}function In(){vn(),X(s.lessThan)&&En(),gn(s.eq),A()}function An(e){b(r._type),vn(),X(s.lessThan)&&En(),X(s.colon)&&gn(s.colon),e||gn(s.eq),A()}function En(){const e=H(0);X(s.lessThan)||X(s.typeParameterStart)?K():C();do{Yn(),Kn(),z(s.eq)&&$n(),X(s.greaterThan)||E(s.comma)}while(!X(s.greaterThan)&&!f.error);E(s.greaterThan),W(e)}function Cn(){const e=H(0);for(E(s.lessThan);!X(s.greaterThan)&&!f.error;)$n(),X(s.greaterThan)||E(s.comma);E(s.greaterThan),W(e)}function Sn(){X(s.num)||X(s.string)?Qt():kn()}function Rn(){for(X(s.lessThan)&&En(),E(s.parenL);!X(s.parenR)&&!X(s.ellipsis)&&!f.error;)Dn(),X(s.parenR)||E(s.comma);z(s.ellipsis)&&Dn(),E(s.parenR),gn()}function Nn(e,t,n){let o;for(t&&X(s.braceBarL)?(E(s.braceBarL),o=s.braceBarR):(E(s.braceL),o=s.braceR);!X(o)&&!f.error;){if(n&&y(r._proto)){const t=J();t!==s.colon&&t!==s.question&&(K(),e=!1)}if(e&&y(r._static)){const e=J();e!==s.colon&&e!==s.question&&K()}if(Yn(),z(s.bracketL))z(s.bracketL)?(Sn(),E(s.bracketR),E(s.bracketR),X(s.lessThan)||X(s.parenL)?Rn():(z(s.question),gn())):(J()===s.colon?(Sn(),gn()):$n(),E(s.bracketR),gn());else if(X(s.parenL)||X(s.lessThan))Rn();else{if(y(r._get)||y(r._set)){const e=J();e!==s.name&&e!==s.string&&e!==s.num||K()}Ln()}Pn()}E(o)}function Ln(){if(X(s.ellipsis)){if(E(s.ellipsis),z(s.comma)||z(s.semi),X(s.braceR))return;$n()}else Sn(),X(s.lessThan)||X(s.parenL)?Rn():(z(s.question),gn())}function Pn(){z(s.semi)||z(s.comma)||X(s.braceR)||X(s.braceBarR)||C()}function On(e){for(e||kn();z(s.dot);)kn()}function Dn(){const e=J();e===s.colon||e===s.question?(kn(),z(s.question),gn()):$n()}function jn(){for(;!X(s.parenR)&&!X(s.ellipsis)&&!f.error;)Dn(),X(s.parenR)||E(s.comma);z(s.ellipsis)&&Dn()}function Bn(){let e=!1;const t=f.noAnonFunctionType;switch(f.type){case s.name:return y(r._interface)?void function(){if(b(r._interface),z(s._extends))do{bn()}while(z(s.comma));Nn(!1,!1,!1)}():(kn(),On(!0),void(X(s.lessThan)&&Cn()));case s.braceL:return void Nn(!1,!1,!1);case s.braceBarL:return void Nn(!1,!0,!1);case s.bracketL:return void function(){for(E(s.bracketL);f.pos<d.length&&!X(s.bracketR)&&($n(),!X(s.bracketR));)E(s.comma);E(s.bracketR)}();case s.lessThan:return En(),E(s.parenL),jn(),E(s.parenR),E(s.arrow),void $n();case s.parenL:if(K(),!X(s.parenR)&&!X(s.ellipsis))if(X(s.name)){const t=J();e=t!==s.question&&t!==s.colon}else e=!0;if(e){if(f.noAnonFunctionType=!1,$n(),f.noAnonFunctionType=t,f.noAnonFunctionType||!(X(s.comma)||X(s.parenR)&&J()===s.arrow))return void E(s.parenR);z(s.comma)}return jn(),E(s.parenR),E(s.arrow),void $n();case s.minus:return K(),void en();case s.string:case s.num:case s._true:case s._false:case s._null:case s._this:case s._void:case s.star:return void K();default:if(f.type===s._typeof)return E(s._typeof),void Bn();if(f.type&s.IS_KEYWORD)return K(),void(f.tokens[f.tokens.length-1].type=s.name)}C()}function qn(){z(s.question)?qn():function(){for(Bn();!w()&&X(s.bracketL);)E(s.bracketL),E(s.bracketR)}()}function Fn(){qn(),!f.noAnonFunctionType&&z(s.arrow)&&$n()}function Mn(){for(z(s.bitwiseAND),Fn();z(s.bitwiseAND);)Fn()}function $n(){!function(){for(z(s.bitwiseOR),Mn();z(s.bitwiseOR);)Mn()}()}function Un(){gn()}function Kn(){kn(),X(s.colon)&&Un()}function Yn(){(X(s.plus)||X(s.minus))&&K()}function Vn(){if(X(s._typeof)||y(r._type)){const t=Q();(((e=t).type===s.name||e.type&s.IS_KEYWORD)&&e.contextualKeyword!==r._from||t.type===s.braceL||t.type===s.star)&&K()}var e}function Hn(e){p&&function(){if(X(s.name)&&f.contextualKeyword===r._interface){const e=H(0);return K(),wn(),W(e),!0}return!1}()||(X(s.at)&&Wn(),function(e){if(l&&function(){if(f.type===s._const){const e=Q();if(e.type===s.name&&e.contextualKeyword===r._enum)return E(s._const),b(r._enum),f.tokens[f.tokens.length-1].type=s._enum,mt(),!0}return!1}())return;const t=f.type;switch(t){case s._break:case s._continue:return K(),void(I()||(kn(),A()));case s._debugger:return K(),void A();case s._do:return K(),Hn(!1),E(s._while),tn(),void z(s.semi);case s._for:return void function(){f.scopeDepth++;const e=f.tokens.length;!function(){K();let e=!1;y(r._await)&&(e=!0,K());if(E(s.parenL),X(s.semi))return e&&C(),void Zn();if(X(s._var)||X(s._let)||X(s._const)){const t=f.type;return K(),tr(!0,t),X(s._in)||y(r._of)?void er(e):void Zn()}if(Ft(!0),X(s._in)||y(r._of))return void er(e);e&&C();Zn()}();const t=f.tokens.length;f.scopes.push(new a(e,t,!1)),f.scopeDepth--}();case s._function:if(J()===s.dot)break;return e||C(),void function(){const e=f.start;K(),rr(e,!0)}();case s._class:return e||C(),void or(!0);case s._if:return K(),tn(),Hn(!1),void(z(s._else)&&Hn(!1));case s._return:return K(),void(I()||(Ft(),A()));case s._switch:return void function(){K(),tn(),f.scopeDepth++;const e=f.tokens.length;E(s.braceL);for(;!X(s.braceR)&&!f.error;)if(X(s._case)||X(s._default)){const e=X(s._case);K(),e&&Ft(),E(s.colon)}else Hn(!0);K();const t=f.tokens.length;f.scopes.push(new a(e,t,!1)),f.scopeDepth--}();case s._throw:return K(),Ft(),void A();case s._try:return void function(){if(K(),Gn(),X(s._catch)){K();let e=null;if(X(s.parenL)&&(f.scopeDepth++,e=f.tokens.length,E(s.parenL),Oe(!0),E(s.parenR)),Gn(),null!=e){const t=f.tokens.length;f.scopes.push(new a(e,t,!1)),f.scopeDepth--}}z(s._finally)&&Gn()}();case s._let:case s._const:e||C();case s._var:return void Jn(t);case s._while:return K(),tn(),void Hn(!1);case s.braceL:return void Gn();case s.semi:return void K();case s._export:case s._import:{const e=J();if(e===s.parenL||e===s.dot)break;return K(),void(t===s._import?_r():fr())}case s.name:if(f.contextualKeyword===r._async){const e=f.start,t=f.snapshot();if(K(),X(s._function)&&!w())return E(s._function),void rr(e,!0);f.restoreFromSnapshot(t)}}const n=f.tokens.length;Ft();let o=null;if(f.tokens.length===n+1){const e=f.tokens[f.tokens.length-1];e.type===s.name&&(o=e.contextualKeyword)}if(null==o)return void A();z(s.colon)?Hn(!0):(i=o,l?function(e){Tt(e)||A()}(i):p?function(e){if(e===r._declare){if(X(s._class)||X(s.name)||X(s._function)||X(s._var)||X(s._export)){const e=H(1);xn(),W(e)}}else if(X(s.name))if(e===r._interface){const e=H(1);wn(),W(e)}else if(e===r._type){const e=H(1);In(),W(e)}else if(e===r._opaque){const e=H(1);An(!1),W(e)}A()}(i):A());var i}(e))}function Wn(){for(;X(s.at);)zn()}function zn(){if(K(),z(s.parenL))Ft(),E(s.parenR);else for(kn();z(s.dot);)kn();l?(X(s.lessThan)&&It(),Xn()):Xn()}function Xn(){z(s.parenL)&&Jt()}function Jn(e){K(),tr(!1,e),A()}function Gn(e=!1,t=!1,n=0){const r=f.tokens.length;f.scopeDepth++,E(s.braceL),n&&(f.tokens[f.tokens.length-1].contextId=n),Qn(s.braceR),n&&(f.tokens[f.tokens.length-1].contextId=n);const o=f.tokens.length;f.scopes.push(new a(r,o,t)),f.scopeDepth--}function Qn(e){for(;!z(e)&&!f.error;)Hn(!0)}function Zn(){E(s.semi),X(s.semi)||Ft(),E(s.semi),X(s.parenR)||Ft(),E(s.parenR),Hn(!1)}function er(e){e?T(r._of):K(),Ft(),E(s.parenR),Hn(!1)}function tr(e,t){for(;;){if(nr(t===s._const||t===s._let),z(s.eq)){const t=f.tokens.length-1;Mt(e),f.tokens[t].rhsEndIndex=f.tokens.length}if(!z(s.comma))break}}function nr(e){Oe(e),l?function(){const e=H(0);z(s.bang),ct(),W(e)}():p&&X(s.colon)&&Un()}function rr(e,t,n=!1){X(s.star)&&K(),!t||n||X(s.name)||X(s._yield)||C();let r=null;X(s.name)&&(t||(r=f.tokens.length,f.scopeDepth++),Ne(!1));const o=f.tokens.length;f.scopeDepth++,sr(),pn(e);const i=f.tokens.length;f.scopes.push(new a(o,i,!0)),f.scopeDepth--,null!==r&&(f.scopes.push(new a(r,i,!0)),f.scopeDepth--)}function sr(e=!1,t=0){l?Ke():p&&function(){if(X(s.lessThan)){const e=H(0);En(),W(e)}}(),E(s.parenL),t&&(f.tokens[f.tokens.length-1].contextId=t),De(s.parenR,!1,!1,e,t),t&&(f.tokens[f.tokens.length-1].contextId=t)}function or(e,t=!1){const n=k();K(),f.tokens[f.tokens.length-1].contextId=n,f.tokens[f.tokens.length-1].isExpression=!e;let o=null;e||(o=f.tokens.length,f.scopeDepth++),function(e,t=!1){if(l&&(!e||t)&&y(r._implements))return;X(s.name)&&Ne(!0);l?Ke():p&&X(s.lessThan)&&En()}(e,t),function(){let e=!1;z(s._extends)?(Yt(),e=!0):e=!1;l?function(e){if(e&&X(s.lessThan)&&It(),T(r._implements)){f.tokens[f.tokens.length-1].type=s._implements;const e=H(1);pt(),W(e)}}(e):p&&function(e){if(e&&X(s.lessThan)&&Cn(),y(r._implements)){const e=H(0);K(),f.tokens[f.tokens.length-1].type=s._implements;do{vn(),X(s.lessThan)&&Cn()}while(z(s.comma));W(e)}}(e)}();const i=f.tokens.length;if(function(e){E(s.braceL);for(;!z(s.braceR)&&!f.error;){if(z(s.semi))continue;if(X(s.at)){zn();continue}cr(f.start,e)}}(n),!f.error&&(f.tokens[i].contextId=n,f.tokens[f.tokens.length-1].contextId=n,null!==o)){const e=f.tokens.length;f.scopes.push(new a(o,e,!1)),f.scopeDepth--}}function ir(){return X(s.eq)||X(s.semi)||X(s.braceR)||X(s.bang)||X(s.colon)}function ar(){return X(s.parenL)||X(s.lessThan)}function cr(e,t){l&&(T(r._declare),Et(),T(r._declare));let n=!1;if(X(s.name)&&f.contextualKeyword===r._static){if(kn(),ar())return void hr(e,!1);if(ir())return void pr();f.tokens[f.tokens.length-1].type=s._static,n=!0}!function(e,t,n){if(l&&function(e,t){let n=!1,s=!1;for(;;){const e=Me([r._abstract,r._readonly,r._declare]);if(null==e)break;e===r._readonly&&(s=!0),e===r._abstract&&(n=!0)}if(!n&&!e){if(ze())return!0}return!!s&&(ur(t),lr(),pr(),!0)}(t,n))return;if(z(s.star))return ur(n),void hr(e,!1);ur(n);let o=!1;const i=f.tokens[f.tokens.length-1];i.contextualKeyword===r._constructor&&(o=!0);if(lr(),ar())hr(e,o);else if(ir())pr();else if(i.contextualKeyword!==r._async||I())i.contextualKeyword!==r._get&&i.contextualKeyword!==r._set||I()&&X(s.star)?I()?pr():C():(i.contextualKeyword===r._get?f.tokens[f.tokens.length-1].type=s._get:f.tokens[f.tokens.length-1].type=s._set,ur(n),hr(e,!1));else{f.tokens[f.tokens.length-1].type=s._async;X(s.star)&&K(),ur(n),lr(),hr(e,!1)}}(e,n,t)}function hr(e,t){l?Ke():p&&X(s.lessThan)&&En(),un(e,t)}function ur(e){hn(e)}function lr(){if(l){const e=H(0);z(s.question),W(e)}}function pr(){if(l?(z(s.bang),ct()):p&&X(s.colon)&&Un(),X(s.eq)){const e=f.tokens.length;K(),Mt(),f.tokens[e].rhsEndIndex=f.tokens.length}A()}function fr(){const e=f.tokens.length-1;l&&(X(s._import)?(E(s._import),yt(),1):z(s.eq)?(Ft(),A(),1):T(r._as)?(b(r._namespace),kn(),A(),1):(y(r._type)&&J()===s.braceL&&K(),0))||((p?X(s.star)||y(r._type)&&J()===s.star:X(s.star))?p?function(){if(T(r._type)){const e=H(2);kr(),W(e)}else kr()}():kr():function(){if(l&&At())return!1;if(p&&X(s.name)&&(f.contextualKeyword===r._type||f.contextualKeyword===r._interface||f.contextualKeyword===r._opaque))return!1;if(X(s.name))return f.contextualKeyword!==r._async;if(!X(s._default))return!1;const e=Q();return e.type===s.comma||e.type===s.name&&e.contextualKeyword===r._from}()?(kn(),X(s.comma)&&J()===s.star?(E(s.comma),E(s.star),b(r._as),kn()):dr(),mr()):z(s._default)?function(){if(l&&function(){if(y(r._abstract)&&J()===s._class)return f.type=s._abstract,K(),or(!0,!0),!0;if(y(r._interface)){const e=H(2);return bt(r._interface,!0),W(e),!0}return!1}())return;const e=f.start;z(s._function)?rr(e,!0,!0):y(r._async)&&J()===s._function?(T(r._async),z(s._function),rr(e,!0,!0)):X(s._class)?or(!0,!0):X(s.at)?(Wn(),or(!0,!0)):(Mt(),A())}():l&&At()||p&&(y(r._type)||y(r._interface)||y(r._opaque))||f.type===s._var||f.type===s._const||f.type===s._let||f.type===s._function||f.type===s._class||y(r._async)||X(s.at)?l?function(){const e=T(r._declare);e&&(f.tokens[f.tokens.length-1].type=s._declare);let t=!1;if(X(s.name))if(e){const e=H(2);t=xt(),W(e)}else t=xt();if(!t)if(e){const e=H(2);Hn(!0),W(e)}else Hn(!0)}():p?function(){if(y(r._type)){const e=H(1);K(),X(s.braceL)?(gr(),mr()):In(),W(e)}else if(y(r._opaque)){const e=H(1);K(),An(!1),W(e)}else if(y(r._interface)){const e=H(1);K(),wn(),W(e)}else Hn(!0)}():Hn(!0):(gr(),mr()),f.tokens[e].rhsEndIndex=f.tokens.length)}function dr(){z(s.comma)&&gr()}function mr(){T(r._from)&&Qt(),A()}function kr(){E(s.star),y(r._as)?(K(),f.tokens[f.tokens.length-1].type=s._as,kn(),dr(),mr()):mr()}function gr(){let e=!0;for(E(s.braceL);!z(s.braceR)&&!f.error;){if(e)e=!1;else if(E(s.comma),z(s.braceR))break;kn(),f.tokens[f.tokens.length-1].identifierRole=D.ExportAccess,T(r._as)&&kn()}}function _r(){l&&X(s.name)&&J()===s.eq?yt():(l&&T(r._type),X(s.string)||(function(){p&&Vn();let e=!0;if(X(s.name)&&(yr(),!z(s.comma)))return;if(X(s.star))return K(),b(r._as),void yr();E(s.braceL);for(;!z(s.braceR)&&!f.error;){if(e)e=!1;else if(z(s.colon)&&C("ES2015 named imports do not destructure. Use another statement for destructuring after the import."),E(s.comma),z(s.braceR))break;xr()}}(),b(r._from)),Qt(),A())}function yr(){Le()}function xr(){p?function(){const e=f.contextualKeyword===r._type||f.type===s._typeof;e?K():kn(),y(r._as)&&!x(r._as)?(kn(),(!e||X(s.name)||f.type&s.IS_KEYWORD)&&kn()):e&&(X(s.name)||f.type&s.IS_KEYWORD)&&(kn(),T(r._as)&&kn())}():(Le(),y(r._as)&&(f.tokens[f.tokens.length-1].identifierRole=D.ImportAccess,K(),Le()))}function Tr(){return 0===f.pos&&d.charCodeAt(0)===o.numberSign&&d.charCodeAt(1)===o.exclamationMark&&te(2),Z(),function(){if(Qn(s.eof),f.scopes.push(new a(0,f.tokens.length,!0)),0!==f.scopeDepth)throw new Error("Invalid scope depth at end of file: "+f.scopeDepth);return new br(f.tokens,f.scopes)}()}class br{constructor(e,t){this.tokens=e,this.scopes=t}}function wr(e,t,n,r){if(r&&n)throw new Error("Cannot combine flow and typescript plugins.");var s,o,i;s=t,o=n,i=r,d=e,f=new h,m=1,u=s,l=o,p=i;const a=Tr();if(f.error)throw g(f.error);return a}class vr{__init(){this.resultCode=""}__init2(){this.tokenIndex=0}constructor(e,t,n,r){this.code=e,this.tokens=t,this.isFlowEnabled=n,this.helperManager=r,vr.prototype.__init.call(this),vr.prototype.__init2.call(this)}snapshot(){return{resultCode:this.resultCode,tokenIndex:this.tokenIndex}}restoreToSnapshot(e){this.resultCode=e.resultCode,this.tokenIndex=e.tokenIndex}getResultCodeIndex(){return this.resultCode.length}reset(){this.resultCode="",this.tokenIndex=0}matchesContextualAtIndex(e,t){return this.matches1AtIndex(e,s.name)&&this.tokens[e].contextualKeyword===t}identifierNameAtIndex(e){return this.identifierNameForToken(this.tokens[e])}identifierName(){return this.identifierNameForToken(this.currentToken())}identifierNameForToken(e){return this.code.slice(e.start,e.end)}rawCodeForToken(e){return this.code.slice(e.start,e.end)}stringValueAtIndex(e){return this.stringValueForToken(this.tokens[e])}stringValue(){return this.stringValueForToken(this.currentToken())}stringValueForToken(e){return this.code.slice(e.start+1,e.end-1)}matches1AtIndex(e,t){return this.tokens[e].type===t}matches2AtIndex(e,t,n){return this.tokens[e].type===t&&this.tokens[e+1].type===n}matches3AtIndex(e,t,n,r){return this.tokens[e].type===t&&this.tokens[e+1].type===n&&this.tokens[e+2].type===r}matches1(e){return this.tokens[this.tokenIndex].type===e}matches2(e,t){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t}matches3(e,t,n){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n}matches4(e,t,n,r){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===r}matches5(e,t,n,r,s){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===n&&this.tokens[this.tokenIndex+3].type===r&&this.tokens[this.tokenIndex+4].type===s}matchesContextual(e){return this.matchesContextualAtIndex(this.tokenIndex,e)}matchesContextIdAndLabel(e,t){return this.matches1(e)&&this.currentToken().contextId===t}previousWhitespaceAndComments(){let e=this.code.slice(this.tokenIndex>0?this.tokens[this.tokenIndex-1].end:0,this.tokenIndex<this.tokens.length?this.tokens[this.tokenIndex].start:this.code.length);return this.isFlowEnabled&&(e=e.replace(/@flow/g,"")),e}replaceToken(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}replaceTokenTrimmingLeftWhitespace(e){this.resultCode+=this.previousWhitespaceAndComments().replace(/[^\r\n]/g,""),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}removeInitialToken(){this.replaceToken("")}removeToken(){this.replaceTokenTrimmingLeftWhitespace("")}copyExpectedToken(e){if(this.tokens[this.tokenIndex].type!==e)throw new Error("Expected token "+e);this.copyToken()}copyToken(){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}copyTokenWithPrefix(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}appendTokenPrefix(){const e=this.currentToken();if((e.numNullishCoalesceStarts||e.isOptionalChainStart)&&(e.isAsyncOperation=function(e){let t=e.currentIndex(),n=0;const s=e.currentToken();do{const o=e.tokens[t];if(o.isOptionalChainStart&&n++,o.isOptionalChainEnd&&n--,n+=o.numNullishCoalesceStarts,n-=o.numNullishCoalesceEnds,o.contextualKeyword===r._await&&null==o.identifierRole&&o.scopeDepth===s.scopeDepth)return!0;t+=1}while(n>0&&t<e.tokens.length);return!1}(this)),e.numNullishCoalesceStarts)for(let t=0;t<e.numNullishCoalesceStarts;t++)e.isAsyncOperation?(this.resultCode+="await ",this.resultCode+=this.helperManager.getHelperName("asyncNullishCoalesce")):this.resultCode+=this.helperManager.getHelperName("nullishCoalesce"),this.resultCode+="(";e.isOptionalChainStart&&(e.isAsyncOperation&&(this.resultCode+="await "),this.tokenIndex>0&&this.tokenAtRelativeIndex(-1).type===s._delete?e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChainDelete"):this.resultCode+=this.helperManager.getHelperName("optionalChainDelete"):e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChain"):this.resultCode+=this.helperManager.getHelperName("optionalChain"),this.resultCode+="([")}appendTokenSuffix(){const e=this.currentToken();if(e.isOptionalChainEnd&&(this.resultCode+="])"),e.numNullishCoalesceEnds)for(let t=0;t<e.numNullishCoalesceEnds;t++)this.resultCode+="))"}appendCode(e){this.resultCode+=e}currentToken(){return this.tokens[this.tokenIndex]}currentTokenCode(){const e=this.currentToken();return this.code.slice(e.start,e.end)}tokenAtRelativeIndex(e){return this.tokens[this.tokenIndex+e]}currentIndex(){return this.tokenIndex}nextToken(){if(this.tokenIndex===this.tokens.length)throw new Error("Unexpectedly reached end of input.");this.tokenIndex++}previousToken(){this.tokenIndex--}finish(){if(this.tokenIndex!==this.tokens.length)throw new Error("Tried to finish processing tokens before reaching the end.");return this.resultCode+=this.previousWhitespaceAndComments(),this.resultCode}isAtEnd(){return this.tokenIndex===this.tokens.length}}function Ir(e,t,n){const o=t.snapshot(),i=function(e){const t=e.currentToken(),n=t.contextId;if(null==n)throw new Error("Expected context ID on class token.");const r=t.isExpression;if(null==r)throw new Error("Expected isExpression on class token.");let o=null,i=!1;e.nextToken(),e.matches1(s.name)&&(o=e.identifierName());for(;!e.matchesContextIdAndLabel(s.braceL,n);)e.matches1(s._extends)&&!e.currentToken().isType&&(i=!0),e.nextToken();return{isExpression:r,className:o,hasSuperclass:i}}(t);let a=[];const c=[],h=[];let u=null;const l=[],p=[],f=t.currentToken().contextId;if(null==f)throw new Error("Expected non-null class context ID on class open-brace.");for(t.nextToken();!t.matchesContextIdAndLabel(s.braceR,f);)if(t.matchesContextual(r._constructor)&&!t.currentToken().isType)({constructorInitializerStatements:a,constructorInsertPos:u}=Ar(t));else if(t.matches1(s.semi))p.push({start:t.currentIndex(),end:t.currentIndex()+1}),t.nextToken();else if(t.currentToken().isType)t.nextToken();else{const o=t.currentIndex();let i=!1;for(;Er(t.currentToken());)t.matches1(s._static)&&(i=!0),t.nextToken();if(t.matchesContextual(r._constructor)&&!t.currentToken().isType){({constructorInitializerStatements:a,constructorInsertPos:u}=Ar(t));continue}const d=t.currentIndex();if(Cr(t),t.matches1(s.lessThan)||t.matches1(s.parenL)){for(;t.currentToken().contextId!==f;)t.nextToken();for(;Er(t.tokenAtRelativeIndex(-1));)t.previousToken();continue}for(;t.currentToken().isType;)t.nextToken();if(t.matches1(s.eq)){const r=t.currentIndex(),s=t.currentToken().rhsEndIndex;if(null==s)throw new Error("Expected rhsEndIndex on class field assignment.");for(t.nextToken();t.currentIndex()<s;)e.processToken();let o;i?(o=n.claimFreeName("__initStatic"),h.push(o)):(o=n.claimFreeName("__init"),c.push(o)),l.push({initializerName:o,equalsIndex:r,start:d,end:t.currentIndex()})}else p.push({start:o,end:t.currentIndex()})}return t.restoreToSnapshot(o),{headerInfo:i,constructorInitializerStatements:a,instanceInitializerNames:c,staticInitializerNames:h,constructorInsertPos:u,fields:l,rangesToRemove:p}}function Ar(e){const t=[];e.nextToken();const n=e.currentToken().contextId;if(null==n)throw new Error("Expected context ID on open-paren starting constructor params.");for(;!e.matchesContextIdAndLabel(s.parenR,n);)if(e.currentToken().contextId===n){if(e.nextToken(),Er(e.currentToken())){for(e.nextToken();Er(e.currentToken());)e.nextToken();const n=e.currentToken();if(n.type!==s.name)throw new Error("Expected identifier after access modifiers in constructor arg.");const r=e.identifierNameForToken(n);t.push(`this.${r} = ${r}`)}}else e.nextToken();e.nextToken();let r=e.currentIndex(),o=!1;for(;!e.matchesContextIdAndLabel(s.braceR,n);){if(!o&&e.matches2(s._super,s.parenL)){e.nextToken();const t=e.currentToken().contextId;if(null==t)throw new Error("Expected a context ID on the super call");for(;!e.matchesContextIdAndLabel(s.parenR,t);)e.nextToken();r=e.currentIndex(),o=!0}e.nextToken()}return e.nextToken(),{constructorInitializerStatements:t,constructorInsertPos:r}}function Er(e){return[s._async,s._get,s._set,s.plus,s.minus,s._readonly,s._static,s._public,s._private,s._protected,s._abstract,s.star,s._declare].includes(e.type)}function Cr(e){if(e.matches1(s.bracketL)){const t=e.currentToken().contextId;if(null==t)throw new Error("Expected class context ID on computed name open bracket.");for(;!e.matchesContextIdAndLabel(s.bracketR,t);)e.nextToken();e.nextToken()}else e.nextToken()}function Sr(e){if(e.removeInitialToken(),e.removeToken(),e.removeToken(),e.removeToken(),e.matches1(s.parenL))e.removeToken(),e.removeToken(),e.removeToken();else for(;e.matches1(s.dot);)e.removeToken(),e.removeToken()}const Rr={typeDeclarations:new Set,valueDeclarations:new Set};function Nr(e){const t=new Set,n=new Set;for(let r=0;r<e.tokens.length;r++){const o=e.tokens[r];o.type===s.name&&q(o)&&(o.isType?t.add(e.identifierNameForToken(o)):n.add(e.identifierNameForToken(o)))}return{typeDeclarations:t,valueDeclarations:n}}function Lr(e,t,n){if(!e)return!1;const r=t.currentToken();if(null==r.rhsEndIndex)throw new Error("Expected non-null rhsEndIndex on export token.");const o=r.rhsEndIndex-t.currentIndex();if(3!==o&&(4!==o||!t.matches1AtIndex(r.rhsEndIndex-1,s.semi)))return!1;const i=t.tokenAtRelativeIndex(2);if(i.type!==s.name)return!1;const a=t.identifierNameForToken(i);return n.typeDeclarations.has(a)&&!n.valueDeclarations.has(a)}class Pr extends le{__init(){this.hadExport=!1}__init2(){this.hadNamedExport=!1}__init3(){this.hadDefaultExport=!1}constructor(e,t,n,r,s,o,i){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.nameManager=r,this.reactHotLoaderTransformer=s,this.enableLegacyBabel5ModuleInterop=o,this.isTypeScriptTransformEnabled=i,Pr.prototype.__init.call(this),Pr.prototype.__init2.call(this),Pr.prototype.__init3.call(this),this.declarationInfo=i?Nr(t):Rr}getPrefixCode(){let e="";return this.hadExport&&(e+='Object.defineProperty(exports, "__esModule", {value: true});'),e}getSuffixCode(){return this.enableLegacyBabel5ModuleInterop&&this.hadDefaultExport&&!this.hadNamedExport?"\nmodule.exports = exports.default;\n":""}process(){return this.tokens.matches3(s._import,s.name,s.eq)?this.processImportEquals():this.tokens.matches1(s._import)?(this.processImport(),!0):this.tokens.matches2(s._export,s.eq)?(this.tokens.replaceToken("module.exports"),!0):this.tokens.matches1(s._export)&&!this.tokens.currentToken().isType?(this.hadExport=!0,this.processExport()):!(!this.tokens.matches2(s.name,s.postIncDec)||!this.processPostIncDec())||(this.tokens.matches1(s.name)||this.tokens.matches1(s.jsxName)?this.processIdentifier():this.tokens.matches1(s.eq)?this.processAssignment():this.tokens.matches1(s.assign)?this.processComplexAssignment():!!this.tokens.matches1(s.preIncDec)&&this.processPreIncDec())}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.importProcessor.isTypeName(e)?Sr(this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(s._import,s.parenL)){this.tokens.replaceToken("Promise.resolve().then(() => require");const e=this.tokens.currentToken().contextId;if(null==e)throw new Error("Expected context ID on dynamic import invocation.");for(this.tokens.copyToken();!this.tokens.matchesContextIdAndLabel(s.parenR,e);)this.rootTransformer.processToken();return void this.tokens.replaceToken("))")}if(this.removeImportAndDetectIfType())this.tokens.removeToken();else{const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.appendCode(this.importProcessor.claimImportCode(e))}this.tokens.matches1(s.semi)&&this.tokens.removeToken()}removeImportAndDetectIfType(){if(this.tokens.removeInitialToken(),this.tokens.matchesContextual(r._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,r._from))return this.removeRemainingImport(),!0;if(this.tokens.matches1(s.name)||this.tokens.matches1(s.star))return this.removeRemainingImport(),!1;if(this.tokens.matches1(s.string))return!1;let e=!1;for(;!this.tokens.matches1(s.string);)(!e&&this.tokens.matches1(s.braceL)||this.tokens.matches1(s.comma))&&(this.tokens.removeToken(),(this.tokens.matches2(s.name,s.comma)||this.tokens.matches2(s.name,s.braceR)||this.tokens.matches4(s.name,s.name,s.name,s.comma)||this.tokens.matches4(s.name,s.name,s.name,s.braceR))&&(e=!0)),this.tokens.removeToken();return!e}removeRemainingImport(){for(;!this.tokens.matches1(s.string);)this.tokens.removeToken()}processIdentifier(){const e=this.tokens.currentToken();if(e.shadowsGlobal)return!1;if(e.identifierRole===D.ObjectShorthand)return this.processObjectShorthand();if(e.identifierRole!==D.Access)return!1;const t=this.importProcessor.getIdentifierReplacement(this.tokens.identifierNameForToken(e));if(!t)return!1;let n=this.tokens.currentIndex()+1;for(;n<this.tokens.tokens.length&&this.tokens.tokens[n].type===s.parenR;)n++;return this.tokens.tokens[n].type===s.parenL?this.tokens.tokenAtRelativeIndex(1).type===s.parenL&&this.tokens.tokenAtRelativeIndex(-1).type!==s._new?(this.tokens.replaceToken(t+".call(void 0, "),this.tokens.removeToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(s.parenR)):this.tokens.replaceToken(`(0, ${t})`):this.tokens.replaceToken(t),!0}processObjectShorthand(){const e=this.tokens.identifierName(),t=this.importProcessor.getIdentifierReplacement(e);return!!t&&(this.tokens.replaceToken(`${e}: ${t}`),!0)}processExport(){if(this.tokens.matches2(s._export,s._enum)||this.tokens.matches3(s._export,s._const,s._enum))return!1;if(this.tokens.matches2(s._export,s._default))return this.processExportDefault(),this.hadDefaultExport=!0,!0;if(this.hadNamedExport=!0,this.tokens.matches2(s._export,s._var)||this.tokens.matches2(s._export,s._let)||this.tokens.matches2(s._export,s._const))return this.processExportVar(),!0;if(this.tokens.matches2(s._export,s._function)||this.tokens.matches3(s._export,s.name,s._function))return this.processExportFunction(),!0;if(this.tokens.matches2(s._export,s._class)||this.tokens.matches3(s._export,s._abstract,s._class))return this.processExportClass(),!0;if(this.tokens.matches2(s._export,s.braceL))return this.processExportBindings(),!0;if(this.tokens.matches2(s._export,s.star))return this.processExportStar(),!0;if(this.tokens.matches3(s._export,s.name,s.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,r._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(s.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(r._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}throw new Error("Unrecognized export syntax.")}processAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.isType||t.type!==s.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,s.dot))return!1;if(e>=2&&[s._var,s._let,s._const].includes(this.tokens.tokens[e-2].type))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.copyToken(),this.tokens.appendCode(` ${n} =`),!0)}processComplexAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.type!==s.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,s.dot))return!1;const n=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!n&&(this.tokens.appendCode(" = "+n),this.tokens.copyToken(),!0)}processPreIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e+1];if(t.type!==s.name)return!1;if(t.shadowsGlobal)return!1;if(e+2<this.tokens.tokens.length&&(this.tokens.matches1AtIndex(e+2,s.dot)||this.tokens.matches1AtIndex(e+2,s.bracketL)||this.tokens.matches1AtIndex(e+2,s.parenL)))return!1;const n=this.tokens.identifierNameForToken(t),r=this.importProcessor.resolveExportBinding(n);return!!r&&(this.tokens.appendCode(r+" = "),this.tokens.copyToken(),!0)}processPostIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e],n=this.tokens.tokens[e+1];if(t.type!==s.name)return!1;if(t.shadowsGlobal)return!1;if(e>=1&&this.tokens.matches1AtIndex(e-1,s.dot))return!1;const r=this.tokens.identifierNameForToken(t),o=this.importProcessor.resolveExportBinding(r);if(!o)return!1;const i=this.tokens.rawCodeForToken(n),a=this.importProcessor.getIdentifierReplacement(r)||r;if("++"===i)this.tokens.replaceToken(`(${a} = ${o} = ${a} + 1, ${a} - 1)`);else{if("--"!==i)throw new Error("Unexpected operator: "+i);this.tokens.replaceToken(`(${a} = ${o} = ${a} - 1, ${a} + 1)`)}return this.tokens.removeToken(),!0}processExportDefault(){if(this.tokens.matches4(s._export,s._default,s._function,s.name)||this.tokens.matches5(s._export,s._default,s.name,s._function,s.name)){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.processNamedFunction();this.tokens.appendCode(` exports.default = ${e};`)}else if(this.tokens.matches4(s._export,s._default,s._class,s.name)||this.tokens.matches5(s._export,s._default,s._abstract,s._class,s.name)){this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(s._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.default = ${e};`)}else{if(this.tokens.matches3(s._export,s._default,s.at))throw new Error("Export default statements with decorators are not yet supported.");if(Lr(this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken();else if(this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");this.tokens.replaceToken(`let ${e}; exports.`),this.tokens.copyToken(),this.tokens.appendCode(` = ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e)}else this.tokens.replaceToken("exports."),this.tokens.copyToken(),this.tokens.appendCode(" =")}}processExportVar(){this.isSimpleExportVar()?this.processSimpleExportVar():this.processComplexExportVar()}isSimpleExportVar(){let e=this.tokens.currentIndex();if(e++,e++,!this.tokens.matches1AtIndex(e,s.name))return!1;for(e++;e<this.tokens.tokens.length&&this.tokens.tokens[e].isType;)e++;return!!this.tokens.matches1AtIndex(e,s.eq)}processSimpleExportVar(){this.tokens.removeInitialToken(),this.tokens.copyToken();const e=this.tokens.identifierName();for(;!this.tokens.matches1(s.eq);)this.rootTransformer.processToken();const t=this.tokens.currentToken().rhsEndIndex;if(null==t)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<t;)this.rootTransformer.processToken();this.tokens.appendCode(`; exports.${e} = ${e}`)}processComplexExportVar(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.matches1(s.braceL);e&&this.tokens.appendCode("(");let t=0;for(;;)if(this.tokens.matches1(s.braceL)||this.tokens.matches1(s.dollarBraceL)||this.tokens.matches1(s.bracketL))t++,this.tokens.copyToken();else if(this.tokens.matches1(s.braceR)||this.tokens.matches1(s.bracketR))t--,this.tokens.copyToken();else{if(0===t&&!this.tokens.matches1(s.name)&&!this.tokens.currentToken().isType)break;if(this.tokens.matches1(s.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}else{const e=this.tokens.currentToken();if(j(e)){const t=this.tokens.identifierName();let n=this.importProcessor.getIdentifierReplacement(t);if(null===n)throw new Error(`Expected a replacement for ${t} in \`export var\` syntax.`);$(e)&&(n=`${t}: ${n}`),this.tokens.replaceToken(n)}else this.rootTransformer.processToken()}}if(e){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken();this.tokens.appendCode(")")}}processExportFunction(){this.tokens.replaceToken("");const e=this.processNamedFunction();this.tokens.appendCode(` exports.${e} = ${e};`)}processNamedFunction(){if(this.tokens.matches1(s._function))this.tokens.copyToken();else if(this.tokens.matches2(s.name,s._function)){if(!this.tokens.matchesContextual(r._async))throw new Error("Expected async keyword in function export.");this.tokens.copyToken(),this.tokens.copyToken()}if(this.tokens.matches1(s.star)&&this.tokens.copyToken(),!this.tokens.matches1(s.name))throw new Error("Expected identifier for exported function name.");const e=this.tokens.identifierName();if(this.tokens.copyToken(),this.tokens.currentToken().isType)for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return this.tokens.copyExpectedToken(s.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(s.parenR),this.rootTransformer.processPossibleTypeRange(),this.tokens.copyExpectedToken(s.braceL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(s.braceR),e}processExportClass(){this.tokens.removeInitialToken(),this.tokens.matches1(s._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.${e} = ${e};`)}processExportBindings(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=[];for(;;){if(this.tokens.matches1(s.braceR)){this.tokens.removeToken();break}const t=this.tokens.identifierName();let n;if(this.tokens.removeToken(),this.tokens.matchesContextual(r._as)?(this.tokens.removeToken(),n=this.tokens.identifierName(),this.tokens.removeToken()):n=t,!this.shouldElideExportedIdentifier(t)){const r=this.importProcessor.getIdentifierReplacement(t);e.push(`exports.${n} = ${r||t};`)}if(this.tokens.matches1(s.braceR)){this.tokens.removeToken();break}if(this.tokens.matches2(s.comma,s.braceR)){this.tokens.removeToken(),this.tokens.removeToken();break}if(!this.tokens.matches1(s.comma))throw new Error("Unexpected token: "+JSON.stringify(this.tokens.currentToken()));this.tokens.removeToken()}if(this.tokens.matchesContextual(r._from)){this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e))}else this.tokens.appendCode(e.join(" "));this.tokens.matches1(s.semi)&&this.tokens.removeToken()}processExportStar(){for(this.tokens.removeInitialToken();!this.tokens.matches1(s.string);)this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.matches1(s.semi)&&this.tokens.removeToken()}shouldElideExportedIdentifier(e){return this.isTypeScriptTransformEnabled&&!this.declarationInfo.valueDeclarations.has(e)}}class Or extends le{constructor(e,t,n,r,s){super(),this.tokens=e,this.nameManager=t,this.reactHotLoaderTransformer=n,this.isTypeScriptTransformEnabled=r,this.nonTypeIdentifiers=r?_e(e,s):new Set,this.declarationInfo=r?Nr(e):Rr}process(){if(this.tokens.matches3(s._import,s.name,s.eq))return this.processImportEquals();if(this.tokens.matches2(s._export,s.eq))return this.tokens.replaceToken("module.exports"),!0;if(this.tokens.matches1(s._import))return this.processImport();if(this.tokens.matches2(s._export,s._default))return this.processExportDefault();if(this.tokens.matches2(s._export,s.braceL))return this.processNamedExports();if(this.tokens.matches3(s._export,s.name,s.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,r._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(s.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(r._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}return!1}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.isTypeName(e)?Sr(this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(s._import,s.parenL))return!1;const e=this.tokens.snapshot();if(this.removeImportTypeBindings()){for(this.tokens.restoreToSnapshot(e);!this.tokens.matches1(s.string);)this.tokens.removeToken();this.tokens.removeToken(),this.tokens.matches1(s.semi)&&this.tokens.removeToken()}return!0}removeImportTypeBindings(){if(this.tokens.copyExpectedToken(s._import),this.tokens.matchesContextual(r._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,r._from))return!0;if(this.tokens.matches1(s.string))return this.tokens.copyToken(),!1;let e=!1;if(this.tokens.matches1(s.name)&&(this.isTypeName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(s.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(s.comma)&&this.tokens.copyToken())),this.tokens.matches1(s.star))this.isTypeName(this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken()):(e=!0,this.tokens.copyExpectedToken(s.star),this.tokens.copyExpectedToken(s.name),this.tokens.copyExpectedToken(s.name));else if(this.tokens.matches1(s.braceL)){for(this.tokens.copyToken();!this.tokens.matches1(s.braceR);)if(this.tokens.matches3(s.name,s.name,s.comma)||this.tokens.matches3(s.name,s.name,s.braceR))this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.comma)&&this.tokens.removeToken();else if(this.tokens.matches5(s.name,s.name,s.name,s.name,s.comma)||this.tokens.matches5(s.name,s.name,s.name,s.name,s.braceR))this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.comma)&&this.tokens.removeToken();else if(this.tokens.matches2(s.name,s.comma)||this.tokens.matches2(s.name,s.braceR))this.isTypeName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(s.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(s.comma)&&this.tokens.copyToken());else{if(!this.tokens.matches4(s.name,s.name,s.name,s.comma)&&!this.tokens.matches4(s.name,s.name,s.name,s.braceR))throw new Error("Unexpected import form.");this.isTypeName(this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.matches1(s.comma)&&this.tokens.copyToken())}this.tokens.copyExpectedToken(s.braceR)}return!e}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}processExportDefault(){if(Lr(this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))return this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken(),!0;if(!(this.tokens.matches4(s._export,s._default,s._function,s.name)||this.tokens.matches5(s._export,s._default,s.name,s._function,s.name)||this.tokens.matches4(s._export,s._default,s._class,s.name)||this.tokens.matches5(s._export,s._default,s._abstract,s._class,s.name))&&this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");return this.tokens.replaceToken(`let ${e}; export`),this.tokens.copyToken(),this.tokens.appendCode(` ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e),!0}return!1}processNamedExports(){if(!this.isTypeScriptTransformEnabled)return!1;for(this.tokens.copyExpectedToken(s._export),this.tokens.copyExpectedToken(s.braceL);!this.tokens.matches1(s.braceR);){if(!this.tokens.matches1(s.name))throw new Error("Expected identifier at the start of named export.");if(this.shouldElideExportedName(this.tokens.identifierName())){for(;!this.tokens.matches1(s.comma)&&!this.tokens.matches1(s.braceR)&&!this.tokens.isAtEnd();)this.tokens.removeToken();this.tokens.matches1(s.comma)&&this.tokens.removeToken()}else{for(;!this.tokens.matches1(s.comma)&&!this.tokens.matches1(s.braceR)&&!this.tokens.isAtEnd();)this.tokens.copyToken();this.tokens.matches1(s.comma)&&this.tokens.copyToken()}}return this.tokens.copyExpectedToken(s.braceR),!0}shouldElideExportedName(e){return this.isTypeScriptTransformEnabled&&this.declarationInfo.typeDeclarations.has(e)&&!this.declarationInfo.valueDeclarations.has(e)}}class Dr extends le{constructor(e,t){super(),this.rootTransformer=e,this.tokens=t}process(){return this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange()}}class jr extends le{constructor(e){super(),this.tokens=e}process(){if(this.tokens.matches1(s.num)){const e=this.tokens.currentTokenCode();if(e.includes("_"))return this.tokens.replaceToken(e.replace(/_/g,"")),!0}return!1}}class Br extends le{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){return!!this.tokens.matches2(s._catch,s.braceL)&&(this.tokens.copyToken(),this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`),!0)}}class qr extends le{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){if(this.tokens.matches1(s.nullishCoalescing)){const e=this.tokens.currentToken();return this.tokens.tokens[e.nullishStartIndex].isAsyncOperation?this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("):this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("),!0}if(this.tokens.matches1(s._delete)){if(this.tokens.tokenAtRelativeIndex(1).isOptionalChainStart)return this.tokens.removeInitialToken(),!0}const e=this.tokens.currentToken().subscriptStartIndex;if(null!=e&&this.tokens.tokens[e].isOptionalChainStart&&this.tokens.tokenAtRelativeIndex(-1).type!==s._super){const t=this.nameManager.claimFreeName("_");let n;if(n=e>0&&this.tokens.matches1AtIndex(e-1,s._delete)&&this.isLastSubscriptInChain()?`${t} => delete ${t}`:`${t} => ${t}`,this.tokens.tokens[e].isAsyncOperation&&(n="async "+n),this.tokens.matches2(s.questionDot,s.parenL)||this.tokens.matches2(s.questionDot,s.lessThan))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(", 'optionalCall', "+n);else if(this.tokens.matches2(s.questionDot,s.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(", 'optionalAccess', "+n);else if(this.tokens.matches1(s.questionDot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${n}.`);else if(this.tokens.matches1(s.dot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}.`);else if(this.tokens.matches1(s.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${n}[`);else{if(!this.tokens.matches1(s.parenL))throw new Error("Unexpected subscript operator in optional chain.");this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${n}(`)}return!0}return!1}isLastSubscriptInChain(){let e=0;for(let t=this.tokens.currentIndex()+1;;t++){if(t>=this.tokens.tokens.length)throw new Error("Reached the end of the code while finding the end of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e++:this.tokens.tokens[t].isOptionalChainEnd&&e--,e<0)return!0;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return!1}}justSkippedSuper(){let e=0,t=this.tokens.currentIndex()-1;for(;;){if(t<0)throw new Error("Reached the start of the code while finding the start of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e--:this.tokens.tokens[t].isOptionalChainEnd&&e++,e<0)return!1;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return this.tokens.tokens[t-1].type===s._super;t--}}}class Fr extends le{constructor(e,t,n,r){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=n,this.options=r}process(){const e=this.tokens.currentIndex();if("createReactClass"===this.tokens.identifierName()){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("createReactClass");return t?this.tokens.replaceToken(`(0, ${t})`):this.tokens.copyToken(),this.tryProcessCreateClassCall(e),!0}if(this.tokens.matches3(s.name,s.dot,s.name)&&"React"===this.tokens.identifierName()&&"createClass"===this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("React")||"React";return t?(this.tokens.replaceToken(t),this.tokens.copyToken(),this.tokens.copyToken()):(this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken()),this.tryProcessCreateClassCall(e),!0}return!1}tryProcessCreateClassCall(e){const t=this.findDisplayName(e);t&&this.classNeedsDisplayName()&&(this.tokens.copyExpectedToken(s.parenL),this.tokens.copyExpectedToken(s.braceL),this.tokens.appendCode(`displayName: '${t}',`),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(s.braceR),this.tokens.copyExpectedToken(s.parenR))}findDisplayName(e){return e<2?null:this.tokens.matches2AtIndex(e-2,s.name,s.eq)||e>=2&&this.tokens.tokens[e-2].identifierRole===D.ObjectKey?this.tokens.identifierNameAtIndex(e-2):this.tokens.matches2AtIndex(e-2,s._export,s._default)?this.getDisplayNameFromFilename():null}getDisplayNameFromFilename(){const e=(this.options.filePath||"unknown").split("/"),t=e[e.length-1],n=t.lastIndexOf("."),r=-1===n?t:t.slice(0,n);return"index"===r&&e[e.length-2]?e[e.length-2]:r}classNeedsDisplayName(){let e=this.tokens.currentIndex();if(!this.tokens.matches2(s.parenL,s.braceL))return!1;const t=e+1,n=this.tokens.tokens[t].contextId;if(null==n)throw new Error("Expected non-null context ID on object open-brace.");for(;e<this.tokens.tokens.length;e++){const t=this.tokens.tokens[e];if(t.type===s.braceR&&t.contextId===n){e++;break}if("displayName"===this.tokens.identifierNameAtIndex(e)&&this.tokens.tokens[e].identifierRole===D.ObjectKey&&t.contextId===n)return!1}if(e===this.tokens.tokens.length)throw new Error("Unexpected end of input when processing React class.");return this.tokens.matches1AtIndex(e,s.parenR)||this.tokens.matches2AtIndex(e,s.comma,s.parenR)}}class Mr extends le{__init(){this.extractedDefaultExportName=null}constructor(e,t){super(),this.tokens=e,this.filePath=t,Mr.prototype.__init.call(this)}setExtractedDefaultExportName(e){this.extractedDefaultExportName=e}getPrefixCode(){return"\n      (function () {\n        var enterModule = require('react-hot-loader').enterModule;\n        enterModule && enterModule(module);\n      })();".replace(/\s+/g," ").trim()}getSuffixCode(){const e=new Set;for(const t of this.tokens.tokens)!t.isType&&q(t)&&t.identifierRole!==D.ImportDeclaration&&e.add(this.tokens.identifierNameForToken(t));const t=Array.from(e).map(e=>({variableName:e,uniqueLocalName:e}));return this.extractedDefaultExportName&&t.push({variableName:this.extractedDefaultExportName,uniqueLocalName:"default"}),`\n;(function () {\n  var reactHotLoader = require('react-hot-loader').default;\n  var leaveModule = require('react-hot-loader').leaveModule;\n  if (!reactHotLoader) {\n    return;\n  }\n${t.map(({variableName:e,uniqueLocalName:t})=>`  reactHotLoader.register(${e}, "${t}", ${JSON.stringify(this.filePath||"")});`).join("\n")}\n  leaveModule(module);\n})();`}process(){return!1}}const $r=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await"]);function Ur(e){if(0===e.length)return!1;if(!P[e.charCodeAt(0)])return!1;for(let t=1;t<e.length;t++)if(!L[e.charCodeAt(t)])return!1;return!$r.has(e)}class Kr extends le{constructor(e,t,n){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=n}process(){return!!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())||(this.tokens.matches1(s._public)||this.tokens.matches1(s._protected)||this.tokens.matches1(s._private)||this.tokens.matches1(s._abstract)||this.tokens.matches1(s._readonly)||this.tokens.matches1(s.nonNullAssertion)?(this.tokens.removeInitialToken(),!0):this.tokens.matches1(s._enum)||this.tokens.matches2(s._const,s._enum)?(this.processEnum(),!0):!(!this.tokens.matches2(s._export,s._enum)&&!this.tokens.matches3(s._export,s._const,s._enum))&&(this.processEnum(!0),!0))}processEnum(e=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(s._const)||this.tokens.matches1(s._enum);)this.tokens.removeToken();const t=this.tokens.identifierName();this.tokens.removeToken(),e&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${t}; (function (${t})`),this.tokens.copyExpectedToken(s.braceL),this.processEnumBody(t),this.tokens.copyExpectedToken(s.braceR),e&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${t} || (exports.${t} = ${t} = {}));`):this.tokens.appendCode(`)(${t} || (${t} = {}));`)}processEnumBody(e){let t=!1,n=null;for(;!this.tokens.matches1(s.braceR);){const r=this.tokens.currentToken();let o,i;if(r.type===s.name)o=this.tokens.identifierNameForToken(r),i=`"${o}"`;else{if(r.type!==s.string)throw new Error("Expected name or string at beginning of enum element.");o=this.tokens.stringValueForToken(r),i=this.tokens.code.slice(r.start,r.end)}const a=Ur(o);let c,h,u;if(this.tokens.removeInitialToken(),this.tokens.matches1(s.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected rhsEndIndex on enum assign.");this.tokens.removeToken(),(this.tokens.matches2(s.string,s.comma)||this.tokens.matches2(s.string,s.braceR))&&(c=!0);const t=this.tokens.currentToken();for(;this.tokens.currentIndex()<e;)this.tokens.removeToken();h=this.tokens.code.slice(t.start,this.tokens.tokenAtRelativeIndex(-1).end)}else c=!1,h=null!=n?t?n+" + 1":`(${n}) + 1`:"0";this.tokens.matches1(s.comma)&&this.tokens.removeToken(),a?(this.tokens.appendCode(`const ${o} = ${h}; `),u=o):u=h,c?this.tokens.appendCode(`${e}[${i}] = ${u};`):this.tokens.appendCode(`${e}[${e}[${i}] = ${u}] = ${i};`),n=u,t=a}}}class Yr{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(e,t,n,r){Yr.prototype.__init.call(this),Yr.prototype.__init2.call(this),this.nameManager=e.nameManager,this.helperManager=e.helperManager;const{tokenProcessor:s,importProcessor:o}=e;this.tokens=s,this.isImportsTransformEnabled=t.includes("imports"),this.isReactHotLoaderTransformEnabled=t.includes("react-hot-loader"),this.transformers.push(new qr(s,this.nameManager)),this.transformers.push(new jr(s)),this.transformers.push(new Br(s,this.nameManager)),t.includes("jsx")&&(this.transformers.push(new de(this,s,o,this.nameManager,r)),this.transformers.push(new Fr(this,s,o,r)));let i=null;if(t.includes("react-hot-loader")){if(!r.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");i=new Mr(s,r.filePath),this.transformers.push(i)}if(t.includes("imports")){if(null===o)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new Pr(this,s,o,this.nameManager,i,n,t.includes("typescript")))}else this.transformers.push(new Or(s,this.nameManager,i,t.includes("typescript"),r));t.includes("flow")&&this.transformers.push(new Dr(this,s)),t.includes("typescript")&&this.transformers.push(new Kr(this,s,t.includes("imports")))}transform(){this.tokens.reset(),this.processBalancedCode();let e=this.isImportsTransformEnabled?'"use strict";':"";for(const t of this.transformers)e+=t.getPrefixCode();e+=this.helperManager.emitHelpers(),e+=this.generatedVariables.map(e=>` var ${e};`).join("");let t="";for(const e of this.transformers)t+=e.getSuffixCode();let n=this.tokens.finish();if(n.startsWith("#!")){let r=n.indexOf("\n");return-1===r&&(r=n.length,n+="\n"),n.slice(0,r+1)+e+n.slice(r+1)+t}return e+this.tokens.finish()+t}processBalancedCode(){let e=0,t=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(s.braceL)||this.tokens.matches1(s.dollarBraceL))e++;else if(this.tokens.matches1(s.braceR)){if(0===e)return;e--}if(this.tokens.matches1(s.parenL))t++;else if(this.tokens.matches1(s.parenR)){if(0===t)return;t--}this.processToken()}}processToken(){if(this.tokens.matches1(s._class))this.processClass();else{for(const e of this.transformers){if(e.process())return}this.tokens.copyToken()}}processNamedClass(){if(!this.tokens.matches2(s._class,s.name))throw new Error("Expected identifier for exported class name.");const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),e}processClass(){const e=Ir(this,this.tokens,this.nameManager),t=e.headerInfo.isExpression&&e.staticInitializerNames.length+e.instanceInitializerNames.length>0;let n=e.headerInfo.className;t&&(n=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(n),this.tokens.appendCode(` (${n} =`));const r=this.tokens.currentToken().contextId;if(null==r)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(s._class);!this.tokens.matchesContextIdAndLabel(s.braceL,r);)this.processToken();this.processClassBody(e,n);const o=e.staticInitializerNames.map(e=>`${n}.${e}()`);t?this.tokens.appendCode(`, ${o.map(e=>e+", ").join("")}${n})`):e.staticInitializerNames.length>0&&this.tokens.appendCode(" "+o.map(e=>e+";").join(" "))}processClassBody(e,t){const{headerInfo:n,constructorInsertPos:r,constructorInitializerStatements:o,fields:i,instanceInitializerNames:a,rangesToRemove:c}=e;let h=0,u=0;const l=this.tokens.currentToken().contextId;if(null==l)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(s.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");const p=o.length+a.length>0;if(null===r&&p){const e=this.makeConstructorInitCode(o,a,t);if(n.hasSuperclass){const t=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${t}) { super(...${t}); ${e}; }`)}else this.tokens.appendCode(`constructor() { ${e}; }`)}for(;!this.tokens.matchesContextIdAndLabel(s.braceR,l);)if(h<i.length&&this.tokens.currentIndex()===i[h].start){let e=!1;for(this.tokens.matches1(s.bracketL)?this.tokens.copyTokenWithPrefix(i[h].initializerName+"() {this"):this.tokens.matches1(s.string)||this.tokens.matches1(s.num)?(this.tokens.copyTokenWithPrefix(i[h].initializerName+"() {this["),e=!0):this.tokens.copyTokenWithPrefix(i[h].initializerName+"() {this.");this.tokens.currentIndex()<i[h].end;)e&&this.tokens.currentIndex()===i[h].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),h++}else if(u<c.length&&this.tokens.currentIndex()===c[u].start){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<c[u].end;)this.tokens.removeToken();u++}else this.tokens.currentIndex()===r?(this.tokens.copyToken(),p&&this.tokens.appendCode(`;${this.makeConstructorInitCode(o,a,t)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(s.braceR)}makeConstructorInitCode(e,t,n){return[...e,...t.map(e=>`${n}.prototype.${e}.call(this)`)].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(s.parenR,s.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType;)e++;if(this.tokens.matches1AtIndex(e,s.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<e;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(r._async)&&!this.tokens.matches1(s._async))return!1;const e=this.tokens.tokenAtRelativeIndex(1);if(e.type!==s.lessThan||!e.isType)return!1;let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,s.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<t;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}}n(3);function Vr(e,t,n){t++,e.matches1AtIndex(t,s.parenL)||(e.matches1AtIndex(t,s.name)&&(n.add(e.identifierNameAtIndex(t)),t++,e.matches1AtIndex(t,s.comma)&&t++),e.matches1AtIndex(t,s.star)&&(t+=2,n.add(e.identifierNameAtIndex(t)),t++),e.matches1AtIndex(t,s.braceL)&&function(e,t,n){for(;;){if(e.matches1AtIndex(t,s.braceR))return;let o=e.identifierNameAtIndex(t);if(t++,e.matchesContextualAtIndex(t,r._as)&&(t++,o=e.identifierNameAtIndex(t),t++),n.add(o),e.matches2AtIndex(t,s.comma,s.braceR))return;if(e.matches1AtIndex(t,s.braceR))return;if(!e.matches1AtIndex(t,s.comma))throw new Error("Unexpected token: "+JSON.stringify(e.tokens[t]));t++}}(e,++t,n))}function Hr(e,t){!function(e){Ce.strictCheck(e)}(t);try{const n=Wr(e,t);let r={code:new Yr(n,t.transforms,Boolean(t.enableLegacyBabel5ModuleInterop),t).transform()};if(t.sourceMapOptions){if(!t.filePath)throw new Error("filePath must be specified when generating a source map.");r={...r,sourceMap:xe(r.code,t.filePath,t.sourceMapOptions)}}return r}catch(e){throw t.filePath&&(e.message=`Error transforming ${t.filePath}: ${e.message}`),e}}function Wr(e,t){const n=t.transforms.includes("jsx"),r=t.transforms.includes("typescript"),o=t.transforms.includes("flow"),i=wr(e,n,r,o),a=i.tokens,c=i.scopes,h=new Ie(e,a),u=new be(h),l=new vr(e,a,o,u),p=Boolean(t.enableLegacyTypeScriptModuleInterop);let f=null;return t.transforms.includes("imports")?(f=new ye(h,l,p,t,t.transforms.includes("typescript"),u),f.preprocessTokens(),we(l,c,f.getGlobalNames()),t.transforms.includes("typescript")&&f.pruneTypeOnlyImports()):t.transforms.includes("typescript")&&we(l,c,function(e){const t=new Set;for(let n=0;n<e.tokens.length;n++)e.matches1AtIndex(n,s._import)&&!e.matches3AtIndex(n,s._import,s.name,s.eq)&&Vr(e,n,t);return t}(l)),{tokenProcessor:l,scopes:c,nameManager:h,importProcessor:f,helperManager:u}}t.default=function(e){return Hr(e,{transforms:["typescript"]}).code}}]).default;