hikvision-isapi-client
Version:
Enhanced TypeScript version of hikvision-isapi-client with modern features, type safety, and video decoding
1,024 lines (946 loc) • 157 kB
JavaScript
"use strict";var ue=Object.create;var B=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var fe=(o,t)=>{for(var e in t)B(o,e,{get:t[e],enumerable:!0})},ee=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of de(t))!pe.call(o,i)&&i!==e&&B(o,i,{get:()=>t[i],enumerable:!(r=le(t,i))||r.enumerable});return o};var C=(o,t,e)=>(e=o!=null?ue(ce(o)):{},ee(t||!o||!o.__esModule?B(e,"default",{value:o,enumerable:!0}):e,o)),me=o=>ee(B({},"__esModule",{value:!0}),o);var Me={};fe(Me,{ApiError:()=>m,AuthenticationError:()=>O,AxiosHttpClient:()=>w,Base:()=>b,Camera:()=>I,ConnectionError:()=>A,ConsoleLogger:()=>E,DefaultConfigValidator:()=>R,DeviceNotFoundError:()=>Y,ErrorHandler:()=>g,HikvisionError:()=>_,NoOpLogger:()=>W,Nvr:()=>x,TimeoutError:()=>k,ValidationError:()=>M,XmlHandler:()=>u,default:()=>be,formatDate:()=>v,generateUUID:()=>L,isBrowser:()=>D,sleep:()=>q});module.exports=me(Me);var N=C(require("axios"));var y=class{static sessionParams(t){let e=t.SessionLoginCap;return{sessionId:e.sessionID,challenge:e.challenge,iterations:e.iterations,isIrreversible:e.isIrreversible,salt:e.salt||""}}static deviceInfo(t){let e=t.DeviceInfo;return{name:e.deviceName,id:e.deviceID,model:e.model,serialNo:e.serialNumber,mac:e.macAddress,firmwareVersion:e.firmwareVersion,firmwareReleaseDate:e.firmwareVersion,encoderVersion:e.encoderVersion,encoderReleaseDate:e.encoderReleasedDate,deviceType:e.deviceType,code:e.telecontrolID}}static channel(t){return{id:t.id,name:t.name,addressType:t.sourceInputPortDescriptor.addressingFormatType,address:t.sourceInputPortDescriptor.ipAddress,protocol:t.sourceInputPortDescriptor.proxyProtocol,managePort:t.sourceInputPortDescriptor.managePortNo,inputPort:t.sourceInputPortDescriptor.srcInputPort,userName:t.sourceInputPortDescriptor.userName,streamType:t.sourceInputPortDescriptor.streamType,deviceId:t.sourceInputPortDescriptor.deviceID,enableAnr:t.enableAnr,enableTiming:t.enableTiming}}static channelStatus(t){return{id:t.id,ip:t.sourceInputPortDescriptor.ipAddress,sourceChannel:t.sourceInputPortDescriptor.srcInputPort,online:t.online}}static fetchChannels(t){let e=t.InputProxyChannelList.InputProxyChannel;return e?Array.isArray(e)?e.map(r=>this.channel(r)):[this.channel(e)]:[]}static getChannelStatus(t){let e=t.InputProxyChannelStatusList.InputProxyChannelStatus;return e?Array.isArray(e)?e.map(r=>this.channelStatus(r)):[this.channelStatus(e)]:[]}static user(t){return{id:t.id,userName:t.userName,type:t.userLevel}}static fetchUsers(t){let e=t.UserList.User;return e?Array.isArray(e)?e.map(r=>this.user(r)):[this.user(e)]:[]}static timeStatus(t){return{mode:t.Time.timeMode,time:new Date(t.Time.localTime),timeZoneOffset:-480}}static hdd(t){return{id:t.id,name:t.hddName,path:t.hddPath,type:t.hddType,status:t.status,capacity:parseInt(t.capacity),freeSpace:parseInt(t.freeSpace),property:t.property}}static nas(t){return{id:t.id,addressingFormatType:t.addressingFormatType,ipAddress:t.ipAddress,port:t.portNo,type:t.nasType,path:t.path,status:t.status,capacity:parseInt(t.capacity),freeSpace:parseInt(t.freeSpace),property:t.property}}static getStorages(t){let e=[],r=[],i=t.storage.hddList.hdd,n=t.storage.nasList.nas;return i&&(Array.isArray(i)?e.push(...i.map(a=>this.hdd(a))):e.push(this.hdd(i))),n&&(Array.isArray(n)?r.push(...n.map(a=>this.nas(a))):r.push(this.nas(n))),{hdd:e,nas:r,mode:t.storage.workMode}}static getDailyRecordStatus(t,e){return e.trackDailyDistribution.dayList.day.map(r=>({day:new Date(t.getFullYear(),t.getMonth(),parseInt(r.dayOfMonth)),hasRecord:r.record,recordType:r.recordType}))}static searchRecord(t){return{startTime:new Date(t.timeSpan.startTime.replace(/[TZ]/g," ")),endDate:new Date(t.timeSpan.endTime.replace(/[TZ]/g," ")),sourceId:t.sourceID,trackId:t.trackID,playbackUrl:t.mediaSegmentDescriptor.playbackURI}}static searchRecords(t){let e=t.CMSearchResult.matchList&&t.CMSearchResult.matchList.searchMatchItem,r=[];return e&&(Array.isArray(e)?r=e.map(i=>this.searchRecord(i)):r=[this.searchRecord(e)]),{total:t.CMSearchResult.numOfMatches,hasMore:t.CMSearchResult.responseStatusStrg==="MORE",list:r}}},H=class{static deviceInfo(t){return{DeviceInfo:{deviceName:t.name,deviceID:t.id,model:t.model,serialNumber:t.serialNo,macAddress:t.mac,firmwareVersion:t.firmwareVersion,firmwareReleasedDate:t.firmwareReleaseDate,encoderVersion:t.encoderVersion,encoderReleasedDate:t.encoderReleaseDate,deviceType:t.deviceType,telecontrolID:t.code}}}};var z=require("perf_hooks"),V=C(require("crypto")),te=require("timers");function v(o,t="yyyy-MM-dd hh:mm:ss"){let e={"M+":o.getMonth()+1,"d+":o.getDate(),"h+":o.getHours(),"m+":o.getMinutes(),"s+":o.getSeconds(),"q+":Math.floor((o.getMonth()+3)/3),S:o.getMilliseconds()},r=t.match(/(y+)/);if(r){let i=r[1],a=o.getFullYear().toString().substring(4-i.length);t=t.replace(i,a)}for(let[i,n]of Object.entries(e)){let a=new RegExp(`(${i})`),s=t.match(a);if(s){let l=s[1],d=l.length===1?n.toString():n.toString().padStart(2,"0");t=t.replace(l,d)}}return t}function L(){if(typeof V.default<"u"&&V.default.randomUUID)return V.default.randomUUID();let o=new Date().getTime(),t=typeof z.performance<"u"&&z.performance.now&&z.performance.now()*1e3||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let r=Math.random()*16;return o>0?(r=(o+r)%16|0,o=Math.floor(o/16)):(r=(t+r)%16|0,t=Math.floor(t/16)),(e==="x"?r:r&3|8).toString(16)})}function q(o){return new Promise(t=>{(0,te.setTimeout)(()=>{t()},o)})}function D(){return typeof window<"u"}function p(o,t){let e=(65535&o)+(65535&t);return(o>>16)+(t>>16)+(e>>16)<<16|65535&e}function S(o,t){return o>>>t|o<<32-t}function he(o){let t="";for(let e=0;e<4*o.length;e++)t+="0123456789abcdef".charAt(o[e>>2]>>8*(3-e%4)+4&15)+"0123456789abcdef".charAt(o[e>>2]>>8*(3-e%4)&15);return t}function ye(o,t){let e,r,i,n,a,s,l,d,h,f,X,Q,se=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],c=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],T=Array(64);for(o[t>>5]|=128<<24-t%32,o[15+(t+64>>9<<4)]=t,h=0;h<o.length;h+=16){for(e=c[0],r=c[1],i=c[2],n=c[3],a=c[4],s=c[5],l=c[6],d=c[7],f=0;f<64;f++)T[f]=f<16?o[f+h]:p(p(p(S(T[f-2],17)^S(T[f-2],19)^T[f-2]>>>10,T[f-7]),S(T[f-15],7)^S(T[f-15],18)^T[f-15]>>>3),T[f-16]),X=p(p(p(p(d,S(a,6)^S(a,11)^S(a,25)),a&s^~a&l),se[f]),T[f]),Q=p(S(e,2)^S(e,13)^S(e,22),e&r^e&i^r&i),d=l,l=s,s=a,a=p(n,X),n=i,i=r,r=e,e=p(X,Q);c[0]=p(e,c[0]),c[1]=p(r,c[1]),c[2]=p(i,c[2]),c[3]=p(n,c[3]),c[4]=p(a,c[4]),c[5]=p(s,c[5]),c[6]=p(l,c[6]),c[7]=p(d,c[7])}return c}function ge(o){let t=[];for(let e=0;e<8*o.length;e+=8)t[e>>5]|=(255&o.charCodeAt(e/8))<<24-e%32;return t}function _e(o){o=o.replace(/\r\n/g,`
`);let t="";for(let e=0;e<o.length;e++){let r=o.charCodeAt(e);r<128?t+=String.fromCharCode(r):(r>127&&r<2048?t+=String.fromCharCode(r>>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}function P(o){let t=ye(ge(o=_e(o)),8*o.length);return he(t)}var Z=C(require("xml2js")),U=require("xml2js/lib/processors"),u=class{static async parser(t){return await this._parser.parseStringPromise(t)}static build(t){return this._builder.buildObject(t)}};u._parser=new Z.default.Parser({attrkey:"attr",charkey:"value",explicitArray:!1,attrValueProcessors:[U.parseNumbers,U.parseBooleans],valueProcessors:[U.parseNumbers,U.parseBooleans]}),u._builder=new Z.default.Builder({headless:!0,renderOpts:{pretty:!1}});var re=C(require("axios"));var _=class extends Error{constructor(t,e){super(t),this.name=this.constructor.name,this._cause=e,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){var t;return{name:this.name,message:this.message,code:this.code,stack:this.stack,cause:(t=this._cause)==null?void 0:t.message}}},A=class extends _{constructor(e,r){super(`Connection failed: ${e}`,r);this.code="CONNECTION_ERROR"}},O=class extends _{constructor(e,r){super(`Authentication failed: ${e}`,r);this.code="AUTHENTICATION_ERROR"}},M=class extends _{constructor(e,r){super(`Validation failed: ${e}`,r);this.code="VALIDATION_ERROR"}},m=class extends _{constructor(e,r,i,n){super(`API request failed: ${e}`,n);this._statusCode=r;this._responseData=i;this.code="API_ERROR"}},k=class extends _{constructor(e,r,i){super(`Operation timed out after ${r}ms: ${e}`,i);this.timeoutMs=r;this.code="TIMEOUT_ERROR"}},Y=class extends _{constructor(e,r){super(`Device not found: ${e}`,r);this.code="DEVICE_NOT_FOUND"}};var ne=require("timers"),g=class o{static async withErrorHandling(t,e){try{return await t()}catch(r){throw o.transformError(r,e)}}static transformError(t,e){return t instanceof _?t:re.default.isAxiosError(t)?o.handleAxiosError(t,e):t instanceof Error&&t.message.includes("timeout")?new k(`Operation timed out in ${e}`,1e4,t):t instanceof Error?new A(`Unexpected error in ${e}: ${t.message}`,t):new A(`Unknown error in ${e}`,t instanceof Error?t:void 0)}static handleAxiosError(t,e){var l,d;let{response:r,request:i,message:n}=t;if(!r&&i)return new A(`Network error in ${e}: ${n}`,t);if(!r&&!i)return new A(`Request setup error in ${e}: ${n}`,t);let a=r==null?void 0:r.status,s=r==null?void 0:r.statusText;return a===401||a===403?new O(`${s} in ${e}`,t):new m(`HTTP ${a} ${s} in ${e}`,a,(d=(l=r==null?void 0:r.data)==null?void 0:l.ResponseStatus)==null?void 0:d.subStatusCode,t)}static logError(t,e){let r={timestamp:new Date().toISOString(),context:e,error:t.toJSON()};console.error("Hikvision API Error:",JSON.stringify(r,null,2))}static isRecoverable(t){switch(t.code){case"CONNECTION_ERROR":return!0;case"AUTHENTICATION_ERROR":return!1;case"VALIDATION_ERROR":return!1;case"API_ERROR":return t instanceof m&&t._statusCode!==void 0&&t._statusCode>=500;case"DEVICE_ERROR":return!0;case"CONFIGURATION_ERROR":return!1;default:return!1}}static async withRetry(t,e,r=3,i=1e3){let n;for(let a=1;a<=r;a++)try{return await o.withErrorHandling(t,e)}catch(s){if(n=s,!o.isRecoverable(n)||a===r)throw n;await new Promise(l=>(0,ne.setTimeout)(l,i*a))}throw n||new Error("Unknown error occurred during retry")}};var b=class{constructor(t,e,r,i){this.httpClient=e;this.logger=r;this.configValidator=i;this.session="";let n=this.configValidator.validate(t,this.getConfigSchema());this.ip=n.ip,this.port=n.port??80,this.user=n.user,this.password=n.password,this.useProxy=!!n.proxy,this.version=n.version??1,this.userPassword=n.userPassword??"",this.wsPort=7681,this.logger.info("Base class initialized",{ip:this.ip,port:this.port,user:this.user,version:this.version,useProxy:this.useProxy})}get url(){return`http://${this.ip}:${this.port}`}get headers(){return this.useProxy?{proxy:this.url,Cookie:this.version===2?this.session:`WebSession=${this.session}`}:{Cookie:this.version===2?this.session:`WebSession=${this.session}`}}getConfigSchema(){return{required:["ip","user","password"],optional:["port","timeout","proxy","version","userPassword"],validators:{ip:t=>/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(t),port:t=>t>0&&t<=65535,user:t=>t.length>0,password:t=>t.length>0}}}getSession(){return this.session}async getSessionParams(){let t=await this.httpClient.get(`/ISAPI/Security/sessionLogin/capabilities?username=${this.user}`,{headers:this.headers}),e=await u.parser(t.data);return y.sessionParams(e)}async deviceInfo(){let t=await this.httpClient.get("/ISAPI/System/deviceInfo",{headers:this.headers}),e=await u.parser(t.data);return y.deviceInfo(e)}async updateDeviceInfo(t){let e=await this.httpClient.put("ISAPI/System/deviceInfo",u.build(H.deviceInfo(t)),{headers:this.headers});await u.parser(e.data)}async getTime(){let t=await this.httpClient.get("ISAPI/System/time",{headers:this.headers}),e=await u.parser(t.data);return y.timeStatus(e)}async setTime(t){await this.httpClient.put("/ISAPI/System/time",u.build({Time:{timeMode:"manual",localTime:v(t.time,"yyyy-MM-ddThh:mm:ss"),timeZone:"CST-8:00:00"}}),{headers:this.headers})}async addUser(t){return g.withErrorHandling(async()=>{let e;try{e=(await this.httpClient.post("/ISAPI/Security/users",u.build({User:{id:t.id,userName:t.userName,loginPassword:this.password,password:t.password??this.userPassword,userLevel:"Operator"}}),{headers:this.headers})).data}catch(i){if(N.default.isAxiosError(i)&&i.response)e=i.response.data;else throw i}let r=await u.parser(e);if(r.ResponseStatus.statusCode!=="1")throw new m(r.ResponseStatus.subStatusCode||"Failed to add user",void 0,r.ResponseStatus.subStatusCode)},"addUser")}async updateUser(t){return g.withErrorHandling(async()=>{let e;try{e=(await this.httpClient.put(`/ISAPI/Security/users/${t.id}`,u.build({User:{id:t.id,userName:t.userName,loginPassword:this.password,password:t.password??this.userPassword,userLevel:t.type}}),{headers:this.headers})).data}catch(i){if(N.default.isAxiosError(i)&&i.response)e=i.response.data;else throw i}let r=await u.parser(e);if(r.ResponseStatus.statusCode!=="1")throw new m(r.ResponseStatus.subStatusCode||"Failed to update user",void 0,r.ResponseStatus.subStatusCode)},"updateUser")}async deleteUser(t){return g.withErrorHandling(async()=>{let e=typeof t=="number"?t:0;if(typeof t=="string"){let a=(await this.fetchUsers()).find(s=>s.userName===t);if(!a)throw new m(`User with name '${t}' not found`);e=a.id}let r;try{r=(await this.httpClient.delete(`/ISAPI/Security/users/${e}`,{headers:this.headers,params:{loginPassword:this.password}})).data}catch(n){if(N.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to delete user",void 0,i.ResponseStatus.subStatusCode)},"deleteUser")}async fetchUsers(){let t=await this.httpClient.get("/ISAPI/Security/users",{headers:this.headers}),e=await u.parser(t.data);return y.fetchUsers(e)}async getUsers(){let t=await this.httpClient.get("/ISAPI/Security/users",{headers:this.headers}),e=await u.parser(t.data);return y.fetchUsers(e)}encodePassword(t){let e;if(t.isIrreversible){e=P(this.user+t.salt+this.password),e=P(e+t.challenge);for(let r=2;r<t.iterations;r++)e=P(e)}else{e=P(this.password)+t.challenge;for(let r=1;r<t.iterations;r++)e=P(e)}return e}async reboot(){return g.withErrorHandling(async()=>{let t;try{t=(await this.httpClient.put("/ISAPI/System/reboot",null,{headers:this.headers})).data}catch(r){if(N.default.isAxiosError(r)&&r.response)t=r.response.data;else throw r}let e=await u.parser(t);if(e.ResponseStatus.statusCode!=="1")throw new m(e.ResponseStatus.subStatusCode||"Failed to reboot device",void 0,e.ResponseStatus.subStatusCode)},"reboot")}};var E=class{info(t,e){console.log(`[INFO] ${t}`,e?JSON.stringify(e):"")}error(t,e,r){console.error(`[ERROR] ${t}`,(e==null?void 0:e.message)||"",r?JSON.stringify(r):"")}debug(t,e){console.debug(`[DEBUG] ${t}`,e?JSON.stringify(e):"")}warn(t,e){console.warn(`[WARN] ${t}`,e?JSON.stringify(e):"")}},W=class{info(){}error(){}debug(){}warn(){}};var w=class{constructor(t){this.axiosInstance=t}async get(t,e){return this.axiosInstance.get(t,e)}async post(t,e,r){return this.axiosInstance.post(t,e,r)}async put(t,e,r){return this.axiosInstance.put(t,e,r)}async delete(t,e){return this.axiosInstance.delete(t,e)}};var R=class{validate(t,e){if(!t||typeof t!="object")throw new M("Configuration must be an object");let r=t,i={};for(let n of e.required){let a=n;if(!(a in r)||r[a]===void 0||r[a]===null)throw new M(`Required field '${a}' is missing`);i[a]=r[a]}if(e.optional)for(let n of e.optional){let a=n;a in r&&r[a]!==void 0&&(i[a]=r[a])}if(e.validators)for(let[n,a]of Object.entries(e.validators)){let s=n,l=i[s];if(l!==void 0&&a&&typeof a=="function"&&!a(l))throw new M(`Validation failed for field '${String(s)}'`)}return i}};var G=C(require("axios")),I=class extends b{constructor(e,r,i,n){let a=G.default.create({baseURL:e.proxy??`http://${e.ip}:${e.port??80}`,timeout:e.timeout??1e4});super(e,r??new w(a),i??new E,n??new R);this.wsPort=7681}get url(){return`http://${this.user}:${this.password}@${this.ip}:${this.port}`}get headers(){return this.useProxy?{proxy:this.url,Cookie:this.version===2?this.session:`WebSession=${this.session}`}:{Cookie:this.version===2?this.session:`WebSession=${this.session}`}}async connect(){if(this.version===2){let e=await this.getSessionParams(),r=this.encodePassword(e),i=await this.httpClient.post(`/ISAPI/Security/sessionLogin?timeStamp=${Date.now()}`,u.build({SessionLogin:{userName:this.user,password:r,sessionID:e.sessionId,isSessionIDValidLongTerm:!1,sessionIDVersion:2}}),{headers:this.headers}),n=await u.parser(i.data),a=n.SessionUserCheck??n.SessionLogin;this.session=(a==null?void 0:a.sessionID)??""}else await this.httpClient.get(`/ISAPI/Security/userCheck?timeStamp=${Date.now()}`)}async direction(e,r){await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/continuous",u.build({PTZData:{pan:e,tilt:r}}),{headers:this.headers})}async zoom(e){await this.httpClient.put("ISAPI/PTZCtrl/channels/1/continuous",u.build({PTZData:{zoom:e}}),{headers:this.headers})}async iris(e,r){await this.httpClient.put("/ISAPI/System/Video/inputs/channels/1/iris",u.build({IrisData:{iris:r}}),{headers:this.headers})}async focus(e){await this.httpClient.put("/ISAPI/System/Video/inputs/channels/1/focus",u.build({FocusData:{focus:e}}),{headers:this.headers})}async light(e){return g.withErrorHandling(async()=>{let r;try{r=(await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/auxcontrols/1",u.build({PTZAux:{id:"1",type:"LIGHT",status:e?"on":"off"}}),{headers:this.headers})).data}catch(n){if(G.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to control light",void 0,i.ResponseStatus.subStatusCode)},"light")}async wiper(e){return g.withErrorHandling(async()=>{let r;try{r=(await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/auxcontrols/1",u.build({PTZAux:{id:"1",type:"WIPER",status:e?"on":"off"}}),{headers:this.headers})).data}catch(n){if(G.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to control wiper",void 0,i.ResponseStatus.subStatusCode)},"wiper")}};var F=require("timers");var ae=C(require("ws"));function ie(o,t){let e=o?"postMessage":"parentPort.postMessage";return`${o?"":"const { parentPort } = require('worker_threads');"}
(function(event) {
const AUDIO_TYPE = 0; // \u97F3\u9891
const VIDEO_TYPE = 1; // \u89C6\u9891
const PRIVT_TYPE = 2; // \u79C1\u6709\u5E27
const PLAYM4_AUDIO_FRAME = 100; // \u97F3\u9891\u5E27
const PLAYM4_VIDEO_FRAME = 101; // \u89C6\u9891\u5E27
const HK_TRUE = 1; // true
const PLAYM4_NEED_MORE_DATA = 31; // \u9700\u8981\u66F4\u591A\u6570\u636E\u624D\u80FD\u89E3\u6790
const PLAYM4_SYS_NOT_SUPPORT = 16; // \u4E0D\u652F\u6301
let Module;
if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
let moduleOverrides = {};
for (let key in Module) {
if (Module.hasOwnProperty(key)) {
moduleOverrides[key] = Module[key];
}
}
const ENVIRONMENT_IS_WEB = typeof window === 'object';
const ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
const ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
if (ENVIRONMENT_IS_NODE) {
if (!Module['print']) Module['print'] = console.log;
if (!Module['printErr']) Module['printErr'] = console.warn;
let nodeFS;
let nodePath;
Module['read'] = function shell_read(filename, binary) {
if (!nodeFS) nodeFS = require('fs');
if (!nodePath) nodePath = require('path');
filename = nodePath['normalize'](filename);
const ret = nodeFS['readFileSync'](filename);
return binary ? ret : ret.toString();
};
Module['readBinary'] = function readBinary(filename) {
let ret = Module['read'](filename, true);
if (!ret.buffer) {
ret = new Uint8Array(ret);
}
assert(ret.buffer);
return ret;
};
Module['load'] = function load(f) {
globalEval(read(f));
};
if (!Module['thisProgram']) {
if (process['argv'].length > 1) {
Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');
} else {
Module['thisProgram'] = 'unknown-program';
}
}
Module['arguments'] = process['argv'].slice(2);
if (typeof module !== 'undefined') {
module['exports'] = Module;
}
process['on']('uncaughtException', function(ex) {
if (!(ex instanceof ExitStatus)) {
throw ex;
}
});
Module['inspect'] = function() {
return '[Emscripten Module object]';
};
} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
Module['read'] = function shell_read(url) {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
return xhr.responseText;
};
if (ENVIRONMENT_IS_WORKER) {
Module['readBinary'] = function readBinary(url) {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.responseType = 'arraybuffer';
xhr.send(null);
return new Uint8Array(xhr.response);
};
}
Module['readAsync'] = function readAsync(url, onload, onerror) {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function xhr_onload() {
if (xhr.status === 200 || xhr.status === 0 && xhr.response) {
onload(xhr.response);
} else {
onerror();
}
};
xhr.onerror = onerror;
xhr.send(null);
};
if (typeof arguments !== 'undefined') {
Module['arguments'] = arguments;
}
if (typeof console !== 'undefined') {
if (!Module['print']) Module['print'] = function shell_print(x) {
console.log(x);
};
if (!Module['printErr']) Module['printErr'] = function shell_printErr(x) {
console.warn(x);
};
} else {
const TRY_USE_DUMP = false;
if (!Module['print']) Module['print'] = TRY_USE_DUMP && typeof dump !== 'undefined' ? function(x) {
dump(x);
} : function(x) {
};
}
if (ENVIRONMENT_IS_WORKER) {
Module['load'] = importScripts;
}
if (typeof Module['setWindowTitle'] === 'undefined') {
Module['setWindowTitle'] = function(title) {
document.title = title;
};
}
} else {
throw 'Unknown runtime environment. Where are we?';
}
function globalEval(x) {
eval.call(null, x);
}
if (!Module['load'] && Module['read']) {
Module['load'] = function load(f) {
globalEval(Module['read'](f));
};
}
if (!Module['print']) {
Module['print'] = function() {
};
}
if (!Module['printErr']) {
Module['printErr'] = Module['print'];
}
if (!Module['arguments']) {
Module['arguments'] = [];
}
if (!Module['thisProgram']) {
Module['thisProgram'] = './this.program';
}
if (!Module['quit']) {
Module['quit'] = function(status, toThrow) {
throw toThrow;
};
}
Module.print = Module['print'];
Module.printErr = Module['printErr'];
Module['preRun'] = [];
Module['postRun'] = [];
for (let key in moduleOverrides) {
if (moduleOverrides.hasOwnProperty(key)) {
Module[key] = moduleOverrides[key];
}
}
moduleOverrides = undefined;
const Runtime = {
setTempRet0: function(value) {
tempRet0 = value;
return value;
}, getTempRet0: function() {
return tempRet0;
}, stackSave: function() {
return STACKTOP;
}, stackRestore: function(stackTop) {
STACKTOP = stackTop;
}, getNativeTypeSize: function(type) {
switch (type) {
case 'i1':
case 'i8':
return 1;
case 'i16':
return 2;
case 'i32':
return 4;
case 'i64':
return 8;
case 'float':
return 4;
case 'double':
return 8;
default: {
if (type[type.length - 1] === '*') {
return Runtime.QUANTUM_SIZE;
} else if (type[0] === 'i') {
const bits = parseInt(type.substr(1));
assert(bits % 8 === 0);
return bits / 8;
} else {
return 0;
}
}
}
}, getNativeFieldSize: function(type) {
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
}, STACK_ALIGN: 16, prepVararg: function(ptr, type) {
if (type === 'double' || type === 'i64') {
if ((ptr & 7) !== 0) {
assert((ptr & 7) === 4);
ptr += 4;
}
} else {
assert((ptr & 3) === 0);
}
return ptr;
}, getAlignSize: function(type, size, vararg) {
if (!vararg && (type === 'i64' || type === 'double')) return 8;
if (!type) return Math.min(size, 8);
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
}, dynCall: function(sig, ptr, args) {
if (args && args.length) {
return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
} else {
return Module['dynCall_' + sig].call(null, ptr);
}
}, functionPointers: [], warnOnce: function(text) {
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
if (!Runtime.warnOnce.shown[text]) {
Runtime.warnOnce.shown[text] = 1;
Module.printErr(text);
}
}, funcWrappers: {}, getFuncWrapper: function(func, sig) {
if (!func) return;
assert(sig);
if (!Runtime.funcWrappers[sig]) {
Runtime.funcWrappers[sig] = {};
}
var sigCache = Runtime.funcWrappers[sig];
if (!sigCache[func]) {
if (sig.length === 1) {
sigCache[func] = function dynCall_wrapper() {
return Runtime.dynCall(sig, func);
};
} else if (sig.length === 2) {
sigCache[func] = function dynCall_wrapper(arg) {
return Runtime.dynCall(sig, func, [arg]);
};
} else {
sigCache[func] = function dynCall_wrapper() {
return Runtime.dynCall(sig, func, Array.prototype.slice.call(arguments));
};
}
}
return sigCache[func];
}, getCompilerSetting: function(name) {
throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
}, stackAlloc: function(size) {
var ret = STACKTOP;
STACKTOP = STACKTOP + size | 0;
STACKTOP = STACKTOP + 15 & -16;
return ret;
}, staticAlloc: function(size) {
var ret = STATICTOP;
STATICTOP = STATICTOP + size | 0;
STATICTOP = STATICTOP + 15 & -16;
return ret;
}, dynamicAlloc: function(size) {
var ret = HEAP32[DYNAMICTOP_PTR >> 2];
var end = (ret + size + 15 | 0) & -16;
HEAP32[DYNAMICTOP_PTR >> 2] = end;
if (end >= TOTAL_MEMORY) {
var success = enlargeMemory();
if (!success) {
HEAP32[DYNAMICTOP_PTR >> 2] = ret;
return 0;
}
}
return ret;
}, alignMemory: function(size, quantum) {
var ret = size = Math.ceil(size / (quantum || 16)) * (quantum || 16);
return ret;
}, makeBigInt: function(low, high, unsigned) {
var ret = unsigned ? +(low >>> 0) + +(high >>> 0) * 4294967296 : +(low >>> 0) + +(high | 0) * 4294967296;
return ret;
}, GLOBAL_BASE: 1024, QUANTUM_SIZE: 4, __dummy__: 0
};
Module['Runtime'] = Runtime;
var ABORT = 0;
var EXITSTATUS = 0;
function assert(condition, text) {
if (!condition) {
abort('Assertion failed: ' + text);
}
}
function getCFunc(ident) {
var func = Module['_' + ident];
if (!func) {
try {
func = eval('_' + ident);
} catch (e) {
}
}
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
return func;
}
var cwrap, ccall;
(function() {
var JSfuncs = {
'stackSave': function() {
Runtime.stackSave();
}, 'stackRestore': function() {
Runtime.stackRestore();
}, 'arrayToC': function(arr) {
var ret = Runtime.stackAlloc(arr.length);
writeArrayToMemory(arr, ret);
return ret;
}, 'stringToC': function(str) {
var ret = 0;
if (str !== null && str !== undefined && str !== 0) {
var len = (str.length << 2) + 1;
ret = Runtime.stackAlloc(len);
stringToUTF8(str, ret, len);
}
return ret;
}
};
var toC = { 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC'] };
ccall = function ccallFunc(ident, returnType, argTypes, args, opts) {
var func = getCFunc(ident);
var cArgs = [];
var stack = 0;
if (args) {
for (let i = 0; i < args.length; i++) {
var converter = toC[argTypes[i]];
if (converter) {
if (stack === 0) stack = Runtime.stackSave();
cArgs[i] = converter(args[i]);
} else {
cArgs[i] = args[i];
}
}
}
var ret = func.apply(null, cArgs);
if (returnType === 'string') ret = Pointer_stringify(ret);
if (stack !== 0) {
if (opts && opts.async) {
EmterpreterAsync.asyncFinalizers.push(function() {
Runtime.stackRestore(stack);
});
return;
}
Runtime.stackRestore(stack);
}
return ret;
};
var sourceRegex = /^function\\s*[a-zA-Z$_0-9]*\\s*\\(([^)]*)\\)\\s*{\\s*([^*]*?)[\\s;]*(?:return\\s*(.*?)[;\\s]*)?}$/;
function parseJSFunc(jsfunc) {
var parsed = jsfunc.toString().match(sourceRegex).slice(1);
return { arguments: parsed[0], body: parsed[1], returnValue: parsed[2] };
}
var JSsource = null;
function ensureJSsource() {
if (!JSsource) {
JSsource = {};
for (let fun in JSfuncs) {
if (JSfuncs.hasOwnProperty(fun)) {
JSsource[fun] = parseJSFunc(JSfuncs[fun]);
}
}
}
}
cwrap = function cwrap(ident, returnType, argTypes) {
argTypes = argTypes || [];
var cfunc = getCFunc(ident);
var numericArgs = argTypes.every(function(type) {
return type === 'number';
});
var numericRet = returnType !== 'string';
if (numericRet && numericArgs) {
return cfunc;
}
var argNames = argTypes.map(function(x, i) {
return '$' + i;
});
var funcstr = '(function(' + argNames.join(',') + ') {';
var nargs = argTypes.length;
if (!numericArgs) {
ensureJSsource();
funcstr += 'var stack = ' + JSsource['stackSave'].body + ';';
for (let i = 0; i < nargs; i++) {
var arg = argNames[i];
var type = argTypes[i];
if (type === 'number') continue;
var convertCode = JSsource[type + 'ToC'];
funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';';
funcstr += convertCode.body + ';';
funcstr += arg + '=(' + convertCode.returnValue + ');';
}
}
var cfuncname = parseJSFunc(function() {
return cfunc;
}).returnValue;
funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');';
if (!numericRet) {
const strgfy = parseJSFunc(function() {
return Pointer_stringify;
}).returnValue;
funcstr += 'ret = ' + strgfy + '(ret);';
}
if (!numericArgs) {
ensureJSsource();
funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';';
}
funcstr += 'return ret})';
return eval(funcstr);
};
})();
Module['ccall'] = ccall;
Module['cwrap'] = cwrap;
function setValue(ptr, value, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length - 1) === '*') type = 'i32';
switch (type) {
case 'i1':
HEAP8[ptr >> 0] = value;
break;
case 'i8':
HEAP8[ptr >> 0] = value;
break;
case 'i16':
HEAP16[ptr >> 1] = value;
break;
case 'i32':
HEAP32[ptr >> 2] = value;
break;
case 'i64':
tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1];
break;
case 'float':
HEAPF32[ptr >> 2] = value;
break;
case 'double':
HEAPF64[ptr >> 3] = value;
break;
default:
abort('invalid type for setValue: ' + type);
}
}
Module['setValue'] = setValue;
function getValue(ptr, type, noSafe) {
type = type || 'i8';
if (type.charAt(type.length - 1) === '*') type = 'i32';
switch (type) {
case 'i1':
return HEAP8[ptr >> 0];
case 'i8':
return HEAP8[ptr >> 0];
case 'i16':
return HEAP16[ptr >> 1];
case 'i32':
return HEAP32[ptr >> 2];
case 'i64':
return HEAP32[ptr >> 2];
case 'float':
return HEAPF32[ptr >> 2];
case 'double':
return HEAPF64[ptr >> 3];
default:
abort('invalid type for setValue: ' + type);
}
return null;
}
Module['getValue'] = getValue;
var ALLOC_NORMAL = 0;
var ALLOC_STACK = 1;
var ALLOC_STATIC = 2;
var ALLOC_DYNAMIC = 3;
var ALLOC_NONE = 4;
Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
Module['ALLOC_STACK'] = ALLOC_STACK;
Module['ALLOC_STATIC'] = ALLOC_STATIC;
Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
Module['ALLOC_NONE'] = ALLOC_NONE;
function allocate(slab, types, allocator, ptr) {
var zeroinit, size;
if (typeof slab === 'number') {
zeroinit = true;
size = slab;
} else {
zeroinit = false;
size = slab.length;
}
var singleType = typeof types === 'string' ? types : null;
var ret;
if (allocator === ALLOC_NONE) {
ret = ptr;
} else {
ret = [typeof _malloc === 'function' ? _malloc : Runtime.staticAlloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
}
if (zeroinit) {
var ptr = ret;
var stop;
assert((ret & 3) === 0);
stop = ret + (size & ~3);
for (; ptr < stop; ptr += 4) {
HEAP32[ptr >> 2] = 0;
}
stop = ret + size;
while (ptr < stop) {
HEAP8[ptr++ >> 0] = 0;
}
return ret;
}
if (singleType === 'i8') {
if (slab.subarray || slab.slice) {
HEAPU8.set(slab, ret);
} else {
HEAPU8.set(new Uint8Array(slab), ret);
}
return ret;
}
var i = 0;
var type;
var typeSize;
var previousType;
while (i < size) {
var curr = slab[i];
if (typeof curr === 'function') {
curr = Runtime.getFunctionIndex(curr);
}
type = singleType || types[i];
if (type === 0) {
i++;
continue;
}
if (type === 'i64') type = 'i32';
setValue(ret + i, curr, type);
if (previousType !== type) {
typeSize = Runtime.getNativeTypeSize(type);
previousType = type;
}
i += typeSize;
}
return ret;
}
Module['allocate'] = allocate;
function getMemory(size) {
if (!staticSealed) return Runtime.staticAlloc(size);
if (!runtimeInitialized) return Runtime.dynamicAlloc(size);
return _malloc(size);
}
Module['getMemory'] = getMemory;
function Pointer_stringify(ptr, length) {
if (length === 0 || !ptr) return '';
var hasUtf = 0;
var t;
var i = 0;
while (1) {
t = HEAPU8[ptr + i >> 0];
hasUtf |= t;
if (t === 0 && !length) break;
i++;
if (length && i === length) break;
}
if (!length) length = i;
var ret = '';
if (hasUtf < 128) {
var MAX_CHUNK = 1024;
var curr;
while (length > 0) {
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
ret = ret ? ret + curr : curr;
ptr += MAX_CHUNK;
length -= MAX_CHUNK;
}
return ret;
}
return Module['UTF8ToString'](ptr);
}
Module['Pointer_stringify'] = Pointer_stringify;
function AsciiToString(ptr) {
var str = '';
while (1) {
var ch = HEAP8[ptr++ >> 0];
if (!ch) return str;
str += String.fromCharCode(ch);
}
}
Module['AsciiToString'] = AsciiToString;
function stringToAscii(str, outPtr) {
return writeAsciiToMemory(str, outPtr, false);
}
Module['stringToAscii'] = stringToAscii;
var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
function UTF8ArrayToString(u8Array, idx) {
var endPtr = idx;
while (u8Array[endPtr]) ++endPtr;
if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
} else {
var u0, u1, u2, u3, u4, u5;
var str = '';
while (1) {
u0 = u8Array[idx++];
if (!u0) return str;
if (!(u0 & 128)) {
str += String.fromCharCode(u0);
continue;
}
u1 = u8Array[idx++] & 63;
if ((u0 & 224) === 192) {
str += String.fromCharCode((u0 & 31) << 6 | u1);
continue;
}
u2 = u8Array[idx++] & 63;
if ((u0 & 240) === 224) {
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
} else {
u3 = u8Array[idx++] & 63;
if ((u0 & 248) === 240) {
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u3;
} else {
u4 = u8Array[idx++] & 63;
if ((u0 & 252) === 248) {
u0 = (u0 & 3) << 24 | u1 << 18 | u2 << 12 | u3 << 6 | u4;
} else {
u5 = u8Array[idx++] & 63;
u0 = (u0 & 1) << 30 | u1 << 24 | u2 << 18 | u3 << 12 | u4 << 6 | u5;
}
}
}
if (u0 < 65536) {
str += String.fromCharCode(u0);
} else {
var ch = u0 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
}
}
}
}
Module['UTF8ArrayToString'] = UTF8ArrayToString;
function UTF8ToString(ptr) {
return UTF8ArrayToString(HEAPU8, ptr);
}
Module['UTF8ToString'] = UTF8ToString;
function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
if (!(maxBytesToWrite > 0)) return 0;
var startIdx = outIdx;
var endIdx = outIdx + maxBytesToWrite - 1;
for (let i = 0; i < str.length; ++i) {
var u = str.charCodeAt(i);
if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;
if (u <= 127) {
if (outIdx >= endIdx) break;
outU8Array[outIdx++] = u;
} else if (u <= 2047) {
if (outIdx + 1 >= endIdx) break;
outU8Array[outIdx++] = 192 | u >> 6;
outU8Array[outIdx++] = 128 | u & 63;
} else if (u <= 65535) {
if (outIdx + 2 >= endIdx) break;
outU8Array[outIdx++] = 224 | u >> 12;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63;
} else if (u <= 2097151) {
if (outIdx + 3 >= endIdx) break;
outU8Array[outIdx++] = 240 | u >> 18;
outU8Array[outIdx++] = 128 | u >> 12 & 63;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63;
} else if (u <= 67108863) {
if (outIdx + 4 >= endIdx) break;
outU8Array[outIdx++] = 248 | u >> 24;
outU8Array[outIdx++] = 128 | u >> 18 & 63;
outU8Array[outIdx++] = 128 | u >> 12 & 63;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63;
} else {
if (outIdx + 5 >= endIdx) break;
outU8Array[outIdx++] = 252 | u >> 30;
outU8Array[outIdx++] = 128 | u >> 24 & 63;
outU8Array[outIdx++] = 128 | u >> 18 & 63;
outU8Array[outIdx++] = 128 | u >> 12 & 63;
outU8Array[outIdx++] = 128 | u >> 6 & 63;
outU8Array[outIdx++] = 128 | u & 63;
}
}
outU8Array[outIdx] = 0;
return outIdx - startIdx;
}
Module['stringToUTF8Array'] = stringToUTF8Array;
function stringToUTF8(str, outPtr, maxBytesToWrite) {
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
}
Module['stringToUTF8'] = stringToUTF8;
function lengthBytesUTF8(str) {
var len = 0;
for (let i = 0; i < str.length; ++i) {
var u = str.charCodeAt(i);
if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;
if (u <= 127) {
++len;
} else if (u <= 2047) {
len += 2;
} else if (u <= 65535) {
len += 3;
} else if (u <= 2097151) {
len += 4;
} else if (u <= 67108863) {
len += 5;
} else {
len += 6;
}
}
return len;
}
Module['lengthBytesUTF8'] = lengthBytesUTF8;
var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
function demangle(func) {
var __cxa_demangle_func = Module['___cxa_demangle'] || Module['__cxa_demangle'];
if (__cxa_demangle_func) {
try {
var s = func.substr(1);
var len = lengthBytesUTF8(s) + 1;
var buf = _malloc(len);
stringToUTF8(s, buf, len);
var status = _malloc(4);
var ret = __cxa_demangle_func(buf, 0, 0, status);
if (getValue(status, 'i32') === 0 && ret) {
return Pointer_stringify(ret);
}
} catch (e) {
} finally {
if (buf) _free(buf);
if (status) _free(status);
if (ret) _free(ret);
}
return func;
}
Runtime.warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling');
return func;
}
function demangleAll(text) {
var regex = /__Z[\\w\\d_]+/g;
return text.replace(regex, function(x) {
var y = demangle(x);
return x === y ? x : x + ' [' + y + ']';
});
}
function jsStackTrace() {
var err = new Error();
if (!err.stack) {
try {
throw new Error(0);
} catch (e) {
err = e;
}
if (!err.stack) {
return '(no stack trace available)';
}
}
return err.stack.toString();
}
function stackTrace() {
var js = jsStackTrace();
if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();
return demangleAll(js);
}
Module['stackTrace'] = stackTrace;
var WASM_PAGE_SIZE = 65536;
var ASMJS_PAGE_SIZE = 16777216;
function alignUp(x, multiple) {
if (x % multiple > 0) {
x += multiple - x % multiple;
}
return x;
}
let HEAP, buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
function updateGlobalBuffer(buf) {
Module['buffer'] = buffer = buf;
}
function updateGlobalBufferViews() {
Module['HEAP8'] = HEAP8 = new Int8Array(buffer);
Module['HEAP16'] = HEAP16 = new Int16Array(buffer);
Module['HEAP32'] = HEAP32 = new Int32Array(buffer);
Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);
Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);
Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);
Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);
Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);
}
let STATIC_BASE, STATICTOP, staticSealed;
let STACK_BASE, STACKTOP, STACK_MAX;
let DYNAMIC_BASE, DYNAMICTOP_PTR;
STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
staticSealed = false;
function abortOnCannotGrowMemory() {
abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ');
}
function enlargeMemory() {
abortOnCannotGrowMemory();
}
var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');
if (Module['buffer']) {
buffer = Module['buffer'];
} else {
if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') {
Module['wasmMemory'] = new WebAssembly.Memory({
'initial': TOTAL_MEMORY / WASM_PAGE_SIZE,
'maximum': TOTAL_MEMORY / WASM_PAGE_SIZE
});
buffer = Module['wasmMemory'].buffer;
} else {
buffer = new ArrayBuffer(TOTAL_MEMORY);
}
}
updateGlobalBufferViews();
function getTotalMemory() {
return TOTAL_MEMORY;
}
HEAP32[0] = 1668509029;
HEAP16[1] = 25459;
if (HEAPU8[2] !== 115 || HEAPU8[3] !== 99) throw 'Runtime error: expected the system to be little-endian!';
Module['HEAP'] = HEAP;
Module['buffer'] = buffer;
Module['HEAP8'] = HEAP8;
Module['HEAP16'] = HEAP16;
Module['HEAP32'] = HEAP32;
Module['HEAPU8'] = HEAPU8;
Module['HEAPU16'] = HEAPU16;
Module['HEAPU32'] = HEAPU32;
Module['HEAPF32'] = HEAPF32;
Module['HEAPF64'] = HEAPF64;
function callRuntimeCallbacks(callbacks) {
while (callbacks.length > 0) {
var callback = callbacks.shift();
if (typeof callback === 'function') {
callback();
continue;
}
var func = callback.func;
if (typeof func === 'number') {
if (callback.arg === undefined) {
Module['dynCall_v'](func);
} else {
Module['dynCall_vi'](func, callback.arg);
}
} else {
func(callback.arg === undefined ? null : callback.arg);
}
}
}
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATMAIN__ = [];
var __ATEXIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
var runtimeExited = false;
function preRun() {
if (Module['preRun']) {
if (typeof Module['preRun'] === 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
callRuntimeCallbacks(__ATPRERUN__);
}
function ensureInitRuntime() {
if (runtimeInitialized) return;
runtimeInitialized = true;
callRuntimeCallbacks(__ATINIT__);
}
function preMain() {
callRuntimeCallbacks(__ATMAIN__);
}
function exitRuntime() {
callRuntimeCallbacks(__ATEXIT__);
runtimeExited = true;
}
function postRun() {
if (Module['postRun']) {
if (typeof Module['postRun'] === 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
Module['addOnPreRun'] = addOnPreRun;
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
Module['addOnInit'] = addOnInit;
function addOnPreMain(cb) {
__ATMAIN__.unshift(cb);
}
Module['addOnPreMain'] = addOnPreMain;
function addOnExit(cb) {
__ATEXIT__.unshift(cb);
}
Module['addOnExit'] = addOnExit;
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
Module['addOnPostRun'] = addOnPostRun;
function intArrayFromString(stringy, dontAddNull, length) {
var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
var u8array = new Array(len);
var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
if (dontAddNull) u8array.length = numBytesWritten;
return u8array;
}
Module['intArrayFromString'] = intArrayFromString;
function intArrayToString(array) {
var ret = [];
for (let i = 0; i < array.length; i++) {
var chr = array[i];
if (chr > 255) {
chr &= 255;
}
ret.push(String.fromCharCode(chr));
}
return ret.join('');
}
Module['intArrayToString'] = intArrayToString;
function writeStringToMemory(string, buffer, dontAddNull) {
Runtime.warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');
var lastChar, end;
if (dontAddNull) {
end = buffer + lengthBytesUTF8(string);
lastChar = HEAP8[end];
}
stringToUTF8(string, buffer, Infinity);
if (dontAddNull) HEAP8[end] = lastChar;
}
Module['writeStringToMemory'] = writeStringToMemory;
function writeArrayToMemory(array, buffer) {
HEAP8.set(array, buffer);
}
Module['writeArrayToMemory'] = writeArrayToMemory;
function writeAsciiToMemory(str, buffer, dontAddNull) {
for (let i = 0; i < str.length; ++i) {
HEAP8[buffer++ >> 0] = str.charCodeAt(i);
}
if (!dontAddNull) HEAP8[buffer >> 0] = 0;
}
Module['writeAsciiToMemory'] = writeAsciiToMemory;
if (!Math['imul'] || Math['imul'](4294967295