!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){function e(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}function t(e){return new this(function(t,n){function r(e,n){if(n&&("object"==typeof n||"function"==typeof n)){var f=n.then;if("function"==typeof f)return void f.call(n,function(t){r(e,t)},function(n){o[e]={status:"rejected",reason:n},0==--i&&t(o)})}o[e]={status:"fulfilled",value:n},0==--i&&t(o)}if(!e||"undefined"==typeof e.length)return n(new TypeError(typeof e+" "+e+" is not iterable(cannot read property Symbol(Symbol.iterator))"));var o=Array.prototype.slice.call(e);if(0===o.length)return t([]);for(var i=o.length,f=0;o.length>f;f++)r(f,o[f])})}function n(e,t){this.name="AggregateError",this.errors=e,this.message=t||""}function r(e){var t=this;return new t(function(r,o){if(!e||"undefined"==typeof e.length)return o(new TypeError("Promise.any accepts an array"));var i=Array.prototype.slice.call(e);if(0===i.length)return o();for(var f=[],u=0;i.length>u;u++)try{t.resolve(i[u]).then(r)["catch"](function(e){f.push(e),f.length===i.length&&o(new n(f,"All promises were rejected"))})}catch(c){o(c)}})}function o(e){return!(!e||"undefined"==typeof e.length)}function i(){}function f(e){if(!(this instanceof f))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],s(e,this)}function u(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,f._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var r;try{r=n(e._value)}catch(o){return void a(t.promise,o)}c(t.promise,r)}else(1===e._state?c:a)(t.promise,e._value)})):e._deferreds.push(t)}function c(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof f)return e._state=3,e._value=t,void l(e);if("function"==typeof n)return void s(function(e,t){return function(){e.apply(t,arguments)}}(n,t),e)}e._state=1,e._value=t,l(e)}catch(r){a(e,r)}}function a(e,t){e._state=2,e._value=t,l(e)}function l(e){2===e._state&&0===e._deferreds.length&&f._immediateFn(function(){e._handled||f._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;n>t;t++)u(e,e._deferreds[t]);e._deferreds=null}function s(e,t){var n=!1;try{e(function(e){n||(n=!0,c(t,e))},function(e){n||(n=!0,a(t,e))})}catch(r){if(n)return;n=!0,a(t,r)}}n.prototype=Error.prototype;var d=setTimeout;f.prototype["catch"]=function(e){return this.then(null,e)},f.prototype.then=function(e,t){var n=new this.constructor(i);return u(this,new function(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}(e,t,n)),n},f.prototype["finally"]=e,f.all=function(e){return new f(function(t,n){function r(e,o){try{if(o&&("object"==typeof o||"function"==typeof o)){var u=o.then;if("function"==typeof u)return void u.call(o,function(t){r(e,t)},n)}i[e]=o,0==--f&&t(i)}catch(c){n(c)}}if(!o(e))return n(new TypeError("Promise.all accepts an array"));var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var f=i.length,u=0;i.length>u;u++)r(u,i[u])})},f.any=r,f.allSettled=t,f.resolve=function(e){return e&&"object"==typeof e&&e.constructor===f?e:new f(function(t){t(e)})},f.reject=function(e){return new f(function(t,n){n(e)})},f.race=function(e){return new f(function(t,n){if(!o(e))return n(new TypeError("Promise.race accepts an array"));for(var r=0,i=e.length;i>r;r++)f.resolve(e[r]).then(t,n)})},f._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){d(e,0)},f._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var p=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"function"!=typeof p.Promise?p.Promise=f:(p.Promise.prototype["finally"]||(p.Promise.prototype["finally"]=e),p.Promise.allSettled||(p.Promise.allSettled=t),p.Promise.any||(p.Promise.any=r))});var WConverwsClient=function(t){function e(){return"undefined"!=typeof window&&void 0!==window.document}function n(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}function r(r){let o=null;r.url||(r.url="ws://localhost:8080"),r.token||(r.token="*");let i,u=function(){let t=e(),n="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope;return t=t||n,{isBrowser:t,isWebWorker:n,isNode:"undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node}}().isBrowser;i=u?("undefined"!=typeof self?self:e()?window:"undefined"!=typeof global?global:null).WebSocket:t;try{o=new i(r.url+"/?token="+r.token)}catch(t){o=null}if(null===o)return{error:"can not new MixWS"};function c(){n(r.open)&&r.open()}function a(){n(r.close)&&r.close()}function f(t){n(r.message)&&r.message(t)}function s(t){n(r.error)&&r.error(t),o.close()}return u?(o.onopen=c,o.onmessage=function(t){f(t.data)},o.onclose=a,o.onerror=s):(o.on("open",c),o.on("message",f),o.on("close",a),o.on("error",s)),o}var o=Array.isArray,i="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,c=i||u||Function("return this")(),a=c.Symbol,f=Object.prototype,s=f.hasOwnProperty,l=f.toString,p=a?a.toStringTag:void 0;var h=Object.prototype.toString;var y="[object Null]",v="[object Undefined]",d=a?a.toStringTag:void 0;function g(t){return null==t?void 0===t?v:y:d&&d in Object(t)?function(t){var e=s.call(t,p),n=t[p];try{t[p]=void 0;var r=!0}catch(t){}var o=l.call(t);return r&&(e?t[p]=n:delete t[p]),o}(t):function(t){return h.call(t)}(t)}function b(t){return null!=t&&"object"==typeof t}var _="[object Symbol]";function w(t){return"symbol"==typeof t||b(t)&&g(t)==_}var m=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/;function A(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var x="[object AsyncFunction]",O="[object Function]",S="[object GeneratorFunction]",U="[object Proxy]";function B(t){if(!A(t))return!1;var e=g(t);return e==O||e==S||e==x||e==U}var k,C=c["__core-js_shared__"],E=(k=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+k:"";var P=Function.prototype.toString;var z=/^\[object .+?Constructor\]$/,M=Function.prototype,T=Object.prototype,L=M.toString,F=T.hasOwnProperty,$=RegExp("^"+L.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function I(t){return!(!A(t)||(e=t,E&&E in e))&&(B(t)?$:z).test(function(t){if(null!=t){try{return P.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t));var e}function W(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return I(n)?n:void 0}var N=W(Object,"create");var R=Object.prototype.hasOwnProperty;var D=Object.prototype.hasOwnProperty;function H(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function G(t,e){return t===e||t!=t&&e!=e}function V(t,e){for(var n=t.length;n--;)if(G(t[n][0],e))return n;return-1}H.prototype.clear=function(){this.__data__=N?N(null):{},this.size=0},H.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},H.prototype.get=function(t){var e=this.__data__;if(N){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return R.call(e,t)?e[t]:void 0},H.prototype.has=function(t){var e=this.__data__;return N?void 0!==e[t]:D.call(e,t)},H.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=N&&void 0===e?"__lodash_hash_undefined__":e,this};var q=Array.prototype.splice;function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=V(e,t);return!(n<0)&&(n==e.length-1?e.pop():q.call(e,n,1),--this.size,!0)},J.prototype.get=function(t){var e=this.__data__,n=V(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return V(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=V(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};var K=W(c,"Map");function Q(t,e){var n,r,o=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof e?"string":"hash"]:o.map}function X(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}X.prototype.clear=function(){this.size=0,this.__data__={hash:new H,map:new(K||J),string:new H}},X.prototype.delete=function(t){var e=Q(this,t).delete(t);return this.size-=e?1:0,e},X.prototype.get=function(t){return Q(this,t).get(t)},X.prototype.has=function(t){return Q(this,t).has(t)},X.prototype.set=function(t,e){var n=Q(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this};var Y="Expected a function";function Z(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(Y);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(Z.Cache||X),n}Z.Cache=X;var tt,et,nt,rt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ot=/\\(\\)?/g,it=(tt=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(rt,(function(t,n,r,o){e.push(r?o.replace(ot,"$1"):n||t)})),e},et=Z(tt,(function(t){return 500===nt.size&&nt.clear(),t})),nt=et.cache,et),ut=it;var ct=1/0,at=a?a.prototype:void 0,ft=at?at.toString:void 0;function st(t){if("string"==typeof t)return t;if(o(t))return function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}(t,st)+"";if(w(t))return ft?ft.call(t):"";var e=t+"";return"0"==e&&1/t==-ct?"-0":e}function lt(t){return null==t?"":st(t)}function pt(t,e){return o(t)?t:function(t,e){if(o(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!w(t))||j.test(t)||!m.test(t)||null!=e&&t in Object(e)}(t,e)?[t]:ut(lt(t))}var ht=1/0;function yt(t){if("string"==typeof t||w(t))return t;var e=t+"";return"0"==e&&1/t==-ht?"-0":e}function vt(t,e,n){var r=null==t?void 0:function(t,e){for(var n=0,r=(e=pt(e,t)).length;null!=t&&n<r;)t=t[yt(e[n++])];return n&&n==r?t:void 0}(t,e);return void 0===r?n:r}var dt=/\s/;var gt=/^\s+/;function bt(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&dt.test(t.charAt(e)););return e}(t)+1).replace(gt,""):t}var _t=NaN,wt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,jt=/^0o[0-7]+$/i,At=parseInt;function xt(t){if("number"==typeof t)return t;if(w(t))return _t;if(A(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=A(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=bt(t);var n=mt.test(t);return n||jt.test(t)?At(t.slice(2),n?2:8):wt.test(t)?_t:+t}var Ot=1/0,St=17976931348623157e292;function Ut(t){return t?(t=xt(t))===Ot||t===-Ot?(t<0?-1:1)*St:t==t?t:0:0===t?t:0}function Bt(t){var e=Ut(t),n=e%1;return e==e?n?e-n:e:0}function kt(t){return"[object String]"===Object.prototype.toString.call(t)}function Ct(t){return!(!kt(t)||""===t)}function Et(t){let e=!1;if(Ct(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(function(t){return t!=t}(t))return!1;e=!0}return e}function Pt(t){if(!Et(t))return 0;return Ut(t)}function zt(t){return!!Et(t)&&(t=Pt(t),"number"==typeof(e=t)&&e==Bt(e));var e}var Mt=c.isFinite,Tt=Math.min;var Lt=function(t){var e=Math[t];return function(t,n){if(t=xt(t),(n=null==n?0:Tt(Bt(n),292))&&Mt(t)){var r=(lt(t)+"e").split("e");return+((r=(lt(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return e(t)}}("round"),Ft=Lt;function $t(t){if(!Et(t))return 0;t=Pt(t);let e=Ft(t);return"0"===String(e)?0:e}let It="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),Wt=It.length;function Nt(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:32,e=[];var n;t=zt(n=t)&&$t(n)>0?$t(t):32;for(let n=0;n<t;n++)e[n]=It[0|Math.random()*Wt];return e.join("")}var Rt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Dt(t){if(t.__esModule)return t;var e=t.default;if("function"==typeof e){var n=function t(){if(this instanceof t){var n=[null];return n.push.apply(n,arguments),new(Function.bind.apply(e,n))}return e.apply(this,arguments)};n.prototype=e.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach((function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})})),n}var Ht={};!function(t){var e=Object.prototype.hasOwnProperty,n="~";function r(){}function o(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function i(t,e,r,i,u){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,i||t,u),a=n?n+e:e;return t._events[a]?t._events[a].fn?t._events[a]=[t._events[a],c]:t._events[a].push(c):(t._events[a]=c,t._eventsCount++),t}function u(t,e){0==--t._eventsCount?t._events=new r:delete t._events[e]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var t,r,o=[];if(0===this._eventsCount)return o;for(r in t=this._events)e.call(t,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(t)):o},c.prototype.listeners=function(t){var e=n?n+t:t,r=this._events[e];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,u=new Array(i);o<i;o++)u[o]=r[o].fn;return u},c.prototype.listenerCount=function(t){var e=n?n+t:t,r=this._events[e];return r?r.fn?1:r.length:0},c.prototype.emit=function(t,e,r,o,i,u){var c=n?n+t:t;if(!this._events[c])return!1;var a,f,s=this._events[c],l=arguments.length;if(s.fn){switch(s.once&&this.removeListener(t,s.fn,void 0,!0),l){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,e),!0;case 3:return s.fn.call(s.context,e,r),!0;case 4:return s.fn.call(s.context,e,r,o),!0;case 5:return s.fn.call(s.context,e,r,o,i),!0;case 6:return s.fn.call(s.context,e,r,o,i,u),!0}for(f=1,a=new Array(l-1);f<l;f++)a[f-1]=arguments[f];s.fn.apply(s.context,a)}else{var p,h=s.length;for(f=0;f<h;f++)switch(s[f].once&&this.removeListener(t,s[f].fn,void 0,!0),l){case 1:s[f].fn.call(s[f].context);break;case 2:s[f].fn.call(s[f].context,e);break;case 3:s[f].fn.call(s[f].context,e,r);break;case 4:s[f].fn.call(s[f].context,e,r,o);break;default:if(!a)for(p=1,a=new Array(l-1);p<l;p++)a[p-1]=arguments[p];s[f].fn.apply(s[f].context,a)}}return!0},c.prototype.on=function(t,e,n){return i(this,t,e,n,!1)},c.prototype.once=function(t,e,n){return i(this,t,e,n,!0)},c.prototype.removeListener=function(t,e,r,o){var i=n?n+t:t;if(!this._events[i])return this;if(!e)return u(this,i),this;var c=this._events[i];if(c.fn)c.fn!==e||o&&!c.once||r&&c.context!==r||u(this,i);else{for(var a=0,f=[],s=c.length;a<s;a++)(c[a].fn!==e||o&&!c[a].once||r&&c[a].context!==r)&&f.push(c[a]);f.length?this._events[i]=1===f.length?f[0]:f:u(this,i)}return this},c.prototype.removeAllListeners=function(t){var e;return t?(e=n?n+t:t,this._events[e]&&u(this,e)):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,t.exports=c}({get exports(){return Ht},set exports(t){Ht=t}});var Gt=Ht;function Vt(){return new Gt}function qt(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}var Jt=9007199254740991;function Kt(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Jt}function Qt(t){return null!=t&&Kt(t.length)&&!B(t)}var Xt=9007199254740991,Yt=/^(?:0|[1-9]\d*)$/;function Zt(t,e){var n=typeof t;return!!(e=null==e?Xt:e)&&("number"==n||"symbol"!=n&&Yt.test(t))&&t>-1&&t%1==0&&t<e}function te(t,e,n){if(!A(n))return!1;var r=typeof e;return!!("number"==r?Qt(n)&&Zt(e,n.length):"string"==r&&e in n)&&G(n[e],t)}var ee=Math.ceil,ne=Math.max;var re=Array.prototype.join;function oe(t,e){return null==t?"":re.call(t,e)}function ie(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}var ue,ce=function(t,e,n){for(var r=-1,o=Object(t),i=n(t),u=i.length;u--;){var c=i[ue?u:++r];if(!1===e(o[c],c,o))break}return t};function ae(t){return b(t)&&"[object Arguments]"==g(t)}var fe=Object.prototype,se=fe.hasOwnProperty,le=fe.propertyIsEnumerable,pe=ae(function(){return arguments}())?ae:function(t){return b(t)&&se.call(t,"callee")&&!le.call(t,"callee")},he=pe;var ye="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ye&&"object"==typeof module&&module&&!module.nodeType&&module,de=ve&&ve.exports===ye?c.Buffer:void 0,ge=(de?de.isBuffer:void 0)||function(){return!1},be={};function _e(t){return function(e){return t(e)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var we="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=we&&"object"==typeof module&&module&&!module.nodeType&&module,je=me&&me.exports===we&&i.process,Ae=function(){try{var t=me&&me.require&&me.require("util").types;return t||je&&je.binding&&je.binding("util")}catch(t){}}(),xe=Ae&&Ae.isTypedArray,Oe=xe?_e(xe):function(t){return b(t)&&Kt(t.length)&&!!be[g(t)]},Se=Object.prototype.hasOwnProperty;function Ue(t,e){var n=o(t),r=!n&&he(t),i=!n&&!r&&ge(t),u=!n&&!r&&!i&&Oe(t),c=n||r||i||u,a=c?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],f=a.length;for(var s in t)!e&&!Se.call(t,s)||c&&("length"==s||i&&("offset"==s||"parent"==s)||u&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||Zt(s,f))||a.push(s);return a}var Be=Object.prototype;var ke=function(t,e){return function(n){return t(e(n))}}(Object.keys,Object),Ce=ke,Ee=Object.prototype.hasOwnProperty;function Pe(t){if(n=(e=t)&&e.constructor,e!==("function"==typeof n&&n.prototype||Be))return Ce(t);var e,n,r=[];for(var o in Object(t))Ee.call(t,o)&&"constructor"!=o&&r.push(o);return r}function ze(t){return Qt(t)?Ue(t):Pe(t)}var Me=function(t,e){return function(n,r){if(null==n)return n;if(!Qt(n))return t(n,r);for(var o=n.length,i=e?o:-1,u=Object(n);(e?i--:++i<o)&&!1!==r(u[i],i,u););return n}}((function(t,e){return t&&ce(t,e,ze)})),Te=Me;function Le(t){return t}function Fe(t,e){var n;return(o(t)?ie:Te)(t,"function"==typeof(n=e)?n:Le)}function $e(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)}function Ie(t){return"[object Uint16Array]"===Object.prototype.toString.call(t)}function We(t){if(!zt(t))return!1;return $t(t)>=0}function Ne(t,e){return Ct(t)&&We(e)?0===(e=$t(e))?"":t.substring(0,e):""}function Re(t,e){return Ct(t)&&We(e)?0===(e=$t(e))?t:function(t,e){if(!Ct(t))return"";if(!We(e))return"";if(0===(e=$t(e)))return"";let n=t.length-e;return n<0&&(n=0),t.substr(n,e)}(t,t.length-e):""}var De={},He={get exports(){return De},set exports(t){De=t}};var Ge,Ve={},qe={get exports(){return Ve},set exports(t){Ve=t}},Je=Dt(Object.freeze({__proto__:null,default:{}}));function Ke(){return Ge||(Ge=1,function(t,e){var n;t.exports=(n=n||function(t,e){var n;if("undefined"!=typeof window&&window.crypto&&(n=window.crypto),"undefined"!=typeof self&&self.crypto&&(n=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!=typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&void 0!==Rt&&Rt.crypto&&(n=Rt.crypto),!n)try{n=Je}catch(t){}var r=function(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")},o=Object.create||function(){function t(){}return function(e){var n;return t.prototype=e,n=new t,t.prototype=null,n}}(),i={},u=i.lib={},c=u.Base={extend:function(t){var e=o(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},a=u.WordArray=c.extend({init:function(t,n){t=this.words=t||[],this.sigBytes=n!=e?n:4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,n=t.words,r=this.sigBytes,o=t.sigBytes;if(this.clamp(),r%4)for(var i=0;i<o;i++){var u=n[i>>>2]>>>24-i%4*8&255;e[r+i>>>2]|=u<<24-(r+i)%4*8}else for(var c=0;c<o;c+=4)e[r+c>>>2]=n[c>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=t.ceil(n/4)},clone:function(){var t=c.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],n=0;n<t;n+=4)e.push(r());return new a.init(e,t)}}),f=i.enc={},s=f.Hex={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;o<n;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r+=2)n[r>>>3]|=parseInt(t.substr(r,2),16)<<24-r%8*4;return new a.init(n,e/2)}},l=f.Latin1={stringify:function(t){for(var e=t.words,n=t.sigBytes,r=[],o=0;o<n;o++){var i=e[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(t){for(var e=t.length,n=[],r=0;r<e;r++)n[r>>>2]|=(255&t.charCodeAt(r))<<24-r%4*8;return new a.init(n,e)}},p=f.Utf8={stringify:function(t){try{return decodeURIComponent(escape(l.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return l.parse(unescape(encodeURIComponent(t)))}},h=u.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var n,r=this._data,o=r.words,i=r.sigBytes,u=this.blockSize,c=i/(4*u),f=(c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0))*u,s=t.min(4*f,i);if(f){for(var l=0;l<f;l+=u)this._doProcessBlock(o,l);n=o.splice(0,f),r.sigBytes-=s}return new a.init(n,s)},clone:function(){var t=c.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});u.Hasher=h.extend({cfg:c.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(e,n){return new t.init(n).finalize(e)}},_createHmacHelper:function(t){return function(e,n){return new y.HMAC.init(t,n).finalize(e)}}});var y=i.algo={};return i}(Math),n)}(qe)),Ve}!function(t,e){var n;t.exports=(n=Ke(),function(){var t=n,e=t.lib.WordArray;function r(t,n,r){for(var o=[],i=0,u=0;u<n;u++)if(u%4){var c=r[t.charCodeAt(u-1)]<<u%4*2|r[t.charCodeAt(u)]>>>6-u%4*2;o[i>>>2]|=c<<24-i%4*8,i++}return e.create(o,i)}t.enc.Base64={stringify:function(t){var e=t.words,n=t.sigBytes,r=this._map;t.clamp();for(var o=[],i=0;i<n;i+=3)for(var u=(e[i>>>2]>>>24-i%4*8&255)<<16|(e[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|e[i+2>>>2]>>>24-(i+2)%4*8&255,c=0;c<4&&i+.75*c<n;c++)o.push(r.charAt(u>>>6*(3-c)&63));var a=r.charAt(64);if(a)for(;o.length%4;)o.push(a);return o.join("")},parse:function(t){var e=t.length,n=this._map,o=this._reverseMap;if(!o){o=this._reverseMap=[];for(var i=0;i<n.length;i++)o[n.charCodeAt(i)]=i}var u=n.charAt(64);if(u){var c=t.indexOf(u);-1!==c&&(e=c)}return r(t,e,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),n.enc.Base64)}(He);var Qe=De,Xe={};!function(t,e){var n;t.exports=(n=Ke(),function(){if("function"==typeof ArrayBuffer){var t=n.lib.WordArray,e=t.init,r=t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var n=t.byteLength,r=[],o=0;o<n;o++)r[o>>>2]|=t[o]<<24-o%4*8;e.call(this,r,n)}else e.apply(this,arguments)};r.prototype=t}}(),n.lib.WordArray)}({get exports(){return Xe},set exports(t){Xe=t}});var Ye=Xe;function Ze(t){if(!$e(t))return"";return Ye.create(t).toString(Qe)}function tn(t){if(!kt(t))return new Uint8Array;let e=Qe.parse(t),n=e.words,r=e.sigBytes,o=new Uint8Array(r);for(let t=0;t<r;t++){let e=n[t>>>2]>>>24-t%4*8&255;o[t]=e}return o}function en(t){return Ie(t)?Ze(function(t){return Ie(t)?new Uint8Array(t):new Uint8Array}(t)):""}function nn(t){if(!kt(t))return new Uint16Array;let e=function(t){return $e(t)?new Uint16Array(t):new Uint16Array}(tn(t));return e}let rn="[Uint8Array]::";let on="[Uint16Array]::";let un={tagU8A:rn,u8arr2b64:function(t){return $e(t)?rn+Ze(t):t},b642u8arr:function(t){return kt(t)&&Ne(t,rn.length)===rn?tn(t=Re(t,rn.length)):t},tagU16A:on,u16arr2b64:function(t){return Ie(t)?on+en(t):t},b642u16arr:function(t){return kt(t)&&Ne(t,on.length)===on?nn(t=Re(t,on.length)):t}};function cn(t){return"[object Array]"===Object.prototype.toString.call(t)}function an(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Uint8Array";if(n=t,"[object Undefined]"===Object.prototype.toString.call(n))return"";var n;if(kt(e))e=[e];else if(!cn(e))return"";let r="";try{r=JSON.stringify(t,(function(t,n){return e.indexOf("Uint8Array")>=0&&(n=un.u8arr2b64(n)),e.indexOf("Uint16Array")>=0&&(n=un.u16arr2b64(n)),n}))}catch(t){r=""}return r}function fn(t,e,n,r,o){let i=function(t,e,n){e=(n?te(t,e,n):void 0===e)?1:ne(Bt(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var o=0,i=0,u=Array(ee(r/e));o<r;)u[i++]=qt(t,o,o+=e);return u}(an(n),e),u=Nt(),c=i.length;Fe(i,(function(e,n){e=oe(e,"");let i=`${u}|${n}|${c}|${e}`;t.send(i,(function(t){t&&B(o)&&o(t)})),B(r)&&r((n+1)/c*100)}))}var sn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");function ln(t){return sn.test(t)}var pn=Ae&&Ae.isRegExp,hn=pn?_e(pn):function(t){return b(t)&&"[object RegExp]"==g(t)};var yn="\\ud800-\\udfff",vn="["+yn+"]",dn="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",gn="\\ud83c[\\udffb-\\udfff]",bn="[^"+yn+"]",_n="(?:\\ud83c[\\udde6-\\uddff]){2}",wn="[\\ud800-\\udbff][\\udc00-\\udfff]",mn="(?:"+dn+"|"+gn+")"+"?",jn="[\\ufe0e\\ufe0f]?",An=jn+mn+("(?:\\u200d(?:"+[bn,_n,wn].join("|")+")"+jn+mn+")*"),xn="(?:"+[bn+dn+"?",dn,_n,wn,vn].join("|")+")",On=RegExp(gn+"(?="+gn+")|"+xn+An,"g");function Sn(t){return ln(t)?function(t){return t.match(On)||[]}(t):function(t){return t.split("")}(t)}var Un=4294967295;function Bn(t,e,n){return n&&"number"!=typeof n&&te(t,e,n)&&(e=n=void 0),(n=void 0===n?Un:n>>>0)?(t=lt(t))&&("string"==typeof e||null!=e&&!hn(e))&&!(e=st(e))&&ln(t)?(r=Sn(t),o=0,i=n,u=r.length,i=void 0===i?u:i,!o&&i>=u?r:qt(r,o,i)):t.split(e,n):[];var r,o,i,u}var kn=Math.ceil,Cn=Math.max;var En=function(t){return function(e,n,r){return r&&"number"!=typeof r&&te(e,n,r)&&(n=r=void 0),e=Ut(e),void 0===n?(n=e,e=0):n=Ut(n),function(t,e,n,r){for(var o=-1,i=Cn(kn((e-t)/(n||1)),0),u=Array(i);i--;)u[r?i:++o]=t,t+=n;return u}(e,n,r=void 0===r?e<n?1:-1:Ut(r),t)}}(),Pn=En;function zn(t,e){return n=t,"[object Object]"===Object.prototype.toString.call(n)&&(!(!Ct(e)&&!Et(e))&&e in t);var n}let Mn={};function Tn(t,e){let n=Bn(t,"|"),r=n[0],o=xt(n[1]),i=xt(n[2]),u=oe((a=3,(s=null==(c=n)?0:c.length)?qt(c,(a=f||void 0===a?1:Bt(a))<0?0:a,s):[]),"|");var c,a,f,s;if(zn(Mn,r)||(Mn[r]={}),Mn[r]["_"+o]=u,o===i-1){let t="";Fe(Pn(i),(function(e){t+=Mn[r]["_"+e]})),delete Mn[r];let n=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Uint8Array";if(kt(e))e=[e];else if(!cn(e))return{};let n={};try{n=JSON.parse(t,(function(t,n){return e.indexOf("Uint8Array")>=0&&(n=un.b642u8arr(n)),e.indexOf("Uint16Array")>=0&&(n=un.b642u16arr(n)),n}))}catch(t){n={}}return n}(t);e(n)}}return function(t){let e=!1,n=null,o=new Vt,i=new Vt;function u(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];setTimeout((()=>{o.emit(t,...n)}),1)}function c(){t.url||(t.url="ws://localhost:8080"),t.token||(t.token="*"),t.strSplitLength||(t.strSplitLength=1e6);let c={url:t.url,token:t.token,open:function(){u("open"),e||(u("openOnce"),e=!0)},close:function(){u("close"),a()},message:function(t){!function(t){Tn(t,s)}(t)},error:function(t){f(t)}};try{n=new r(c)}catch(t){return u("error",{msg:"can not create websocket",err:t}),void a()}if(vt(n,"error"))return u("error",{msg:"can not create websocket",err:"can not new MixWS in WWebsocketClient"}),void a();function f(t){u("error",{msg:"websocket error",err:t}),n.close()}function s(t){let e=vt(t,"_mode","");if("execute"===e)if(vt(t,"_id")&&vt(t,"output")){let e=vt(t,"_id"),n=vt(t,"output");i.emit(e,n)}else u("error",{msg:"can not find _id and output in data",err:t});else"broadcast"===e?u("broadcast",vt(t,"data")):"deliver"===e?u("deliver",vt(t,"data")):f({msg:"can not find _mode in data",err:t})}function l(e,r){n.readyState===n.OPEN&&fn(n,t.strSplitLength,e,r,(function(t){u("error",{msg:"can not send message",err:t})}))}o.removeAllListeners("triggerExecute"),o.on("triggerExecute",(function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,o=Nt();l({_mode:"execute",_id:o,func:t,input:e},r),i.on(o,(function(t){n(t),i.removeAllListeners(o)}))})),o.removeAllListeners("triggerBroadcast"),o.on("triggerBroadcast",(function(t,e){l({_mode:"broadcast",data:t},e)})),o.removeAllListeners("triggerDeliver"),o.on("triggerDeliver",(function(t,e){l({_mode:"deliver",data:t},e)}))}function a(){setTimeout((function(){u("reconn"),c()}),1e3)}return o.execute=function(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=function(){let t,e,n=new Promise((function(){t=arguments[0],e=arguments[1]}));return n.resolve=t,n.reject=e,n}();return u("triggerExecute",t,e,(function(t){r.resolve(t)}),n),r},o.broadcast=function(t){u("triggerBroadcast",t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){})},o.deliver=function(t){u("triggerDeliver",t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){})},c(),o}}();var wo=null,bInit=!1;function init(a){bInit||(wo=new WConverwsClient(a),wo.on("open",function(){sendSystemMessage("open")}),wo.on("openOnce",function(){sendSystemMessage("openOnce"),bInit=!0}),wo.on("close",function(){sendSystemMessage("close")}),wo.on("error",function(a){sendSystemMessage("error",a)}),wo.on("reconn",function(){sendSystemMessage("reconn")}),wo.on("broadcast",function(a){sendSystemMessage("broadcast",a)}),wo.on("deliver",function(a){sendSystemMessage("deliver",a)}))}function sendMessage(a){self.postMessage(a)}function sendSystemMessage(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;sendMessage({_id:"system",func:a,data:b})}self.onmessage=function(a){var b=a.data,c=b.type;if("init"===c){var d=b._id,e=b.input;init(e);var f=setInterval(function(){if(bInit){sendMessage({_id:d,output:null}),clearInterval(f)}},10)}else if("execute"===c){var g=b._id,h=b.func,i=b.input;wo.execute(h,i,function(a){sendMessage({_id:g,prog:a})}).then(function(a){sendMessage({_id:g,output:a})})}else if("broadcast"===c||"deliver"===c){var j=b._id,k=b.input;wo[c](k,function(a){sendMessage({_id:j,prog:a})})}else sendSystemMessage("error","type error: ".concat(c))};