(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(function () { return (root.cv = factory()); }); } else if (typeof module === 'object' && module.exports) { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = factory(); } else if (typeof window === 'object') { // Browser globals root.cv = factory(); } else if (typeof importScripts === 'function') { // Web worker root.cv = factory(); } else { // Other shells, e.g. d8 root.cv = factory(); } }(this, function () { const IsWechat = false; var cv = (function () { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; return (function (cv) { cv = cv || {}; // IsWechat var wasmBinaryFile; if (IsWechat) { wasmBinaryFile = global.wasm_url } else { wasmBinaryFile = window.wasm_url; } var Module = typeof cv !== "undefined" ? cv : {}; var moduleOverrides = {}; var key; for (key in Module) { if (Module.hasOwnProperty(key)) { moduleOverrides[key] = Module[key] } } var arguments_ = []; var thisProgram = "./this.program"; var quit_ = function (status, toThrow) { throw toThrow }; var ENVIRONMENT_IS_WEB = false; var ENVIRONMENT_IS_WORKER = false; var ENVIRONMENT_IS_NODE = false; var ENVIRONMENT_HAS_NODE = false; var ENVIRONMENT_IS_SHELL = false; ENVIRONMENT_IS_WEB = typeof window === "object"; ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; ENVIRONMENT_HAS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; ENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; var scriptDirectory = ""; function locateFile(path) { if (Module["locateFile"]) { return Module["locateFile"](path, scriptDirectory) } return scriptDirectory + path } var read_, readAsync, readBinary, setWindowTitle; if (ENVIRONMENT_IS_NODE) { scriptDirectory = __dirname + "/"; var nodeFS; var nodePath; read_ = function shell_read(filename, binary) { var ret; ret = tryParseAsDataURI(filename); if (!ret) { if (!nodeFS) nodeFS = require("fs"); if (!nodePath) nodePath = require("path"); filename = nodePath["normalize"](filename); ret = nodeFS["readFileSync"](filename) } return binary ? ret : ret.toString() } ; readBinary = function readBinary(filename) { var ret = read_(filename, true); if (!ret.buffer) { ret = new Uint8Array(ret) } assert(ret.buffer); return ret } ; if (process["argv"].length > 1) { thisProgram = process["argv"][1].replace(/\\/g, "/") } arguments_ = process["argv"].slice(2); process["on"]("uncaughtException", function (ex) { if (!(ex instanceof ExitStatus)) { throw ex } }); process["on"]("unhandledRejection", abort); quit_ = function (status) { process["exit"](status) } ; Module["inspect"] = function () { return "[Emscripten Module object]" } } else if (!IsWechat && ENVIRONMENT_IS_SHELL) { if (typeof read != "undefined") { read_ = function shell_read(f) { var data = tryParseAsDataURI(f); if (data) { return intArrayToString(data) } return read(f) } } readBinary = function readBinary(f) { var data; data = tryParseAsDataURI(f); if (data) { return data } if (typeof readbuffer === "function") { return new Uint8Array(readbuffer(f)) } data = read(f, "binary"); assert(typeof data === "object"); return data } ; if (typeof scriptArgs != "undefined") { arguments_ = scriptArgs } else if (typeof arguments != "undefined") { arguments_ = arguments } if (typeof quit === "function") { quit_ = function (status) { quit(status) } } if (typeof print !== "undefined") { if (typeof console === "undefined") console = {}; console.log = print; console.warn = console.error = typeof printErr !== "undefined" ? printErr : print } // } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { } else if (IsWechat || ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { if (ENVIRONMENT_IS_WORKER) { scriptDirectory = self.location.href } else if (!IsWechat && document.currentScript) { scriptDirectory = document.currentScript.src } if (_scriptDir) { scriptDirectory = _scriptDir } if (scriptDirectory.indexOf("blob:") !== 0) { scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) } else { scriptDirectory = "" } read_ = function shell_read(url) { try { var xhr = new XMLHttpRequest; xhr.open("GET", url, false); xhr.send(null); return xhr.responseText } catch (err) { var data = tryParseAsDataURI(url); if (data) { return intArrayToString(data) } throw err } } ; if (ENVIRONMENT_IS_WORKER) { readBinary = function readBinary(url) { try { var xhr = new XMLHttpRequest; xhr.open("GET", url, false); xhr.responseType = "arraybuffer"; xhr.send(null); return new Uint8Array(xhr.response) } catch (err) { var data = tryParseAsDataURI(url); if (data) { return data } throw err } } } readAsync = function readAsync(url, onload, onerror) { var 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); return } var data = tryParseAsDataURI(url); if (data) { onload(data.buffer); return } onerror() } ; xhr.onerror = onerror; xhr.send(null) } ; setWindowTitle = function (title) { document.title = title } } else { } var out = Module["print"] || console.log.bind(console); var err = Module["printErr"] || console.warn.bind(console); for (key in moduleOverrides) { if (moduleOverrides.hasOwnProperty(key)) { Module[key] = moduleOverrides[key] } } moduleOverrides = null; if (Module["arguments"]) arguments_ = Module["arguments"]; if (Module["thisProgram"]) thisProgram = Module["thisProgram"]; if (Module["quit"]) quit_ = Module["quit"]; var STACK_ALIGN = 16; function dynamicAlloc(size) { var ret = HEAP32[DYNAMICTOP_PTR >> 2]; var end = ret + size + 15 & -16; if (end > _emscripten_get_heap_size()) { abort() } HEAP32[DYNAMICTOP_PTR >> 2] = end; return ret } function getNativeTypeSize(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 4 } else if (type[0] === "i") { var bits = parseInt(type.substr(1)); assert(bits % 8 === 0, "getNativeTypeSize invalid bits " + bits + ", type " + type); return bits / 8 } else { return 0 } } } } function warnOnce(text) { if (!warnOnce.shown) warnOnce.shown = {}; if (!warnOnce.shown[text]) { warnOnce.shown[text] = 1; err(text) } } function convertJsFunctionToWasm(func, sig) { var typeSection = [1, 0, 1, 96]; var sigRet = sig.slice(0, 1); var sigParam = sig.slice(1); var typeCodes = { "i": 127, "j": 126, "f": 125, "d": 124 }; typeSection.push(sigParam.length); for (var i = 0; i < sigParam.length; ++i) { typeSection.push(typeCodes[sigParam[i]]) } if (sigRet == "v") { typeSection.push(0) } else { typeSection = typeSection.concat([1, typeCodes[sigRet]]) } typeSection[1] = typeSection.length - 2; var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); var module = new WebAssembly.Module(bytes); var instance = new WebAssembly.Instance(module, { e: { f: func } }); var wrappedFunc = instance.exports.f; return wrappedFunc } function addFunctionWasm(func, sig) { var table = wasmTable; var ret = table.length; try { table.grow(1) } catch (err) { if (!err instanceof RangeError) { throw err } throw "Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH." } try { table.set(ret, func) } catch (err) { if (!err instanceof TypeError) { throw err } assert(typeof sig !== "undefined", "Missing signature argument to addFunction"); var wrapped = convertJsFunctionToWasm(func, sig); table.set(ret, wrapped) } return ret } function removeFunctionWasm(index) { } var funcWrappers = {}; function dynCall(sig, ptr, args) { if (args && args.length) { return Module["dynCall_" + sig].apply(null, [ptr].concat(args)) } else { return Module["dynCall_" + sig].call(null, ptr) } } var tempRet0 = 0; var setTempRet0 = function (value) { tempRet0 = value }; var wasmBinary; if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; var noExitRuntime; if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"]; if (typeof WebAssembly !== "object") { err("no native wasm support detected") } 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) } } var wasmMemory; var wasmTable = new WebAssembly.Table({ "initial": 8039, "maximum": 8039 + 0, "element": "anyfunc" }); var ABORT = false; var EXITSTATUS = 0; function assert(condition, text) { if (!condition) { abort("Assertion failed: " + text) } } function getCFunc(ident) { var func = Module["_" + ident]; assert(func, "Cannot call unknown function " + ident + ", make sure it is exported"); return func } function ccall(ident, returnType, argTypes, args, opts) { var toC = { "string": function (str) { var ret = 0; if (str !== null && str !== undefined && str !== 0) { var len = (str.length << 2) + 1; ret = stackAlloc(len); stringToUTF8(str, ret, len) } return ret }, "array": function (arr) { var ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret } }; function convertReturnValue(ret) { if (returnType === "string") return UTF8ToString(ret); if (returnType === "boolean") return Boolean(ret); return ret } var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) { for (var i = 0; i < args.length; i++) { var converter = toC[argTypes[i]]; if (converter) { if (stack === 0) stack = stackSave(); cArgs[i] = converter(args[i]) } else { cArgs[i] = args[i] } } } var ret = func.apply(null, cArgs); ret = convertReturnValue(ret); if (stack !== 0) stackRestore(stack); return ret } var ALLOC_NONE = 3; 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 = [_malloc, stackAlloc, dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length)) } if (zeroinit) { var stop; ptr = ret; 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, type, typeSize, previousType; while (i < size) { var curr = slab[i]; type = singleType || types[i]; if (type === 0) { i++; continue } if (type == "i64") type = "i32"; setValue(ret + i, curr, type); if (previousType !== type) { typeSize = getNativeTypeSize(type); previousType = type } i += typeSize } return ret } function getMemory(size) { if (!runtimeInitialized) return dynamicAlloc(size); return _malloc(size) } var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; function UTF8ArrayToString(u8Array, idx, maxBytesToRead) { var endIdx = idx + maxBytesToRead; var endPtr = idx; while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr; if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)) } else { var str = ""; while (idx < endPtr) { var u0 = u8Array[idx++]; if (!(u0 & 128)) { str += String.fromCharCode(u0); continue } var u1 = u8Array[idx++] & 63; if ((u0 & 224) == 192) { str += String.fromCharCode((u0 & 31) << 6 | u1); continue } var u2 = u8Array[idx++] & 63; if ((u0 & 240) == 224) { u0 = (u0 & 15) << 12 | u1 << 6 | u2 } else { u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63 } if (u0 < 65536) { str += String.fromCharCode(u0) } else { var ch = u0 - 65536; str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) } } } return str } function UTF8ToString(ptr, maxBytesToRead) { return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" } function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { if (!(maxBytesToWrite > 0)) return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; for (var i = 0; i < str.length; ++i) { var u = str.charCodeAt(i); if (u >= 55296 && u <= 57343) { var u1 = str.charCodeAt(++i); u = 65536 + ((u & 1023) << 10) | u1 & 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 (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 } } outU8Array[outIdx] = 0; return outIdx - startIdx } function stringToUTF8(str, outPtr, maxBytesToWrite) { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) } function lengthBytesUTF8(str) { var len = 0; for (var 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 len += 4 } return len } var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined; function writeArrayToMemory(array, buffer) { HEAP8.set(array, buffer) } function writeAsciiToMemory(str, buffer, dontAddNull) { for (var i = 0; i < str.length; ++i) { HEAP8[buffer++ >> 0] = str.charCodeAt(i) } if (!dontAddNull) HEAP8[buffer >> 0] = 0 } var PAGE_SIZE = 16384; var WASM_PAGE_SIZE = 65536; function alignUp(x, multiple) { if (x % multiple > 0) { x += multiple - x % multiple } return x } var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; function updateGlobalBufferAndViews(buf) { buffer = buf; Module["HEAP8"] = HEAP8 = new Int8Array(buf); Module["HEAP16"] = HEAP16 = new Int16Array(buf); Module["HEAP32"] = HEAP32 = new Int32Array(buf); Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); Module["HEAPF64"] = HEAPF64 = new Float64Array(buf) } var STACK_BASE = 6518496 , DYNAMIC_BASE = 6518496 , DYNAMICTOP_PTR = 1275456; var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 134217728; if (Module["wasmMemory"]) { wasmMemory = Module["wasmMemory"] } else { wasmMemory = new WebAssembly.Memory({ "initial": INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE, "maximum": 1073741824 / WASM_PAGE_SIZE }) } if (wasmMemory) { buffer = wasmMemory.buffer } INITIAL_TOTAL_MEMORY = buffer.byteLength; updateGlobalBufferAndViews(buffer); HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE; 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 initRuntime() { runtimeInitialized = true; if (!Module["noFSInit"] && !FS.init.initialized) FS.init(); TTY.init(); callRuntimeCallbacks(__ATINIT__) } function preMain() { FS.ignorePermissions = false; callRuntimeCallbacks(__ATMAIN__) } function exitRuntime() { 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) } function addOnPostRun(cb) { __ATPOSTRUN__.unshift(cb) } var Math_abs = Math.abs; var Math_ceil = Math.ceil; var Math_floor = Math.floor; var Math_min = Math.min; var runDependencies = 0; var runDependencyWatcher = null; var dependenciesFulfilled = null; function getUniqueRunDependency(id) { return id } function addRunDependency(id) { runDependencies++; if (Module["monitorRunDependencies"]) { Module["monitorRunDependencies"](runDependencies) } } function removeRunDependency(id) { runDependencies--; if (Module["monitorRunDependencies"]) { Module["monitorRunDependencies"](runDependencies) } if (runDependencies == 0) { if (runDependencyWatcher !== null) { clearInterval(runDependencyWatcher); runDependencyWatcher = null } if (dependenciesFulfilled) { var callback = dependenciesFulfilled; dependenciesFulfilled = null; callback() } } } Module["preloadedImages"] = {}; Module["preloadedAudios"] = {}; function abort(what) { if (Module["onAbort"]) { Module["onAbort"](what) } what += ""; out(what); err(what); ABORT = true; EXITSTATUS = 1; throw "abort(" + what + "). Build with -s ASSERTIONS=1 for more info." } var dataURIPrefix = "data:application/octet-stream;base64,"; function isDataURI(filename) { return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0 } if (!isDataURI(wasmBinaryFile)) { wasmBinaryFile = locateFile(wasmBinaryFile) } function getBinary() { try { if (wasmBinary) { return new Uint8Array(wasmBinary) } var binary = tryParseAsDataURI(wasmBinaryFile); if (binary) { return binary } if (readBinary) { return readBinary(wasmBinaryFile) } else { throw "both async and sync fetching of the wasm failed" } } catch (err) { abort(err) } } function getBinaryPromise() { if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function") { return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function (response) { if (!response["ok"]) { throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" } return response["arrayBuffer"]() }).catch(function () { return getBinary() }) } return new Promise(function (resolve, reject) { resolve(getBinary()) } ) } function createWasm() { var info = { "env": asmLibraryArg, "wasi_unstable": asmLibraryArg }; function receiveInstance(instance, module) { var exports = instance.exports; Module["asm"] = exports; removeRunDependency("wasm-instantiate") } addRunDependency("wasm-instantiate"); function receiveInstantiatedSource(output) { receiveInstance(output["instance"]) } function instantiateArrayBuffer(receiver) { return getBinaryPromise().then(function (binary) { return WebAssembly.instantiate(binary, info) }).then(receiver, function (reason) { err("failed to asynchronously prepare wasm: " + reason); abort(reason) }) } function instantiateAsync() { if (IsWechat) { var result = WXWebAssembly.instantiate(wasmBinaryFile, info) return result.then(receiveInstantiatedSource, function (reason) { err("wasm streaming compile failed: " + reason); err("falling back to ArrayBuffer instantiation"); instantiateArrayBuffer(receiveInstantiatedSource) }) } else { if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") { fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function (response) { var result = WebAssembly.instantiateStreaming(response, info); return result.then(receiveInstantiatedSource, function (reason) { err("wasm streaming compile failed: " + reason); err("falling back to ArrayBuffer instantiation"); instantiateArrayBuffer(receiveInstantiatedSource) }) }) } else { return instantiateArrayBuffer(receiveInstantiatedSource) } } } if (Module["instantiateWasm"]) { try { var exports = Module["instantiateWasm"](info, receiveInstance); return exports } catch (e) { err("Module.instantiateWasm callback failed with error: " + e); return false } } instantiateAsync(); return {} } var tempDouble; var tempI64; __ATINIT__.push({ func: function () { ___wasm_call_ctors() } }); function _emscripten_set_main_loop_timing(mode, value) { Browser.mainLoop.timingMode = mode; Browser.mainLoop.timingValue = value; if (!Browser.mainLoop.func) { return 1 } if (mode == 0) { Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() { var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now()) | 0; setTimeout(Browser.mainLoop.runner, timeUntilNextTick) } ; Browser.mainLoop.method = "timeout" } else if (mode == 1) { Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() { Browser.requestAnimationFrame(Browser.mainLoop.runner) } ; Browser.mainLoop.method = "rAF" } else if (mode == 2) { if (typeof setImmediate === "undefined") { var setImmediates = []; var emscriptenMainLoopMessageId = "setimmediate"; var Browser_setImmediate_messageHandler = function (event) { if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) { event.stopPropagation(); setImmediates.shift()() } }; addEventListener("message", Browser_setImmediate_messageHandler, true); setImmediate = function Browser_emulated_setImmediate(func) { setImmediates.push(func); if (ENVIRONMENT_IS_WORKER) { if (Module["setImmediates"] === undefined) Module["setImmediates"] = []; Module["setImmediates"].push(func); postMessage({ target: emscriptenMainLoopMessageId }) } else postMessage(emscriptenMainLoopMessageId, "*") } } Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() { setImmediate(Browser.mainLoop.runner) } ; Browser.mainLoop.method = "immediate" } return 0 } function _emscripten_get_now() { abort() } function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { noExitRuntime = true; assert(!Browser.mainLoop.func, "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."); Browser.mainLoop.func = func; Browser.mainLoop.arg = arg; var browserIterationFunc; if (typeof arg !== "undefined") { browserIterationFunc = function () { Module["dynCall_vi"](func, arg) } } else { browserIterationFunc = function () { Module["dynCall_v"](func) } } var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; Browser.mainLoop.runner = function Browser_mainLoop_runner() { if (ABORT) return; if (Browser.mainLoop.queue.length > 0) { var start = Date.now(); var blocker = Browser.mainLoop.queue.shift(); blocker.func(blocker.arg); if (Browser.mainLoop.remainingBlockers) { var remaining = Browser.mainLoop.remainingBlockers; var next = remaining % 1 == 0 ? remaining - 1 : Math.floor(remaining); if (blocker.counted) { Browser.mainLoop.remainingBlockers = next } else { next = next + .5; Browser.mainLoop.remainingBlockers = (8 * remaining + next) / 9 } } console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + " ms"); Browser.mainLoop.updateStatus(); if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; setTimeout(Browser.mainLoop.runner, 0); return } if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0; if (Browser.mainLoop.timingMode == 1 && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) { Browser.mainLoop.scheduler(); return } else if (Browser.mainLoop.timingMode == 0) { Browser.mainLoop.tickStartTime = _emscripten_get_now() } if (Browser.mainLoop.method === "timeout" && Module.ctx) { err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"); Browser.mainLoop.method = "" } Browser.mainLoop.runIter(browserIterationFunc); if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) return; if (typeof SDL === "object" && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData(); Browser.mainLoop.scheduler() } ; if (!noSetTiming) { if (fps && fps > 0) _emscripten_set_main_loop_timing(0, 1e3 / fps); else _emscripten_set_main_loop_timing(1, 1); Browser.mainLoop.scheduler() } if (simulateInfiniteLoop) { throw "SimulateInfiniteLoop" } } var Browser = { mainLoop: { scheduler: null, method: "", currentlyRunningMainloop: 0, func: null, arg: 0, timingMode: 0, timingValue: 0, currentFrameNumber: 0, queue: [], pause: function () { Browser.mainLoop.scheduler = null; Browser.mainLoop.currentlyRunningMainloop++ }, resume: function () { Browser.mainLoop.currentlyRunningMainloop++; var timingMode = Browser.mainLoop.timingMode; var timingValue = Browser.mainLoop.timingValue; var func = Browser.mainLoop.func; Browser.mainLoop.func = null; _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true); _emscripten_set_main_loop_timing(timingMode, timingValue); Browser.mainLoop.scheduler() }, updateStatus: function () { if (Module["setStatus"]) { var message = Module["statusMessage"] || "Please wait..."; var remaining = Browser.mainLoop.remainingBlockers; var expected = Browser.mainLoop.expectedBlockers; if (remaining) { if (remaining < expected) { Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")") } else { Module["setStatus"](message) } } else { Module["setStatus"]("") } } }, runIter: function (func) { if (ABORT) return; if (Module["preMainLoop"]) { var preRet = Module["preMainLoop"](); if (preRet === false) { return } } try { func() } catch (e) { if (e instanceof ExitStatus) { return } else { if (e && typeof e === "object" && e.stack) err("exception thrown: " + [e, e.stack]); throw e } } if (Module["postMainLoop"]) Module["postMainLoop"]() } }, isFullscreen: false, pointerLock: false, moduleContextCreatedCallbacks: [], workers: [], init: function () { if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; if (Browser.initted) return; Browser.initted = true; try { new Blob; Browser.hasBlobConstructor = true } catch (e) { Browser.hasBlobConstructor = false; console.log("warning: no blob constructor, cannot create blobs with mimetypes") } Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : !Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null; Browser.URLObject = typeof window != "undefined" ? window.URL ? window.URL : window.webkitURL : undefined; if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") { console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); Module.noImageDecoding = true } var imagePlugin = {}; imagePlugin["canHandle"] = function imagePlugin_canHandle(name) { return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name) } ; imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) { var b = null; if (Browser.hasBlobConstructor) { try { b = new Blob([byteArray], { type: Browser.getMimetype(name) }); if (b.size !== byteArray.length) { b = new Blob([new Uint8Array(byteArray).buffer], { type: Browser.getMimetype(name) }) } } catch (e) { warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder") } } if (!b) { var bb = new Browser.BlobBuilder; bb.append(new Uint8Array(byteArray).buffer); b = bb.getBlob() } var url = Browser.URLObject.createObjectURL(b); var img = new Image; img.onload = function img_onload() { assert(img.complete, "Image " + name + " could not be decoded"); var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); Module["preloadedImages"][name] = canvas; Browser.URLObject.revokeObjectURL(url); if (onload) onload(byteArray) } ; img.onerror = function img_onerror(event) { console.log("Image " + url + " could not be decoded"); if (onerror) onerror() } ; img.src = url } ; Module["preloadPlugins"].push(imagePlugin); var audioPlugin = {}; audioPlugin["canHandle"] = function audioPlugin_canHandle(name) { return !Module.noAudioDecoding && name.substr(-4) in { ".ogg": 1, ".wav": 1, ".mp3": 1 } } ; audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) { var done = false; function finish(audio) { if (done) return; done = true; Module["preloadedAudios"][name] = audio; if (onload) onload(byteArray) } function fail() { if (done) return; done = true; Module["preloadedAudios"][name] = new Audio; if (onerror) onerror() } if (Browser.hasBlobConstructor) { try { var b = new Blob([byteArray], { type: Browser.getMimetype(name) }) } catch (e) { return fail() } var url = Browser.URLObject.createObjectURL(b); var audio = new Audio; audio.addEventListener("canplaythrough", function () { finish(audio) }, false); audio.onerror = function audio_onerror(event) { if (done) return; console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach"); function encode64(data) { var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var PAD = "="; var ret = ""; var leftchar = 0; var leftbits = 0; for (var i = 0; i < data.length; i++) { leftchar = leftchar << 8 | data[i]; leftbits += 8; while (leftbits >= 6) { var curr = leftchar >> leftbits - 6 & 63; leftbits -= 6; ret += BASE[curr] } } if (leftbits == 2) { ret += BASE[(leftchar & 3) << 4]; ret += PAD + PAD } else if (leftbits == 4) { ret += BASE[(leftchar & 15) << 2]; ret += PAD } return ret } audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray); finish(audio) } ; audio.src = url; Browser.safeSetTimeout(function () { finish(audio) }, 1e4) } else { return fail() } } ; Module["preloadPlugins"].push(audioPlugin); function pointerLockChange() { Browser.pointerLock = document["pointerLockElement"] === Module["canvas"] || document["mozPointerLockElement"] === Module["canvas"] || document["webkitPointerLockElement"] === Module["canvas"] || document["msPointerLockElement"] === Module["canvas"] } var canvas = Module["canvas"]; if (canvas) { canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || function () { } ; canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] || function () { } ; canvas.exitPointerLock = canvas.exitPointerLock.bind(document); document.addEventListener("pointerlockchange", pointerLockChange, false); document.addEventListener("mozpointerlockchange", pointerLockChange, false); document.addEventListener("webkitpointerlockchange", pointerLockChange, false); document.addEventListener("mspointerlockchange", pointerLockChange, false); if (Module["elementPointerLock"]) { canvas.addEventListener("click", function (ev) { if (!Browser.pointerLock && Module["canvas"].requestPointerLock) { Module["canvas"].requestPointerLock(); ev.preventDefault() } }, false) } } }, createContext: function (canvas, useWebGL, setInModule, webGLContextAttributes) { if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; var ctx; var contextHandle; if (useWebGL) { var contextAttributes = { antialias: false, alpha: false, majorVersion: 1 }; if (webGLContextAttributes) { for (var attribute in webGLContextAttributes) { contextAttributes[attribute] = webGLContextAttributes[attribute] } } if (typeof GL !== "undefined") { contextHandle = GL.createContext(canvas, contextAttributes); if (contextHandle) { ctx = GL.getContext(contextHandle).GLctx } } } else { ctx = canvas.getContext("2d") } if (!ctx) return null; if (setInModule) { if (!useWebGL) assert(typeof GLctx === "undefined", "cannot set in module if GLctx is used, but we are a non-GL context that would replace it"); Module.ctx = ctx; if (useWebGL) GL.makeContextCurrent(contextHandle); Module.useWebGL = useWebGL; Browser.moduleContextCreatedCallbacks.forEach(function (callback) { callback() }); Browser.init() } return ctx }, destroyContext: function (canvas, useWebGL, setInModule) { }, fullscreenHandlersInstalled: false, lockPointer: undefined, resizeCanvas: undefined, requestFullscreen: function (lockPointer, resizeCanvas, vrDevice) { Browser.lockPointer = lockPointer; Browser.resizeCanvas = resizeCanvas; Browser.vrDevice = vrDevice; if (typeof Browser.lockPointer === "undefined") Browser.lockPointer = true; if (typeof Browser.resizeCanvas === "undefined") Browser.resizeCanvas = false; if (typeof Browser.vrDevice === "undefined") Browser.vrDevice = null; var canvas = Module["canvas"]; function fullscreenChange() { Browser.isFullscreen = false; var canvasContainer = canvas.parentNode; if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvasContainer) { canvas.exitFullscreen = Browser.exitFullscreen; if (Browser.lockPointer) canvas.requestPointerLock(); Browser.isFullscreen = true; if (Browser.resizeCanvas) { Browser.setFullscreenCanvasSize() } else { Browser.updateCanvasDimensions(canvas) } } else { canvasContainer.parentNode.insertBefore(canvas, canvasContainer); canvasContainer.parentNode.removeChild(canvasContainer); if (Browser.resizeCanvas) { Browser.setWindowedCanvasSize() } else { Browser.updateCanvasDimensions(canvas) } } if (Module["onFullScreen"]) Module["onFullScreen"](Browser.isFullscreen); if (Module["onFullscreen"]) Module["onFullscreen"](Browser.isFullscreen) } if (!Browser.fullscreenHandlersInstalled) { Browser.fullscreenHandlersInstalled = true; document.addEventListener("fullscreenchange", fullscreenChange, false); document.addEventListener("mozfullscreenchange", fullscreenChange, false); document.addEventListener("webkitfullscreenchange", fullscreenChange, false); document.addEventListener("MSFullscreenChange", fullscreenChange, false) } var canvasContainer = document.createElement("div"); canvas.parentNode.insertBefore(canvasContainer, canvas); canvasContainer.appendChild(canvas); canvasContainer.requestFullscreen = canvasContainer["requestFullscreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullscreen"] ? function () { canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]) } : null) || (canvasContainer["webkitRequestFullScreen"] ? function () { canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]) } : null); if (vrDevice) { canvasContainer.requestFullscreen({ vrDisplay: vrDevice }) } else { canvasContainer.requestFullscreen() } }, requestFullScreen: function (lockPointer, resizeCanvas, vrDevice) { err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."); Browser.requestFullScreen = function (lockPointer, resizeCanvas, vrDevice) { return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) } ; return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) }, exitFullscreen: function () { if (!Browser.isFullscreen) { return false } var CFS = document["exitFullscreen"] || document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["msExitFullscreen"] || document["webkitCancelFullScreen"] || function () { } ; CFS.apply(document, []); return true }, nextRAF: 0, fakeRequestAnimationFrame: function (func) { var now = Date.now(); if (Browser.nextRAF === 0) { Browser.nextRAF = now + 1e3 / 60 } else { while (now + 2 >= Browser.nextRAF) { Browser.nextRAF += 1e3 / 60 } } var delay = Math.max(Browser.nextRAF - now, 0); setTimeout(func, delay) }, requestAnimationFrame: function (func) { if (typeof requestAnimationFrame === "function") { requestAnimationFrame(func); return } var RAF = Browser.fakeRequestAnimationFrame; RAF(func) }, safeCallback: function (func) { return function () { if (!ABORT) return func.apply(null, arguments) } }, allowAsyncCallbacks: true, queuedAsyncCallbacks: [], pauseAsyncCallbacks: function () { Browser.allowAsyncCallbacks = false }, resumeAsyncCallbacks: function () { Browser.allowAsyncCallbacks = true; if (Browser.queuedAsyncCallbacks.length > 0) { var callbacks = Browser.queuedAsyncCallbacks; Browser.queuedAsyncCallbacks = []; callbacks.forEach(function (func) { func() }) } }, safeRequestAnimationFrame: function (func) { return Browser.requestAnimationFrame(function () { if (ABORT) return; if (Browser.allowAsyncCallbacks) { func() } else { Browser.queuedAsyncCallbacks.push(func) } }) }, safeSetTimeout: function (func, timeout) { noExitRuntime = true; return setTimeout(function () { if (ABORT) return; if (Browser.allowAsyncCallbacks) { func() } else { Browser.queuedAsyncCallbacks.push(func) } }, timeout) }, safeSetInterval: function (func, timeout) { noExitRuntime = true; return setInterval(function () { if (ABORT) return; if (Browser.allowAsyncCallbacks) { func() } }, timeout) }, getMimetype: function (name) { return { "jpg": "image/jpeg", "jpeg": "image/jpeg", "png": "image/png", "bmp": "image/bmp", "ogg": "audio/ogg", "wav": "audio/wav", "mp3": "audio/mpeg" }[name.substr(name.lastIndexOf(".") + 1)] }, getUserMedia: function (func) { if (!window.getUserMedia) { window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"] } window.getUserMedia(func) }, getMovementX: function (event) { return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0 }, getMovementY: function (event) { return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0 }, getMouseWheelDelta: function (event) { var delta = 0; switch (event.type) { case "DOMMouseScroll": delta = event.detail / 3; break; case "mousewheel": delta = event.wheelDelta / 120; break; case "wheel": delta = event.deltaY; switch (event.deltaMode) { case 0: delta /= 100; break; case 1: delta /= 3; break; case 2: delta *= 80; break; default: throw "unrecognized mouse wheel delta mode: " + event.deltaMode } break; default: throw "unrecognized mouse wheel event: " + event.type } return delta }, mouseX: 0, mouseY: 0, mouseMovementX: 0, mouseMovementY: 0, touches: {}, lastTouches: {}, calculateMouseEvent: function (event) { if (Browser.pointerLock) { if (event.type != "mousemove" && "mozMovementX" in event) { Browser.mouseMovementX = Browser.mouseMovementY = 0 } else { Browser.mouseMovementX = Browser.getMovementX(event); Browser.mouseMovementY = Browser.getMovementY(event) } if (typeof SDL != "undefined") { Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; Browser.mouseY = SDL.mouseY + Browser.mouseMovementY } else { Browser.mouseX += Browser.mouseMovementX; Browser.mouseY += Browser.mouseMovementY } } else { var rect = Module["canvas"].getBoundingClientRect(); var cw = Module["canvas"].width; var ch = Module["canvas"].height; var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset; var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset; if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") { var touch = event.touch; if (touch === undefined) { return } var adjustedX = touch.pageX - (scrollX + rect.left); var adjustedY = touch.pageY - (scrollY + rect.top); adjustedX = adjustedX * (cw / rect.width); adjustedY = adjustedY * (ch / rect.height); var coords = { x: adjustedX, y: adjustedY }; if (event.type === "touchstart") { Browser.lastTouches[touch.identifier] = coords; Browser.touches[touch.identifier] = coords } else if (event.type === "touchend" || event.type === "touchmove") { var last = Browser.touches[touch.identifier]; if (!last) last = coords; Browser.lastTouches[touch.identifier] = last; Browser.touches[touch.identifier] = coords } return } var x = event.pageX - (scrollX + rect.left); var y = event.pageY - (scrollY + rect.top); x = x * (cw / rect.width); y = y * (ch / rect.height); Browser.mouseMovementX = x - Browser.mouseX; Browser.mouseMovementY = y - Browser.mouseY; Browser.mouseX = x; Browser.mouseY = y } }, asyncLoad: function (url, onload, onerror, noRunDep) { var dep = !noRunDep ? getUniqueRunDependency("al " + url) : ""; readAsync(url, function (arrayBuffer) { assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); onload(new Uint8Array(arrayBuffer)); if (dep) removeRunDependency(dep) }, function (event) { if (onerror) { onerror() } else { throw 'Loading data file "' + url + '" failed.' } }); if (dep) addRunDependency(dep) }, resizeListeners: [], updateResizeListeners: function () { var canvas = Module["canvas"]; Browser.resizeListeners.forEach(function (listener) { listener(canvas.width, canvas.height) }) }, setCanvasSize: function (width, height, noUpdates) { var canvas = Module["canvas"]; Browser.updateCanvasDimensions(canvas, width, height); if (!noUpdates) Browser.updateResizeListeners() }, windowedWidth: 0, windowedHeight: 0, setFullscreenCanvasSize: function () { if (typeof SDL != "undefined") { var flags = HEAPU32[SDL.screen >> 2]; flags = flags | 8388608; HEAP32[SDL.screen >> 2] = flags } Browser.updateCanvasDimensions(Module["canvas"]); Browser.updateResizeListeners() }, setWindowedCanvasSize: function () { if (typeof SDL != "undefined") { var flags = HEAPU32[SDL.screen >> 2]; flags = flags & ~8388608; HEAP32[SDL.screen >> 2] = flags } Browser.updateCanvasDimensions(Module["canvas"]); Browser.updateResizeListeners() }, updateCanvasDimensions: function (canvas, wNative, hNative) { if (wNative && hNative) { canvas.widthNative = wNative; canvas.heightNative = hNative } else { wNative = canvas.widthNative; hNative = canvas.heightNative } var w = wNative; var h = hNative; if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0) { if (w / h < Module["forcedAspectRatio"]) { w = Math.round(h * Module["forcedAspectRatio"]) } else { h = Math.round(w / Module["forcedAspectRatio"]) } } if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvas.parentNode && typeof screen != "undefined") { var factor = Math.min(screen.width / w, screen.height / h); w = Math.round(w * factor); h = Math.round(h * factor) } if (Browser.resizeCanvas) { if (canvas.width != w) canvas.width = w; if (canvas.height != h) canvas.height = h; if (typeof canvas.style != "undefined") { canvas.style.removeProperty("width"); canvas.style.removeProperty("height") } } else { if (canvas.width != wNative) canvas.width = wNative; if (canvas.height != hNative) canvas.height = hNative; if (typeof canvas.style != "undefined") { if (w != wNative || h != hNative) { canvas.style.setProperty("width", w + "px", "important"); canvas.style.setProperty("height", h + "px", "important") } else { canvas.style.removeProperty("width"); canvas.style.removeProperty("height") } } } }, wgetRequests: {}, nextWgetRequestHandle: 0, getNextWgetRequestHandle: function () { var handle = Browser.nextWgetRequestHandle; Browser.nextWgetRequestHandle++; return handle } }; function demangle(func) { var __cxa_demangle_func = Module["___cxa_demangle"] || Module["__cxa_demangle"]; assert(__cxa_demangle_func); try { var s = func; if (s.startsWith("__Z")) s = s.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 (HEAP32[status >> 2] === 0 && ret) { return UTF8ToString(ret) } } catch (e) { } finally { if (buf) _free(buf); if (status) _free(status); if (ret) _free(ret) } return func } function demangleAll(text) { var regex = /\b_Z[\w\d_]+/g; return text.replace(regex, function (x) { var y = demangle(x); return x === y ? x : y + " [" + x + "]" }) } 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) } function ___cxa_allocate_exception(size) { return _malloc(size) } function _atexit(func, arg) { __ATEXIT__.unshift({ func: func, arg: arg }) } function ___cxa_atexit() { return _atexit.apply(null, arguments) } var ___exception_infos = {}; var ___exception_last = 0; function ___cxa_throw(ptr, type, destructor) { ___exception_infos[ptr] = { ptr: ptr, adjusted: [ptr], type: type, destructor: destructor, refcount: 0, caught: false, rethrown: false }; ___exception_last = ptr; if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { __ZSt18uncaught_exceptionv.uncaught_exceptions = 1 } else { __ZSt18uncaught_exceptionv.uncaught_exceptions++ } throw ptr } function ___lock() { } function ___setErrNo(value) { if (Module["___errno_location"]) HEAP32[Module["___errno_location"]() >> 2] = value; return value } function ___map_file(pathname, size) { ___setErrNo(63); return -1 } var PATH = { splitPath: function (filename) { var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; return splitPathRe.exec(filename).slice(1) }, normalizeArray: function (parts, allowAboveRoot) { var up = 0; for (var i = parts.length - 1; i >= 0; i--) { var last = parts[i]; if (last === ".") { parts.splice(i, 1) } else if (last === "..") { parts.splice(i, 1); up++ } else if (up) { parts.splice(i, 1); up-- } } if (allowAboveRoot) { for (; up; up--) { parts.unshift("..") } } return parts }, normalize: function (path) { var isAbsolute = path.charAt(0) === "/" , trailingSlash = path.substr(-1) === "/"; path = PATH.normalizeArray(path.split("/").filter(function (p) { return !!p }), !isAbsolute).join("/"); if (!path && !isAbsolute) { path = "." } if (path && trailingSlash) { path += "/" } return (isAbsolute ? "/" : "") + path }, dirname: function (path) { var result = PATH.splitPath(path) , root = result[0] , dir = result[1]; if (!root && !dir) { return "." } if (dir) { dir = dir.substr(0, dir.length - 1) } return root + dir }, basename: function (path) { if (path === "/") return "/"; var lastSlash = path.lastIndexOf("/"); if (lastSlash === -1) return path; return path.substr(lastSlash + 1) }, extname: function (path) { return PATH.splitPath(path)[3] }, join: function () { var paths = Array.prototype.slice.call(arguments, 0); return PATH.normalize(paths.join("/")) }, join2: function (l, r) { return PATH.normalize(l + "/" + r) } }; var PATH_FS = { resolve: function () { var resolvedPath = "" , resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = i >= 0 ? arguments[i] : FS.cwd(); if (typeof path !== "string") { throw new TypeError("Arguments to path.resolve must be strings") } else if (!path) { return "" } resolvedPath = path + "/" + resolvedPath; resolvedAbsolute = path.charAt(0) === "/" } resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function (p) { return !!p }), !resolvedAbsolute).join("/"); return (resolvedAbsolute ? "/" : "") + resolvedPath || "." }, relative: function (from, to) { from = PATH_FS.resolve(from).substr(1); to = PATH_FS.resolve(to).substr(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== "") break } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== "") break } if (start > end) return []; return arr.slice(start, end - start + 1) } var fromParts = trim(from.split("/")); var toParts = trim(to.split("/")); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) { if (fromParts[i] !== toParts[i]) { samePartsLength = i; break } } var outputParts = []; for (var i = samePartsLength; i < fromParts.length; i++) { outputParts.push("..") } outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join("/") } }; var TTY = { ttys: [], init: function () { }, shutdown: function () { }, register: function (dev, ops) { TTY.ttys[dev] = { input: [], output: [], ops: ops }; FS.registerDevice(dev, TTY.stream_ops) }, stream_ops: { open: function (stream) { var tty = TTY.ttys[stream.node.rdev]; if (!tty) { throw new FS.ErrnoError(43) } stream.tty = tty; stream.seekable = false }, close: function (stream) { stream.tty.ops.flush(stream.tty) }, flush: function (stream) { stream.tty.ops.flush(stream.tty) }, read: function (stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.get_char) { throw new FS.ErrnoError(60) } var bytesRead = 0; for (var i = 0; i < length; i++) { var result; try { result = stream.tty.ops.get_char(stream.tty) } catch (e) { throw new FS.ErrnoError(29) } if (result === undefined && bytesRead === 0) { throw new FS.ErrnoError(6) } if (result === null || result === undefined) break; bytesRead++; buffer[offset + i] = result } if (bytesRead) { stream.node.timestamp = Date.now() } return bytesRead }, write: function (stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.put_char) { throw new FS.ErrnoError(60) } try { for (var i = 0; i < length; i++) { stream.tty.ops.put_char(stream.tty, buffer[offset + i]) } } catch (e) { throw new FS.ErrnoError(29) } if (length) { stream.node.timestamp = Date.now() } return i } }, default_tty_ops: { get_char: function (tty) { if (!tty.input.length) { var result = null; if (ENVIRONMENT_IS_NODE) { var BUFSIZE = 256; var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); var bytesRead = 0; try { bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) } catch (e) { if (e.toString().indexOf("EOF") != -1) bytesRead = 0; else throw e } if (bytesRead > 0) { result = buf.slice(0, bytesRead).toString("utf-8") } else { result = null } } else if (typeof window != "undefined" && typeof window.prompt == "function") { result = window.prompt("Input: "); if (result !== null) { result += "\n" } } else if (typeof readline == "function") { result = readline(); if (result !== null) { result += "\n" } } if (!result) { return null } tty.input = intArrayFromString(result, true) } return tty.input.shift() }, put_char: function (tty, val) { if (val === null || val === 10) { out(UTF8ArrayToString(tty.output, 0)); tty.output = [] } else { if (val != 0) tty.output.push(val) } }, flush: function (tty) { if (tty.output && tty.output.length > 0) { out(UTF8ArrayToString(tty.output, 0)); tty.output = [] } } }, default_tty1_ops: { put_char: function (tty, val) { if (val === null || val === 10) { err(UTF8ArrayToString(tty.output, 0)); tty.output = [] } else { if (val != 0) tty.output.push(val) } }, flush: function (tty) { if (tty.output && tty.output.length > 0) { err(UTF8ArrayToString(tty.output, 0)); tty.output = [] } } } }; var MEMFS = { ops_table: null, mount: function (mount) { return MEMFS.createNode(null, "/", 16384 | 511, 0) }, createNode: function (parent, name, mode, dev) { if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { throw new FS.ErrnoError(63) } if (!MEMFS.ops_table) { MEMFS.ops_table = { dir: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, lookup: MEMFS.node_ops.lookup, mknod: MEMFS.node_ops.mknod, rename: MEMFS.node_ops.rename, unlink: MEMFS.node_ops.unlink, rmdir: MEMFS.node_ops.rmdir, readdir: MEMFS.node_ops.readdir, symlink: MEMFS.node_ops.symlink }, stream: { llseek: MEMFS.stream_ops.llseek } }, file: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: { llseek: MEMFS.stream_ops.llseek, read: MEMFS.stream_ops.read, write: MEMFS.stream_ops.write, allocate: MEMFS.stream_ops.allocate, mmap: MEMFS.stream_ops.mmap, msync: MEMFS.stream_ops.msync } }, link: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr, readlink: MEMFS.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: MEMFS.node_ops.getattr, setattr: MEMFS.node_ops.setattr }, stream: FS.chrdev_stream_ops } } } var node = FS.createNode(parent, name, mode, dev); if (FS.isDir(node.mode)) { node.node_ops = MEMFS.ops_table.dir.node; node.stream_ops = MEMFS.ops_table.dir.stream; node.contents = {} } else if (FS.isFile(node.mode)) { node.node_ops = MEMFS.ops_table.file.node; node.stream_ops = MEMFS.ops_table.file.stream; node.usedBytes = 0; node.contents = null } else if (FS.isLink(node.mode)) { node.node_ops = MEMFS.ops_table.link.node; node.stream_ops = MEMFS.ops_table.link.stream } else if (FS.isChrdev(node.mode)) { node.node_ops = MEMFS.ops_table.chrdev.node; node.stream_ops = MEMFS.ops_table.chrdev.stream } node.timestamp = Date.now(); if (parent) { parent.contents[name] = node } return node }, getFileDataAsRegularArray: function (node) { if (node.contents && node.contents.subarray) { var arr = []; for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); return arr } return node.contents }, getFileDataAsTypedArray: function (node) { if (!node.contents) return new Uint8Array; if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); return new Uint8Array(node.contents) }, expandFileStorage: function (node, newCapacity) { var prevCapacity = node.contents ? node.contents.length : 0; if (prevCapacity >= newCapacity) return; var CAPACITY_DOUBLING_MAX = 1024 * 1024; newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) | 0); if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); var oldContents = node.contents; node.contents = new Uint8Array(newCapacity); if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); return }, resizeFileStorage: function (node, newSize) { if (node.usedBytes == newSize) return; if (newSize == 0) { node.contents = null; node.usedBytes = 0; return } if (!node.contents || node.contents.subarray) { var oldContents = node.contents; node.contents = new Uint8Array(new ArrayBuffer(newSize)); if (oldContents) { node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) } node.usedBytes = newSize; return } if (!node.contents) node.contents = []; if (node.contents.length > newSize) node.contents.length = newSize; else while (node.contents.length < newSize) node.contents.push(0); node.usedBytes = newSize }, node_ops: { getattr: function (node) { var attr = {}; attr.dev = FS.isChrdev(node.mode) ? node.id : 1; attr.ino = node.id; attr.mode = node.mode; attr.nlink = 1; attr.uid = 0; attr.gid = 0; attr.rdev = node.rdev; if (FS.isDir(node.mode)) { attr.size = 4096 } else if (FS.isFile(node.mode)) { attr.size = node.usedBytes } else if (FS.isLink(node.mode)) { attr.size = node.link.length } else { attr.size = 0 } attr.atime = new Date(node.timestamp); attr.mtime = new Date(node.timestamp); attr.ctime = new Date(node.timestamp); attr.blksize = 4096; attr.blocks = Math.ceil(attr.size / attr.blksize); return attr }, setattr: function (node, attr) { if (attr.mode !== undefined) { node.mode = attr.mode } if (attr.timestamp !== undefined) { node.timestamp = attr.timestamp } if (attr.size !== undefined) { MEMFS.resizeFileStorage(node, attr.size) } }, lookup: function (parent, name) { throw FS.genericErrors[44] }, mknod: function (parent, name, mode, dev) { return MEMFS.createNode(parent, name, mode, dev) }, rename: function (old_node, new_dir, new_name) { if (FS.isDir(old_node.mode)) { var new_node; try { new_node = FS.lookupNode(new_dir, new_name) } catch (e) { } if (new_node) { for (var i in new_node.contents) { throw new FS.ErrnoError(55) } } } delete old_node.parent.contents[old_node.name]; old_node.name = new_name; new_dir.contents[new_name] = old_node; old_node.parent = new_dir }, unlink: function (parent, name) { delete parent.contents[name] }, rmdir: function (parent, name) { var node = FS.lookupNode(parent, name); for (var i in node.contents) { throw new FS.ErrnoError(55) } delete parent.contents[name] }, readdir: function (node) { var entries = [".", ".."]; for (var key in node.contents) { if (!node.contents.hasOwnProperty(key)) { continue } entries.push(key) } return entries }, symlink: function (parent, newname, oldpath) { var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); node.link = oldpath; return node }, readlink: function (node) { if (!FS.isLink(node.mode)) { throw new FS.ErrnoError(28) } return node.link } }, stream_ops: { read: function (stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= stream.node.usedBytes) return 0; var size = Math.min(stream.node.usedBytes - position, length); if (size > 8 && contents.subarray) { buffer.set(contents.subarray(position, position + size), offset) } else { for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] } return size }, write: function (stream, buffer, offset, length, position, canOwn) { canOwn = false; if (!length) return 0; var node = stream.node; node.timestamp = Date.now(); if (buffer.subarray && (!node.contents || node.contents.subarray)) { if (canOwn) { node.contents = buffer.subarray(offset, offset + length); node.usedBytes = length; return length } else if (node.usedBytes === 0 && position === 0) { node.contents = new Uint8Array(buffer.subarray(offset, offset + length)); node.usedBytes = length; return length } else if (position + length <= node.usedBytes) { node.contents.set(buffer.subarray(offset, offset + length), position); return length } } MEMFS.expandFileStorage(node, position + length); if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); else { for (var i = 0; i < length; i++) { node.contents[position + i] = buffer[offset + i] } } node.usedBytes = Math.max(node.usedBytes, position + length); return length }, llseek: function (stream, offset, whence) { var position = offset; if (whence === 1) { position += stream.position } else if (whence === 2) { if (FS.isFile(stream.node.mode)) { position += stream.node.usedBytes } } if (position < 0) { throw new FS.ErrnoError(28) } return position }, allocate: function (stream, offset, length) { MEMFS.expandFileStorage(stream.node, offset + length); stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) }, mmap: function (stream, buffer, offset, length, position, prot, flags) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43) } var ptr; var allocated; var contents = stream.node.contents; if (!(flags & 2) && (contents.buffer === buffer || contents.buffer === buffer.buffer)) { allocated = false; ptr = contents.byteOffset } else { if (position > 0 || position + length < stream.node.usedBytes) { if (contents.subarray) { contents = contents.subarray(position, position + length) } else { contents = Array.prototype.slice.call(contents, position, position + length) } } allocated = true; var fromHeap = buffer.buffer == HEAP8.buffer; ptr = _malloc(length); if (!ptr) { throw new FS.ErrnoError(48) } (fromHeap ? HEAP8 : buffer).set(contents, ptr) } return { ptr: ptr, allocated: allocated } }, msync: function (stream, buffer, offset, length, mmapFlags) { if (!FS.isFile(stream.node.mode)) { throw new FS.ErrnoError(43) } if (mmapFlags & 2) { return 0 } var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); return 0 } } }; var IDBFS = { dbs: {}, indexedDB: function () { if (typeof indexedDB !== "undefined") return indexedDB; var ret = null; if (typeof window === "object") ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; assert(ret, "IDBFS used, but indexedDB not supported"); return ret }, DB_VERSION: 21, DB_STORE_NAME: "FILE_DATA", mount: function (mount) { return MEMFS.mount.apply(null, arguments) }, syncfs: function (mount, populate, callback) { IDBFS.getLocalSet(mount, function (err, local) { if (err) return callback(err); IDBFS.getRemoteSet(mount, function (err, remote) { if (err) return callback(err); var src = populate ? remote : local; var dst = populate ? local : remote; IDBFS.reconcile(src, dst, callback) }) }) }, getDB: function (name, callback) { var db = IDBFS.dbs[name]; if (db) { return callback(null, db) } var req; try { req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION) } catch (e) { return callback(e) } if (!req) { return callback("Unable to connect to IndexedDB") } req.onupgradeneeded = function (e) { var db = e.target.result; var transaction = e.target.transaction; var fileStore; if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME) } else { fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME) } if (!fileStore.indexNames.contains("timestamp")) { fileStore.createIndex("timestamp", "timestamp", { unique: false }) } } ; req.onsuccess = function () { db = req.result; IDBFS.dbs[name] = db; callback(null, db) } ; req.onerror = function (e) { callback(this.error); e.preventDefault() } }, getLocalSet: function (mount, callback) { var entries = {}; function isRealDir(p) { return p !== "." && p !== ".." } function toAbsolute(root) { return function (p) { return PATH.join2(root, p) } } var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); while (check.length) { var path = check.pop(); var stat; try { stat = FS.stat(path) } catch (e) { return callback(e) } if (FS.isDir(stat.mode)) { check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))) } entries[path] = { timestamp: stat.mtime } } return callback(null, { type: "local", entries: entries }) }, getRemoteSet: function (mount, callback) { var entries = {}; IDBFS.getDB(mount.mountpoint, function (err, db) { if (err) return callback(err); try { var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readonly"); transaction.onerror = function (e) { callback(this.error); e.preventDefault() } ; var store = transaction.objectStore(IDBFS.DB_STORE_NAME); var index = store.index("timestamp"); index.openKeyCursor().onsuccess = function (event) { var cursor = event.target.result; if (!cursor) { return callback(null, { type: "remote", db: db, entries: entries }) } entries[cursor.primaryKey] = { timestamp: cursor.key }; cursor.continue() } } catch (e) { return callback(e) } }) }, loadLocalEntry: function (path, callback) { var stat, node; try { var lookup = FS.lookupPath(path); node = lookup.node; stat = FS.stat(path) } catch (e) { return callback(e) } if (FS.isDir(stat.mode)) { return callback(null, { timestamp: stat.mtime, mode: stat.mode }) } else if (FS.isFile(stat.mode)) { node.contents = MEMFS.getFileDataAsTypedArray(node); return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents }) } else { return callback(new Error("node type not supported")) } }, storeLocalEntry: function (path, entry, callback) { try { if (FS.isDir(entry.mode)) { FS.mkdir(path, entry.mode) } else if (FS.isFile(entry.mode)) { FS.writeFile(path, entry.contents, { canOwn: true }) } else { return callback(new Error("node type not supported")) } FS.chmod(path, entry.mode); FS.utime(path, entry.timestamp, entry.timestamp) } catch (e) { return callback(e) } callback(null) }, removeLocalEntry: function (path, callback) { try { var lookup = FS.lookupPath(path); var stat = FS.stat(path); if (FS.isDir(stat.mode)) { FS.rmdir(path) } else if (FS.isFile(stat.mode)) { FS.unlink(path) } } catch (e) { return callback(e) } callback(null) }, loadRemoteEntry: function (store, path, callback) { var req = store.get(path); req.onsuccess = function (event) { callback(null, event.target.result) } ; req.onerror = function (e) { callback(this.error); e.preventDefault() } }, storeRemoteEntry: function (store, path, entry, callback) { var req = store.put(entry, path); req.onsuccess = function () { callback(null) } ; req.onerror = function (e) { callback(this.error); e.preventDefault() } }, removeRemoteEntry: function (store, path, callback) { var req = store.delete(path); req.onsuccess = function () { callback(null) } ; req.onerror = function (e) { callback(this.error); e.preventDefault() } }, reconcile: function (src, dst, callback) { var total = 0; var create = []; Object.keys(src.entries).forEach(function (key) { var e = src.entries[key]; var e2 = dst.entries[key]; if (!e2 || e.timestamp > e2.timestamp) { create.push(key); total++ } }); var remove = []; Object.keys(dst.entries).forEach(function (key) { var e = dst.entries[key]; var e2 = src.entries[key]; if (!e2) { remove.push(key); total++ } }); if (!total) { return callback(null) } var errored = false; var db = src.type === "remote" ? src.db : dst.db; var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readwrite"); var store = transaction.objectStore(IDBFS.DB_STORE_NAME); function done(err) { if (err && !errored) { errored = true; return callback(err) } } transaction.onerror = function (e) { done(this.error); e.preventDefault() } ; transaction.oncomplete = function (e) { if (!errored) { callback(null) } } ; create.sort().forEach(function (path) { if (dst.type === "local") { IDBFS.loadRemoteEntry(store, path, function (err, entry) { if (err) return done(err); IDBFS.storeLocalEntry(path, entry, done) }) } else { IDBFS.loadLocalEntry(path, function (err, entry) { if (err) return done(err); IDBFS.storeRemoteEntry(store, path, entry, done) }) } }); remove.sort().reverse().forEach(function (path) { if (dst.type === "local") { IDBFS.removeLocalEntry(path, done) } else { IDBFS.removeRemoteEntry(store, path, done) } }) } }; var ERRNO_CODES = { EPERM: 63, ENOENT: 44, ESRCH: 71, EINTR: 27, EIO: 29, ENXIO: 60, E2BIG: 1, ENOEXEC: 45, EBADF: 8, ECHILD: 12, EAGAIN: 6, EWOULDBLOCK: 6, ENOMEM: 48, EACCES: 2, EFAULT: 21, ENOTBLK: 105, EBUSY: 10, EEXIST: 20, EXDEV: 75, ENODEV: 43, ENOTDIR: 54, EISDIR: 31, EINVAL: 28, ENFILE: 41, EMFILE: 33, ENOTTY: 59, ETXTBSY: 74, EFBIG: 22, ENOSPC: 51, ESPIPE: 70, EROFS: 69, EMLINK: 34, EPIPE: 64, EDOM: 18, ERANGE: 68, ENOMSG: 49, EIDRM: 24, ECHRNG: 106, EL2NSYNC: 156, EL3HLT: 107, EL3RST: 108, ELNRNG: 109, EUNATCH: 110, ENOCSI: 111, EL2HLT: 112, EDEADLK: 16, ENOLCK: 46, EBADE: 113, EBADR: 114, EXFULL: 115, ENOANO: 104, EBADRQC: 103, EBADSLT: 102, EDEADLOCK: 16, EBFONT: 101, ENOSTR: 100, ENODATA: 116, ETIME: 117, ENOSR: 118, ENONET: 119, ENOPKG: 120, EREMOTE: 121, ENOLINK: 47, EADV: 122, ESRMNT: 123, ECOMM: 124, EPROTO: 65, EMULTIHOP: 36, EDOTDOT: 125, EBADMSG: 9, ENOTUNIQ: 126, EBADFD: 127, EREMCHG: 128, ELIBACC: 129, ELIBBAD: 130, ELIBSCN: 131, ELIBMAX: 132, ELIBEXEC: 133, ENOSYS: 52, ENOTEMPTY: 55, ENAMETOOLONG: 37, ELOOP: 32, EOPNOTSUPP: 138, EPFNOSUPPORT: 139, ECONNRESET: 15, ENOBUFS: 42, EAFNOSUPPORT: 5, EPROTOTYPE: 67, ENOTSOCK: 57, ENOPROTOOPT: 50, ESHUTDOWN: 140, ECONNREFUSED: 14, EADDRINUSE: 3, ECONNABORTED: 13, ENETUNREACH: 40, ENETDOWN: 38, ETIMEDOUT: 73, EHOSTDOWN: 142, EHOSTUNREACH: 23, EINPROGRESS: 26, EALREADY: 7, EDESTADDRREQ: 17, EMSGSIZE: 35, EPROTONOSUPPORT: 66, ESOCKTNOSUPPORT: 137, EADDRNOTAVAIL: 4, ENETRESET: 39, EISCONN: 30, ENOTCONN: 53, ETOOMANYREFS: 141, EUSERS: 136, EDQUOT: 19, ESTALE: 72, ENOTSUP: 138, ENOMEDIUM: 148, EILSEQ: 25, EOVERFLOW: 61, ECANCELED: 11, ENOTRECOVERABLE: 56, EOWNERDEAD: 62, ESTRPIPE: 135 }; var NODEFS = { isWindows: false, staticInit: function () { NODEFS.isWindows = !!process.platform.match(/^win/); var flags = process["binding"]("constants"); if (flags["fs"]) { flags = flags["fs"] } NODEFS.flagsForNodeMap = { 1024: flags["O_APPEND"], 64: flags["O_CREAT"], 128: flags["O_EXCL"], 0: flags["O_RDONLY"], 2: flags["O_RDWR"], 4096: flags["O_SYNC"], 512: flags["O_TRUNC"], 1: flags["O_WRONLY"] } }, bufferFrom: function (arrayBuffer) { return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer) }, convertNodeCode: function (e) { var code = e.code; assert(code in ERRNO_CODES); return ERRNO_CODES[code] }, mount: function (mount) { assert(ENVIRONMENT_HAS_NODE); return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0) }, createNode: function (parent, name, mode, dev) { if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { throw new FS.ErrnoError(28) } var node = FS.createNode(parent, name, mode); node.node_ops = NODEFS.node_ops; node.stream_ops = NODEFS.stream_ops; return node }, getMode: function (path) { var stat; try { stat = fs.lstatSync(path); if (NODEFS.isWindows) { stat.mode = stat.mode | (stat.mode & 292) >> 2 } } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } return stat.mode }, realPath: function (node) { var parts = []; while (node.parent !== node) { parts.push(node.name); node = node.parent } parts.push(node.mount.opts.root); parts.reverse(); return PATH.join.apply(null, parts) }, flagsForNode: function (flags) { flags &= ~2097152; flags &= ~2048; flags &= ~32768; flags &= ~524288; var newFlags = 0; for (var k in NODEFS.flagsForNodeMap) { if (flags & k) { newFlags |= NODEFS.flagsForNodeMap[k]; flags ^= k } } if (!flags) { return newFlags } else { throw new FS.ErrnoError(28) } }, node_ops: { getattr: function (node) { var path = NODEFS.realPath(node); var stat; try { stat = fs.lstatSync(path) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } if (NODEFS.isWindows && !stat.blksize) { stat.blksize = 4096 } if (NODEFS.isWindows && !stat.blocks) { stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0 } return { dev: stat.dev, ino: stat.ino, mode: stat.mode, nlink: stat.nlink, uid: stat.uid, gid: stat.gid, rdev: stat.rdev, size: stat.size, atime: stat.atime, mtime: stat.mtime, ctime: stat.ctime, blksize: stat.blksize, blocks: stat.blocks } }, setattr: function (node, attr) { var path = NODEFS.realPath(node); try { if (attr.mode !== undefined) { fs.chmodSync(path, attr.mode); node.mode = attr.mode } if (attr.timestamp !== undefined) { var date = new Date(attr.timestamp); fs.utimesSync(path, date, date) } if (attr.size !== undefined) { fs.truncateSync(path, attr.size) } } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, lookup: function (parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); var mode = NODEFS.getMode(path); return NODEFS.createNode(parent, name, mode) }, mknod: function (parent, name, mode, dev) { var node = NODEFS.createNode(parent, name, mode, dev); var path = NODEFS.realPath(node); try { if (FS.isDir(node.mode)) { fs.mkdirSync(path, node.mode) } else { fs.writeFileSync(path, "", { mode: node.mode }) } } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } return node }, rename: function (oldNode, newDir, newName) { var oldPath = NODEFS.realPath(oldNode); var newPath = PATH.join2(NODEFS.realPath(newDir), newName); try { fs.renameSync(oldPath, newPath) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, unlink: function (parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); try { fs.unlinkSync(path) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, rmdir: function (parent, name) { var path = PATH.join2(NODEFS.realPath(parent), name); try { fs.rmdirSync(path) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, readdir: function (node) { var path = NODEFS.realPath(node); try { return fs.readdirSync(path) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, symlink: function (parent, newName, oldPath) { var newPath = PATH.join2(NODEFS.realPath(parent), newName); try { fs.symlinkSync(oldPath, newPath) } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, readlink: function (node) { var path = NODEFS.realPath(node); try { path = fs.readlinkSync(path); path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path); return path } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } } }, stream_ops: { open: function (stream) { var path = NODEFS.realPath(stream.node); try { if (FS.isFile(stream.node.mode)) { stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)) } } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, close: function (stream) { try { if (FS.isFile(stream.node.mode) && stream.nfd) { fs.closeSync(stream.nfd) } } catch (e) { if (!e.code) throw e; throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, read: function (stream, buffer, offset, length, position) { if (length === 0) return 0; try { return fs.readSync(stream.nfd, NODEFS.bufferFrom(buffer.buffer), offset, length, position) } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, write: function (stream, buffer, offset, length, position) { try { return fs.writeSync(stream.nfd, NODEFS.bufferFrom(buffer.buffer), offset, length, position) } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } }, llseek: function (stream, offset, whence) { var position = offset; if (whence === 1) { position += stream.position } else if (whence === 2) { if (FS.isFile(stream.node.mode)) { try { var stat = fs.fstatSync(stream.nfd); position += stat.size } catch (e) { throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) } } } if (position < 0) { throw new FS.ErrnoError(28) } return position } } }; var WORKERFS = { DIR_MODE: 16895, FILE_MODE: 33279, reader: null, mount: function (mount) { assert(ENVIRONMENT_IS_WORKER); if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync; var root = WORKERFS.createNode(null, "/", WORKERFS.DIR_MODE, 0); var createdParents = {}; function ensureParent(path) { var parts = path.split("/"); var parent = root; for (var i = 0; i < parts.length - 1; i++) { var curr = parts.slice(0, i + 1).join("/"); if (!createdParents[curr]) { createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0) } parent = createdParents[curr] } return parent } function base(path) { var parts = path.split("/"); return parts[parts.length - 1] } Array.prototype.forEach.call(mount.opts["files"] || [], function (file) { WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate) }); (mount.opts["blobs"] || []).forEach(function (obj) { WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]) }); (mount.opts["packages"] || []).forEach(function (pack) { pack["metadata"].files.forEach(function (file) { var name = file.filename.substr(1); WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack["blob"].slice(file.start, file.end)) }) }); return root }, createNode: function (parent, name, mode, dev, contents, mtime) { var node = FS.createNode(parent, name, mode); node.mode = mode; node.node_ops = WORKERFS.node_ops; node.stream_ops = WORKERFS.stream_ops; node.timestamp = (mtime || new Date).getTime(); assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE); if (mode === WORKERFS.FILE_MODE) { node.size = contents.size; node.contents = contents } else { node.size = 4096; node.contents = {} } if (parent) { parent.contents[name] = node } return node }, node_ops: { getattr: function (node) { return { dev: 1, ino: undefined, mode: node.mode, nlink: 1, uid: 0, gid: 0, rdev: undefined, size: node.size, atime: new Date(node.timestamp), mtime: new Date(node.timestamp), ctime: new Date(node.timestamp), blksize: 4096, blocks: Math.ceil(node.size / 4096) } }, setattr: function (node, attr) { if (attr.mode !== undefined) { node.mode = attr.mode } if (attr.timestamp !== undefined) { node.timestamp = attr.timestamp } }, lookup: function (parent, name) { throw new FS.ErrnoError(44) }, mknod: function (parent, name, mode, dev) { throw new FS.ErrnoError(63) }, rename: function (oldNode, newDir, newName) { throw new FS.ErrnoError(63) }, unlink: function (parent, name) { throw new FS.ErrnoError(63) }, rmdir: function (parent, name) { throw new FS.ErrnoError(63) }, readdir: function (node) { var entries = [".", ".."]; for (var key in node.contents) { if (!node.contents.hasOwnProperty(key)) { continue } entries.push(key) } return entries }, symlink: function (parent, newName, oldPath) { throw new FS.ErrnoError(63) }, readlink: function (node) { throw new FS.ErrnoError(63) } }, stream_ops: { read: function (stream, buffer, offset, length, position) { if (position >= stream.node.size) return 0; var chunk = stream.node.contents.slice(position, position + length); var ab = WORKERFS.reader.readAsArrayBuffer(chunk); buffer.set(new Uint8Array(ab), offset); return chunk.size }, write: function (stream, buffer, offset, length, position) { throw new FS.ErrnoError(29) }, llseek: function (stream, offset, whence) { var position = offset; if (whence === 1) { position += stream.position } else if (whence === 2) { if (FS.isFile(stream.node.mode)) { position += stream.node.size } } if (position < 0) { throw new FS.ErrnoError(28) } return position } } }; var FS = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: false, ignorePermissions: true, trackingDelegate: {}, tracking: { openFlags: { READ: 1, WRITE: 2 } }, ErrnoError: null, genericErrors: {}, filesystems: null, syncFSRequests: 0, handleFSError: function (e) { if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace(); return ___setErrNo(e.errno) }, lookupPath: function (path, opts) { path = PATH_FS.resolve(FS.cwd(), path); opts = opts || {}; if (!path) return { path: "", node: null }; var defaults = { follow_mount: true, recurse_count: 0 }; for (var key in defaults) { if (opts[key] === undefined) { opts[key] = defaults[key] } } if (opts.recurse_count > 8) { throw new FS.ErrnoError(32) } var parts = PATH.normalizeArray(path.split("/").filter(function (p) { return !!p }), false); var current = FS.root; var current_path = "/"; for (var i = 0; i < parts.length; i++) { var islast = i === parts.length - 1; if (islast && opts.parent) { break } current = FS.lookupNode(current, parts[i]); current_path = PATH.join2(current_path, parts[i]); if (FS.isMountpoint(current)) { if (!islast || islast && opts.follow_mount) { current = current.mounted.root } } if (!islast || opts.follow) { var count = 0; while (FS.isLink(current.mode)) { var link = FS.readlink(current_path); current_path = PATH_FS.resolve(PATH.dirname(current_path), link); var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); current = lookup.node; if (count++ > 40) { throw new FS.ErrnoError(32) } } } } return { path: current_path, node: current } }, getPath: function (node) { var path; while (true) { if (FS.isRoot(node)) { var mount = node.mount.mountpoint; if (!path) return mount; return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path } path = path ? node.name + "/" + path : node.name; node = node.parent } }, hashName: function (parentid, name) { var hash = 0; for (var i = 0; i < name.length; i++) { hash = (hash << 5) - hash + name.charCodeAt(i) | 0 } return (parentid + hash >>> 0) % FS.nameTable.length }, hashAddNode: function (node) { var hash = FS.hashName(node.parent.id, node.name); node.name_next = FS.nameTable[hash]; FS.nameTable[hash] = node }, hashRemoveNode: function (node) { var hash = FS.hashName(node.parent.id, node.name); if (FS.nameTable[hash] === node) { FS.nameTable[hash] = node.name_next } else { var current = FS.nameTable[hash]; while (current) { if (current.name_next === node) { current.name_next = node.name_next; break } current = current.name_next } } }, lookupNode: function (parent, name) { var err = FS.mayLookup(parent); if (err) { throw new FS.ErrnoError(err, parent) } var hash = FS.hashName(parent.id, name); for (var node = FS.nameTable[hash]; node; node = node.name_next) { var nodeName = node.name; if (node.parent.id === parent.id && nodeName === name) { return node } } return FS.lookup(parent, name) }, createNode: function (parent, name, mode, rdev) { if (!FS.FSNode) { FS.FSNode = function (parent, name, mode, rdev) { if (!parent) { parent = this } this.parent = parent; this.mount = parent.mount; this.mounted = null; this.id = FS.nextInode++; this.name = name; this.mode = mode; this.node_ops = {}; this.stream_ops = {}; this.rdev = rdev } ; FS.FSNode.prototype = {}; var readMode = 292 | 73; var writeMode = 146; Object.defineProperties(FS.FSNode.prototype, { read: { get: function () { return (this.mode & readMode) === readMode }, set: function (val) { val ? this.mode |= readMode : this.mode &= ~readMode } }, write: { get: function () { return (this.mode & writeMode) === writeMode }, set: function (val) { val ? this.mode |= writeMode : this.mode &= ~writeMode } }, isFolder: { get: function () { return FS.isDir(this.mode) } }, isDevice: { get: function () { return FS.isChrdev(this.mode) } } }) } var node = new FS.FSNode(parent, name, mode, rdev); FS.hashAddNode(node); return node }, destroyNode: function (node) { FS.hashRemoveNode(node) }, isRoot: function (node) { return node === node.parent }, isMountpoint: function (node) { return !!node.mounted }, isFile: function (mode) { return (mode & 61440) === 32768 }, isDir: function (mode) { return (mode & 61440) === 16384 }, isLink: function (mode) { return (mode & 61440) === 40960 }, isChrdev: function (mode) { return (mode & 61440) === 8192 }, isBlkdev: function (mode) { return (mode & 61440) === 24576 }, isFIFO: function (mode) { return (mode & 61440) === 4096 }, isSocket: function (mode) { return (mode & 49152) === 49152 }, flagModes: { "r": 0, "rs": 1052672, "r+": 2, "w": 577, "wx": 705, "xw": 705, "w+": 578, "wx+": 706, "xw+": 706, "a": 1089, "ax": 1217, "xa": 1217, "a+": 1090, "ax+": 1218, "xa+": 1218 }, modeStringToFlags: function (str) { var flags = FS.flagModes[str]; if (typeof flags === "undefined") { throw new Error("Unknown file open mode: " + str) } return flags }, flagsToPermissionString: function (flag) { var perms = ["r", "w", "rw"][flag & 3]; if (flag & 512) { perms += "w" } return perms }, nodePermissions: function (node, perms) { if (FS.ignorePermissions) { return 0 } if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { return 2 } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { return 2 } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { return 2 } return 0 }, mayLookup: function (dir) { var err = FS.nodePermissions(dir, "x"); if (err) return err; if (!dir.node_ops.lookup) return 2; return 0 }, mayCreate: function (dir, name) { try { var node = FS.lookupNode(dir, name); return 20 } catch (e) { } return FS.nodePermissions(dir, "wx") }, mayDelete: function (dir, name, isdir) { var node; try { node = FS.lookupNode(dir, name) } catch (e) { return e.errno } var err = FS.nodePermissions(dir, "wx"); if (err) { return err } if (isdir) { if (!FS.isDir(node.mode)) { return 54 } if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { return 10 } } else { if (FS.isDir(node.mode)) { return 31 } } return 0 }, mayOpen: function (node, flags) { if (!node) { return 44 } if (FS.isLink(node.mode)) { return 32 } else if (FS.isDir(node.mode)) { if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { return 31 } } return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) }, MAX_OPEN_FDS: 4096, nextfd: function (fd_start, fd_end) { fd_start = fd_start || 0; fd_end = fd_end || FS.MAX_OPEN_FDS; for (var fd = fd_start; fd <= fd_end; fd++) { if (!FS.streams[fd]) { return fd } } throw new FS.ErrnoError(33) }, getStream: function (fd) { return FS.streams[fd] }, createStream: function (stream, fd_start, fd_end) { if (!FS.FSStream) { FS.FSStream = function () { } ; FS.FSStream.prototype = {}; Object.defineProperties(FS.FSStream.prototype, { object: { get: function () { return this.node }, set: function (val) { this.node = val } }, isRead: { get: function () { return (this.flags & 2097155) !== 1 } }, isWrite: { get: function () { return (this.flags & 2097155) !== 0 } }, isAppend: { get: function () { return this.flags & 1024 } } }) } var newStream = new FS.FSStream; for (var p in stream) { newStream[p] = stream[p] } stream = newStream; var fd = FS.nextfd(fd_start, fd_end); stream.fd = fd; FS.streams[fd] = stream; return stream }, closeStream: function (fd) { FS.streams[fd] = null }, chrdev_stream_ops: { open: function (stream) { var device = FS.getDevice(stream.node.rdev); stream.stream_ops = device.stream_ops; if (stream.stream_ops.open) { stream.stream_ops.open(stream) } }, llseek: function () { throw new FS.ErrnoError(70) } }, major: function (dev) { return dev >> 8 }, minor: function (dev) { return dev & 255 }, makedev: function (ma, mi) { return ma << 8 | mi }, registerDevice: function (dev, ops) { FS.devices[dev] = { stream_ops: ops } }, getDevice: function (dev) { return FS.devices[dev] }, getMounts: function (mount) { var mounts = []; var check = [mount]; while (check.length) { var m = check.pop(); mounts.push(m); check.push.apply(check, m.mounts) } return mounts }, syncfs: function (populate, callback) { if (typeof populate === "function") { callback = populate; populate = false } FS.syncFSRequests++; if (FS.syncFSRequests > 1) { console.log("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") } var mounts = FS.getMounts(FS.root.mount); var completed = 0; function doCallback(err) { FS.syncFSRequests--; return callback(err) } function done(err) { if (err) { if (!done.errored) { done.errored = true; return doCallback(err) } return } if (++completed >= mounts.length) { doCallback(null) } } mounts.forEach(function (mount) { if (!mount.type.syncfs) { return done(null) } mount.type.syncfs(mount, populate, done) }) }, mount: function (type, opts, mountpoint) { var root = mountpoint === "/"; var pseudo = !mountpoint; var node; if (root && FS.root) { throw new FS.ErrnoError(10) } else if (!root && !pseudo) { var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); mountpoint = lookup.path; node = lookup.node; if (FS.isMountpoint(node)) { throw new FS.ErrnoError(10) } if (!FS.isDir(node.mode)) { throw new FS.ErrnoError(54) } } var mount = { type: type, opts: opts, mountpoint: mountpoint, mounts: [] }; var mountRoot = type.mount(mount); mountRoot.mount = mount; mount.root = mountRoot; if (root) { FS.root = mountRoot } else if (node) { node.mounted = mount; if (node.mount) { node.mount.mounts.push(mount) } } return mountRoot }, unmount: function (mountpoint) { var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); if (!FS.isMountpoint(lookup.node)) { throw new FS.ErrnoError(28) } var node = lookup.node; var mount = node.mounted; var mounts = FS.getMounts(mount); Object.keys(FS.nameTable).forEach(function (hash) { var current = FS.nameTable[hash]; while (current) { var next = current.name_next; if (mounts.indexOf(current.mount) !== -1) { FS.destroyNode(current) } current = next } }); node.mounted = null; var idx = node.mount.mounts.indexOf(mount); node.mount.mounts.splice(idx, 1) }, lookup: function (parent, name) { return parent.node_ops.lookup(parent, name) }, mknod: function (path, mode, dev) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); if (!name || name === "." || name === "..") { throw new FS.ErrnoError(28) } var err = FS.mayCreate(parent, name); if (err) { throw new FS.ErrnoError(err) } if (!parent.node_ops.mknod) { throw new FS.ErrnoError(63) } return parent.node_ops.mknod(parent, name, mode, dev) }, create: function (path, mode) { mode = mode !== undefined ? mode : 438; mode &= 4095; mode |= 32768; return FS.mknod(path, mode, 0) }, mkdir: function (path, mode) { mode = mode !== undefined ? mode : 511; mode &= 511 | 512; mode |= 16384; return FS.mknod(path, mode, 0) }, mkdirTree: function (path, mode) { var dirs = path.split("/"); var d = ""; for (var i = 0; i < dirs.length; ++i) { if (!dirs[i]) continue; d += "/" + dirs[i]; try { FS.mkdir(d, mode) } catch (e) { if (e.errno != 20) throw e } } }, mkdev: function (path, mode, dev) { if (typeof dev === "undefined") { dev = mode; mode = 438 } mode |= 8192; return FS.mknod(path, mode, dev) }, symlink: function (oldpath, newpath) { if (!PATH_FS.resolve(oldpath)) { throw new FS.ErrnoError(44) } var lookup = FS.lookupPath(newpath, { parent: true }); var parent = lookup.node; if (!parent) { throw new FS.ErrnoError(44) } var newname = PATH.basename(newpath); var err = FS.mayCreate(parent, newname); if (err) { throw new FS.ErrnoError(err) } if (!parent.node_ops.symlink) { throw new FS.ErrnoError(63) } return parent.node_ops.symlink(parent, newname, oldpath) }, rename: function (old_path, new_path) { var old_dirname = PATH.dirname(old_path); var new_dirname = PATH.dirname(new_path); var old_name = PATH.basename(old_path); var new_name = PATH.basename(new_path); var lookup, old_dir, new_dir; try { lookup = FS.lookupPath(old_path, { parent: true }); old_dir = lookup.node; lookup = FS.lookupPath(new_path, { parent: true }); new_dir = lookup.node } catch (e) { throw new FS.ErrnoError(10) } if (!old_dir || !new_dir) throw new FS.ErrnoError(44); if (old_dir.mount !== new_dir.mount) { throw new FS.ErrnoError(75) } var old_node = FS.lookupNode(old_dir, old_name); var relative = PATH_FS.relative(old_path, new_dirname); if (relative.charAt(0) !== ".") { throw new FS.ErrnoError(28) } relative = PATH_FS.relative(new_path, old_dirname); if (relative.charAt(0) !== ".") { throw new FS.ErrnoError(55) } var new_node; try { new_node = FS.lookupNode(new_dir, new_name) } catch (e) { } if (old_node === new_node) { return } var isdir = FS.isDir(old_node.mode); var err = FS.mayDelete(old_dir, old_name, isdir); if (err) { throw new FS.ErrnoError(err) } err = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); if (err) { throw new FS.ErrnoError(err) } if (!old_dir.node_ops.rename) { throw new FS.ErrnoError(63) } if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { throw new FS.ErrnoError(10) } if (new_dir !== old_dir) { err = FS.nodePermissions(old_dir, "w"); if (err) { throw new FS.ErrnoError(err) } } try { if (FS.trackingDelegate["willMovePath"]) { FS.trackingDelegate["willMovePath"](old_path, new_path) } } catch (e) { console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) } FS.hashRemoveNode(old_node); try { old_dir.node_ops.rename(old_node, new_dir, new_name) } catch (e) { throw e } finally { FS.hashAddNode(old_node) } try { if (FS.trackingDelegate["onMovePath"]) FS.trackingDelegate["onMovePath"](old_path, new_path) } catch (e) { console.log("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) } }, rmdir: function (path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var err = FS.mayDelete(parent, name, true); if (err) { throw new FS.ErrnoError(err) } if (!parent.node_ops.rmdir) { throw new FS.ErrnoError(63) } if (FS.isMountpoint(node)) { throw new FS.ErrnoError(10) } try { if (FS.trackingDelegate["willDeletePath"]) { FS.trackingDelegate["willDeletePath"](path) } } catch (e) { console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) } parent.node_ops.rmdir(parent, name); FS.destroyNode(node); try { if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path) } catch (e) { console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) } }, readdir: function (path) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; if (!node.node_ops.readdir) { throw new FS.ErrnoError(54) } return node.node_ops.readdir(node) }, unlink: function (path) { var lookup = FS.lookupPath(path, { parent: true }); var parent = lookup.node; var name = PATH.basename(path); var node = FS.lookupNode(parent, name); var err = FS.mayDelete(parent, name, false); if (err) { throw new FS.ErrnoError(err) } if (!parent.node_ops.unlink) { throw new FS.ErrnoError(63) } if (FS.isMountpoint(node)) { throw new FS.ErrnoError(10) } try { if (FS.trackingDelegate["willDeletePath"]) { FS.trackingDelegate["willDeletePath"](path) } } catch (e) { console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) } parent.node_ops.unlink(parent, name); FS.destroyNode(node); try { if (FS.trackingDelegate["onDeletePath"]) FS.trackingDelegate["onDeletePath"](path) } catch (e) { console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) } }, readlink: function (path) { var lookup = FS.lookupPath(path); var link = lookup.node; if (!link) { throw new FS.ErrnoError(44) } if (!link.node_ops.readlink) { throw new FS.ErrnoError(28) } return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) }, stat: function (path, dontFollow) { var lookup = FS.lookupPath(path, { follow: !dontFollow }); var node = lookup.node; if (!node) { throw new FS.ErrnoError(44) } if (!node.node_ops.getattr) { throw new FS.ErrnoError(63) } return node.node_ops.getattr(node) }, lstat: function (path) { return FS.stat(path, true) }, chmod: function (path, mode, dontFollow) { var node; if (typeof path === "string") { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new FS.ErrnoError(63) } node.node_ops.setattr(node, { mode: mode & 4095 | node.mode & ~4095, timestamp: Date.now() }) }, lchmod: function (path, mode) { FS.chmod(path, mode, true) }, fchmod: function (fd, mode) { var stream = FS.getStream(fd); if (!stream) { throw new FS.ErrnoError(8) } FS.chmod(stream.node, mode) }, chown: function (path, uid, gid, dontFollow) { var node; if (typeof path === "string") { var lookup = FS.lookupPath(path, { follow: !dontFollow }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new FS.ErrnoError(63) } node.node_ops.setattr(node, { timestamp: Date.now() }) }, lchown: function (path, uid, gid) { FS.chown(path, uid, gid, true) }, fchown: function (fd, uid, gid) { var stream = FS.getStream(fd); if (!stream) { throw new FS.ErrnoError(8) } FS.chown(stream.node, uid, gid) }, truncate: function (path, len) { if (len < 0) { throw new FS.ErrnoError(28) } var node; if (typeof path === "string") { var lookup = FS.lookupPath(path, { follow: true }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new FS.ErrnoError(63) } if (FS.isDir(node.mode)) { throw new FS.ErrnoError(31) } if (!FS.isFile(node.mode)) { throw new FS.ErrnoError(28) } var err = FS.nodePermissions(node, "w"); if (err) { throw new FS.ErrnoError(err) } node.node_ops.setattr(node, { size: len, timestamp: Date.now() }) }, ftruncate: function (fd, len) { var stream = FS.getStream(fd); if (!stream) { throw new FS.ErrnoError(8) } if ((stream.flags & 2097155) === 0) { throw new FS.ErrnoError(28) } FS.truncate(stream.node, len) }, utime: function (path, atime, mtime) { var lookup = FS.lookupPath(path, { follow: true }); var node = lookup.node; node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) }) }, open: function (path, flags, mode, fd_start, fd_end) { if (path === "") { throw new FS.ErrnoError(44) } flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; mode = typeof mode === "undefined" ? 438 : mode; if (flags & 64) { mode = mode & 4095 | 32768 } else { mode = 0 } var node; if (typeof path === "object") { node = path } else { path = PATH.normalize(path); try { var lookup = FS.lookupPath(path, { follow: !(flags & 131072) }); node = lookup.node } catch (e) { } } var created = false; if (flags & 64) { if (node) { if (flags & 128) { throw new FS.ErrnoError(20) } } else { node = FS.mknod(path, mode, 0); created = true } } if (!node) { throw new FS.ErrnoError(44) } if (FS.isChrdev(node.mode)) { flags &= ~512 } if (flags & 65536 && !FS.isDir(node.mode)) { throw new FS.ErrnoError(54) } if (!created) { var err = FS.mayOpen(node, flags); if (err) { throw new FS.ErrnoError(err) } } if (flags & 512) { FS.truncate(node, 0) } flags &= ~(128 | 512); var stream = FS.createStream({ node: node, path: FS.getPath(node), flags: flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }, fd_start, fd_end); if (stream.stream_ops.open) { stream.stream_ops.open(stream) } if (Module["logReadFiles"] && !(flags & 1)) { if (!FS.readFiles) FS.readFiles = {}; if (!(path in FS.readFiles)) { FS.readFiles[path] = 1; console.log("FS.trackingDelegate error on read file: " + path) } } try { if (FS.trackingDelegate["onOpenFile"]) { var trackingFlags = 0; if ((flags & 2097155) !== 1) { trackingFlags |= FS.tracking.openFlags.READ } if ((flags & 2097155) !== 0) { trackingFlags |= FS.tracking.openFlags.WRITE } FS.trackingDelegate["onOpenFile"](path, trackingFlags) } } catch (e) { console.log("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) } return stream }, close: function (stream) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8) } if (stream.getdents) stream.getdents = null; try { if (stream.stream_ops.close) { stream.stream_ops.close(stream) } } catch (e) { throw e } finally { FS.closeStream(stream.fd) } stream.fd = null }, isClosed: function (stream) { return stream.fd === null }, llseek: function (stream, offset, whence) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8) } if (!stream.seekable || !stream.stream_ops.llseek) { throw new FS.ErrnoError(70) } if (whence != 0 && whence != 1 && whence != 2) { throw new FS.ErrnoError(28) } stream.position = stream.stream_ops.llseek(stream, offset, whence); stream.ungotten = []; return stream.position }, read: function (stream, buffer, offset, length, position) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28) } if (FS.isClosed(stream)) { throw new FS.ErrnoError(8) } if ((stream.flags & 2097155) === 1) { throw new FS.ErrnoError(8) } if (FS.isDir(stream.node.mode)) { throw new FS.ErrnoError(31) } if (!stream.stream_ops.read) { throw new FS.ErrnoError(28) } var seeking = typeof position !== "undefined"; if (!seeking) { position = stream.position } else if (!stream.seekable) { throw new FS.ErrnoError(70) } var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); if (!seeking) stream.position += bytesRead; return bytesRead }, write: function (stream, buffer, offset, length, position, canOwn) { if (length < 0 || position < 0) { throw new FS.ErrnoError(28) } if (FS.isClosed(stream)) { throw new FS.ErrnoError(8) } if ((stream.flags & 2097155) === 0) { throw new FS.ErrnoError(8) } if (FS.isDir(stream.node.mode)) { throw new FS.ErrnoError(31) } if (!stream.stream_ops.write) { throw new FS.ErrnoError(28) } if (stream.flags & 1024) { FS.llseek(stream, 0, 2) } var seeking = typeof position !== "undefined"; if (!seeking) { position = stream.position } else if (!stream.seekable) { throw new FS.ErrnoError(70) } var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); if (!seeking) stream.position += bytesWritten; try { if (stream.path && FS.trackingDelegate["onWriteToFile"]) FS.trackingDelegate["onWriteToFile"](stream.path) } catch (e) { console.log("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) } return bytesWritten }, allocate: function (stream, offset, length) { if (FS.isClosed(stream)) { throw new FS.ErrnoError(8) } if (offset < 0 || length <= 0) { throw new FS.ErrnoError(28) } if ((stream.flags & 2097155) === 0) { throw new FS.ErrnoError(8) } if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { throw new FS.ErrnoError(43) } if (!stream.stream_ops.allocate) { throw new FS.ErrnoError(138) } stream.stream_ops.allocate(stream, offset, length) }, mmap: function (stream, buffer, offset, length, position, prot, flags) { if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { throw new FS.ErrnoError(2) } if ((stream.flags & 2097155) === 1) { throw new FS.ErrnoError(2) } if (!stream.stream_ops.mmap) { throw new FS.ErrnoError(43) } return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags) }, msync: function (stream, buffer, offset, length, mmapFlags) { if (!stream || !stream.stream_ops.msync) { return 0 } return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) }, munmap: function (stream) { return 0 }, ioctl: function (stream, cmd, arg) { if (!stream.stream_ops.ioctl) { throw new FS.ErrnoError(59) } return stream.stream_ops.ioctl(stream, cmd, arg) }, readFile: function (path, opts) { opts = opts || {}; opts.flags = opts.flags || "r"; opts.encoding = opts.encoding || "binary"; if (opts.encoding !== "utf8" && opts.encoding !== "binary") { throw new Error('Invalid encoding type "' + opts.encoding + '"') } var ret; var stream = FS.open(path, opts.flags); var stat = FS.stat(path); var length = stat.size; var buf = new Uint8Array(length); FS.read(stream, buf, 0, length, 0); if (opts.encoding === "utf8") { ret = UTF8ArrayToString(buf, 0) } else if (opts.encoding === "binary") { ret = buf } FS.close(stream); return ret }, writeFile: function (path, data, opts) { opts = opts || {}; opts.flags = opts.flags || "w"; var stream = FS.open(path, opts.flags, opts.mode); if (typeof data === "string") { var buf = new Uint8Array(lengthBytesUTF8(data) + 1); var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) } else if (ArrayBuffer.isView(data)) { FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) } else { throw new Error("Unsupported data type") } FS.close(stream) }, cwd: function () { return FS.currentPath }, chdir: function (path) { var lookup = FS.lookupPath(path, { follow: true }); if (lookup.node === null) { throw new FS.ErrnoError(44) } if (!FS.isDir(lookup.node.mode)) { throw new FS.ErrnoError(54) } var err = FS.nodePermissions(lookup.node, "x"); if (err) { throw new FS.ErrnoError(err) } FS.currentPath = lookup.path }, createDefaultDirectories: function () { FS.mkdir("/tmp"); FS.mkdir("/home"); FS.mkdir("/home/web_user") }, createDefaultDevices: function () { FS.mkdir("/dev"); FS.registerDevice(FS.makedev(1, 3), { read: function () { return 0 }, write: function (stream, buffer, offset, length, pos) { return length } }); FS.mkdev("/dev/null", FS.makedev(1, 3)); TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); FS.mkdev("/dev/tty", FS.makedev(5, 0)); FS.mkdev("/dev/tty1", FS.makedev(6, 0)); var random_device; if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") { var randomBuffer = new Uint8Array(1); random_device = function () { crypto.getRandomValues(randomBuffer); return randomBuffer[0] } } else if (ENVIRONMENT_IS_NODE) { try { var crypto_module = require("crypto"); random_device = function () { return crypto_module["randomBytes"](1)[0] } } catch (e) { } } else { } if (!random_device) { random_device = function () { abort("random_device") } } FS.createDevice("/dev", "random", random_device); FS.createDevice("/dev", "urandom", random_device); FS.mkdir("/dev/shm"); FS.mkdir("/dev/shm/tmp") }, createSpecialDirectories: function () { FS.mkdir("/proc"); FS.mkdir("/proc/self"); FS.mkdir("/proc/self/fd"); FS.mount({ mount: function () { var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); node.node_ops = { lookup: function (parent, name) { var fd = +name; var stream = FS.getStream(fd); if (!stream) throw new FS.ErrnoError(8); var ret = { parent: null, mount: { mountpoint: "fake" }, node_ops: { readlink: function () { return stream.path } } }; ret.parent = ret; return ret } }; return node } }, {}, "/proc/self/fd") }, createStandardStreams: function () { if (Module["stdin"]) { FS.createDevice("/dev", "stdin", Module["stdin"]) } else { FS.symlink("/dev/tty", "/dev/stdin") } if (Module["stdout"]) { FS.createDevice("/dev", "stdout", null, Module["stdout"]) } else { FS.symlink("/dev/tty", "/dev/stdout") } if (Module["stderr"]) { FS.createDevice("/dev", "stderr", null, Module["stderr"]) } else { FS.symlink("/dev/tty1", "/dev/stderr") } var stdin = FS.open("/dev/stdin", "r"); var stdout = FS.open("/dev/stdout", "w"); var stderr = FS.open("/dev/stderr", "w") }, ensureErrnoError: function () { if (FS.ErrnoError) return; FS.ErrnoError = function ErrnoError(errno, node) { this.node = node; this.setErrno = function (errno) { this.errno = errno } ; this.setErrno(errno); this.message = "FS error" } ; FS.ErrnoError.prototype = new Error; FS.ErrnoError.prototype.constructor = FS.ErrnoError; [44].forEach(function (code) { FS.genericErrors[code] = new FS.ErrnoError(code); FS.genericErrors[code].stack = "" }) }, staticInit: function () { FS.ensureErrnoError(); FS.nameTable = new Array(4096); FS.mount(MEMFS, {}, "/"); FS.createDefaultDirectories(); FS.createDefaultDevices(); FS.createSpecialDirectories(); FS.filesystems = { "MEMFS": MEMFS, "IDBFS": IDBFS, "NODEFS": NODEFS, "WORKERFS": WORKERFS } }, init: function (input, output, error) { FS.init.initialized = true; FS.ensureErrnoError(); Module["stdin"] = input || Module["stdin"]; Module["stdout"] = output || Module["stdout"]; Module["stderr"] = error || Module["stderr"]; FS.createStandardStreams() }, quit: function () { FS.init.initialized = false; var fflush = Module["_fflush"]; if (fflush) fflush(0); for (var i = 0; i < FS.streams.length; i++) { var stream = FS.streams[i]; if (!stream) { continue } FS.close(stream) } }, getMode: function (canRead, canWrite) { var mode = 0; if (canRead) mode |= 292 | 73; if (canWrite) mode |= 146; return mode }, joinPath: function (parts, forceRelative) { var path = PATH.join.apply(null, parts); if (forceRelative && path[0] == "/") path = path.substr(1); return path }, absolutePath: function (relative, base) { return PATH_FS.resolve(base, relative) }, standardizePath: function (path) { return PATH.normalize(path) }, findObject: function (path, dontResolveLastLink) { var ret = FS.analyzePath(path, dontResolveLastLink); if (ret.exists) { return ret.object } else { ___setErrNo(ret.error); return null } }, analyzePath: function (path, dontResolveLastLink) { try { var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); path = lookup.path } catch (e) { } var ret = { isRoot: false, exists: false, error: 0, name: null, path: null, object: null, parentExists: false, parentPath: null, parentObject: null }; try { var lookup = FS.lookupPath(path, { parent: true }); ret.parentExists = true; ret.parentPath = lookup.path; ret.parentObject = lookup.node; ret.name = PATH.basename(path); lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); ret.exists = true; ret.path = lookup.path; ret.object = lookup.node; ret.name = lookup.node.name; ret.isRoot = lookup.path === "/" } catch (e) { ret.error = e.errno } return ret }, createFolder: function (parent, name, canRead, canWrite) { var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); var mode = FS.getMode(canRead, canWrite); return FS.mkdir(path, mode) }, createPath: function (parent, path, canRead, canWrite) { parent = typeof parent === "string" ? parent : FS.getPath(parent); var parts = path.split("/").reverse(); while (parts.length) { var part = parts.pop(); if (!part) continue; var current = PATH.join2(parent, part); try { FS.mkdir(current) } catch (e) { } parent = current } return current }, createFile: function (parent, name, properties, canRead, canWrite) { var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); var mode = FS.getMode(canRead, canWrite); return FS.create(path, mode) }, createDataFile: function (parent, name, data, canRead, canWrite, canOwn) { var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; var mode = FS.getMode(canRead, canWrite); var node = FS.create(path, mode); if (data) { if (typeof data === "string") { var arr = new Array(data.length); for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); data = arr } FS.chmod(node, mode | 146); var stream = FS.open(node, "w"); FS.write(stream, data, 0, data.length, 0, canOwn); FS.close(stream); FS.chmod(node, mode) } return node }, createDevice: function (parent, name, input, output) { var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); var mode = FS.getMode(!!input, !!output); if (!FS.createDevice.major) FS.createDevice.major = 64; var dev = FS.makedev(FS.createDevice.major++, 0); FS.registerDevice(dev, { open: function (stream) { stream.seekable = false }, close: function (stream) { if (output && output.buffer && output.buffer.length) { output(10) } }, read: function (stream, buffer, offset, length, pos) { var bytesRead = 0; for (var i = 0; i < length; i++) { var result; try { result = input() } catch (e) { throw new FS.ErrnoError(29) } if (result === undefined && bytesRead === 0) { throw new FS.ErrnoError(6) } if (result === null || result === undefined) break; bytesRead++; buffer[offset + i] = result } if (bytesRead) { stream.node.timestamp = Date.now() } return bytesRead }, write: function (stream, buffer, offset, length, pos) { for (var i = 0; i < length; i++) { try { output(buffer[offset + i]) } catch (e) { throw new FS.ErrnoError(29) } } if (length) { stream.node.timestamp = Date.now() } return i } }); return FS.mkdev(path, mode, dev) }, createLink: function (parent, name, target, canRead, canWrite) { var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); return FS.symlink(target, path) }, forceLoadFile: function (obj) { if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; var success = true; if (typeof XMLHttpRequest !== "undefined") { throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") } else if (read_) { try { obj.contents = intArrayFromString(read_(obj.url), true); obj.usedBytes = obj.contents.length } catch (e) { success = false } } else { throw new Error("Cannot load without read() or XMLHttpRequest.") } if (!success) ___setErrNo(29); return success }, createLazyFile: function (parent, name, url, canRead, canWrite) { function LazyUint8Array() { this.lengthKnown = false; this.chunks = [] } LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { if (idx > this.length - 1 || idx < 0) { return undefined } var chunkOffset = idx % this.chunkSize; var chunkNum = idx / this.chunkSize | 0; return this.getter(chunkNum)[chunkOffset] } ; LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { this.getter = getter } ; LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { var xhr = new XMLHttpRequest; xhr.open("HEAD", url, false); xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); var datalength = Number(xhr.getResponseHeader("Content-length")); var header; var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; var chunkSize = 1024 * 1024; if (!hasByteServing) chunkSize = datalength; var doXHR = function (from, to) { if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); var xhr = new XMLHttpRequest; xhr.open("GET", url, false); if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); if (typeof Uint8Array != "undefined") xhr.responseType = "arraybuffer"; if (xhr.overrideMimeType) { xhr.overrideMimeType("text/plain; charset=x-user-defined") } xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); if (xhr.response !== undefined) { return new Uint8Array(xhr.response || []) } else { return intArrayFromString(xhr.responseText || "", true) } }; var lazyArray = this; lazyArray.setDataGetter(function (chunkNum) { var start = chunkNum * chunkSize; var end = (chunkNum + 1) * chunkSize - 1; end = Math.min(end, datalength - 1); if (typeof lazyArray.chunks[chunkNum] === "undefined") { lazyArray.chunks[chunkNum] = doXHR(start, end) } if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); return lazyArray.chunks[chunkNum] }); if (usesGzip || !datalength) { chunkSize = datalength = 1; datalength = this.getter(0).length; chunkSize = datalength; console.log("LazyFiles on gzip forces download of the whole file when length is accessed") } this._length = datalength; this._chunkSize = chunkSize; this.lengthKnown = true } ; if (typeof XMLHttpRequest !== "undefined") { if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; var lazyArray = new LazyUint8Array; Object.defineProperties(lazyArray, { length: { get: function () { if (!this.lengthKnown) { this.cacheLength() } return this._length } }, chunkSize: { get: function () { if (!this.lengthKnown) { this.cacheLength() } return this._chunkSize } } }); var properties = { isDevice: false, contents: lazyArray } } else { var properties = { isDevice: false, url: url } } var node = FS.createFile(parent, name, properties, canRead, canWrite); if (properties.contents) { node.contents = properties.contents } else if (properties.url) { node.contents = null; node.url = properties.url } Object.defineProperties(node, { usedBytes: { get: function () { return this.contents.length } } }); var stream_ops = {}; var keys = Object.keys(node.stream_ops); keys.forEach(function (key) { var fn = node.stream_ops[key]; stream_ops[key] = function forceLoadLazyFile() { if (!FS.forceLoadFile(node)) { throw new FS.ErrnoError(29) } return fn.apply(null, arguments) } }); stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { if (!FS.forceLoadFile(node)) { throw new FS.ErrnoError(29) } var contents = stream.node.contents; if (position >= contents.length) return 0; var size = Math.min(contents.length - position, length); if (contents.slice) { for (var i = 0; i < size; i++) { buffer[offset + i] = contents[position + i] } } else { for (var i = 0; i < size; i++) { buffer[offset + i] = contents.get(position + i) } } return size } ; node.stream_ops = stream_ops; return node }, createPreloadedFile: function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { Browser.init(); var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; var dep = getUniqueRunDependency("cp " + fullname); function processData(byteArray) { function finish(byteArray) { if (preFinish) preFinish(); if (!dontCreateFile) { FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) } if (onload) onload(); removeRunDependency(dep) } var handled = false; Module["preloadPlugins"].forEach(function (plugin) { if (handled) return; if (plugin["canHandle"](fullname)) { plugin["handle"](byteArray, fullname, finish, function () { if (onerror) onerror(); removeRunDependency(dep) }); handled = true } }); if (!handled) finish(byteArray) } addRunDependency(dep); if (typeof url == "string") { Browser.asyncLoad(url, function (byteArray) { processData(byteArray) }, onerror) } else { processData(url) } }, indexedDB: function () { return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB }, DB_NAME: function () { return "EM_FS_" + window.location.pathname }, DB_VERSION: 20, DB_STORE_NAME: "FILE_DATA", saveFilesToDB: function (paths, onload, onerror) { onload = onload || function () { } ; onerror = onerror || function () { } ; var indexedDB = FS.indexedDB(); try { var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) } catch (e) { return onerror(e) } openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { console.log("creating db"); var db = openRequest.result; db.createObjectStore(FS.DB_STORE_NAME) } ; openRequest.onsuccess = function openRequest_onsuccess() { var db = openRequest.result; var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); var files = transaction.objectStore(FS.DB_STORE_NAME); var ok = 0 , fail = 0 , total = paths.length; function finish() { if (fail == 0) onload(); else onerror() } paths.forEach(function (path) { var putRequest = files.put(FS.analyzePath(path).object.contents, path); putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() } ; putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() } }); transaction.onerror = onerror } ; openRequest.onerror = onerror }, loadFilesFromDB: function (paths, onload, onerror) { onload = onload || function () { } ; onerror = onerror || function () { } ; var indexedDB = FS.indexedDB(); try { var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) } catch (e) { return onerror(e) } openRequest.onupgradeneeded = onerror; openRequest.onsuccess = function openRequest_onsuccess() { var db = openRequest.result; try { var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") } catch (e) { onerror(e); return } var files = transaction.objectStore(FS.DB_STORE_NAME); var ok = 0 , fail = 0 , total = paths.length; function finish() { if (fail == 0) onload(); else onerror() } paths.forEach(function (path) { var getRequest = files.get(path); getRequest.onsuccess = function getRequest_onsuccess() { if (FS.analyzePath(path).exists) { FS.unlink(path) } FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); ok++; if (ok + fail == total) finish() } ; getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() } }); transaction.onerror = onerror } ; openRequest.onerror = onerror } }; var SYSCALLS = { DEFAULT_POLLMASK: 5, mappings: {}, umask: 511, calculateAt: function (dirfd, path) { if (path[0] !== "/") { var dir; if (dirfd === -100) { dir = FS.cwd() } else { var dirstream = FS.getStream(dirfd); if (!dirstream) throw new FS.ErrnoError(8); dir = dirstream.path } path = PATH.join2(dir, path) } return path }, doStat: function (func, path, buf) { try { var stat = func(path) } catch (e) { if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { return -54 } throw e } HEAP32[buf >> 2] = stat.dev; HEAP32[buf + 4 >> 2] = 0; HEAP32[buf + 8 >> 2] = stat.ino; HEAP32[buf + 12 >> 2] = stat.mode; HEAP32[buf + 16 >> 2] = stat.nlink; HEAP32[buf + 20 >> 2] = stat.uid; HEAP32[buf + 24 >> 2] = stat.gid; HEAP32[buf + 28 >> 2] = stat.rdev; HEAP32[buf + 32 >> 2] = 0; tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; HEAP32[buf + 48 >> 2] = 4096; HEAP32[buf + 52 >> 2] = stat.blocks; HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; HEAP32[buf + 60 >> 2] = 0; HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; HEAP32[buf + 68 >> 2] = 0; HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; HEAP32[buf + 76 >> 2] = 0; tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; return 0 }, doMsync: function (addr, stream, len, flags) { var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len)); FS.msync(stream, buffer, 0, len, flags) }, doMkdir: function (path, mode) { path = PATH.normalize(path); if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); FS.mkdir(path, mode, 0); return 0 }, doMknod: function (path, mode, dev) { switch (mode & 61440) { case 32768: case 8192: case 24576: case 4096: case 49152: break; default: return -28 } FS.mknod(path, mode, dev); return 0 }, doReadlink: function (path, buf, bufsize) { if (bufsize <= 0) return -28; var ret = FS.readlink(path); var len = Math.min(bufsize, lengthBytesUTF8(ret)); var endChar = HEAP8[buf + len]; stringToUTF8(ret, buf, bufsize + 1); HEAP8[buf + len] = endChar; return len }, doAccess: function (path, amode) { if (amode & ~7) { return -28 } var node; var lookup = FS.lookupPath(path, { follow: true }); node = lookup.node; if (!node) { return -44 } var perms = ""; if (amode & 4) perms += "r"; if (amode & 2) perms += "w"; if (amode & 1) perms += "x"; if (perms && FS.nodePermissions(node, perms)) { return -2 } return 0 }, doDup: function (path, flags, suggestFD) { var suggest = FS.getStream(suggestFD); if (suggest) FS.close(suggest); return FS.open(path, flags, 0, suggestFD, suggestFD).fd }, doReadv: function (stream, iov, iovcnt, offset) { var ret = 0; for (var i = 0; i < iovcnt; i++) { var ptr = HEAP32[iov + i * 8 >> 2]; var len = HEAP32[iov + (i * 8 + 4) >> 2]; var curr = FS.read(stream, HEAP8, ptr, len, offset); if (curr < 0) return -1; ret += curr; if (curr < len) break } return ret }, doWritev: function (stream, iov, iovcnt, offset) { var ret = 0; for (var i = 0; i < iovcnt; i++) { var ptr = HEAP32[iov + i * 8 >> 2]; var len = HEAP32[iov + (i * 8 + 4) >> 2]; var curr = FS.write(stream, HEAP8, ptr, len, offset); if (curr < 0) return -1; ret += curr } return ret }, varargs: 0, get: function (varargs) { SYSCALLS.varargs += 4; var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; return ret }, getStr: function () { var ret = UTF8ToString(SYSCALLS.get()); return ret }, getStreamFromFD: function (fd) { if (fd === undefined) fd = SYSCALLS.get(); var stream = FS.getStream(fd); if (!stream) throw new FS.ErrnoError(8); return stream }, get64: function () { var low = SYSCALLS.get() , high = SYSCALLS.get(); return low }, getZero: function () { SYSCALLS.get() } }; function ___syscall221(which, varargs) { SYSCALLS.varargs = varargs; try { var stream = SYSCALLS.getStreamFromFD() , cmd = SYSCALLS.get(); switch (cmd) { case 0: { var arg = SYSCALLS.get(); if (arg < 0) { return -28 } var newStream; newStream = FS.open(stream.path, stream.flags, 0, arg); return newStream.fd } case 1: case 2: return 0; case 3: return stream.flags; case 4: { var arg = SYSCALLS.get(); stream.flags |= arg; return 0 } case 12: { var arg = SYSCALLS.get(); var offset = 0; HEAP16[arg + offset >> 1] = 2; return 0 } case 13: case 14: return 0; case 16: case 8: return -28; case 9: ___setErrNo(28); return -1; default: { return -28 } } } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function ___syscall3(which, varargs) { SYSCALLS.varargs = varargs; try { var stream = SYSCALLS.getStreamFromFD() , buf = SYSCALLS.get() , count = SYSCALLS.get(); return FS.read(stream, HEAP8, buf, count) } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function ___syscall4(which, varargs) { SYSCALLS.varargs = varargs; try { var stream = SYSCALLS.getStreamFromFD() , buf = SYSCALLS.get() , count = SYSCALLS.get(); return FS.write(stream, HEAP8, buf, count) } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function ___syscall5(which, varargs) { SYSCALLS.varargs = varargs; try { var pathname = SYSCALLS.getStr() , flags = SYSCALLS.get() , mode = SYSCALLS.get(); var stream = FS.open(pathname, flags, mode); return stream.fd } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function ___syscall54(which, varargs) { SYSCALLS.varargs = varargs; try { var stream = SYSCALLS.getStreamFromFD() , op = SYSCALLS.get(); switch (op) { case 21509: case 21505: { if (!stream.tty) return -59; return 0 } case 21510: case 21511: case 21512: case 21506: case 21507: case 21508: { if (!stream.tty) return -59; return 0 } case 21519: { if (!stream.tty) return -59; var argp = SYSCALLS.get(); HEAP32[argp >> 2] = 0; return 0 } case 21520: { if (!stream.tty) return -59; return -28 } case 21531: { var argp = SYSCALLS.get(); return FS.ioctl(stream, op, argp) } case 21523: { if (!stream.tty) return -59; return 0 } case 21524: { if (!stream.tty) return -59; return 0 } default: abort("bad ioctl syscall " + op) } } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function __emscripten_syscall_munmap(addr, len) { if (addr === -1 || len === 0) { return -28 } var info = SYSCALLS.mappings[addr]; if (!info) return 0; if (len === info.len) { var stream = FS.getStream(info.fd); SYSCALLS.doMsync(addr, stream, len, info.flags); FS.munmap(stream); SYSCALLS.mappings[addr] = null; if (info.allocated) { _free(info.malloc) } } return 0 } function ___syscall91(which, varargs) { SYSCALLS.varargs = varargs; try { var addr = SYSCALLS.get() , len = SYSCALLS.get(); return __emscripten_syscall_munmap(addr, len) } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno } } function ___unlock() { } var tupleRegistrations = {}; function runDestructors(destructors) { while (destructors.length) { var ptr = destructors.pop(); var del = destructors.pop(); del(ptr) } } function simpleReadValueFromPointer(pointer) { return this["fromWireType"](HEAPU32[pointer >> 2]) } var awaitingDependencies = {}; var registeredTypes = {}; var typeDependencies = {}; var char_0 = 48; var char_9 = 57; function makeLegalFunctionName(name) { if (undefined === name) { return "_unknown" } name = name.replace(/[^a-zA-Z0-9_]/g, "$"); var f = name.charCodeAt(0); if (f >= char_0 && f <= char_9) { return "_" + name } else { return name } } function createNamedFunction(name, body) { name = makeLegalFunctionName(name); if (IsWechat) { var f1 = function (body) { return function () { "use strict"; return body.apply(this, arguments); } } return f1(body) } else { return new Function("body", "return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body) } } function extendError(baseErrorType, errorName) { var errorClass = createNamedFunction(errorName, function (message) { this.name = errorName; this.message = message; var stack = new Error(message).stack; if (stack !== undefined) { this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, "") } }); errorClass.prototype = Object.create(baseErrorType.prototype); errorClass.prototype.constructor = errorClass; errorClass.prototype.toString = function () { if (this.message === undefined) { return this.name } else { return this.name + ": " + this.message } } ; return errorClass } var InternalError = undefined; function throwInternalError(message) { throw new InternalError(message) } function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { myTypes.forEach(function (type) { typeDependencies[type] = dependentTypes }); function onComplete(typeConverters) { var myTypeConverters = getTypeConverters(typeConverters); if (myTypeConverters.length !== myTypes.length) { throwInternalError("Mismatched type converter count") } for (var i = 0; i < myTypes.length; ++i) { registerType(myTypes[i], myTypeConverters[i]) } } var typeConverters = new Array(dependentTypes.length); var unregisteredTypes = []; var registered = 0; dependentTypes.forEach(function (dt, i) { if (registeredTypes.hasOwnProperty(dt)) { typeConverters[i] = registeredTypes[dt] } else { unregisteredTypes.push(dt); if (!awaitingDependencies.hasOwnProperty(dt)) { awaitingDependencies[dt] = [] } awaitingDependencies[dt].push(function () { typeConverters[i] = registeredTypes[dt]; ++registered; if (registered === unregisteredTypes.length) { onComplete(typeConverters) } }) } }); if (0 === unregisteredTypes.length) { onComplete(typeConverters) } } function __embind_finalize_value_array(rawTupleType) { var reg = tupleRegistrations[rawTupleType]; delete tupleRegistrations[rawTupleType]; var elements = reg.elements; var elementsLength = elements.length; var elementTypes = elements.map(function (elt) { return elt.getterReturnType }).concat(elements.map(function (elt) { return elt.setterArgumentType })); var rawConstructor = reg.rawConstructor; var rawDestructor = reg.rawDestructor; whenDependentTypesAreResolved([rawTupleType], elementTypes, function (elementTypes) { elements.forEach(function (elt, i) { var getterReturnType = elementTypes[i]; var getter = elt.getter; var getterContext = elt.getterContext; var setterArgumentType = elementTypes[i + elementsLength]; var setter = elt.setter; var setterContext = elt.setterContext; elt.read = function (ptr) { return getterReturnType["fromWireType"](getter(getterContext, ptr)) } ; elt.write = function (ptr, o) { var destructors = []; setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); runDestructors(destructors) } }); return [{ name: reg.name, "fromWireType": function (ptr) { var rv = new Array(elementsLength); for (var i = 0; i < elementsLength; ++i) { rv[i] = elements[i].read(ptr) } rawDestructor(ptr); return rv }, "toWireType": function (destructors, o) { if (elementsLength !== o.length) { throw new TypeError("Incorrect number of tuple elements for " + reg.name + ": expected=" + elementsLength + ", actual=" + o.length) } var ptr = rawConstructor(); for (var i = 0; i < elementsLength; ++i) { elements[i].write(ptr, o[i]) } if (destructors !== null) { destructors.push(rawDestructor, ptr) } return ptr }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: rawDestructor }] }) } var structRegistrations = {}; function __embind_finalize_value_object(structType) { var reg = structRegistrations[structType]; delete structRegistrations[structType]; var rawConstructor = reg.rawConstructor; var rawDestructor = reg.rawDestructor; var fieldRecords = reg.fields; var fieldTypes = fieldRecords.map(function (field) { return field.getterReturnType }).concat(fieldRecords.map(function (field) { return field.setterArgumentType })); whenDependentTypesAreResolved([structType], fieldTypes, function (fieldTypes) { var fields = {}; fieldRecords.forEach(function (field, i) { var fieldName = field.fieldName; var getterReturnType = fieldTypes[i]; var getter = field.getter; var getterContext = field.getterContext; var setterArgumentType = fieldTypes[i + fieldRecords.length]; var setter = field.setter; var setterContext = field.setterContext; fields[fieldName] = { read: function (ptr) { return getterReturnType["fromWireType"](getter(getterContext, ptr)) }, write: function (ptr, o) { var destructors = []; setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); runDestructors(destructors) } } }); return [{ name: reg.name, "fromWireType": function (ptr) { var rv = {}; for (var i in fields) { rv[i] = fields[i].read(ptr) } rawDestructor(ptr); return rv }, "toWireType": function (destructors, o) { for (var fieldName in fields) { if (!(fieldName in o)) { throw new TypeError("Missing field") } } var ptr = rawConstructor(); for (fieldName in fields) { fields[fieldName].write(ptr, o[fieldName]) } if (destructors !== null) { destructors.push(rawDestructor, ptr) } return ptr }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: rawDestructor }] }) } function getShiftFromSize(size) { switch (size) { case 1: return 0; case 2: return 1; case 4: return 2; case 8: return 3; default: throw new TypeError("Unknown type size: " + size) } } function embind_init_charCodes() { var codes = new Array(256); for (var i = 0; i < 256; ++i) { codes[i] = String.fromCharCode(i) } embind_charCodes = codes } var embind_charCodes = undefined; function readLatin1String(ptr) { var ret = ""; var c = ptr; while (HEAPU8[c]) { ret += embind_charCodes[HEAPU8[c++]] } return ret } var BindingError = undefined; function throwBindingError(message) { throw new BindingError(message) } function registerType(rawType, registeredInstance, options) { options = options || {}; if (!("argPackAdvance" in registeredInstance)) { throw new TypeError("registerType registeredInstance requires argPackAdvance") } var name = registeredInstance.name; if (!rawType) { throwBindingError('type "' + name + '" must have a positive integer typeid pointer') } if (registeredTypes.hasOwnProperty(rawType)) { if (options.ignoreDuplicateRegistrations) { return } else { throwBindingError("Cannot register type '" + name + "' twice") } } registeredTypes[rawType] = registeredInstance; delete typeDependencies[rawType]; if (awaitingDependencies.hasOwnProperty(rawType)) { var callbacks = awaitingDependencies[rawType]; delete awaitingDependencies[rawType]; callbacks.forEach(function (cb) { cb() }) } } function __embind_register_bool(rawType, name, size, trueValue, falseValue) { var shift = getShiftFromSize(size); name = readLatin1String(name); registerType(rawType, { name: name, "fromWireType": function (wt) { return !!wt }, "toWireType": function (destructors, o) { return o ? trueValue : falseValue }, "argPackAdvance": 8, "readValueFromPointer": function (pointer) { var heap; if (size === 1) { heap = HEAP8 } else if (size === 2) { heap = HEAP16 } else if (size === 4) { heap = HEAP32 } else { throw new TypeError("Unknown boolean type size: " + name) } return this["fromWireType"](heap[pointer >> shift]) }, destructorFunction: null }) } function ClassHandle_isAliasOf(other) { if (!(this instanceof ClassHandle)) { return false } if (!(other instanceof ClassHandle)) { return false } var leftClass = this.$$.ptrType.registeredClass; var left = this.$$.ptr; var rightClass = other.$$.ptrType.registeredClass; var right = other.$$.ptr; while (leftClass.baseClass) { left = leftClass.upcast(left); leftClass = leftClass.baseClass } while (rightClass.baseClass) { right = rightClass.upcast(right); rightClass = rightClass.baseClass } return leftClass === rightClass && left === right } function shallowCopyInternalPointer(o) { return { count: o.count, deleteScheduled: o.deleteScheduled, preservePointerOnDelete: o.preservePointerOnDelete, ptr: o.ptr, ptrType: o.ptrType, smartPtr: o.smartPtr, smartPtrType: o.smartPtrType } } function throwInstanceAlreadyDeleted(obj) { function getInstanceTypeName(handle) { return handle.$$.ptrType.registeredClass.name } throwBindingError(getInstanceTypeName(obj) + " instance already deleted") } var finalizationGroup = false; function detachFinalizer(handle) { } function runDestructor($$) { if ($$.smartPtr) { $$.smartPtrType.rawDestructor($$.smartPtr) } else { $$.ptrType.registeredClass.rawDestructor($$.ptr) } } function releaseClassHandle($$) { $$.count.value -= 1; var toDelete = 0 === $$.count.value; if (toDelete) { runDestructor($$) } } function attachFinalizer(handle) { if ("undefined" === typeof FinalizationGroup) { attachFinalizer = function (handle) { return handle } ; return handle } finalizationGroup = new FinalizationGroup(function (iter) { for (var result = iter.next(); !result.done; result = iter.next()) { var $$ = result.value; if (!$$.ptr) { console.warn("object already deleted: " + $$.ptr) } else { releaseClassHandle($$) } } } ); attachFinalizer = function (handle) { finalizationGroup.register(handle, handle.$$, handle.$$); return handle } ; detachFinalizer = function (handle) { finalizationGroup.unregister(handle.$$) } ; return attachFinalizer(handle) } function ClassHandle_clone() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this) } if (this.$$.preservePointerOnDelete) { this.$$.count.value += 1; return this } else { var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$) } })); clone.$$.count.value += 1; clone.$$.deleteScheduled = false; return clone } } function ClassHandle_delete() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this) } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError("Object already scheduled for deletion") } detachFinalizer(this); releaseClassHandle(this.$$); if (!this.$$.preservePointerOnDelete) { this.$$.smartPtr = undefined; this.$$.ptr = undefined } } function ClassHandle_isDeleted() { return !this.$$.ptr } var delayFunction = undefined; var deletionQueue = []; function flushPendingDeletes() { while (deletionQueue.length) { var obj = deletionQueue.pop(); obj.$$.deleteScheduled = false; obj["delete"]() } } function ClassHandle_deleteLater() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this) } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError("Object already scheduled for deletion") } deletionQueue.push(this); if (deletionQueue.length === 1 && delayFunction) { delayFunction(flushPendingDeletes) } this.$$.deleteScheduled = true; return this } function init_ClassHandle() { ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf; ClassHandle.prototype["clone"] = ClassHandle_clone; ClassHandle.prototype["delete"] = ClassHandle_delete; ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted; ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater } function ClassHandle() { } var registeredPointers = {}; function ensureOverloadTable(proto, methodName, humanName) { if (undefined === proto[methodName].overloadTable) { var prevFunc = proto[methodName]; proto[methodName] = function () { if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!") } return proto[methodName].overloadTable[arguments.length].apply(this, arguments) } ; proto[methodName].overloadTable = []; proto[methodName].overloadTable[prevFunc.argCount] = prevFunc } } function exposePublicSymbol(name, value, numArguments) { if (Module.hasOwnProperty(name)) { if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) { throwBindingError("Cannot register public name '" + name + "' twice") } ensureOverloadTable(Module, name, name); if (Module.hasOwnProperty(numArguments)) { throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!") } Module[name].overloadTable[numArguments] = value } else { Module[name] = value; if (undefined !== numArguments) { Module[name].numArguments = numArguments } } } function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { this.name = name; this.constructor = constructor; this.instancePrototype = instancePrototype; this.rawDestructor = rawDestructor; this.baseClass = baseClass; this.getActualType = getActualType; this.upcast = upcast; this.downcast = downcast; this.pureVirtualFunctions = [] } function upcastPointer(ptr, ptrClass, desiredClass) { while (ptrClass !== desiredClass) { if (!ptrClass.upcast) { throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name) } ptr = ptrClass.upcast(ptr); ptrClass = ptrClass.baseClass } return ptr } function constNoSmartPtrRawPointerToWireType(destructors, handle) { if (handle === null) { if (this.isReference) { throwBindingError("null is not a valid " + this.name) } return 0 } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) } if (!handle.$$.ptr) { throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) } var handleClass = handle.$$.ptrType.registeredClass; var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); return ptr } function genericPointerToWireType(destructors, handle) { var ptr; if (handle === null) { if (this.isReference) { throwBindingError("null is not a valid " + this.name) } if (this.isSmartPointer) { ptr = this.rawConstructor(); if (destructors !== null) { destructors.push(this.rawDestructor, ptr) } return ptr } else { return 0 } } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) } if (!handle.$$.ptr) { throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) } if (!this.isConst && handle.$$.ptrType.isConst) { throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) } var handleClass = handle.$$.ptrType.registeredClass; ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); if (this.isSmartPointer) { if (undefined === handle.$$.smartPtr) { throwBindingError("Passing raw pointer to smart pointer is illegal") } switch (this.sharingPolicy) { case 0: if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr } else { throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) } break; case 1: ptr = handle.$$.smartPtr; break; case 2: if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr } else { var clonedHandle = handle["clone"](); ptr = this.rawShare(ptr, __emval_register(function () { clonedHandle["delete"]() })); if (destructors !== null) { destructors.push(this.rawDestructor, ptr) } } break; default: throwBindingError("Unsupporting sharing policy") } } return ptr } function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { if (handle === null) { if (this.isReference) { throwBindingError("null is not a valid " + this.name) } return 0 } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) } if (!handle.$$.ptr) { throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) } if (handle.$$.ptrType.isConst) { throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name) } var handleClass = handle.$$.ptrType.registeredClass; var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); return ptr } function RegisteredPointer_getPointee(ptr) { if (this.rawGetPointee) { ptr = this.rawGetPointee(ptr) } return ptr } function RegisteredPointer_destructor(ptr) { if (this.rawDestructor) { this.rawDestructor(ptr) } } function RegisteredPointer_deleteObject(handle) { if (handle !== null) { handle["delete"]() } } function downcastPointer(ptr, ptrClass, desiredClass) { if (ptrClass === desiredClass) { return ptr } if (undefined === desiredClass.baseClass) { return null } var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); if (rv === null) { return null } return desiredClass.downcast(rv) } function getInheritedInstanceCount() { return Object.keys(registeredInstances).length } function getLiveInheritedInstances() { var rv = []; for (var k in registeredInstances) { if (registeredInstances.hasOwnProperty(k)) { rv.push(registeredInstances[k]) } } return rv } function setDelayFunction(fn) { delayFunction = fn; if (deletionQueue.length && delayFunction) { delayFunction(flushPendingDeletes) } } function init_embind() { Module["getInheritedInstanceCount"] = getInheritedInstanceCount; Module["getLiveInheritedInstances"] = getLiveInheritedInstances; Module["flushPendingDeletes"] = flushPendingDeletes; Module["setDelayFunction"] = setDelayFunction } var registeredInstances = {}; function getBasestPointer(class_, ptr) { if (ptr === undefined) { throwBindingError("ptr should not be undefined") } while (class_.baseClass) { ptr = class_.upcast(ptr); class_ = class_.baseClass } return ptr } function getInheritedInstance(class_, ptr) { ptr = getBasestPointer(class_, ptr); return registeredInstances[ptr] } function makeClassHandle(prototype, record) { if (!record.ptrType || !record.ptr) { throwInternalError("makeClassHandle requires ptr and ptrType") } var hasSmartPtrType = !!record.smartPtrType; var hasSmartPtr = !!record.smartPtr; if (hasSmartPtrType !== hasSmartPtr) { throwInternalError("Both smartPtrType and smartPtr must be specified") } record.count = { value: 1 }; return attachFinalizer(Object.create(prototype, { $$: { value: record } })) } function RegisteredPointer_fromWireType(ptr) { var rawPointer = this.getPointee(ptr); if (!rawPointer) { this.destructor(ptr); return null } var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); if (undefined !== registeredInstance) { if (0 === registeredInstance.$$.count.value) { registeredInstance.$$.ptr = rawPointer; registeredInstance.$$.smartPtr = ptr; return registeredInstance["clone"]() } else { var rv = registeredInstance["clone"](); this.destructor(ptr); return rv } } function makeDefaultHandle() { if (this.isSmartPointer) { return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this.pointeeType, ptr: rawPointer, smartPtrType: this, smartPtr: ptr }) } else { return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this, ptr: ptr }) } } var actualType = this.registeredClass.getActualType(rawPointer); var registeredPointerRecord = registeredPointers[actualType]; if (!registeredPointerRecord) { return makeDefaultHandle.call(this) } var toType; if (this.isConst) { toType = registeredPointerRecord.constPointerType } else { toType = registeredPointerRecord.pointerType } var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); if (dp === null) { return makeDefaultHandle.call(this) } if (this.isSmartPointer) { return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp, smartPtrType: this, smartPtr: ptr }) } else { return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp }) } } function init_RegisteredPointer() { RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; RegisteredPointer.prototype["argPackAdvance"] = 8; RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer; RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject; RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType } function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) { this.name = name; this.registeredClass = registeredClass; this.isReference = isReference; this.isConst = isConst; this.isSmartPointer = isSmartPointer; this.pointeeType = pointeeType; this.sharingPolicy = sharingPolicy; this.rawGetPointee = rawGetPointee; this.rawConstructor = rawConstructor; this.rawShare = rawShare; this.rawDestructor = rawDestructor; if (!isSmartPointer && registeredClass.baseClass === undefined) { if (isConst) { this["toWireType"] = constNoSmartPtrRawPointerToWireType; this.destructorFunction = null } else { this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType; this.destructorFunction = null } } else { this["toWireType"] = genericPointerToWireType } } function replacePublicSymbol(name, value, numArguments) { if (!Module.hasOwnProperty(name)) { throwInternalError("Replacing nonexistant public symbol") } if (undefined !== Module[name].overloadTable && undefined !== numArguments) { Module[name].overloadTable[numArguments] = value } else { Module[name] = value; Module[name].argCount = numArguments } } function embind__requireFunction(signature, rawFunction) { signature = readLatin1String(signature); function makeDynCaller(dynCall) { if (IsWechat) { var f1 = function (dynCall, rawFunction) { return function () { return dynCall(rawFunction, ...arguments); } } return f1(dynCall, rawFunction) } else { var args = []; for (var i = 1; i < signature.length; ++i) { args.push("a" + i) } var name = "dynCall_" + signature + "_" + rawFunction; var body = "return function " + name + "(" + args.join(", ") + ") {\n"; body += " return dynCall(rawFunction" + (args.length ? ", " : "") + args.join(", ") + ");\n"; body += "};\n"; return new Function("dynCall", "rawFunction", body)(dynCall, rawFunction) } } var fp; if (Module["FUNCTION_TABLE_" + signature] !== undefined) { fp = Module["FUNCTION_TABLE_" + signature][rawFunction] } else if (typeof FUNCTION_TABLE !== "undefined") { fp = FUNCTION_TABLE[rawFunction] } else { var dc = Module["dynCall_" + signature]; if (dc === undefined) { dc = Module["dynCall_" + signature.replace(/f/g, "d")]; if (dc === undefined) { throwBindingError("No dynCall invoker for signature: " + signature) } } fp = makeDynCaller(dc) } if (typeof fp !== "function") { throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction) } return fp } var UnboundTypeError = undefined; function getTypeName(type) { var ptr = ___getTypeName(type); var rv = readLatin1String(ptr); _free(ptr); return rv } function throwUnboundTypeError(message, types) { var unboundTypes = []; var seen = {}; function visit(type) { if (seen[type]) { return } if (registeredTypes[type]) { return } if (typeDependencies[type]) { typeDependencies[type].forEach(visit); return } unboundTypes.push(type); seen[type] = true } types.forEach(visit); throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "])) } function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) { name = readLatin1String(name); getActualType = embind__requireFunction(getActualTypeSignature, getActualType); if (upcast) { upcast = embind__requireFunction(upcastSignature, upcast) } if (downcast) { downcast = embind__requireFunction(downcastSignature, downcast) } rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); var legalFunctionName = makeLegalFunctionName(name); exposePublicSymbol(legalFunctionName, function () { throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType]) }); whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) { base = base[0]; var baseClass; var basePrototype; if (baseClassRawType) { baseClass = base.registeredClass; basePrototype = baseClass.instancePrototype } else { basePrototype = ClassHandle.prototype } var constructor = createNamedFunction(legalFunctionName, function () { if (Object.getPrototypeOf(this) !== instancePrototype) { throw new BindingError("Use 'new' to construct " + name) } if (undefined === registeredClass.constructor_body) { throw new BindingError(name + " has no accessible constructor") } var body = registeredClass.constructor_body[arguments.length]; if (undefined === body) { throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!") } return body.apply(this, arguments) }); var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor } }); constructor.prototype = instancePrototype; var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false); var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false); registeredPointers[rawType] = { pointerType: pointerConverter, constPointerType: constPointerConverter }; replacePublicSymbol(legalFunctionName, constructor); return [referenceConverter, pointerConverter, constPointerConverter] }) } function new_(constructor, argumentList) { if (!(constructor instanceof Function)) { throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function") } var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function () { }); dummy.prototype = constructor.prototype; var obj = new dummy; var r = constructor.apply(obj, argumentList); return r instanceof Object ? r : obj } function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { var argCount = argTypes.length; if (argCount < 2) { throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!") } var isClassMethodFunc = argTypes[1] !== null && classType !== null; var needsDestructorStack = false; for (var i = 1; i < argTypes.length; ++i) { if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { needsDestructorStack = true; break } } var returns = argTypes[0].name !== "void"; if (IsWechat) { var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; for (var i = 0; i < argCount - 2; ++i) { args2.push(argTypes[i + 2]) } if (isClassMethodFunc) { for (var i = 1; i < argCount; ++i) { if (argTypes[i].destructorFunction !== null) { args2.push(argTypes[i].destructorFunction) }else{ args2.push(null) } } } else { for (var i = 2; i < argCount; ++i) { if (argTypes[i].destructorFunction !== null) { args2.push(argTypes[i].destructorFunction) }else{ args2.push(null) } } } function f1(throwBindingError, invoker, fn, runDestructors, retType, classParam) { // arguments = [argType0,argType1,argType2,arg0Wired_dtor] // argType0,argType1,argType2 const argsTypeOrigin = Array.prototype.slice.call(arguments, 6, 6 + argCount - 2) // arg0Wired_dtor const argsWired_dtorOrigin = Array.prototype.slice.call(arguments, 6 + argCount - 2) return function () { // arguments = [arg0, arg1, arg2] if (arguments.length !== argCount - 2) { throwBindingError('function ' + humanName + ' called with ' + arguments.length + ' arguments, expected 0 args!'); } var thisWired; var destructors; if (needsDestructorStack) { destructors = []; } if (isClassMethodFunc) { if (needsDestructorStack) { thisWired = classParam.toWireType(destructors, this); } else { thisWired = classParam.toWireType(null, this); } } // arg0Wired,arg1Wired,arg2Wired var argsWired = []; for (var i = 0; i < argCount - 2; ++i) { if (needsDestructorStack) { argsWired.push(argsTypeOrigin[i].toWireType(destructors, arguments[i])) } else { argsWired.push(argsTypeOrigin[i].toWireType(null, arguments[i])) } } var rv; if (isClassMethodFunc) { rv = invoker(fn, thisWired, ...argsWired); } else { rv = invoker(fn, ...argsWired); } if (needsDestructorStack) { runDestructors(destructors); } else { if (isClassMethodFunc) { for (var i = 1; i < argTypes.length; ++i) { if (argTypes[i].destructorFunction !== null) { if (i == 1) { argsWired_dtorOrigin[i - 1](thisWired); } else { argsWired_dtorOrigin[i - 1](argsWired[i - 1]); } } } } else { for (var i = 2; i < argTypes.length; ++i) { if (argTypes[i].destructorFunction !== null) { argsWired_dtorOrigin[i - 2](argsWired[i - 2]); } } } } if (returns) { var ret = retType.fromWireType(rv); return ret; } } } return f1.apply(null, args2) } else { var argsList = ""; var argsListWired = ""; for (var i = 0; i < argCount - 2; ++i) { argsList += (i !== 0 ? ", " : "") + "arg" + i; argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired" } var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\n" + "if (arguments.length !== " + (argCount - 2) + ") {\n" + "throwBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n" + "}\n"; if (needsDestructorStack) { invokerFnBody += "var destructors = [];\n" } var dtorStack = needsDestructorStack ? "destructors" : "null"; var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; if (isClassMethodFunc) { invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n" } for (var i = 0; i < argCount - 2; ++i) { invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n"; args1.push("argType" + i); args2.push(argTypes[i + 2]) } if (isClassMethodFunc) { argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired } invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n"; if (needsDestructorStack) { invokerFnBody += "runDestructors(destructors);\n" } else { for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) { var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired"; if (argTypes[i].destructorFunction !== null) { invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n"; args1.push(paramName + "_dtor"); args2.push(argTypes[i].destructorFunction) } } } if (returns) { invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n" } else { } invokerFnBody += "}\n"; args1.push(invokerFnBody); var invokerFunction = new_(Function, args1).apply(null, args2); return invokerFunction } } function heap32VectorToArray(count, firstElement) { var array = []; for (var i = 0; i < count; i++) { array.push(HEAP32[(firstElement >> 2) + i]) } return array } function __embind_register_class_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, fn) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); methodName = readLatin1String(methodName); rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); whenDependentTypesAreResolved([], [rawClassType], function (classType) { classType = classType[0]; var humanName = classType.name + "." + methodName; function unboundTypesHandler() { throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) } var proto = classType.registeredClass.constructor; if (undefined === proto[methodName]) { unboundTypesHandler.argCount = argCount - 1; proto[methodName] = unboundTypesHandler } else { ensureOverloadTable(proto, methodName, humanName); proto[methodName].overloadTable[argCount - 1] = unboundTypesHandler } whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); var func = craftInvokerFunction(humanName, invokerArgsArray, null, rawInvoker, fn); if (undefined === proto[methodName].overloadTable) { func.argCount = argCount - 1; proto[methodName] = func } else { proto[methodName].overloadTable[argCount - 1] = func } return [] }); return [] }) } function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); invoker = embind__requireFunction(invokerSignature, invoker); whenDependentTypesAreResolved([], [rawClassType], function (classType) { classType = classType[0]; var humanName = "constructor " + classType.name; if (undefined === classType.registeredClass.constructor_body) { classType.registeredClass.constructor_body = [] } if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!") } classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() { throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes) } ; whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() { if (arguments.length !== argCount - 1) { throwBindingError(humanName + " called with " + arguments.length + " arguments, expected " + (argCount - 1)) } var destructors = []; var args = new Array(argCount); args[0] = rawConstructor; for (var i = 1; i < argCount; ++i) { args[i] = argTypes[i]["toWireType"](destructors, arguments[i - 1]) } var ptr = invoker.apply(null, args); runDestructors(destructors); return argTypes[0]["fromWireType"](ptr) } ; return [] }); return [] }) } function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); methodName = readLatin1String(methodName); rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); whenDependentTypesAreResolved([], [rawClassType], function (classType) { classType = classType[0]; var humanName = classType.name + "." + methodName; if (isPureVirtual) { classType.registeredClass.pureVirtualFunctions.push(methodName) } function unboundTypesHandler() { throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) } var proto = classType.registeredClass.instancePrototype; var method = proto[methodName]; if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { unboundTypesHandler.argCount = argCount - 2; unboundTypesHandler.className = classType.name; proto[methodName] = unboundTypesHandler } else { ensureOverloadTable(proto, methodName, humanName); proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler } whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); if (undefined === proto[methodName].overloadTable) { memberFunction.argCount = argCount - 2; proto[methodName] = memberFunction } else { proto[methodName].overloadTable[argCount - 2] = memberFunction } return [] }); return [] }) } function validateThis(this_, classType, humanName) { if (!(this_ instanceof Object)) { throwBindingError(humanName + ' with invalid "this": ' + this_) } if (!(this_ instanceof classType.registeredClass.constructor)) { throwBindingError(humanName + ' incompatible with "this" of type ' + this_.constructor.name) } if (!this_.$$.ptr) { throwBindingError("cannot call emscripten binding method " + humanName + " on deleted object") } return upcastPointer(this_.$$.ptr, this_.$$.ptrType.registeredClass, classType.registeredClass) } function __embind_register_class_property(classType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { fieldName = readLatin1String(fieldName); getter = embind__requireFunction(getterSignature, getter); whenDependentTypesAreResolved([], [classType], function (classType) { classType = classType[0]; var humanName = classType.name + "." + fieldName; var desc = { get: function () { throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) }, enumerable: true, configurable: true }; if (setter) { desc.set = function () { throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) } } else { desc.set = function (v) { throwBindingError(humanName + " is a read-only property") } } Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); whenDependentTypesAreResolved([], setter ? [getterReturnType, setterArgumentType] : [getterReturnType], function (types) { var getterReturnType = types[0]; var desc = { get: function () { var ptr = validateThis(this, classType, humanName + " getter"); return getterReturnType["fromWireType"](getter(getterContext, ptr)) }, enumerable: true }; if (setter) { setter = embind__requireFunction(setterSignature, setter); var setterArgumentType = types[1]; desc.set = function (v) { var ptr = validateThis(this, classType, humanName + " setter"); var destructors = []; setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, v)); runDestructors(destructors) } } Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); return [] }); return [] }) } function __embind_register_constant(name, type, value) { name = readLatin1String(name); whenDependentTypesAreResolved([], [type], function (type) { type = type[0]; Module[name] = type["fromWireType"](value); return [] }) } var emval_free_list = []; var emval_handle_array = [{}, { value: undefined }, { value: null }, { value: true }, { value: false }]; function __emval_decref(handle) { if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { emval_handle_array[handle] = undefined; emval_free_list.push(handle) } } function count_emval_handles() { var count = 0; for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { ++count } } return count } function get_first_emval() { for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { return emval_handle_array[i] } } return null } function init_emval() { Module["count_emval_handles"] = count_emval_handles; Module["get_first_emval"] = get_first_emval } function __emval_register(value) { switch (value) { case undefined: { return 1 } case null: { return 2 } case true: { return 3 } case false: { return 4 } default: { var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; emval_handle_array[handle] = { refcount: 1, value: value }; return handle } } } function __embind_register_emval(rawType, name) { name = readLatin1String(name); registerType(rawType, { name: name, "fromWireType": function (handle) { var rv = emval_handle_array[handle].value; __emval_decref(handle); return rv }, "toWireType": function (destructors, value) { return __emval_register(value) }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: null }) } function _embind_repr(v) { if (v === null) { return "null" } var t = typeof v; if (t === "object" || t === "array" || t === "function") { return v.toString() } else { return "" + v } } function floatReadValueFromPointer(name, shift) { switch (shift) { case 2: return function (pointer) { return this["fromWireType"](HEAPF32[pointer >> 2]) } ; case 3: return function (pointer) { return this["fromWireType"](HEAPF64[pointer >> 3]) } ; default: throw new TypeError("Unknown float type: " + name) } } function __embind_register_float(rawType, name, size) { var shift = getShiftFromSize(size); name = readLatin1String(name); registerType(rawType, { name: name, "fromWireType": function (value) { return value }, "toWireType": function (destructors, value) { if (typeof value !== "number" && typeof value !== "boolean") { throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name) } return value }, "argPackAdvance": 8, "readValueFromPointer": floatReadValueFromPointer(name, shift), destructorFunction: null }) } function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn) { var argTypes = heap32VectorToArray(argCount, rawArgTypesAddr); name = readLatin1String(name); rawInvoker = embind__requireFunction(signature, rawInvoker); exposePublicSymbol(name, function () { throwUnboundTypeError("Cannot call " + name + " due to unbound types", argTypes) }, argCount - 1); whenDependentTypesAreResolved([], argTypes, function (argTypes) { var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn), argCount - 1); return [] }) } function integerReadValueFromPointer(name, shift, signed) { switch (shift) { case 0: return signed ? function readS8FromPointer(pointer) { return HEAP8[pointer] } : function readU8FromPointer(pointer) { return HEAPU8[pointer] } ; case 1: return signed ? function readS16FromPointer(pointer) { return HEAP16[pointer >> 1] } : function readU16FromPointer(pointer) { return HEAPU16[pointer >> 1] } ; case 2: return signed ? function readS32FromPointer(pointer) { return HEAP32[pointer >> 2] } : function readU32FromPointer(pointer) { return HEAPU32[pointer >> 2] } ; default: throw new TypeError("Unknown integer type: " + name) } } function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { name = readLatin1String(name); if (maxRange === -1) { maxRange = 4294967295 } var shift = getShiftFromSize(size); var fromWireType = function (value) { return value }; if (minRange === 0) { var bitshift = 32 - 8 * size; fromWireType = function (value) { return value << bitshift >>> bitshift } } var isUnsignedType = name.indexOf("unsigned") != -1; registerType(primitiveType, { name: name, "fromWireType": fromWireType, "toWireType": function (destructors, value) { if (typeof value !== "number" && typeof value !== "boolean") { throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name) } if (value < minRange || value > maxRange) { throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ", " + maxRange + "]!") } return isUnsignedType ? value >>> 0 : value | 0 }, "argPackAdvance": 8, "readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0), destructorFunction: null }) } function __embind_register_memory_view(rawType, dataTypeIndex, name) { var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; var TA = typeMapping[dataTypeIndex]; function decodeMemoryView(handle) { handle = handle >> 2; var heap = HEAPU32; var size = heap[handle]; var data = heap[handle + 1]; return new TA(heap["buffer"], data, size) } name = readLatin1String(name); registerType(rawType, { name: name, "fromWireType": decodeMemoryView, "argPackAdvance": 8, "readValueFromPointer": decodeMemoryView }, { ignoreDuplicateRegistrations: true }) } function __embind_register_smart_ptr(rawType, rawPointeeType, name, sharingPolicy, getPointeeSignature, rawGetPointee, constructorSignature, rawConstructor, shareSignature, rawShare, destructorSignature, rawDestructor) { name = readLatin1String(name); rawGetPointee = embind__requireFunction(getPointeeSignature, rawGetPointee); rawConstructor = embind__requireFunction(constructorSignature, rawConstructor); rawShare = embind__requireFunction(shareSignature, rawShare); rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); whenDependentTypesAreResolved([rawType], [rawPointeeType], function (pointeeType) { pointeeType = pointeeType[0]; var registeredPointer = new RegisteredPointer(name, pointeeType.registeredClass, false, false, true, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor); return [registeredPointer] }) } function __embind_register_std_string(rawType, name) { name = readLatin1String(name); var stdStringIsUTF8 = name === "std::string"; registerType(rawType, { name: name, "fromWireType": function (value) { var length = HEAPU32[value >> 2]; var str; if (stdStringIsUTF8) { var endChar = HEAPU8[value + 4 + length]; var endCharSwap = 0; if (endChar != 0) { endCharSwap = endChar; HEAPU8[value + 4 + length] = 0 } var decodeStartPtr = value + 4; for (var i = 0; i <= length; ++i) { var currentBytePtr = value + 4 + i; if (HEAPU8[currentBytePtr] == 0) { var stringSegment = UTF8ToString(decodeStartPtr); if (str === undefined) str = stringSegment; else { str += String.fromCharCode(0); str += stringSegment } decodeStartPtr = currentBytePtr + 1 } } if (endCharSwap != 0) HEAPU8[value + 4 + length] = endCharSwap } else { var a = new Array(length); for (var i = 0; i < length; ++i) { a[i] = String.fromCharCode(HEAPU8[value + 4 + i]) } str = a.join("") } _free(value); return str }, "toWireType": function (destructors, value) { if (value instanceof ArrayBuffer) { value = new Uint8Array(value) } var getLength; var valueIsOfTypeString = typeof value === "string"; if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { throwBindingError("Cannot pass non-string to std::string") } if (stdStringIsUTF8 && valueIsOfTypeString) { getLength = function () { return lengthBytesUTF8(value) } } else { getLength = function () { return value.length } } var length = getLength(); var ptr = _malloc(4 + length + 1); HEAPU32[ptr >> 2] = length; if (stdStringIsUTF8 && valueIsOfTypeString) { stringToUTF8(value, ptr + 4, length + 1) } else { if (valueIsOfTypeString) { for (var i = 0; i < length; ++i) { var charCode = value.charCodeAt(i); if (charCode > 255) { _free(ptr); throwBindingError("String has UTF-16 code units that do not fit in 8 bits") } HEAPU8[ptr + 4 + i] = charCode } } else { for (var i = 0; i < length; ++i) { HEAPU8[ptr + 4 + i] = value[i] } } } if (destructors !== null) { destructors.push(_free, ptr) } return ptr }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: function (ptr) { _free(ptr) } }) } function __embind_register_std_wstring(rawType, charSize, name) { name = readLatin1String(name); var getHeap, shift; if (charSize === 2) { getHeap = function () { return HEAPU16 } ; shift = 1 } else if (charSize === 4) { getHeap = function () { return HEAPU32 } ; shift = 2 } registerType(rawType, { name: name, "fromWireType": function (value) { var HEAP = getHeap(); var length = HEAPU32[value >> 2]; var a = new Array(length); var start = value + 4 >> shift; for (var i = 0; i < length; ++i) { a[i] = String.fromCharCode(HEAP[start + i]) } _free(value); return a.join("") }, "toWireType": function (destructors, value) { var length = value.length; var ptr = _malloc(4 + length * charSize); var HEAP = getHeap(); HEAPU32[ptr >> 2] = length; var start = ptr + 4 >> shift; for (var i = 0; i < length; ++i) { HEAP[start + i] = value.charCodeAt(i) } if (destructors !== null) { destructors.push(_free, ptr) } return ptr }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: function (ptr) { _free(ptr) } }) } function __embind_register_value_array(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { tupleRegistrations[rawType] = { name: readLatin1String(name), rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), elements: [] } } function __embind_register_value_array_element(rawTupleType, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { tupleRegistrations[rawTupleType].elements.push({ getterReturnType: getterReturnType, getter: embind__requireFunction(getterSignature, getter), getterContext: getterContext, setterArgumentType: setterArgumentType, setter: embind__requireFunction(setterSignature, setter), setterContext: setterContext }) } function __embind_register_value_object(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { structRegistrations[rawType] = { name: readLatin1String(name), rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), fields: [] } } function __embind_register_value_object_field(structType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { structRegistrations[structType].fields.push({ fieldName: readLatin1String(fieldName), getterReturnType: getterReturnType, getter: embind__requireFunction(getterSignature, getter), getterContext: getterContext, setterArgumentType: setterArgumentType, setter: embind__requireFunction(setterSignature, setter), setterContext: setterContext }) } function __embind_register_void(rawType, name) { name = readLatin1String(name); registerType(rawType, { isVoid: true, name: name, "argPackAdvance": 0, "fromWireType": function () { return undefined }, "toWireType": function (destructors, o) { return undefined } }) } function requireHandle(handle) { if (!handle) { throwBindingError("Cannot use deleted val. handle = " + handle) } return emval_handle_array[handle].value } function requireRegisteredType(rawType, humanName) { var impl = registeredTypes[rawType]; if (undefined === impl) { throwBindingError(humanName + " has unknown type " + getTypeName(rawType)) } return impl } function __emval_as(handle, returnType, destructorsRef) { handle = requireHandle(handle); returnType = requireRegisteredType(returnType, "emval::as"); var destructors = []; var rd = __emval_register(destructors); HEAP32[destructorsRef >> 2] = rd; return returnType["toWireType"](destructors, handle) } var emval_symbols = {}; function getStringOrSymbol(address) { var symbol = emval_symbols[address]; if (symbol === undefined) { return readLatin1String(address) } else { return symbol } } var emval_methodCallers = []; function __emval_call_void_method(caller, handle, methodName, args) { caller = emval_methodCallers[caller]; handle = requireHandle(handle); methodName = getStringOrSymbol(methodName); caller(handle, methodName, null, args) } function __emval_addMethodCaller(caller) { var id = emval_methodCallers.length; emval_methodCallers.push(caller); return id } function __emval_lookupTypes(argCount, argTypes, argWireTypes) { var a = new Array(argCount); for (var i = 0; i < argCount; ++i) { a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], "parameter " + i) } return a } function __emval_get_method_caller(argCount, argTypes) { var types = __emval_lookupTypes(argCount, argTypes); var retType = types[0]; var signatureName = retType.name + "_$" + types.slice(1).map(function (t) { return t.name }).join("_") + "$"; var params = ["retType"]; var args = [retType]; var argsList = ""; for (var i = 0; i < argCount - 1; ++i) { argsList += (i !== 0 ? ", " : "") + "arg" + i; params.push("argType" + i); args.push(types[1 + i]) } var functionName = makeLegalFunctionName("methodCaller_" + signatureName); var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n"; var offset = 0; for (var i = 0; i < argCount - 1; ++i) { functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n"; offset += types[i + 1]["argPackAdvance"] } functionBody += " var rv = handle[name](" + argsList + ");\n"; for (var i = 0; i < argCount - 1; ++i) { if (types[i + 1]["deleteObject"]) { functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n" } } if (!retType.isVoid) { functionBody += " return retType.toWireType(destructors, rv);\n" } functionBody += "};\n"; params.push(functionBody); var invokerFunction = new_(Function, params).apply(null, args); return __emval_addMethodCaller(invokerFunction) } function __emval_get_property(handle, key) { handle = requireHandle(handle); key = requireHandle(key); return __emval_register(handle[key]) } function __emval_incref(handle) { if (handle > 4) { emval_handle_array[handle].refcount += 1 } } function __emval_new_array() { return __emval_register([]) } function __emval_new_cstring(v) { return __emval_register(getStringOrSymbol(v)) } function __emval_run_destructors(handle) { var destructors = emval_handle_array[handle].value; runDestructors(destructors); __emval_decref(handle) } function __emval_set_property(handle, key, value) { handle = requireHandle(handle); key = requireHandle(key); value = requireHandle(value); handle[key] = value } function __emval_take_value(type, argv) { type = requireRegisteredType(type, "_emval_take_value"); var v = type["readValueFromPointer"](argv); return __emval_register(v) } function _abort() { abort() } function _emscripten_get_now_is_monotonic() { return 0 || ENVIRONMENT_IS_NODE || typeof dateNow !== "undefined" || typeof performance === "object" && performance && typeof performance["now"] === "function" } function _clock_gettime(clk_id, tp) { var now; if (clk_id === 0) { now = Date.now() } else if (clk_id === 1 && _emscripten_get_now_is_monotonic()) { now = _emscripten_get_now() } else { ___setErrNo(28); return -1 } HEAP32[tp >> 2] = now / 1e3 | 0; HEAP32[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0; return 0 } function _emscripten_get_heap_size() { return HEAP8.length } function _emscripten_get_sbrk_ptr() { return 1275456 } function _emscripten_memcpy_big(dest, src, num) { HEAPU8.set(HEAPU8.subarray(src, src + num), dest) } function emscripten_realloc_buffer(size) { try { wasmMemory.grow(size - buffer.byteLength + 65535 >> 16); updateGlobalBufferAndViews(wasmMemory.buffer); return 1 } catch (e) { } } function _emscripten_resize_heap(requestedSize) { var oldSize = _emscripten_get_heap_size(); var PAGE_MULTIPLE = 65536; var LIMIT = 2147483648 - PAGE_MULTIPLE; if (requestedSize > LIMIT) { return false } var MIN_TOTAL_MEMORY = 16777216; var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); while (newSize < requestedSize) { if (newSize <= 536870912) { newSize = alignUp(2 * newSize, PAGE_MULTIPLE) } else { newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT) } } newSize = Math.min(newSize, 1073741824); if (newSize == oldSize) { return false } var replacement = emscripten_realloc_buffer(newSize); if (!replacement) { return false } return true } var ENV = {}; function _emscripten_get_environ() { if (!_emscripten_get_environ.strings) { var env = { "USER": "web_user", "LOGNAME": "web_user", "PATH": "/", "PWD": "/", "HOME": "/home/web_user", "LANG": (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", "_": thisProgram }; for (var x in ENV) { env[x] = ENV[x] } var strings = []; for (var x in env) { strings.push(x + "=" + env[x]) } _emscripten_get_environ.strings = strings } return _emscripten_get_environ.strings } function _environ_get(__environ, environ_buf) { var strings = _emscripten_get_environ(); var bufSize = 0; strings.forEach(function (string, i) { var ptr = environ_buf + bufSize; HEAP32[__environ + i * 4 >> 2] = ptr; writeAsciiToMemory(string, ptr); bufSize += string.length + 1 }); return 0 } function _environ_sizes_get(penviron_count, penviron_buf_size) { var strings = _emscripten_get_environ(); HEAP32[penviron_count >> 2] = strings.length; var bufSize = 0; strings.forEach(function (string) { bufSize += string.length + 1 }); HEAP32[penviron_buf_size >> 2] = bufSize; return 0 } function _fd_close(fd) { try { var stream = SYSCALLS.getStreamFromFD(fd); FS.close(stream); return 0 } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return e.errno } } function _fd_read(fd, iov, iovcnt, pnum) { try { var stream = SYSCALLS.getStreamFromFD(fd); var num = SYSCALLS.doReadv(stream, iov, iovcnt); HEAP32[pnum >> 2] = num; return 0 } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return e.errno } } function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { try { var stream = SYSCALLS.getStreamFromFD(fd); var HIGH_OFFSET = 4294967296; var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); var DOUBLE_LIMIT = 9007199254740992; if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { return -61 } FS.llseek(stream, offset, whence); tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; return 0 } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return e.errno } } function _fd_write(fd, iov, iovcnt, pnum) { try { var stream = SYSCALLS.getStreamFromFD(fd); var num = SYSCALLS.doWritev(stream, iov, iovcnt); HEAP32[pnum >> 2] = num; return 0 } catch (e) { if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); return e.errno } } function _pthread_mutexattr_destroy() { } function _pthread_mutexattr_init() { } function _pthread_mutexattr_settype() { } function _roundf(d) { d = +d; return d >= +0 ? +Math_floor(d + +.5) : +Math_ceil(d - +.5) } function _sched_yield() { return 0 } function _setTempRet0($i) { setTempRet0($i | 0) } function __isLeapYear(year) { return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) } function __arraySum(array, index) { var sum = 0; for (var i = 0; i <= index; sum += array[i++]) ; return sum } var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function __addDays(date, days) { var newDate = new Date(date.getTime()); while (days > 0) { var leap = __isLeapYear(newDate.getFullYear()); var currentMonth = newDate.getMonth(); var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; if (days > daysInCurrentMonth - newDate.getDate()) { days -= daysInCurrentMonth - newDate.getDate() + 1; newDate.setDate(1); if (currentMonth < 11) { newDate.setMonth(currentMonth + 1) } else { newDate.setMonth(0); newDate.setFullYear(newDate.getFullYear() + 1) } } else { newDate.setDate(newDate.getDate() + days); return newDate } } return newDate } function _strftime(s, maxsize, format, tm) { var tm_zone = HEAP32[tm + 40 >> 2]; var date = { tm_sec: HEAP32[tm >> 2], tm_min: HEAP32[tm + 4 >> 2], tm_hour: HEAP32[tm + 8 >> 2], tm_mday: HEAP32[tm + 12 >> 2], tm_mon: HEAP32[tm + 16 >> 2], tm_year: HEAP32[tm + 20 >> 2], tm_wday: HEAP32[tm + 24 >> 2], tm_yday: HEAP32[tm + 28 >> 2], tm_isdst: HEAP32[tm + 32 >> 2], tm_gmtoff: HEAP32[tm + 36 >> 2], tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" }; var pattern = UTF8ToString(format); var EXPANSION_RULES_1 = { "%c": "%a %b %d %H:%M:%S %Y", "%D": "%m/%d/%y", "%F": "%Y-%m-%d", "%h": "%b", "%r": "%I:%M:%S %p", "%R": "%H:%M", "%T": "%H:%M:%S", "%x": "%m/%d/%y", "%X": "%H:%M:%S", "%Ec": "%c", "%EC": "%C", "%Ex": "%m/%d/%y", "%EX": "%H:%M:%S", "%Ey": "%y", "%EY": "%Y", "%Od": "%d", "%Oe": "%e", "%OH": "%H", "%OI": "%I", "%Om": "%m", "%OM": "%M", "%OS": "%S", "%Ou": "%u", "%OU": "%U", "%OV": "%V", "%Ow": "%w", "%OW": "%W", "%Oy": "%y" }; for (var rule in EXPANSION_RULES_1) { pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]) } var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; function leadingSomething(value, digits, character) { var str = typeof value === "number" ? value.toString() : value || ""; while (str.length < digits) { str = character[0] + str } return str } function leadingNulls(value, digits) { return leadingSomething(value, digits, "0") } function compareByDay(date1, date2) { function sgn(value) { return value < 0 ? -1 : value > 0 ? 1 : 0 } var compare; if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { compare = sgn(date1.getDate() - date2.getDate()) } } return compare } function getFirstWeekStartDate(janFourth) { switch (janFourth.getDay()) { case 0: return new Date(janFourth.getFullYear() - 1, 11, 29); case 1: return janFourth; case 2: return new Date(janFourth.getFullYear(), 0, 3); case 3: return new Date(janFourth.getFullYear(), 0, 2); case 4: return new Date(janFourth.getFullYear(), 0, 1); case 5: return new Date(janFourth.getFullYear() - 1, 11, 31); case 6: return new Date(janFourth.getFullYear() - 1, 11, 30) } } function getWeekBasedYear(date) { var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { return thisDate.getFullYear() + 1 } else { return thisDate.getFullYear() } } else { return thisDate.getFullYear() - 1 } } var EXPANSION_RULES_2 = { "%a": function (date) { return WEEKDAYS[date.tm_wday].substring(0, 3) }, "%A": function (date) { return WEEKDAYS[date.tm_wday] }, "%b": function (date) { return MONTHS[date.tm_mon].substring(0, 3) }, "%B": function (date) { return MONTHS[date.tm_mon] }, "%C": function (date) { var year = date.tm_year + 1900; return leadingNulls(year / 100 | 0, 2) }, "%d": function (date) { return leadingNulls(date.tm_mday, 2) }, "%e": function (date) { return leadingSomething(date.tm_mday, 2, " ") }, "%g": function (date) { return getWeekBasedYear(date).toString().substring(2) }, "%G": function (date) { return getWeekBasedYear(date) }, "%H": function (date) { return leadingNulls(date.tm_hour, 2) }, "%I": function (date) { var twelveHour = date.tm_hour; if (twelveHour == 0) twelveHour = 12; else if (twelveHour > 12) twelveHour -= 12; return leadingNulls(twelveHour, 2) }, "%j": function (date) { return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3) }, "%m": function (date) { return leadingNulls(date.tm_mon + 1, 2) }, "%M": function (date) { return leadingNulls(date.tm_min, 2) }, "%n": function () { return "\n" }, "%p": function (date) { if (date.tm_hour >= 0 && date.tm_hour < 12) { return "AM" } else { return "PM" } }, "%S": function (date) { return leadingNulls(date.tm_sec, 2) }, "%t": function () { return "\t" }, "%u": function (date) { return date.tm_wday || 7 }, "%U": function (date) { var janFirst = new Date(date.tm_year + 1900, 0, 1); var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); if (compareByDay(firstSunday, endDate) < 0) { var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); return leadingNulls(Math.ceil(days / 7), 2) } return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00" }, "%V": function (date) { var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); if (compareByDay(endDate, firstWeekStartThisYear) < 0) { return "53" } if (compareByDay(firstWeekStartNextYear, endDate) <= 0) { return "01" } var daysDifference; if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) { daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate() } else { daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate() } return leadingNulls(Math.ceil(daysDifference / 7), 2) }, "%w": function (date) { return date.tm_wday }, "%W": function (date) { var janFirst = new Date(date.tm_year, 0, 1); var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); if (compareByDay(firstMonday, endDate) < 0) { var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); return leadingNulls(Math.ceil(days / 7), 2) } return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00" }, "%y": function (date) { return (date.tm_year + 1900).toString().substring(2) }, "%Y": function (date) { return date.tm_year + 1900 }, "%z": function (date) { var off = date.tm_gmtoff; var ahead = off >= 0; off = Math.abs(off) / 60; off = off / 60 * 100 + off % 60; return (ahead ? "+" : "-") + String("0000" + off).slice(-4) }, "%Z": function (date) { return date.tm_zone }, "%%": function () { return "%" } }; for (var rule in EXPANSION_RULES_2) { if (pattern.indexOf(rule) >= 0) { pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date)) } } var bytes = intArrayFromString(pattern, false); if (bytes.length > maxsize) { return 0 } writeArrayToMemory(bytes, s); return bytes.length - 1 } function _strftime_l(s, maxsize, format, tm) { return _strftime(s, maxsize, format, tm) } function _sysconf(name) { switch (name) { case 30: return PAGE_SIZE; case 85: var maxHeapSize = 2 * 1024 * 1024 * 1024 - 65536; maxHeapSize = 1073741824; return maxHeapSize / PAGE_SIZE; case 132: case 133: case 12: case 137: case 138: case 15: case 235: case 16: case 17: case 18: case 19: case 20: case 149: case 13: case 10: case 236: case 153: case 9: case 21: case 22: case 159: case 154: case 14: case 77: case 78: case 139: case 80: case 81: case 82: case 68: case 67: case 164: case 11: case 29: case 47: case 48: case 95: case 52: case 51: case 46: return 200809; case 79: return 0; case 27: case 246: case 127: case 128: case 23: case 24: case 160: case 161: case 181: case 182: case 242: case 183: case 184: case 243: case 244: case 245: case 165: case 178: case 179: case 49: case 50: case 168: case 169: case 175: case 170: case 171: case 172: case 97: case 76: case 32: case 173: case 35: return -1; case 176: case 177: case 7: case 155: case 8: case 157: case 125: case 126: case 92: case 93: case 129: case 130: case 131: case 94: case 91: return 1; case 74: case 60: case 69: case 70: case 4: return 1024; case 31: case 42: case 72: return 32; case 87: case 26: case 33: return 2147483647; case 34: case 1: return 47839; case 38: case 36: return 99; case 43: case 37: return 2048; case 0: return 2097152; case 3: return 65536; case 28: return 32768; case 44: return 32767; case 75: return 16384; case 39: return 1e3; case 89: return 700; case 71: return 256; case 40: return 255; case 2: return 100; case 180: return 64; case 25: return 20; case 5: return 16; case 6: return 6; case 73: return 4; case 84: { if (typeof navigator === "object") return navigator["hardwareConcurrency"] || 1; return 1 } } ___setErrNo(28); return -1 } Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) { err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead."); Module["requestFullScreen"] = Module["requestFullscreen"]; Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice) } ; Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas, vrDevice) { Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) } ; Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) } ; Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) } ; Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() } ; Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() } ; Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() } ; Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) } ; if (ENVIRONMENT_IS_NODE) { _emscripten_get_now = function _emscripten_get_now_actual() { var t = process["hrtime"](); return t[0] * 1e3 + t[1] / 1e6 } } else if (typeof dateNow !== "undefined") { _emscripten_get_now = dateNow } else if (typeof performance === "object" && performance && typeof performance["now"] === "function") { _emscripten_get_now = function () { return performance["now"]() } } else { _emscripten_get_now = Date.now } FS.staticInit(); Module["FS_createFolder"] = FS.createFolder; Module["FS_createPath"] = FS.createPath; Module["FS_createDataFile"] = FS.createDataFile; Module["FS_createPreloadedFile"] = FS.createPreloadedFile; Module["FS_createLazyFile"] = FS.createLazyFile; Module["FS_createLink"] = FS.createLink; Module["FS_createDevice"] = FS.createDevice; Module["FS_unlink"] = FS.unlink; if (ENVIRONMENT_HAS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit() } InternalError = Module["InternalError"] = extendError(Error, "InternalError"); embind_init_charCodes(); BindingError = Module["BindingError"] = extendError(Error, "BindingError"); init_ClassHandle(); init_RegisteredPointer(); init_embind(); UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError"); init_emval(); var ASSERTIONS = false; 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 } function intArrayToString(array) { var ret = []; for (var i = 0; i < array.length; i++) { var chr = array[i]; if (chr > 255) { if (ASSERTIONS) { assert(false, "Character code " + chr + " (" + String.fromCharCode(chr) + ") at offset " + i + " not in 0x00-0xFF.") } chr &= 255 } ret.push(String.fromCharCode(chr)) } return ret.join("") } var decodeBase64 = typeof atob === "function" ? atob : function (input) { var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = enc1 << 2 | enc2 >> 4; chr2 = (enc2 & 15) << 4 | enc3 >> 2; chr3 = (enc3 & 3) << 6 | enc4; output = output + String.fromCharCode(chr1); if (enc3 !== 64) { output = output + String.fromCharCode(chr2) } if (enc4 !== 64) { output = output + String.fromCharCode(chr3) } } while (i < input.length); return output } ; function intArrayFromBase64(s) { if (typeof ENVIRONMENT_IS_NODE === "boolean" && ENVIRONMENT_IS_NODE) { var buf; try { buf = Buffer.from(s, "base64") } catch (_) { buf = new Buffer(s, "base64") } return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) } try { var decoded = decodeBase64(s); var bytes = new Uint8Array(decoded.length); for (var i = 0; i < decoded.length; ++i) { bytes[i] = decoded.charCodeAt(i) } return bytes } catch (_) { throw new Error("Converting base64 string to bytes failed.") } } function tryParseAsDataURI(filename) { if (!isDataURI(filename)) { return } return intArrayFromBase64(filename.slice(dataURIPrefix.length)) } var asmLibraryArg = { "__cxa_allocate_exception": ___cxa_allocate_exception, "__cxa_atexit": ___cxa_atexit, "__cxa_throw": ___cxa_throw, "__lock": ___lock, "__map_file": ___map_file, "__syscall221": ___syscall221, "__syscall3": ___syscall3, "__syscall4": ___syscall4, "__syscall5": ___syscall5, "__syscall54": ___syscall54, "__syscall91": ___syscall91, "__unlock": ___unlock, "_embind_finalize_value_array": __embind_finalize_value_array, "_embind_finalize_value_object": __embind_finalize_value_object, "_embind_register_bool": __embind_register_bool, "_embind_register_class": __embind_register_class, "_embind_register_class_class_function": __embind_register_class_class_function, "_embind_register_class_constructor": __embind_register_class_constructor, "_embind_register_class_function": __embind_register_class_function, "_embind_register_class_property": __embind_register_class_property, "_embind_register_constant": __embind_register_constant, "_embind_register_emval": __embind_register_emval, "_embind_register_float": __embind_register_float, "_embind_register_function": __embind_register_function, "_embind_register_integer": __embind_register_integer, "_embind_register_memory_view": __embind_register_memory_view, "_embind_register_smart_ptr": __embind_register_smart_ptr, "_embind_register_std_string": __embind_register_std_string, "_embind_register_std_wstring": __embind_register_std_wstring, "_embind_register_value_array": __embind_register_value_array, "_embind_register_value_array_element": __embind_register_value_array_element, "_embind_register_value_object": __embind_register_value_object, "_embind_register_value_object_field": __embind_register_value_object_field, "_embind_register_void": __embind_register_void, "_emval_as": __emval_as, "_emval_call_void_method": __emval_call_void_method, "_emval_decref": __emval_decref, "_emval_get_method_caller": __emval_get_method_caller, "_emval_get_property": __emval_get_property, "_emval_incref": __emval_incref, "_emval_new_array": __emval_new_array, "_emval_new_cstring": __emval_new_cstring, "_emval_run_destructors": __emval_run_destructors, "_emval_set_property": __emval_set_property, "_emval_take_value": __emval_take_value, "abort": _abort, "clock_gettime": _clock_gettime, "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, "emscripten_memcpy_big": _emscripten_memcpy_big, "emscripten_resize_heap": _emscripten_resize_heap, "environ_get": _environ_get, "environ_sizes_get": _environ_sizes_get, "fd_close": _fd_close, "fd_read": _fd_read, "fd_seek": _fd_seek, "fd_write": _fd_write, "memory": wasmMemory, "pthread_mutexattr_destroy": _pthread_mutexattr_destroy, "pthread_mutexattr_init": _pthread_mutexattr_init, "pthread_mutexattr_settype": _pthread_mutexattr_settype, "roundf": _roundf, "sched_yield": _sched_yield, "setTempRet0": _setTempRet0, "strftime_l": _strftime_l, "sysconf": _sysconf, "table": wasmTable }; var asm = createWasm(); Module["asm"] = asm; var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function () { return Module["asm"]["__wasm_call_ctors"].apply(null, arguments) } ; var _malloc = Module["_malloc"] = function () { return Module["asm"]["malloc"].apply(null, arguments) } ; var _free = Module["_free"] = function () { return Module["asm"]["free"].apply(null, arguments) } ; var ___errno_location = Module["___errno_location"] = function () { return Module["asm"]["__errno_location"].apply(null, arguments) } ; var _setThrew = Module["_setThrew"] = function () { return Module["asm"]["setThrew"].apply(null, arguments) } ; var __ZSt18uncaught_exceptionv = Module["__ZSt18uncaught_exceptionv"] = function () { return Module["asm"]["_ZSt18uncaught_exceptionv"].apply(null, arguments) } ; var ___cxa_demangle = Module["___cxa_demangle"] = function () { return Module["asm"]["__cxa_demangle"].apply(null, arguments) } ; var ___getTypeName = Module["___getTypeName"] = function () { return Module["asm"]["__getTypeName"].apply(null, arguments) } ; var ___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = function () { return Module["asm"]["__embind_register_native_and_builtin_types"].apply(null, arguments) } ; var stackSave = Module["stackSave"] = function () { return Module["asm"]["stackSave"].apply(null, arguments) } ; var stackAlloc = Module["stackAlloc"] = function () { return Module["asm"]["stackAlloc"].apply(null, arguments) } ; var stackRestore = Module["stackRestore"] = function () { return Module["asm"]["stackRestore"].apply(null, arguments) } ; var __growWasmMemory = Module["__growWasmMemory"] = function () { return Module["asm"]["__growWasmMemory"].apply(null, arguments) } ; var dynCall_ii = Module["dynCall_ii"] = function () { return Module["asm"]["dynCall_ii"].apply(null, arguments) } ; var dynCall_vi = Module["dynCall_vi"] = function () { return Module["asm"]["dynCall_vi"].apply(null, arguments) } ; var dynCall_i = Module["dynCall_i"] = function () { return Module["asm"]["dynCall_i"].apply(null, arguments) } ; var dynCall_iii = Module["dynCall_iii"] = function () { return Module["asm"]["dynCall_iii"].apply(null, arguments) } ; var dynCall_iiii = Module["dynCall_iiii"] = function () { return Module["asm"]["dynCall_iiii"].apply(null, arguments) } ; var dynCall_iiiii = Module["dynCall_iiiii"] = function () { return Module["asm"]["dynCall_iiiii"].apply(null, arguments) } ; var dynCall_iiiiii = Module["dynCall_iiiiii"] = function () { return Module["asm"]["dynCall_iiiiii"].apply(null, arguments) } ; var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = function () { return Module["asm"]["dynCall_iiiiiii"].apply(null, arguments) } ; var dynCall_viii = Module["dynCall_viii"] = function () { return Module["asm"]["dynCall_viii"].apply(null, arguments) } ; var dynCall_viiii = Module["dynCall_viiii"] = function () { return Module["asm"]["dynCall_viiii"].apply(null, arguments) } ; var dynCall_vii = Module["dynCall_vii"] = function () { return Module["asm"]["dynCall_vii"].apply(null, arguments) } ; var dynCall_viiidd = Module["dynCall_viiidd"] = function () { return Module["asm"]["dynCall_viiidd"].apply(null, arguments) } ; var dynCall_viiiidd = Module["dynCall_viiiidd"] = function () { return Module["asm"]["dynCall_viiiidd"].apply(null, arguments) } ; var dynCall_viiid = Module["dynCall_viiid"] = function () { return Module["asm"]["dynCall_viiid"].apply(null, arguments) } ; var dynCall_viiiid = Module["dynCall_viiiid"] = function () { return Module["asm"]["dynCall_viiiid"].apply(null, arguments) } ; var dynCall_viiiii = Module["dynCall_viiiii"] = function () { return Module["asm"]["dynCall_viiiii"].apply(null, arguments) } ; var dynCall_dii = Module["dynCall_dii"] = function () { return Module["asm"]["dynCall_dii"].apply(null, arguments) } ; var dynCall_diii = Module["dynCall_diii"] = function () { return Module["asm"]["dynCall_diii"].apply(null, arguments) } ; var dynCall_iiiid = Module["dynCall_iiiid"] = function () { return Module["asm"]["dynCall_iiiid"].apply(null, arguments) } ; var dynCall_fiii = Module["dynCall_fiii"] = function () { return Module["asm"]["dynCall_fiii"].apply(null, arguments) } ; var dynCall_fiiii = Module["dynCall_fiiii"] = function () { return Module["asm"]["dynCall_fiiii"].apply(null, arguments) } ; var dynCall_fiiiii = Module["dynCall_fiiiii"] = function () { return Module["asm"]["dynCall_fiiiii"].apply(null, arguments) } ; var dynCall_diiiii = Module["dynCall_diiiii"] = function () { return Module["asm"]["dynCall_diiiii"].apply(null, arguments) } ; var dynCall_diiii = Module["dynCall_diiii"] = function () { return Module["asm"]["dynCall_diiii"].apply(null, arguments) } ; var dynCall_viid = Module["dynCall_viid"] = function () { return Module["asm"]["dynCall_viid"].apply(null, arguments) } ; var dynCall_fii = Module["dynCall_fii"] = function () { return Module["asm"]["dynCall_fii"].apply(null, arguments) } ; var dynCall_viif = Module["dynCall_viif"] = function () { return Module["asm"]["dynCall_viif"].apply(null, arguments) } ; var dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = function () { return Module["asm"]["dynCall_iiiiiiiiii"].apply(null, arguments) } ; var dynCall_iiiiiiiii = Module["dynCall_iiiiiiiii"] = function () { return Module["asm"]["dynCall_iiiiiiiii"].apply(null, arguments) } ; var dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = function () { return Module["asm"]["dynCall_iiiiiiii"].apply(null, arguments) } ; var dynCall_viiif = Module["dynCall_viiif"] = function () { return Module["asm"]["dynCall_viiif"].apply(null, arguments) } ; var dynCall_iiiif = Module["dynCall_iiiif"] = function () { return Module["asm"]["dynCall_iiiif"].apply(null, arguments) } ; var dynCall_viiiddii = Module["dynCall_viiiddii"] = function () { return Module["asm"]["dynCall_viiiddii"].apply(null, arguments) } ; var dynCall_viiddii = Module["dynCall_viiddii"] = function () { return Module["asm"]["dynCall_viiddii"].apply(null, arguments) } ; var dynCall_viiiddi = Module["dynCall_viiiddi"] = function () { return Module["asm"]["dynCall_viiiddi"].apply(null, arguments) } ; var dynCall_viiddi = Module["dynCall_viiddi"] = function () { return Module["asm"]["dynCall_viiddi"].apply(null, arguments) } ; var dynCall_viidd = Module["dynCall_viidd"] = function () { return Module["asm"]["dynCall_viidd"].apply(null, arguments) } ; var dynCall_viiiiddi = Module["dynCall_viiiiddi"] = function () { return Module["asm"]["dynCall_viiiiddi"].apply(null, arguments) } ; var dynCall_viiiiddddii = Module["dynCall_viiiiddddii"] = function () { return Module["asm"]["dynCall_viiiiddddii"].apply(null, arguments) } ; var dynCall_viiiddddii = Module["dynCall_viiiddddii"] = function () { return Module["asm"]["dynCall_viiiddddii"].apply(null, arguments) } ; var dynCall_viiiiddddi = Module["dynCall_viiiiddddi"] = function () { return Module["asm"]["dynCall_viiiiddddi"].apply(null, arguments) } ; var dynCall_viiiddddi = Module["dynCall_viiiddddi"] = function () { return Module["asm"]["dynCall_viiiddddi"].apply(null, arguments) } ; var dynCall_viiiidddd = Module["dynCall_viiiidddd"] = function () { return Module["asm"]["dynCall_viiiidddd"].apply(null, arguments) } ; var dynCall_viiidddd = Module["dynCall_viiidddd"] = function () { return Module["asm"]["dynCall_viiidddd"].apply(null, arguments) } ; var dynCall_viiiiddd = Module["dynCall_viiiiddd"] = function () { return Module["asm"]["dynCall_viiiiddd"].apply(null, arguments) } ; var dynCall_viiiddd = Module["dynCall_viiiddd"] = function () { return Module["asm"]["dynCall_viiiddd"].apply(null, arguments) } ; var dynCall_viiiddidddd = Module["dynCall_viiiddidddd"] = function () { return Module["asm"]["dynCall_viiiddidddd"].apply(null, arguments) } ; var dynCall_viiddidddd = Module["dynCall_viiddidddd"] = function () { return Module["asm"]["dynCall_viiddidddd"].apply(null, arguments) } ; var dynCall_viiiddiddd = Module["dynCall_viiiddiddd"] = function () { return Module["asm"]["dynCall_viiiddiddd"].apply(null, arguments) } ; var dynCall_viiddiddd = Module["dynCall_viiddiddd"] = function () { return Module["asm"]["dynCall_viiddiddd"].apply(null, arguments) } ; var dynCall_viiiddidd = Module["dynCall_viiiddidd"] = function () { return Module["asm"]["dynCall_viiiddidd"].apply(null, arguments) } ; var dynCall_viiddidd = Module["dynCall_viiddidd"] = function () { return Module["asm"]["dynCall_viiddidd"].apply(null, arguments) } ; var dynCall_viiiddid = Module["dynCall_viiiddid"] = function () { return Module["asm"]["dynCall_viiiddid"].apply(null, arguments) } ; var dynCall_viiddid = Module["dynCall_viiddid"] = function () { return Module["asm"]["dynCall_viiddid"].apply(null, arguments) } ; var dynCall_viiiiiddi = Module["dynCall_viiiiiddi"] = function () { return Module["asm"]["dynCall_viiiiiddi"].apply(null, arguments) } ; var dynCall_viiiiidd = Module["dynCall_viiiiidd"] = function () { return Module["asm"]["dynCall_viiiiidd"].apply(null, arguments) } ; var dynCall_viiiiid = Module["dynCall_viiiiid"] = function () { return Module["asm"]["dynCall_viiiiid"].apply(null, arguments) } ; var dynCall_viiiiiiddi = Module["dynCall_viiiiiiddi"] = function () { return Module["asm"]["dynCall_viiiiiiddi"].apply(null, arguments) } ; var dynCall_viiiiiidd = Module["dynCall_viiiiiidd"] = function () { return Module["asm"]["dynCall_viiiiiidd"].apply(null, arguments) } ; var dynCall_viiiiiid = Module["dynCall_viiiiiid"] = function () { return Module["asm"]["dynCall_viiiiiid"].apply(null, arguments) } ; var dynCall_viiiiii = Module["dynCall_viiiiii"] = function () { return Module["asm"]["dynCall_viiiiii"].apply(null, arguments) } ; var dynCall_viiiiiiiddi = Module["dynCall_viiiiiiiddi"] = function () { return Module["asm"]["dynCall_viiiiiiiddi"].apply(null, arguments) } ; var dynCall_viiiiiiidd = Module["dynCall_viiiiiiidd"] = function () { return Module["asm"]["dynCall_viiiiiiidd"].apply(null, arguments) } ; var dynCall_viiiiiiid = Module["dynCall_viiiiiiid"] = function () { return Module["asm"]["dynCall_viiiiiiid"].apply(null, arguments) } ; var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiii"].apply(null, arguments) } ; var dynCall_viiidiiid = Module["dynCall_viiidiiid"] = function () { return Module["asm"]["dynCall_viiidiiid"].apply(null, arguments) } ; var dynCall_viidiiid = Module["dynCall_viidiiid"] = function () { return Module["asm"]["dynCall_viidiiid"].apply(null, arguments) } ; var dynCall_viididdii = Module["dynCall_viididdii"] = function () { return Module["asm"]["dynCall_viididdii"].apply(null, arguments) } ; var dynCall_vididdii = Module["dynCall_vididdii"] = function () { return Module["asm"]["dynCall_vididdii"].apply(null, arguments) } ; var dynCall_viididdi = Module["dynCall_viididdi"] = function () { return Module["asm"]["dynCall_viididdi"].apply(null, arguments) } ; var dynCall_vididdi = Module["dynCall_vididdi"] = function () { return Module["asm"]["dynCall_vididdi"].apply(null, arguments) } ; var dynCall_viiidi = Module["dynCall_viiidi"] = function () { return Module["asm"]["dynCall_viiidi"].apply(null, arguments) } ; var dynCall_viidi = Module["dynCall_viidi"] = function () { return Module["asm"]["dynCall_viidi"].apply(null, arguments) } ; var dynCall_viiiiiiii = Module["dynCall_viiiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiiii"].apply(null, arguments) } ; var dynCall_viiiidiiiidi = Module["dynCall_viiiidiiiidi"] = function () { return Module["asm"]["dynCall_viiiidiiiidi"].apply(null, arguments) } ; var dynCall_viiidiiiidi = Module["dynCall_viiidiiiidi"] = function () { return Module["asm"]["dynCall_viiidiiiidi"].apply(null, arguments) } ; var dynCall_viiiiiiiiiiid = Module["dynCall_viiiiiiiiiiid"] = function () { return Module["asm"]["dynCall_viiiiiiiiiiid"].apply(null, arguments) } ; var dynCall_viiiiiiiiiid = Module["dynCall_viiiiiiiiiid"] = function () { return Module["asm"]["dynCall_viiiiiiiiiid"].apply(null, arguments) } ; var dynCall_viiiiiiiiiii = Module["dynCall_viiiiiiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiiiiiii"].apply(null, arguments) } ; var dynCall_viiiiiiiiii = Module["dynCall_viiiiiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiiiiii"].apply(null, arguments) } ; var dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiiiii"].apply(null, arguments) } ; var dynCall_diiiiiiiiiiiii = Module["dynCall_diiiiiiiiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiiiiiiiii"].apply(null, arguments) } ; var dynCall_diiiiiiiiiiii = Module["dynCall_diiiiiiiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiiiiiiii"].apply(null, arguments) } ; var dynCall_diiiiiiiiiii = Module["dynCall_diiiiiiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiiiiiii"].apply(null, arguments) } ; var dynCall_diiiiiiiiii = Module["dynCall_diiiiiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiiiiii"].apply(null, arguments) } ; var dynCall_di = Module["dynCall_di"] = function () { return Module["asm"]["dynCall_di"].apply(null, arguments) } ; var dynCall_viiiiidi = Module["dynCall_viiiiidi"] = function () { return Module["asm"]["dynCall_viiiiidi"].apply(null, arguments) } ; var dynCall_viiiidi = Module["dynCall_viiiidi"] = function () { return Module["asm"]["dynCall_viiiidi"].apply(null, arguments) } ; var dynCall_vidiii = Module["dynCall_vidiii"] = function () { return Module["asm"]["dynCall_vidiii"].apply(null, arguments) } ; var dynCall_vdiii = Module["dynCall_vdiii"] = function () { return Module["asm"]["dynCall_vdiii"].apply(null, arguments) } ; var dynCall_vidii = Module["dynCall_vidii"] = function () { return Module["asm"]["dynCall_vidii"].apply(null, arguments) } ; var dynCall_vdii = Module["dynCall_vdii"] = function () { return Module["asm"]["dynCall_vdii"].apply(null, arguments) } ; var dynCall_viiiiiifi = Module["dynCall_viiiiiifi"] = function () { return Module["asm"]["dynCall_viiiiiifi"].apply(null, arguments) } ; var dynCall_viiiiifi = Module["dynCall_viiiiifi"] = function () { return Module["asm"]["dynCall_viiiiifi"].apply(null, arguments) } ; var dynCall_viiiiiif = Module["dynCall_viiiiiif"] = function () { return Module["asm"]["dynCall_viiiiiif"].apply(null, arguments) } ; var dynCall_viiiiif = Module["dynCall_viiiiif"] = function () { return Module["asm"]["dynCall_viiiiif"].apply(null, arguments) } ; var dynCall_viiiiiiiiiiii = Module["dynCall_viiiiiiiiiiii"] = function () { return Module["asm"]["dynCall_viiiiiiiiiiii"].apply(null, arguments) } ; var dynCall_viiiidddiiii = Module["dynCall_viiiidddiiii"] = function () { return Module["asm"]["dynCall_viiiidddiiii"].apply(null, arguments) } ; var dynCall_viiidddiiii = Module["dynCall_viiidddiiii"] = function () { return Module["asm"]["dynCall_viiidddiiii"].apply(null, arguments) } ; var dynCall_viiiidddiii = Module["dynCall_viiiidddiii"] = function () { return Module["asm"]["dynCall_viiiidddiii"].apply(null, arguments) } ; var dynCall_viiidddiii = Module["dynCall_viiidddiii"] = function () { return Module["asm"]["dynCall_viiidddiii"].apply(null, arguments) } ; var dynCall_viiiidddii = Module["dynCall_viiiidddii"] = function () { return Module["asm"]["dynCall_viiiidddii"].apply(null, arguments) } ; var dynCall_viiidddii = Module["dynCall_viiidddii"] = function () { return Module["asm"]["dynCall_viiidddii"].apply(null, arguments) } ; var dynCall_viiiidddi = Module["dynCall_viiiidddi"] = function () { return Module["asm"]["dynCall_viiiidddi"].apply(null, arguments) } ; var dynCall_viiidddi = Module["dynCall_viiidddi"] = function () { return Module["asm"]["dynCall_viiidddi"].apply(null, arguments) } ; var dynCall_iiiiiididi = Module["dynCall_iiiiiididi"] = function () { return Module["asm"]["dynCall_iiiiiididi"].apply(null, arguments) } ; var dynCall_viiiiididi = Module["dynCall_viiiiididi"] = function () { return Module["asm"]["dynCall_viiiiididi"].apply(null, arguments) } ; var dynCall_iiiiiidid = Module["dynCall_iiiiiidid"] = function () { return Module["asm"]["dynCall_iiiiiidid"].apply(null, arguments) } ; var dynCall_viiiiidid = Module["dynCall_viiiiidid"] = function () { return Module["asm"]["dynCall_viiiiidid"].apply(null, arguments) } ; var dynCall_iiiiiidi = Module["dynCall_iiiiiidi"] = function () { return Module["asm"]["dynCall_iiiiiidi"].apply(null, arguments) } ; var dynCall_iiiiiid = Module["dynCall_iiiiiid"] = function () { return Module["asm"]["dynCall_iiiiiid"].apply(null, arguments) } ; var dynCall_viiiiiidi = Module["dynCall_viiiiiidi"] = function () { return Module["asm"]["dynCall_viiiiiidi"].apply(null, arguments) } ; var dynCall_iiiiidiid = Module["dynCall_iiiiidiid"] = function () { return Module["asm"]["dynCall_iiiiidiid"].apply(null, arguments) } ; var dynCall_viiiidiid = Module["dynCall_viiiidiid"] = function () { return Module["asm"]["dynCall_viiiidiid"].apply(null, arguments) } ; var dynCall_iiiiidii = Module["dynCall_iiiiidii"] = function () { return Module["asm"]["dynCall_iiiiidii"].apply(null, arguments) } ; var dynCall_viiiidii = Module["dynCall_viiiidii"] = function () { return Module["asm"]["dynCall_viiiidii"].apply(null, arguments) } ; var dynCall_iiiiidi = Module["dynCall_iiiiidi"] = function () { return Module["asm"]["dynCall_iiiiidi"].apply(null, arguments) } ; var dynCall_iiiiid = Module["dynCall_iiiiid"] = function () { return Module["asm"]["dynCall_iiiiid"].apply(null, arguments) } ; var dynCall_diiiiiiii = Module["dynCall_diiiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiiii"].apply(null, arguments) } ; var dynCall_diiiiiii = Module["dynCall_diiiiiii"] = function () { return Module["asm"]["dynCall_diiiiiii"].apply(null, arguments) } ; var dynCall_viiididii = Module["dynCall_viiididii"] = function () { return Module["asm"]["dynCall_viiididii"].apply(null, arguments) } ; var dynCall_viididii = Module["dynCall_viididii"] = function () { return Module["asm"]["dynCall_viididii"].apply(null, arguments) } ; var dynCall_viiididi = Module["dynCall_viiididi"] = function () { return Module["asm"]["dynCall_viiididi"].apply(null, arguments) } ; var dynCall_viididi = Module["dynCall_viididi"] = function () { return Module["asm"]["dynCall_viididi"].apply(null, arguments) } ; var dynCall_iiidd = Module["dynCall_iiidd"] = function () { return Module["asm"]["dynCall_iiidd"].apply(null, arguments) } ; var dynCall_viiiiddiiid = Module["dynCall_viiiiddiiid"] = function () { return Module["asm"]["dynCall_viiiiddiiid"].apply(null, arguments) } ; var dynCall_viiiddiiid = Module["dynCall_viiiddiiid"] = function () { return Module["asm"]["dynCall_viiiddiiid"].apply(null, arguments) } ; var dynCall_viiiiddiii = Module["dynCall_viiiiddiii"] = function () { return Module["asm"]["dynCall_viiiiddiii"].apply(null, arguments) } ; var dynCall_viiiddiii = Module["dynCall_viiiddiii"] = function () { return Module["asm"]["dynCall_viiiddiii"].apply(null, arguments) } ; var dynCall_viiiiddii = Module["dynCall_viiiiddii"] = function () { return Module["asm"]["dynCall_viiiiddii"].apply(null, arguments) } ; var dynCall_viiiiddiiiid = Module["dynCall_viiiiddiiiid"] = function () { return Module["asm"]["dynCall_viiiiddiiiid"].apply(null, arguments) } ; var dynCall_viiiddiiiid = Module["dynCall_viiiddiiiid"] = function () { return Module["asm"]["dynCall_viiiddiiiid"].apply(null, arguments) } ; var dynCall_viiiiddiiii = Module["dynCall_viiiiddiiii"] = function () { return Module["asm"]["dynCall_viiiiddiiii"].apply(null, arguments) } ; var dynCall_viiiddiiii = Module["dynCall_viiiddiiii"] = function () { return Module["asm"]["dynCall_viiiddiiii"].apply(null, arguments) } ; var dynCall_diiiiii = Module["dynCall_diiiiii"] = function () { return Module["asm"]["dynCall_diiiiii"].apply(null, arguments) } ; var dynCall_diiiid = Module["dynCall_diiiid"] = function () { return Module["asm"]["dynCall_diiiid"].apply(null, arguments) } ; var dynCall_diiid = Module["dynCall_diiid"] = function () { return Module["asm"]["dynCall_diiid"].apply(null, arguments) } ; var dynCall_viiddiii = Module["dynCall_viiddiii"] = function () { return Module["asm"]["dynCall_viiddiii"].apply(null, arguments) } ; var dynCall_vidi = Module["dynCall_vidi"] = function () { return Module["asm"]["dynCall_vidi"].apply(null, arguments) } ; var dynCall_viiiiiiiid = Module["dynCall_viiiiiiiid"] = function () { return Module["asm"]["dynCall_viiiiiiiid"].apply(null, arguments) } ; var dynCall_viiiiidiiii = Module["dynCall_viiiiidiiii"] = function () { return Module["asm"]["dynCall_viiiiidiiii"].apply(null, arguments) } ; var dynCall_viiiidiiii = Module["dynCall_viiiidiiii"] = function () { return Module["asm"]["dynCall_viiiidiiii"].apply(null, arguments) } ; var dynCall_viiiiidiii = Module["dynCall_viiiiidiii"] = function () { return Module["asm"]["dynCall_viiiiidiii"].apply(null, arguments) } ; var dynCall_viiiidiii = Module["dynCall_viiiidiii"] = function () { return Module["asm"]["dynCall_viiiidiii"].apply(null, arguments) } ; var dynCall_viiiiidii = Module["dynCall_viiiiidii"] = function () { return Module["asm"]["dynCall_viiiiidii"].apply(null, arguments) } ; var dynCall_viiiiiiidi = Module["dynCall_viiiiiiidi"] = function () { return Module["asm"]["dynCall_viiiiiiidi"].apply(null, arguments) } ; var dynCall_iiiiiiiiiifdii = Module["dynCall_iiiiiiiiiifdii"] = function () { return Module["asm"]["dynCall_iiiiiiiiiifdii"].apply(null, arguments) } ; var dynCall_iiiiiiiiifdii = Module["dynCall_iiiiiiiiifdii"] = function () { return Module["asm"]["dynCall_iiiiiiiiifdii"].apply(null, arguments) } ; var dynCall_iiiiiiiiiifdi = Module["dynCall_iiiiiiiiiifdi"] = function () { return Module["asm"]["dynCall_iiiiiiiiiifdi"].apply(null, arguments) } ; var dynCall_iiiiiiiiifdi = Module["dynCall_iiiiiiiiifdi"] = function () { return Module["asm"]["dynCall_iiiiiiiiifdi"].apply(null, arguments) } ; var dynCall_iiiiiiiiiifd = Module["dynCall_iiiiiiiiiifd"] = function () { return Module["asm"]["dynCall_iiiiiiiiiifd"].apply(null, arguments) } ; var dynCall_iiiiiiiiifd = Module["dynCall_iiiiiiiiifd"] = function () { return Module["asm"]["dynCall_iiiiiiiiifd"].apply(null, arguments) } ; var dynCall_iiiiiiiiiif = Module["dynCall_iiiiiiiiiif"] = function () { return Module["asm"]["dynCall_iiiiiiiiiif"].apply(null, arguments) } ; var dynCall_iiiiiiiiif = Module["dynCall_iiiiiiiiif"] = function () { return Module["asm"]["dynCall_iiiiiiiiif"].apply(null, arguments) } ; var dynCall_diiiddi = Module["dynCall_diiiddi"] = function () { return Module["asm"]["dynCall_diiiddi"].apply(null, arguments) } ; var dynCall_diiddi = Module["dynCall_diiddi"] = function () { return Module["asm"]["dynCall_diiddi"].apply(null, arguments) } ; var dynCall_iiidiiiii = Module["dynCall_iiidiiiii"] = function () { return Module["asm"]["dynCall_iiidiiiii"].apply(null, arguments) } ; var dynCall_viidiiiii = Module["dynCall_viidiiiii"] = function () { return Module["asm"]["dynCall_viidiiiii"].apply(null, arguments) } ; var dynCall_iiidiiii = Module["dynCall_iiidiiii"] = function () { return Module["asm"]["dynCall_iiidiiii"].apply(null, arguments) } ; var dynCall_viidiiii = Module["dynCall_viidiiii"] = function () { return Module["asm"]["dynCall_viidiiii"].apply(null, arguments) } ; var dynCall_iiidiii = Module["dynCall_iiidiii"] = function () { return Module["asm"]["dynCall_iiidiii"].apply(null, arguments) } ; var dynCall_viidiii = Module["dynCall_viidiii"] = function () { return Module["asm"]["dynCall_viidiii"].apply(null, arguments) } ; var dynCall_iiidii = Module["dynCall_iiidii"] = function () { return Module["asm"]["dynCall_iiidii"].apply(null, arguments) } ; var dynCall_viidii = Module["dynCall_viidii"] = function () { return Module["asm"]["dynCall_viidii"].apply(null, arguments) } ; var dynCall_iiidi = Module["dynCall_iiidi"] = function () { return Module["asm"]["dynCall_iiidi"].apply(null, arguments) } ; var dynCall_iiid = Module["dynCall_iiid"] = function () { return Module["asm"]["dynCall_iiid"].apply(null, arguments) } ; var dynCall_iiiiifiii = Module["dynCall_iiiiifiii"] = function () { return Module["asm"]["dynCall_iiiiifiii"].apply(null, arguments) } ; var dynCall_viiiifiii = Module["dynCall_viiiifiii"] = function () { return Module["asm"]["dynCall_viiiifiii"].apply(null, arguments) } ; var dynCall_iiiiifii = Module["dynCall_iiiiifii"] = function () { return Module["asm"]["dynCall_iiiiifii"].apply(null, arguments) } ; var dynCall_viiiifii = Module["dynCall_viiiifii"] = function () { return Module["asm"]["dynCall_viiiifii"].apply(null, arguments) } ; var dynCall_iiiiifi = Module["dynCall_iiiiifi"] = function () { return Module["asm"]["dynCall_iiiiifi"].apply(null, arguments) } ; var dynCall_viiiifi = Module["dynCall_viiiifi"] = function () { return Module["asm"]["dynCall_viiiifi"].apply(null, arguments) } ; var dynCall_iiiiif = Module["dynCall_iiiiif"] = function () { return Module["asm"]["dynCall_iiiiif"].apply(null, arguments) } ; var dynCall_viiiif = Module["dynCall_viiiif"] = function () { return Module["asm"]["dynCall_viiiif"].apply(null, arguments) } ; var dynCall_vid = Module["dynCall_vid"] = function () { return Module["asm"]["dynCall_vid"].apply(null, arguments) } ; var dynCall_iiiiffi = Module["dynCall_iiiiffi"] = function () { return Module["asm"]["dynCall_iiiiffi"].apply(null, arguments) } ; var dynCall_viiiffi = Module["dynCall_viiiffi"] = function () { return Module["asm"]["dynCall_viiiffi"].apply(null, arguments) } ; var dynCall_iiiiff = Module["dynCall_iiiiff"] = function () { return Module["asm"]["dynCall_iiiiff"].apply(null, arguments) } ; var dynCall_viiiff = Module["dynCall_viiiff"] = function () { return Module["asm"]["dynCall_viiiff"].apply(null, arguments) } ; var dynCall_iiiiiiffi = Module["dynCall_iiiiiiffi"] = function () { return Module["asm"]["dynCall_iiiiiiffi"].apply(null, arguments) } ; var dynCall_viiiiiffi = Module["dynCall_viiiiiffi"] = function () { return Module["asm"]["dynCall_viiiiiffi"].apply(null, arguments) } ; var dynCall_iiiiiiff = Module["dynCall_iiiiiiff"] = function () { return Module["asm"]["dynCall_iiiiiiff"].apply(null, arguments) } ; var dynCall_viiiiiff = Module["dynCall_viiiiiff"] = function () { return Module["asm"]["dynCall_viiiiiff"].apply(null, arguments) } ; var dynCall_iidi = Module["dynCall_iidi"] = function () { return Module["asm"]["dynCall_iidi"].apply(null, arguments) } ; var dynCall_iid = Module["dynCall_iid"] = function () { return Module["asm"]["dynCall_iid"].apply(null, arguments) } ; var dynCall_viiidiiii = Module["dynCall_viiidiiii"] = function () { return Module["asm"]["dynCall_viiidiiii"].apply(null, arguments) } ; var dynCall_viiidiii = Module["dynCall_viiidiii"] = function () { return Module["asm"]["dynCall_viiidiii"].apply(null, arguments) } ; var dynCall_viiidii = Module["dynCall_viiidii"] = function () { return Module["asm"]["dynCall_viiidii"].apply(null, arguments) } ; var dynCall_viiiiidiiiii = Module["dynCall_viiiiidiiiii"] = function () { return Module["asm"]["dynCall_viiiiidiiiii"].apply(null, arguments) } ; var dynCall_viiiiiidiiiii = Module["dynCall_viiiiiidiiiii"] = function () { return Module["asm"]["dynCall_viiiiiidiiiii"].apply(null, arguments) } ; var dynCall_viiiiiidiiii = Module["dynCall_viiiiiidiiii"] = function () { return Module["asm"]["dynCall_viiiiiidiiii"].apply(null, arguments) } ; var dynCall_viiiiiidiii = Module["dynCall_viiiiiidiii"] = function () { return Module["asm"]["dynCall_viiiiiidiii"].apply(null, arguments) } ; var dynCall_viiiiiidii = Module["dynCall_viiiiiidii"] = function () { return Module["asm"]["dynCall_viiiiiidii"].apply(null, arguments) } ; var dynCall_viiiiifii = Module["dynCall_viiiiifii"] = function () { return Module["asm"]["dynCall_viiiiifii"].apply(null, arguments) } ; var dynCall_viiifii = Module["dynCall_viiifii"] = function () { return Module["asm"]["dynCall_viiifii"].apply(null, arguments) } ; var dynCall_viiifi = Module["dynCall_viiifi"] = function () { return Module["asm"]["dynCall_viiifi"].apply(null, arguments) } ; var dynCall_iiiddiid = Module["dynCall_iiiddiid"] = function () { return Module["asm"]["dynCall_iiiddiid"].apply(null, arguments) } ; var dynCall_viiddiid = Module["dynCall_viiddiid"] = function () { return Module["asm"]["dynCall_viiddiid"].apply(null, arguments) } ; var dynCall_iiiddii = Module["dynCall_iiiddii"] = function () { return Module["asm"]["dynCall_iiiddii"].apply(null, arguments) } ; var dynCall_iiiddi = Module["dynCall_iiiddi"] = function () { return Module["asm"]["dynCall_iiiddi"].apply(null, arguments) } ; var dynCall_iiiddiiid = Module["dynCall_iiiddiiid"] = function () { return Module["asm"]["dynCall_iiiddiiid"].apply(null, arguments) } ; var dynCall_viiddiiid = Module["dynCall_viiddiiid"] = function () { return Module["asm"]["dynCall_viiddiiid"].apply(null, arguments) } ; var dynCall_iiiiiiiididiii = Module["dynCall_iiiiiiiididiii"] = function () { return Module["asm"]["dynCall_iiiiiiiididiii"].apply(null, arguments) } ; var dynCall_iiiiiiiiiiiii = Module["dynCall_iiiiiiiiiiiii"] = function () { return Module["asm"]["dynCall_iiiiiiiiiiiii"].apply(null, arguments) } ; var dynCall_viiiidiiddi = Module["dynCall_viiiidiiddi"] = function () { return Module["asm"]["dynCall_viiiidiiddi"].apply(null, arguments) } ; var dynCall_viiiiidiiddi = Module["dynCall_viiiiidiiddi"] = function () { return Module["asm"]["dynCall_viiiiidiiddi"].apply(null, arguments) } ; var dynCall_viiiidiidd = Module["dynCall_viiiidiidd"] = function () { return Module["asm"]["dynCall_viiiidiidd"].apply(null, arguments) } ; var dynCall_viiiiidiidd = Module["dynCall_viiiiidiidd"] = function () { return Module["asm"]["dynCall_viiiiidiidd"].apply(null, arguments) } ; var dynCall_viiiiidiid = Module["dynCall_viiiiidiid"] = function () { return Module["asm"]["dynCall_viiiiidiid"].apply(null, arguments) } ; var dynCall_iiiifiii = Module["dynCall_iiiifiii"] = function () { return Module["asm"]["dynCall_iiiifiii"].apply(null, arguments) } ; var dynCall_viiifiii = Module["dynCall_viiifiii"] = function () { return Module["asm"]["dynCall_viiifiii"].apply(null, arguments) } ; var dynCall_iiiifii = Module["dynCall_iiiifii"] = function () { return Module["asm"]["dynCall_iiiifii"].apply(null, arguments) } ; var dynCall_iiiifi = Module["dynCall_iiiifi"] = function () { return Module["asm"]["dynCall_iiiifi"].apply(null, arguments) } ; var dynCall_iiiiiddiddi = Module["dynCall_iiiiiddiddi"] = function () { return Module["asm"]["dynCall_iiiiiddiddi"].apply(null, arguments) } ; var dynCall_viiiiddiddi = Module["dynCall_viiiiddiddi"] = function () { return Module["asm"]["dynCall_viiiiddiddi"].apply(null, arguments) } ; var dynCall_iiiiiddidd = Module["dynCall_iiiiiddidd"] = function () { return Module["asm"]["dynCall_iiiiiddidd"].apply(null, arguments) } ; var dynCall_viiiiddidd = Module["dynCall_viiiiddidd"] = function () { return Module["asm"]["dynCall_viiiiddidd"].apply(null, arguments) } ; var dynCall_iiiiiddid = Module["dynCall_iiiiiddid"] = function () { return Module["asm"]["dynCall_iiiiiddid"].apply(null, arguments) } ; var dynCall_viiiiddid = Module["dynCall_viiiiddid"] = function () { return Module["asm"]["dynCall_viiiiddid"].apply(null, arguments) } ; var dynCall_iiiiiddi = Module["dynCall_iiiiiddi"] = function () { return Module["asm"]["dynCall_iiiiiddi"].apply(null, arguments) } ; var dynCall_iiiiidd = Module["dynCall_iiiiidd"] = function () { return Module["asm"]["dynCall_iiiiidd"].apply(null, arguments) } ; var dynCall_iiifiiiiiii = Module["dynCall_iiifiiiiiii"] = function () { return Module["asm"]["dynCall_iiifiiiiiii"].apply(null, arguments) } ; var dynCall_viifiiiiiii = Module["dynCall_viifiiiiiii"] = function () { return Module["asm"]["dynCall_viifiiiiiii"].apply(null, arguments) } ; var dynCall_iiifiiiiii = Module["dynCall_iiifiiiiii"] = function () { return Module["asm"]["dynCall_iiifiiiiii"].apply(null, arguments) } ; var dynCall_viifiiiiii = Module["dynCall_viifiiiiii"] = function () { return Module["asm"]["dynCall_viifiiiiii"].apply(null, arguments) } ; var dynCall_iiifiiiii = Module["dynCall_iiifiiiii"] = function () { return Module["asm"]["dynCall_iiifiiiii"].apply(null, arguments) } ; var dynCall_viifiiiii = Module["dynCall_viifiiiii"] = function () { return Module["asm"]["dynCall_viifiiiii"].apply(null, arguments) } ; var dynCall_iiifiiii = Module["dynCall_iiifiiii"] = function () { return Module["asm"]["dynCall_iiifiiii"].apply(null, arguments) } ; var dynCall_viifiiii = Module["dynCall_viifiiii"] = function () { return Module["asm"]["dynCall_viifiiii"].apply(null, arguments) } ; var dynCall_iiifiii = Module["dynCall_iiifiii"] = function () { return Module["asm"]["dynCall_iiifiii"].apply(null, arguments) } ; var dynCall_viifiii = Module["dynCall_viifiii"] = function () { return Module["asm"]["dynCall_viifiii"].apply(null, arguments) } ; var dynCall_iiifii = Module["dynCall_iiifii"] = function () { return Module["asm"]["dynCall_iiifii"].apply(null, arguments) } ; var dynCall_viifii = Module["dynCall_viifii"] = function () { return Module["asm"]["dynCall_viifii"].apply(null, arguments) } ; var dynCall_iiifi = Module["dynCall_iiifi"] = function () { return Module["asm"]["dynCall_iiifi"].apply(null, arguments) } ; var dynCall_viifi = Module["dynCall_viifi"] = function () { return Module["asm"]["dynCall_viifi"].apply(null, arguments) } ; var dynCall_iiif = Module["dynCall_iiif"] = function () { return Module["asm"]["dynCall_iiif"].apply(null, arguments) } ; var dynCall_viijii = Module["dynCall_viijii"] = function () { return Module["asm"]["dynCall_viijii"].apply(null, arguments) } ; var dynCall_ji = Module["dynCall_ji"] = function () { return Module["asm"]["dynCall_ji"].apply(null, arguments) } ; var dynCall_viiiiiiiiiiddi = Module["dynCall_viiiiiiiiiiddi"] = function () { return Module["asm"]["dynCall_viiiiiiiiiiddi"].apply(null, arguments) } ; var dynCall_v = Module["dynCall_v"] = function () { return Module["asm"]["dynCall_v"].apply(null, arguments) } ; var dynCall_viiiiiiiiidd = Module["dynCall_viiiiiiiiidd"] = function () { return Module["asm"]["dynCall_viiiiiiiiidd"].apply(null, arguments) } ; var dynCall_jiii = Module["dynCall_jiii"] = function () { return Module["asm"]["dynCall_jiii"].apply(null, arguments) } ; var dynCall_vij = Module["dynCall_vij"] = function () { return Module["asm"]["dynCall_vij"].apply(null, arguments) } ; var dynCall_iiiiiifiididiii = Module["dynCall_iiiiiifiididiii"] = function () { return Module["asm"]["dynCall_iiiiiifiididiii"].apply(null, arguments) } ; var dynCall_viiidiiddi = Module["dynCall_viiidiiddi"] = function () { return Module["asm"]["dynCall_viiidiiddi"].apply(null, arguments) } ; var dynCall_viiij = Module["dynCall_viiij"] = function () { return Module["asm"]["dynCall_viiij"].apply(null, arguments) } ; var dynCall_jiiii = Module["dynCall_jiiii"] = function () { return Module["asm"]["dynCall_jiiii"].apply(null, arguments) } ; var dynCall_viiiij = Module["dynCall_viiiij"] = function () { return Module["asm"]["dynCall_viiiij"].apply(null, arguments) } ; var dynCall_jii = Module["dynCall_jii"] = function () { return Module["asm"]["dynCall_jii"].apply(null, arguments) } ; var dynCall_viji = Module["dynCall_viji"] = function () { return Module["asm"]["dynCall_viji"].apply(null, arguments) } ; var dynCall_vifi = Module["dynCall_vifi"] = function () { return Module["asm"]["dynCall_vifi"].apply(null, arguments) } ; var dynCall_jiji = Module["dynCall_jiji"] = function () { return Module["asm"]["dynCall_jiji"].apply(null, arguments) } ; var dynCall_iidiiii = Module["dynCall_iidiiii"] = function () { return Module["asm"]["dynCall_iidiiii"].apply(null, arguments) } ; var dynCall_iiiiij = Module["dynCall_iiiiij"] = function () { return Module["asm"]["dynCall_iiiiij"].apply(null, arguments) } ; var dynCall_iiiiijj = Module["dynCall_iiiiijj"] = function () { return Module["asm"]["dynCall_iiiiijj"].apply(null, arguments) } ; var dynCall_iiiiiijj = Module["dynCall_iiiiiijj"] = function () { return Module["asm"]["dynCall_iiiiiijj"].apply(null, arguments) } ; Module["asm"] = asm; Module["getMemory"] = getMemory; Module["addRunDependency"] = addRunDependency; Module["removeRunDependency"] = removeRunDependency; Module["FS_createFolder"] = FS.createFolder; Module["FS_createPath"] = FS.createPath; Module["FS_createDataFile"] = FS.createDataFile; Module["FS_createPreloadedFile"] = FS.createPreloadedFile; Module["FS_createLazyFile"] = FS.createLazyFile; Module["FS_createLink"] = FS.createLink; Module["FS_createDevice"] = FS.createDevice; Module["FS_unlink"] = FS.unlink; Module["calledRun"] = calledRun; var calledRun; Module["then"] = function (func) { if (calledRun) { func(Module) } else { var old = Module["onRuntimeInitialized"]; Module["onRuntimeInitialized"] = function () { if (old) old(); func(Module) } } return Module } ; function ExitStatus(status) { this.name = "ExitStatus"; this.message = "Program terminated with exit(" + status + ")"; this.status = status } dependenciesFulfilled = function runCaller() { if (!calledRun) run(); if (!calledRun) dependenciesFulfilled = runCaller } ; function run(args) { args = args || arguments_; if (runDependencies > 0) { return } preRun(); if (runDependencies > 0) return; function doRun() { if (calledRun) return; calledRun = true; Module["calledRun"] = true; if (ABORT) return; initRuntime(); preMain(); if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); postRun() } if (Module["setStatus"]) { Module["setStatus"]("Running..."); setTimeout(function () { setTimeout(function () { Module["setStatus"]("") }, 1); doRun() }, 1) } else { doRun() } } Module["run"] = run; if (Module["preInit"]) { if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]; while (Module["preInit"].length > 0) { Module["preInit"].pop()() } } noExitRuntime = true; run(); if (typeof Module.FS === "undefined" && typeof FS !== "undefined") { Module.FS = FS } if (!IsWechat) { // 在微信里不执行 Module["imread"] = function (imageSource) { var img = null; if (typeof imageSource === "string") { img = document.getElementById(imageSource) } else { img = imageSource } var canvas = null; var ctx = null; if (img instanceof HTMLImageElement) { canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, img.width, img.height) } else if (img instanceof HTMLCanvasElement) { canvas = img; ctx = canvas.getContext("2d") } else { throw new Error("Please input the valid canvas or img id."); return } var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); return cv.matFromImageData(imgData) }; // 在微信里不执行 Module["imshow"] = function (canvasSource, mat) { var canvas = null; if (typeof canvasSource === "string") { canvas = document.getElementById(canvasSource) } else { canvas = canvasSource } if (!(canvas instanceof HTMLCanvasElement)) { throw new Error("Please input the valid canvas element or id."); return } if (!(mat instanceof cv.Mat)) { throw new Error("Please input the valid cv.Mat instance."); return } var img = new cv.Mat; var depth = mat.type() % 8; var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255; var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0; mat.convertTo(img, cv.CV_8U, scale, shift); switch (img.type()) { case cv.CV_8UC1: cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA); break; case cv.CV_8UC3: cv.cvtColor(img, img, cv.COLOR_RGB2RGBA); break; case cv.CV_8UC4: break; default: throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)"); return } var imgData = new ImageData(new Uint8ClampedArray(img.data), img.cols, img.rows); var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); canvas.width = imgData.width; canvas.height = imgData.height; ctx.putImageData(imgData, 0, 0); img.delete() }; } else { Module["imread"] = function (imgData) { return cv.matFromImageData(imgData) } ; Module["imshow"] = function (canvas, mat) { if (!(mat instanceof cv.Mat)) { throw new Error("Please input the valid cv.Mat instance."); return } var img = new cv.Mat; var depth = mat.type() % 8; var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255; var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0; mat.convertTo(img, cv.CV_8U, scale, shift); switch (img.type()) { case cv.CV_8UC1: cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA); break; case cv.CV_8UC3: cv.cvtColor(img, img, cv.COLOR_RGB2RGBA); break; case cv.CV_8UC4: break; default: throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)"); return } var ctx = canvas.getContext("2d"); ctx.clearRect(0, 0, canvas.width, canvas.height); // 创建ImageData对象 var imgData = ctx.createImageData(img.cols, img.rows); // imgData.data是只读对象,但是imgData.data.set()方法可修改imgData.data。 imgData.data.set(new Uint8ClampedArray(img.data)) // 画布canvas的宽度和高度,不能比图像imgData小。 canvas.width = imgData.width; canvas.height = imgData.height; // 需要传递ImageData类型,但小程序无法通过new ImageData()创建该类型。 ctx.putImageData(imgData, 0, 0); img.delete() }; } Module["VideoCapture"] = function (videoSource) { var video = null; if (typeof videoSource === "string") { video = document.getElementById(videoSource) } else { video = videoSource } if (!(video instanceof HTMLVideoElement)) { throw new Error("Please input the valid video element or id."); return } var canvas = document.createElement("canvas"); canvas.width = video.width; canvas.height = video.height; var ctx = canvas.getContext("2d"); this.video = video; this.read = function (frame) { if (!(frame instanceof cv.Mat)) { throw new Error("Please input the valid cv.Mat instance."); return } if (frame.type() !== cv.CV_8UC4) { throw new Error("Bad type of input mat: the type should be cv.CV_8UC4."); return } if (frame.cols !== video.width || frame.rows !== video.height) { throw new Error("Bad size of input mat: the size should be same as the video."); return } ctx.drawImage(video, 0, 0, video.width, video.height); frame.data.set(ctx.getImageData(0, 0, video.width, video.height).data) } } ; function Range(start, end) { this.start = typeof start === "undefined" ? 0 : start; this.end = typeof end === "undefined" ? 0 : end } Module["Range"] = Range; function Point(x, y) { this.x = typeof x === "undefined" ? 0 : x; this.y = typeof y === "undefined" ? 0 : y } Module["Point"] = Point; function Size(width, height) { this.width = typeof width === "undefined" ? 0 : width; this.height = typeof height === "undefined" ? 0 : height } Module["Size"] = Size; function Rect() { switch (arguments.length) { case 0: { this.x = 0; this.y = 0; this.width = 0; this.height = 0; break } case 1: { var rect = arguments[0]; this.x = rect.x; this.y = rect.y; this.width = rect.width; this.height = rect.height; break } case 2: { var point = arguments[0]; var size = arguments[1]; this.x = point.x; this.y = point.y; this.width = size.width; this.height = size.height; break } case 4: { this.x = arguments[0]; this.y = arguments[1]; this.width = arguments[2]; this.height = arguments[3]; break } default: { throw new Error("Invalid arguments") } } } Module["Rect"] = Rect; function RotatedRect() { switch (arguments.length) { case 0: { this.center = { x: 0, y: 0 }; this.size = { width: 0, height: 0 }; this.angle = 0; break } case 3: { this.center = arguments[0]; this.size = arguments[1]; this.angle = arguments[2]; break } default: { throw new Error("Invalid arguments") } } } RotatedRect.points = function (obj) { return Module.rotatedRectPoints(obj) } ; RotatedRect.boundingRect = function (obj) { return Module.rotatedRectBoundingRect(obj) } ; RotatedRect.boundingRect2f = function (obj) { return Module.rotatedRectBoundingRect2f(obj) } ; Module["RotatedRect"] = RotatedRect; function Scalar(v0, v1, v2, v3) { this.push(typeof v0 === "undefined" ? 0 : v0); this.push(typeof v1 === "undefined" ? 0 : v1); this.push(typeof v2 === "undefined" ? 0 : v2); this.push(typeof v3 === "undefined" ? 0 : v3) } Scalar.prototype = new Array; Scalar.all = function (v) { return new Scalar(v, v, v, v) } ; Module["Scalar"] = Scalar; function MinMaxLoc() { switch (arguments.length) { case 0: { this.minVal = 0; this.maxVal = 0; this.minLoc = new Point; this.maxLoc = new Point; break } case 4: { this.minVal = arguments[0]; this.maxVal = arguments[1]; this.minLoc = arguments[2]; this.maxLoc = arguments[3]; break } default: { throw new Error("Invalid arguments") } } } Module["MinMaxLoc"] = MinMaxLoc; function Circle() { switch (arguments.length) { case 0: { this.center = new Point; this.radius = 0; break } case 2: { this.center = arguments[0]; this.radius = arguments[1]; break } default: { throw new Error("Invalid arguments") } } } Module["Circle"] = Circle; function TermCriteria() { switch (arguments.length) { case 0: { this.type = 0; this.maxCount = 0; this.epsilon = 0; break } case 3: { this.type = arguments[0]; this.maxCount = arguments[1]; this.epsilon = arguments[2]; break } default: { throw new Error("Invalid arguments") } } } Module["TermCriteria"] = TermCriteria; Module["matFromArray"] = function (rows, cols, type, array) { var mat = new cv.Mat(rows, cols, type); switch (type) { case cv.CV_8U: case cv.CV_8UC1: case cv.CV_8UC2: case cv.CV_8UC3: case cv.CV_8UC4: { mat.data.set(array); break } case cv.CV_8S: case cv.CV_8SC1: case cv.CV_8SC2: case cv.CV_8SC3: case cv.CV_8SC4: { mat.data8S.set(array); break } case cv.CV_16U: case cv.CV_16UC1: case cv.CV_16UC2: case cv.CV_16UC3: case cv.CV_16UC4: { mat.data16U.set(array); break } case cv.CV_16S: case cv.CV_16SC1: case cv.CV_16SC2: case cv.CV_16SC3: case cv.CV_16SC4: { mat.data16S.set(array); break } case cv.CV_32S: case cv.CV_32SC1: case cv.CV_32SC2: case cv.CV_32SC3: case cv.CV_32SC4: { mat.data32S.set(array); break } case cv.CV_32F: case cv.CV_32FC1: case cv.CV_32FC2: case cv.CV_32FC3: case cv.CV_32FC4: { mat.data32F.set(array); break } case cv.CV_64F: case cv.CV_64FC1: case cv.CV_64FC2: case cv.CV_64FC3: case cv.CV_64FC4: { mat.data64F.set(array); break } default: { throw new Error("Type is unsupported") } } return mat } ; Module["matFromImageData"] = function (imageData) { var mat = new cv.Mat(imageData.height, imageData.width, cv.CV_8UC4); mat.data.set(imageData.data); return mat } ; return cv } ); } )(); if (typeof exports === 'object' && typeof module === 'object') module.exports = cv; else if (typeof define === 'function' && define['amd']) define([], function () { return cv; }); else if (typeof exports === 'object') exports["cv"] = cv; if (typeof Module === 'undefined') var Module = {}; return cv(Module); }));