diff --git a/public/Repo/ds.44670.org/app.js b/public/Repo/ds.44670.org/app.js
index b0ec5f5..d8b4692 100644
--- a/public/Repo/ds.44670.org/app.js
+++ b/public/Repo/ds.44670.org/app.js
@@ -1092,7 +1092,7 @@ function isScreenLandscape() {
-//if (location.origin == 'https://ds.44670.org') {
+if (location.origin == 'https://ds.44670.org') {
if (isSaveSupported) {
// Register Service Worker
if ('serviceWorker' in navigator) {
@@ -1129,7 +1129,7 @@ function isScreenLandscape() {
}
};
})();
-//}
+}
var vertShaderSource = `
precision mediump float;
@@ -1787,14 +1787,4 @@ async function dpManualBtn(isUpload) {
}
}
-window.fetch_fetch = window.fetch;
-window.fetch = function(e) {
- console.log(e);
- if (e.includes("//c.44670.org/m")) {
- return fetch_fetch("build/m"); //("../c.44670.org/m"); //("data:text/plain;utf8,");
- } else {
- return fetch_fetch(e);
- };
-};
-
-dpOnLoad()
+dpOnLoad()
\ No newline at end of file
diff --git a/public/Repo/ds.44670.org/build/m b/public/Repo/ds.44670.org/build/m
deleted file mode 100644
index b8a6058..0000000
--- a/public/Repo/ds.44670.org/build/m
+++ /dev/null
@@ -1,178 +0,0 @@
-
-var expireInDays = 0;
-var enableAD = 1;
-var patLevel = 0;
-var enableEA = 0;
-
-var currentDay = '' + ~~(Date.now() / (24 * 60 * 60 * 1000));
-var showBuyGamepads = true;
-var showEarlyAccess = true;
-var showSns = true;
-var lang = navigator.language || 'unknown';
-
-
-if ((lang == 'zh-CN') || (lang == 'ja')) {
- enableAD = 0;
- showSns = false;
-}
-if (lang == 'ja') {
- showEarlyAccess = false;
- showBuyGamepads = false;
-}
-
-if (expireInDays > 0) {
- enableAD = 0;
-}
-
-
-
-$id('loading').hidden = true
-$id('loadrom').hidden = false
-$id('btn-choose-file').onclick = () => {
- tryInitSound();
- $id('rom').click();
-}
-
-
-if (showEarlyAccess) {
- var inviteText = '';
- if (expireInDays > 0) {
- inviteText = 'Days available for Early Access features: ' + expireInDays + "\n";
- }
- if (patLevel > 0) {
- inviteText = 'Thank you for your support!\n'
- inviteText += 'Ad-free and Early Access features are enabled!\n';
- }
- var p = document.createElement('p');
- p.innerText = inviteText;
- $id('pro').appendChild(p);
-
- if (patLevel <= 0) {
- var div = document.createElement('div');
- div.innerHTML = `
Enter Early Access Code
`;
- div.onclick = () => {
- var code = window.prompt('Enter your Patreon Access Code: \n (You don\'t need it for the stable version)');
- if (!code) {
- return;
- }
- code = code.trim().toLowerCase();
- if ((code.length != 36) && (code.length != 10)) {
- alert('not a valid code');
- return;
- }
- fetch("https://c.44670.org/k", {
- method: 'POST',
- body: localStorage['s'] + "," + code
- }).then(res => res.text()).then(res => {
- eval(res)
- });
- }
- $id('pro').appendChild(div);
- }
-}
-
-
-
-var divBuyGamepads
-if (showBuyGamepads) {
- $id('a-gamepad').onclick = () => {
- if (!divBuyGamepads) {
- divBuyGamepads = document.createElement('div');
- divBuyGamepads.hidden = true
- divBuyGamepads.innerHTML = `
-
-
-About Gamepads
-
-After the gamepad is paired in System Settings, press Select or Start to connect with DS Player.
-
-
-Please note that these gamepads are only tested on iOS and are not guaranteed to work in other platforms.
-iOS may change the accessory restrictions via software update, so we cannot guarantee that these gamepads will work in the future.
-This software is not affiliated with any of these gamepads vendors.
-
-
-
-
-Product |
-Notes |
-
-
-
-8Bitdo Zero 2 | Switch to macOS mode by pressing A+Start. |
-DS 4/5 | Officially supported by iOS[1]. |
-
-Close
-
-
-[1] https://support.apple.com/en-us/HT211813
-
-
-`
-
- document.body.appendChild(divBuyGamepads);
- }
- $id('welcome').hidden = true;
- divBuyGamepads.hidden = false;
- $id('a-close-gamepad').onclick = () => {
- $id('welcome').hidden = false;
- divBuyGamepads.hidden = true;
- }
- }
-}
-
-if (showSns) {
- $id('p-sns').innerHTML = `
- GBA Player | Patreon | Discord`
-
-}
-
-
-if (!enableEA) {
- lsLayout = 0
- config.scaleMode = 0
- config.turbo = false
- config.vkScale = 1
- window.localStorage['config'] = JSON.stringify(config)
-}
-
-
-
-
-var VER = 'v20230106'
-
-window.whatsNew = () => {
- alert(`What's new in ` + VER + `:
-- Cloud save.
-- For gamepads: access menu by L+R+X+Y.
-
-== EARLY Access ==
-- XBRZ upscaling filter.
-- Turbo mode(iPhone 12+ only).
-- Cheat support.
-- Use the device's microphone.
-- Choose screen layout in landscape.
-- Resize virtual keyboard.
-
-
-`)
-}
-
-if ((localStorage['lastver'] || '') != VER) {
- localStorage['lastver'] = VER
- if (isSaveSupported) {
- whatsNew()
- }
-}
-
diff --git a/public/Repo/ds.44670.org/build/nds.js b/public/Repo/ds.44670.org/build/nds.js
index 9956ea9..ab2c4ff 100644
--- a/public/Repo/ds.44670.org/build/nds.js
+++ b/public/Repo/ds.44670.org/build/nds.js
@@ -1,4315 +1 @@
-var Module = typeof Module != "undefined" ? Module : {};
-var moduleOverrides = Object.assign({}, Module);
-var arguments_ = [];
-var thisProgram = "./this.program";
-var quit_ = (status, toThrow) => {
- throw toThrow
-};
-var ENVIRONMENT_IS_WEB = typeof window == "object";
-var ENVIRONMENT_IS_WORKER = typeof importScripts == "function";
-var ENVIRONMENT_IS_NODE = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string";
-var scriptDirectory = "";
-
-function locateFile(path) {
- if (Module["locateFile"]) {
- return Module["locateFile"](path, scriptDirectory)
- }
- return scriptDirectory + path
-}
-var read_, readAsync, readBinary, setWindowTitle;
-
-function logExceptionOnExit(e) {
- if (e instanceof ExitStatus) return;
- let toLog = e;
- err("exiting due to exception: " + toLog)
-}
-var fs;
-var nodePath;
-var requireNodeFS;
-if (ENVIRONMENT_IS_NODE) {
- if (ENVIRONMENT_IS_WORKER) {
- scriptDirectory = require("path").dirname(scriptDirectory) + "/"
- } else {
- scriptDirectory = __dirname + "/"
- }
- requireNodeFS = () => {
- if (!nodePath) {
- fs = require("fs");
- nodePath = require("path")
- }
- };
- read_ = function shell_read(filename, binary) {
- requireNodeFS();
- filename = nodePath["normalize"](filename);
- return fs.readFileSync(filename, binary ? undefined : "utf8")
- };
- readBinary = filename => {
- var ret = read_(filename, true);
- if (!ret.buffer) {
- ret = new Uint8Array(ret)
- }
- return ret
- };
- readAsync = (filename, onload, onerror) => {
- requireNodeFS();
- filename = nodePath["normalize"](filename);
- fs.readFile(filename, function (err, data) {
- if (err) onerror(err);
- else onload(data.buffer)
- })
- };
- if (process["argv"].length > 1) {
- thisProgram = process["argv"][1].replace(/\\/g, "/")
- }
- arguments_ = process["argv"].slice(2);
- if (typeof module != "undefined") {
- module["exports"] = Module
- }
- process["on"]("uncaughtException", function (ex) {
- if (!(ex instanceof ExitStatus)) {
- throw ex
- }
- });
- process["on"]("unhandledRejection", function (reason) {
- throw reason
- });
- quit_ = (status, toThrow) => {
- if (keepRuntimeAlive()) {
- process["exitCode"] = status;
- throw toThrow
- }
- logExceptionOnExit(toThrow);
- process["exit"](status)
- };
- Module["inspect"] = function () {
- return "[Emscripten Module object]"
- }
-} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
- if (ENVIRONMENT_IS_WORKER) {
- scriptDirectory = self.location.href
- } else if (typeof document != "undefined" && document.currentScript) {
- scriptDirectory = document.currentScript.src
- }
- if (scriptDirectory.indexOf("blob:") !== 0) {
- scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1)
- } else {
- scriptDirectory = ""
- } {
- read_ = url => {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, false);
- xhr.send(null);
- return xhr.responseText
- };
- if (ENVIRONMENT_IS_WORKER) {
- readBinary = url => {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, false);
- xhr.responseType = "arraybuffer";
- xhr.send(null);
- return new Uint8Array(xhr.response)
- }
- }
- readAsync = (url, onload, onerror) => {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, true);
- xhr.responseType = "arraybuffer";
- xhr.onload = () => {
- if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
- onload(xhr.response);
- return
- }
- onerror()
- };
- xhr.onerror = onerror;
- xhr.send(null)
- }
- }
- setWindowTitle = title => document.title = title
-} else {}
-var out = Module["print"] || console.log.bind(console);
-var err = Module["printErr"] || console.warn.bind(console);
-Object.assign(Module, moduleOverrides);
-moduleOverrides = null;
-if (Module["arguments"]) arguments_ = Module["arguments"];
-if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
-if (Module["quit"]) quit_ = Module["quit"];
-var tempRet0 = 0;
-var setTempRet0 = value => {
- tempRet0 = value
-};
-var wasmBinary;
-if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
-var noExitRuntime = Module["noExitRuntime"] || true;
-if (typeof WebAssembly != "object") {
- abort("no native wasm support detected")
-}
-var wasmMemory;
-var ABORT = false;
-var EXITSTATUS;
-
-function assert(condition, text) {
- if (!condition) {
- abort(text)
- }
-}
-var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined;
-
-function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
- var endIdx = idx + maxBytesToRead;
- var endPtr = idx;
- while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
- if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
- return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr))
- }
- var str = "";
- while (idx < endPtr) {
- var u0 = heapOrArray[idx++];
- if (!(u0 & 128)) {
- str += String.fromCharCode(u0);
- continue
- }
- var u1 = heapOrArray[idx++] & 63;
- if ((u0 & 224) == 192) {
- str += String.fromCharCode((u0 & 31) << 6 | u1);
- continue
- }
- var u2 = heapOrArray[idx++] & 63;
- if ((u0 & 240) == 224) {
- u0 = (u0 & 15) << 12 | u1 << 6 | u2
- } else {
- u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[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, heap, 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;
- heap[outIdx++] = u
- } else if (u <= 2047) {
- if (outIdx + 1 >= endIdx) break;
- heap[outIdx++] = 192 | u >> 6;
- heap[outIdx++] = 128 | u & 63
- } else if (u <= 65535) {
- if (outIdx + 2 >= endIdx) break;
- heap[outIdx++] = 224 | u >> 12;
- heap[outIdx++] = 128 | u >> 6 & 63;
- heap[outIdx++] = 128 | u & 63
- } else {
- if (outIdx + 3 >= endIdx) break;
- heap[outIdx++] = 240 | u >> 18;
- heap[outIdx++] = 128 | u >> 12 & 63;
- heap[outIdx++] = 128 | u >> 6 & 63;
- heap[outIdx++] = 128 | u & 63
- }
- }
- heap[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 c = str.charCodeAt(i);
- if (c <= 127) {
- len++
- } else if (c <= 2047) {
- len += 2
- } else if (c >= 55296 && c <= 57343) {
- len += 4;
- ++i
- } else {
- len += 3
- }
- }
- return len
-}
-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 INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 786432e3;
-var wasmTable;
-var __ATPRERUN__ = [];
-var __ATINIT__ = [];
-var __ATMAIN__ = [];
-var __ATPOSTRUN__ = [];
-var runtimeInitialized = false;
-
-function keepRuntimeAlive() {
- return noExitRuntime
-}
-
-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();
- FS.ignorePermissions = false;
- TTY.init();
- callRuntimeCallbacks(__ATINIT__)
-}
-
-function preMain() {
- callRuntimeCallbacks(__ATMAIN__)
-}
-
-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 addOnInit(cb) {
- __ATINIT__.unshift(cb)
-}
-
-function addOnPostRun(cb) {
- __ATPOSTRUN__.unshift(cb)
-}
-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()
- }
- }
-}
-
-function abort(what) {
- {
- if (Module["onAbort"]) {
- Module["onAbort"](what)
- }
- }
- what = "Aborted(" + what + ")";
- err(what);
- ABORT = true;
- EXITSTATUS = 1;
- what += ". Build with -sASSERTIONS for more info.";
- var e = new WebAssembly.RuntimeError(what);
- throw e
-}
-var dataURIPrefix = "data:application/octet-stream;base64,";
-
-function isDataURI(filename) {
- return filename.startsWith(dataURIPrefix)
-}
-
-function isFileURI(filename) {
- return filename.startsWith("file://")
-}
-var wasmBinaryFile;
-wasmBinaryFile = "nds.wasm";
-if (!isDataURI(wasmBinaryFile)) {
- wasmBinaryFile = locateFile(wasmBinaryFile)
-}
-
-function getBinary(file) {
- try {
- if (file == wasmBinaryFile && wasmBinary) {
- return new Uint8Array(wasmBinary)
- }
- if (readBinary) {
- return readBinary(file)
- }
- throw "both async and sync fetching of the wasm failed"
- } catch (err) {
- abort(err)
- }
-}
-
-function getBinaryPromise() {
- if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
- if (typeof fetch == "function" && !isFileURI(wasmBinaryFile)) {
- 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(wasmBinaryFile)
- })
- } else {
- if (readAsync) {
- return new Promise(function (resolve, reject) {
- readAsync(wasmBinaryFile, function (response) {
- resolve(new Uint8Array(response))
- }, reject)
- })
- }
- }
- }
- return Promise.resolve().then(function () {
- return getBinary(wasmBinaryFile)
- })
-}
-
-function createWasm() {
- var info = {
- "a": asmLibraryArg
- };
-
- function receiveInstance(instance, module) {
- var exports = instance.exports;
- Module["asm"] = exports;
- wasmMemory = Module["asm"]["x"];
- updateGlobalBufferAndViews(wasmMemory.buffer);
- wasmTable = Module["asm"]["V"];
- addOnInit(Module["asm"]["y"]);
- removeRunDependency("wasm-instantiate")
- }
- addRunDependency("wasm-instantiate");
-
- function receiveInstantiationResult(result) {
- receiveInstance(result["instance"])
- }
-
- function instantiateArrayBuffer(receiver) {
- return getBinaryPromise().then(function (binary) {
- return WebAssembly.instantiate(binary, info)
- }).then(function (instance) {
- return instance
- }).then(receiver, function (reason) {
- err("failed to asynchronously prepare wasm: " + reason);
- abort(reason)
- })
- }
-
- function instantiateAsync() {
- if (!wasmBinary && typeof WebAssembly.instantiateStreaming == "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && !ENVIRONMENT_IS_NODE && typeof fetch == "function") {
- return fetch(wasmBinaryFile, {
- credentials: "same-origin"
- }).then(function (response) {
- var result = WebAssembly.instantiateStreaming(response, info);
- return result.then(receiveInstantiationResult, function (reason) {
- err("wasm streaming compile failed: " + reason);
- err("falling back to ArrayBuffer instantiation");
- return instantiateArrayBuffer(receiveInstantiationResult)
- })
- })
- } else {
- return instantiateArrayBuffer(receiveInstantiationResult)
- }
- }
- 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;
-var ASM_CONSTS = {
- 499025: () => {
- wasmReady()
- }
-};
-
-function aa(str) {
- return eval(UTF8ToString(str))
-}
-
-function ExitStatus(status) {
- this.name = "ExitStatus";
- this.message = "Program terminated with exit(" + status + ")";
- this.status = status
-}
-Module["ExitStatus"] = ExitStatus;
-
-function callRuntimeCallbacks(callbacks) {
- while (callbacks.length > 0) {
- callbacks.shift()(Module)
- }
-}
-Module["callRuntimeCallbacks"] = callRuntimeCallbacks;
-
-function withStackSave(f) {
- var stack = stackSave();
- var ret = f();
- stackRestore(stack);
- return ret
-}
-Module["withStackSave"] = withStackSave;
-
-function demangle(func) {
- return func
-}
-Module["demangle"] = demangle;
-
-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 + "]"
- })
-}
-Module["demangleAll"] = demangleAll;
-
-function getValue(ptr, type = "i8") {
- if (type.endsWith("*")) type = "*";
- switch (type) {
- case "i1":
- return HEAP8[ptr >> 0];
- case "i8":
- return HEAP8[ptr >> 0];
- case "i16":
- return HEAP16[ptr >> 1];
- case "i32":
- return HEAP32[ptr >> 2];
- case "i64":
- return HEAP32[ptr >> 2];
- case "float":
- return HEAPF32[ptr >> 2];
- case "double":
- return HEAPF64[ptr >> 3];
- case "*":
- return HEAPU32[ptr >> 2];
- default:
- abort("invalid type for getValue: " + type)
- }
- return null
-}
-Module["getValue"] = getValue;
-
-function handleException(e) {
- if (e instanceof ExitStatus || e == "unwind") {
- return EXITSTATUS
- }
- quit_(1, e)
-}
-Module["handleException"] = handleException;
-
-function jsStackTrace() {
- var error = new Error;
- if (!error.stack) {
- try {
- throw new Error
- } catch (e) {
- error = e
- }
- if (!error.stack) {
- return "(no stack trace available)"
- }
- }
- return error.stack.toString()
-}
-Module["jsStackTrace"] = jsStackTrace;
-
-function setValue(ptr, value, type = "i8") {
- if (type.endsWith("*")) type = "*";
- 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;
- case "*":
- HEAPU32[ptr >> 2] = value;
- break;
- default:
- abort("invalid type for setValue: " + type)
- }
-}
-Module["setValue"] = setValue;
-
-function stackTrace() {
- var js = jsStackTrace();
- if (Module["extraStackTrace"]) js += "\n" + Module["extraStackTrace"]();
- return demangleAll(js)
-}
-Module["stackTrace"] = stackTrace;
-
-function writeArrayToMemory(array, buffer) {
- HEAP8.set(array, buffer)
-}
-Module["writeArrayToMemory"] = writeArrayToMemory;
-
-function ___assert_fail(condition, filename, line, func) {
- abort("Assertion failed: " + UTF8ToString(condition) + ", at: " + [filename ? UTF8ToString(filename) : "unknown filename", line, func ? UTF8ToString(func) : "unknown function"])
-}
-Module["___assert_fail"] = ___assert_fail;
-
-function ___cxa_allocate_exception(size) {
- return _malloc(size + 24) + 24
-}
-Module["___cxa_allocate_exception"] = ___cxa_allocate_exception;
-
-function ExceptionInfo(excPtr) {
- this.excPtr = excPtr;
- this.ptr = excPtr - 24;
- this.set_type = function (type) {
- HEAPU32[this.ptr + 4 >> 2] = type
- };
- this.get_type = function () {
- return HEAPU32[this.ptr + 4 >> 2]
- };
- this.set_destructor = function (destructor) {
- HEAPU32[this.ptr + 8 >> 2] = destructor
- };
- this.get_destructor = function () {
- return HEAPU32[this.ptr + 8 >> 2]
- };
- this.set_refcount = function (refcount) {
- HEAP32[this.ptr >> 2] = refcount
- };
- this.set_caught = function (caught) {
- caught = caught ? 1 : 0;
- HEAP8[this.ptr + 12 >> 0] = caught
- };
- this.get_caught = function () {
- return HEAP8[this.ptr + 12 >> 0] != 0
- };
- this.set_rethrown = function (rethrown) {
- rethrown = rethrown ? 1 : 0;
- HEAP8[this.ptr + 13 >> 0] = rethrown
- };
- this.get_rethrown = function () {
- return HEAP8[this.ptr + 13 >> 0] != 0
- };
- this.init = function (type, destructor) {
- this.set_adjusted_ptr(0);
- this.set_type(type);
- this.set_destructor(destructor);
- this.set_refcount(0);
- this.set_caught(false);
- this.set_rethrown(false)
- };
- this.add_ref = function () {
- var value = HEAP32[this.ptr >> 2];
- HEAP32[this.ptr >> 2] = value + 1
- };
- this.release_ref = function () {
- var prev = HEAP32[this.ptr >> 2];
- HEAP32[this.ptr >> 2] = prev - 1;
- return prev === 1
- };
- this.set_adjusted_ptr = function (adjustedPtr) {
- HEAPU32[this.ptr + 16 >> 2] = adjustedPtr
- };
- this.get_adjusted_ptr = function () {
- return HEAPU32[this.ptr + 16 >> 2]
- };
- this.get_exception_ptr = function () {
- var isPointer = ___cxa_is_pointer_type(this.get_type());
- if (isPointer) {
- return HEAPU32[this.excPtr >> 2]
- }
- var adjusted = this.get_adjusted_ptr();
- if (adjusted !== 0) return adjusted;
- return this.excPtr
- }
-}
-Module["ExceptionInfo"] = ExceptionInfo;
-var exceptionLast = 0;
-Module["exceptionLast"] = exceptionLast;
-var uncaughtExceptionCount = 0;
-Module["uncaughtExceptionCount"] = uncaughtExceptionCount;
-
-function ___cxa_throw(ptr, type, destructor) {
- var info = new ExceptionInfo(ptr);
- info.init(type, destructor);
- exceptionLast = ptr;
- uncaughtExceptionCount++;
- throw ptr
-}
-Module["___cxa_throw"] = ___cxa_throw;
-
-function setErrNo(value) {
- HEAP32[___errno_location() >> 2] = value;
- return value
-}
-Module["setErrNo"] = setErrNo;
-var PATH = {
- isAbs: path => path.charAt(0) === "/",
- splitPath: filename => {
- var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
- return splitPathRe.exec(filename).slice(1)
- },
- normalizeArray: (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: path => {
- var isAbsolute = PATH.isAbs(path),
- trailingSlash = path.substr(-1) === "/";
- path = PATH.normalizeArray(path.split("/").filter(p => !!p), !isAbsolute).join("/");
- if (!path && !isAbsolute) {
- path = "."
- }
- if (path && trailingSlash) {
- path += "/"
- }
- return (isAbsolute ? "/" : "") + path
- },
- dirname: 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: path => {
- if (path === "/") return "/";
- path = PATH.normalize(path);
- path = path.replace(/\/$/, "");
- var lastSlash = path.lastIndexOf("/");
- if (lastSlash === -1) return path;
- return path.substr(lastSlash + 1)
- },
- join: function () {
- var paths = Array.prototype.slice.call(arguments, 0);
- return PATH.normalize(paths.join("/"))
- },
- join2: (l, r) => {
- return PATH.normalize(l + "/" + r)
- }
-};
-Module["PATH"] = PATH;
-
-function getRandomDevice() {
- if (typeof crypto == "object" && typeof crypto["getRandomValues"] == "function") {
- var randomBuffer = new Uint8Array(1);
- return () => {
- crypto.getRandomValues(randomBuffer);
- return randomBuffer[0]
- }
- } else if (ENVIRONMENT_IS_NODE) {
- try {
- var crypto_module = require("crypto");
- return () => crypto_module["randomBytes"](1)[0]
- } catch (e) {}
- }
- return () => abort("randomDevice")
-}
-Module["getRandomDevice"] = getRandomDevice;
-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.isAbs(path)
- }
- resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(p => !!p), !resolvedAbsolute).join("/");
- return (resolvedAbsolute ? "/" : "") + resolvedPath || "."
- },
- relative: (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("/")
- }
-};
-Module["PATH_FS"] = PATH_FS;
-
-function intArrayFromString(stringy, dontAddNull, length) {
- var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
- var u8array = new Array(len);
- var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
- if (dontAddNull) u8array.length = numBytesWritten;
- return u8array
-}
-Module["intArrayFromString"] = intArrayFromString;
-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(BUFSIZE);
- var bytesRead = 0;
- try {
- bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, -1)
- } catch (e) {
- if (e.toString().includes("EOF")) 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 = []
- }
- }
- }
-};
-Module["TTY"] = TTY;
-
-function zeroMemory(address, size) {
- HEAPU8.fill(0, address, address + size)
-}
-Module["zeroMemory"] = zeroMemory;
-
-function alignMemory(size, alignment) {
- return Math.ceil(size / alignment) * alignment
-}
-Module["alignMemory"] = alignMemory;
-
-function mmapAlloc(size) {
- abort()
-}
-Module["mmapAlloc"] = mmapAlloc;
-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;
- parent.timestamp = node.timestamp
- }
- return node
- },
- getFileDataAsTypedArray: function (node) {
- if (!node.contents) return new Uint8Array(0);
- 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)
- },
- resizeFileStorage: function (node, newSize) {
- if (node.usedBytes == newSize) return;
- if (newSize == 0) {
- node.contents = null;
- node.usedBytes = 0
- } else {
- var oldContents = node.contents;
- node.contents = new Uint8Array(newSize);
- if (oldContents) {
- node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)))
- }
- 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.parent.timestamp = Date.now();
- old_node.name = new_name;
- new_dir.contents[new_name] = old_node;
- new_dir.timestamp = old_node.parent.timestamp;
- old_node.parent = new_dir
- },
- unlink: function (parent, name) {
- delete parent.contents[name];
- parent.timestamp = Date.now()
- },
- 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];
- parent.timestamp = Date.now()
- },
- 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) {
- 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 = buffer.slice(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, 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) {
- allocated = false;
- ptr = contents.byteOffset
- } else {
- if (position > 0 || position + length < contents.length) {
- if (contents.subarray) {
- contents = contents.subarray(position, position + length)
- } else {
- contents = Array.prototype.slice.call(contents, position, position + length)
- }
- }
- allocated = true;
- ptr = mmapAlloc(length);
- if (!ptr) {
- throw new FS.ErrnoError(48)
- }
- HEAP8.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
- }
- }
-};
-Module["MEMFS"] = MEMFS;
-
-function asyncLoad(url, onload, onerror, noRunDep) {
- var dep = !noRunDep ? getUniqueRunDependency("al " + url) : "";
- readAsync(url, arrayBuffer => {
- assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
- onload(new Uint8Array(arrayBuffer));
- if (dep) removeRunDependency(dep)
- }, event => {
- if (onerror) {
- onerror()
- } else {
- throw 'Loading data file "' + url + '" failed.'
- }
- });
- if (dep) addRunDependency(dep)
-}
-Module["asyncLoad"] = asyncLoad;
-var FS = {
- root: null,
- mounts: [],
- devices: {},
- streams: [],
- nextInode: 1,
- nameTable: null,
- currentPath: "/",
- initialized: false,
- ignorePermissions: true,
- ErrnoError: null,
- genericErrors: {},
- filesystems: null,
- syncFSRequests: 0,
- lookupPath: (path, opts = {}) => {
- path = PATH_FS.resolve(FS.cwd(), path);
- if (!path) return {
- path: "",
- node: null
- };
- var defaults = {
- follow_mount: true,
- recurse_count: 0
- };
- opts = Object.assign(defaults, opts);
- if (opts.recurse_count > 8) {
- throw new FS.ErrnoError(32)
- }
- var parts = PATH.normalizeArray(path.split("/").filter(p => !!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 + 1
- });
- current = lookup.node;
- if (count++ > 40) {
- throw new FS.ErrnoError(32)
- }
- }
- }
- }
- return {
- path: current_path,
- node: current
- }
- },
- getPath: 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: (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: node => {
- var hash = FS.hashName(node.parent.id, node.name);
- node.name_next = FS.nameTable[hash];
- FS.nameTable[hash] = node
- },
- hashRemoveNode: 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: (parent, name) => {
- var errCode = FS.mayLookup(parent);
- if (errCode) {
- throw new FS.ErrnoError(errCode, 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: (parent, name, mode, rdev) => {
- var node = new FS.FSNode(parent, name, mode, rdev);
- FS.hashAddNode(node);
- return node
- },
- destroyNode: node => {
- FS.hashRemoveNode(node)
- },
- isRoot: node => {
- return node === node.parent
- },
- isMountpoint: node => {
- return !!node.mounted
- },
- isFile: mode => {
- return (mode & 61440) === 32768
- },
- isDir: mode => {
- return (mode & 61440) === 16384
- },
- isLink: mode => {
- return (mode & 61440) === 40960
- },
- isChrdev: mode => {
- return (mode & 61440) === 8192
- },
- isBlkdev: mode => {
- return (mode & 61440) === 24576
- },
- isFIFO: mode => {
- return (mode & 61440) === 4096
- },
- isSocket: mode => {
- return (mode & 49152) === 49152
- },
- flagModes: {
- "r": 0,
- "r+": 2,
- "w": 577,
- "w+": 578,
- "a": 1089,
- "a+": 1090
- },
- modeStringToFlags: str => {
- var flags = FS.flagModes[str];
- if (typeof flags == "undefined") {
- throw new Error("Unknown file open mode: " + str)
- }
- return flags
- },
- flagsToPermissionString: flag => {
- var perms = ["r", "w", "rw"][flag & 3];
- if (flag & 512) {
- perms += "w"
- }
- return perms
- },
- nodePermissions: (node, perms) => {
- if (FS.ignorePermissions) {
- return 0
- }
- if (perms.includes("r") && !(node.mode & 292)) {
- return 2
- } else if (perms.includes("w") && !(node.mode & 146)) {
- return 2
- } else if (perms.includes("x") && !(node.mode & 73)) {
- return 2
- }
- return 0
- },
- mayLookup: dir => {
- var errCode = FS.nodePermissions(dir, "x");
- if (errCode) return errCode;
- if (!dir.node_ops.lookup) return 2;
- return 0
- },
- mayCreate: (dir, name) => {
- try {
- var node = FS.lookupNode(dir, name);
- return 20
- } catch (e) {}
- return FS.nodePermissions(dir, "wx")
- },
- mayDelete: (dir, name, isdir) => {
- var node;
- try {
- node = FS.lookupNode(dir, name)
- } catch (e) {
- return e.errno
- }
- var errCode = FS.nodePermissions(dir, "wx");
- if (errCode) {
- return errCode
- }
- 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: (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: (fd_start = 0, 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: fd => FS.streams[fd],
- createStream: (stream, fd_start, fd_end) => {
- if (!FS.FSStream) {
- FS.FSStream = function () {
- this.shared = {}
- };
- 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
- }
- },
- flags: {
- get: function () {
- return this.shared.flags
- },
- set: function (val) {
- this.shared.flags = val
- }
- },
- position: {
- get: function () {
- return this.shared.position
- },
- set: function (val) {
- this.shared.position = val
- }
- }
- })
- }
- stream = Object.assign(new FS.FSStream, stream);
- var fd = FS.nextfd(fd_start, fd_end);
- stream.fd = fd;
- FS.streams[fd] = stream;
- return stream
- },
- closeStream: fd => {
- FS.streams[fd] = null
- },
- chrdev_stream_ops: {
- open: 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: () => {
- throw new FS.ErrnoError(70)
- }
- },
- major: dev => dev >> 8,
- minor: dev => dev & 255,
- makedev: (ma, mi) => ma << 8 | mi,
- registerDevice: (dev, ops) => {
- FS.devices[dev] = {
- stream_ops: ops
- }
- },
- getDevice: dev => FS.devices[dev],
- getMounts: 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: (populate, callback) => {
- if (typeof populate == "function") {
- callback = populate;
- populate = false
- }
- FS.syncFSRequests++;
- if (FS.syncFSRequests > 1) {
- err("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(errCode) {
- FS.syncFSRequests--;
- return callback(errCode)
- }
-
- function done(errCode) {
- if (errCode) {
- if (!done.errored) {
- done.errored = true;
- return doCallback(errCode)
- }
- return
- }
- if (++completed >= mounts.length) {
- doCallback(null)
- }
- }
- mounts.forEach(mount => {
- if (!mount.type.syncfs) {
- return done(null)
- }
- mount.type.syncfs(mount, populate, done)
- })
- },
- mount: (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: 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(hash => {
- var current = FS.nameTable[hash];
- while (current) {
- var next = current.name_next;
- if (mounts.includes(current.mount)) {
- FS.destroyNode(current)
- }
- current = next
- }
- });
- node.mounted = null;
- var idx = node.mount.mounts.indexOf(mount);
- node.mount.mounts.splice(idx, 1)
- },
- lookup: (parent, name) => {
- return parent.node_ops.lookup(parent, name)
- },
- mknod: (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 errCode = FS.mayCreate(parent, name);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- if (!parent.node_ops.mknod) {
- throw new FS.ErrnoError(63)
- }
- return parent.node_ops.mknod(parent, name, mode, dev)
- },
- create: (path, mode) => {
- mode = mode !== undefined ? mode : 438;
- mode &= 4095;
- mode |= 32768;
- return FS.mknod(path, mode, 0)
- },
- mkdir: (path, mode) => {
- mode = mode !== undefined ? mode : 511;
- mode &= 511 | 512;
- mode |= 16384;
- return FS.mknod(path, mode, 0)
- },
- mkdirTree: (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: (path, mode, dev) => {
- if (typeof dev == "undefined") {
- dev = mode;
- mode = 438
- }
- mode |= 8192;
- return FS.mknod(path, mode, dev)
- },
- symlink: (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 errCode = FS.mayCreate(parent, newname);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- if (!parent.node_ops.symlink) {
- throw new FS.ErrnoError(63)
- }
- return parent.node_ops.symlink(parent, newname, oldpath)
- },
- rename: (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;
- lookup = FS.lookupPath(old_path, {
- parent: true
- });
- old_dir = lookup.node;
- lookup = FS.lookupPath(new_path, {
- parent: true
- });
- new_dir = lookup.node;
- 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 errCode = FS.mayDelete(old_dir, old_name, isdir);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- 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) {
- errCode = FS.nodePermissions(old_dir, "w");
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- }
- 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)
- }
- },
- rmdir: path => {
- var lookup = FS.lookupPath(path, {
- parent: true
- });
- var parent = lookup.node;
- var name = PATH.basename(path);
- var node = FS.lookupNode(parent, name);
- var errCode = FS.mayDelete(parent, name, true);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- if (!parent.node_ops.rmdir) {
- throw new FS.ErrnoError(63)
- }
- if (FS.isMountpoint(node)) {
- throw new FS.ErrnoError(10)
- }
- parent.node_ops.rmdir(parent, name);
- FS.destroyNode(node)
- },
- readdir: 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: path => {
- var lookup = FS.lookupPath(path, {
- parent: true
- });
- var parent = lookup.node;
- if (!parent) {
- throw new FS.ErrnoError(44)
- }
- var name = PATH.basename(path);
- var node = FS.lookupNode(parent, name);
- var errCode = FS.mayDelete(parent, name, false);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- if (!parent.node_ops.unlink) {
- throw new FS.ErrnoError(63)
- }
- if (FS.isMountpoint(node)) {
- throw new FS.ErrnoError(10)
- }
- parent.node_ops.unlink(parent, name);
- FS.destroyNode(node)
- },
- readlink: 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: (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: path => {
- return FS.stat(path, true)
- },
- chmod: (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: (path, mode) => {
- FS.chmod(path, mode, true)
- },
- fchmod: (fd, mode) => {
- var stream = FS.getStream(fd);
- if (!stream) {
- throw new FS.ErrnoError(8)
- }
- FS.chmod(stream.node, mode)
- },
- chown: (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: (path, uid, gid) => {
- FS.chown(path, uid, gid, true)
- },
- fchown: (fd, uid, gid) => {
- var stream = FS.getStream(fd);
- if (!stream) {
- throw new FS.ErrnoError(8)
- }
- FS.chown(stream.node, uid, gid)
- },
- truncate: (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 errCode = FS.nodePermissions(node, "w");
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- node.node_ops.setattr(node, {
- size: len,
- timestamp: Date.now()
- })
- },
- ftruncate: (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: (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: (path, flags, mode) => {
- 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 errCode = FS.mayOpen(node, flags);
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- }
- if (flags & 512 && !created) {
- FS.truncate(node, 0)
- }
- flags &= ~(128 | 512 | 131072);
- var stream = FS.createStream({
- node: node,
- path: FS.getPath(node),
- flags: flags,
- seekable: true,
- position: 0,
- stream_ops: node.stream_ops,
- ungotten: [],
- error: false
- });
- 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
- }
- }
- return stream
- },
- close: 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: stream => {
- return stream.fd === null
- },
- llseek: (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: (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: (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.seekable && 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;
- return bytesWritten
- },
- allocate: (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: (stream, 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, length, position, prot, flags)
- },
- msync: (stream, buffer, offset, length, mmapFlags) => {
- if (!stream || !stream.stream_ops.msync) {
- return 0
- }
- return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags)
- },
- munmap: stream => 0,
- ioctl: (stream, cmd, arg) => {
- if (!stream.stream_ops.ioctl) {
- throw new FS.ErrnoError(59)
- }
- return stream.stream_ops.ioctl(stream, cmd, arg)
- },
- readFile: (path, opts = {}) => {
- opts.flags = opts.flags || 0;
- 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: (path, data, opts = {}) => {
- opts.flags = opts.flags || 577;
- 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: () => FS.currentPath,
- chdir: 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 errCode = FS.nodePermissions(lookup.node, "x");
- if (errCode) {
- throw new FS.ErrnoError(errCode)
- }
- FS.currentPath = lookup.path
- },
- createDefaultDirectories: () => {
- FS.mkdir("/tmp");
- FS.mkdir("/home");
- FS.mkdir("/home/web_user")
- },
- createDefaultDevices: () => {
- FS.mkdir("/dev");
- FS.registerDevice(FS.makedev(1, 3), {
- read: () => 0,
- write: (stream, buffer, offset, length, pos) => 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 = getRandomDevice();
- FS.createDevice("/dev", "random", random_device);
- FS.createDevice("/dev", "urandom", random_device);
- FS.mkdir("/dev/shm");
- FS.mkdir("/dev/shm/tmp")
- },
- createSpecialDirectories: () => {
- FS.mkdir("/proc");
- var proc_self = FS.mkdir("/proc/self");
- FS.mkdir("/proc/self/fd");
- FS.mount({
- mount: () => {
- var node = FS.createNode(proc_self, "fd", 16384 | 511, 73);
- node.node_ops = {
- lookup: (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: () => stream.path
- }
- };
- ret.parent = ret;
- return ret
- }
- };
- return node
- }
- }, {}, "/proc/self/fd")
- },
- createStandardStreams: () => {
- 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", 0);
- var stdout = FS.open("/dev/stdout", 1);
- var stderr = FS.open("/dev/stderr", 1)
- },
- ensureErrnoError: () => {
- 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(code => {
- FS.genericErrors[code] = new FS.ErrnoError(code);
- FS.genericErrors[code].stack = ""
- })
- },
- staticInit: () => {
- FS.ensureErrnoError();
- FS.nameTable = new Array(4096);
- FS.mount(MEMFS, {}, "/");
- FS.createDefaultDirectories();
- FS.createDefaultDevices();
- FS.createSpecialDirectories();
- FS.filesystems = {
- "MEMFS": MEMFS
- }
- },
- init: (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: () => {
- FS.init.initialized = false;
- for (var i = 0; i < FS.streams.length; i++) {
- var stream = FS.streams[i];
- if (!stream) {
- continue
- }
- FS.close(stream)
- }
- },
- getMode: (canRead, canWrite) => {
- var mode = 0;
- if (canRead) mode |= 292 | 73;
- if (canWrite) mode |= 146;
- return mode
- },
- findObject: (path, dontResolveLastLink) => {
- var ret = FS.analyzePath(path, dontResolveLastLink);
- if (!ret.exists) {
- return null
- }
- return ret.object
- },
- analyzePath: (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
- },
- createPath: (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: (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: (parent, name, data, canRead, canWrite, canOwn) => {
- var path = name;
- if (parent) {
- parent = typeof parent == "string" ? parent : FS.getPath(parent);
- path = name ? PATH.join2(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, 577);
- FS.write(stream, data, 0, data.length, 0, canOwn);
- FS.close(stream);
- FS.chmod(node, mode)
- }
- return node
- },
- createDevice: (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: stream => {
- stream.seekable = false
- },
- close: stream => {
- if (output && output.buffer && output.buffer.length) {
- output(10)
- }
- },
- read: (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: (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)
- },
- forceLoadFile: obj => {
- if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return 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) {
- throw new FS.ErrnoError(29)
- }
- } else {
- throw new Error("Cannot load without read() or XMLHttpRequest.")
- }
- },
- createLazyFile: (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 = (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);
- 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 || [])
- }
- return intArrayFromString(xhr.responseText || "", true)
- };
- var lazyArray = this;
- lazyArray.setDataGetter(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;
- out("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(key => {
- var fn = node.stream_ops[key];
- stream_ops[key] = function forceLoadLazyFile() {
- FS.forceLoadFile(node);
- return fn.apply(null, arguments)
- }
- });
-
- function writeChunks(stream, buffer, offset, length, position) {
- 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
- }
- stream_ops.read = (stream, buffer, offset, length, position) => {
- FS.forceLoadFile(node);
- return writeChunks(stream, buffer, offset, length, position)
- };
- stream_ops.mmap = (stream, length, position, prot, flags) => {
- FS.forceLoadFile(node);
- var ptr = mmapAlloc(length);
- if (!ptr) {
- throw new FS.ErrnoError(48)
- }
- writeChunks(stream, HEAP8, ptr, length, position);
- return {
- ptr: ptr,
- allocated: true
- }
- };
- node.stream_ops = stream_ops;
- return node
- },
- createPreloadedFile: (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
- 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)
- }
- if (Browser.handledByPreloadPlugin(byteArray, fullname, finish, () => {
- if (onerror) onerror();
- removeRunDependency(dep)
- })) {
- return
- }
- finish(byteArray)
- }
- addRunDependency(dep);
- if (typeof url == "string") {
- asyncLoad(url, byteArray => processData(byteArray), onerror)
- } else {
- processData(url)
- }
- },
- indexedDB: () => {
- return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB
- },
- DB_NAME: () => {
- return "EM_FS_" + window.location.pathname
- },
- DB_VERSION: 20,
- DB_STORE_NAME: "FILE_DATA",
- saveFilesToDB: (paths, onload, onerror) => {
- onload = onload || (() => {});
- onerror = onerror || (() => {});
- var indexedDB = FS.indexedDB();
- try {
- var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION)
- } catch (e) {
- return onerror(e)
- }
- openRequest.onupgradeneeded = () => {
- out("creating db");
- var db = openRequest.result;
- db.createObjectStore(FS.DB_STORE_NAME)
- };
- 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(path => {
- var putRequest = files.put(FS.analyzePath(path).object.contents, path);
- putRequest.onsuccess = () => {
- ok++;
- if (ok + fail == total) finish()
- };
- putRequest.onerror = () => {
- fail++;
- if (ok + fail == total) finish()
- }
- });
- transaction.onerror = onerror
- };
- openRequest.onerror = onerror
- },
- loadFilesFromDB: (paths, onload, onerror) => {
- onload = onload || (() => {});
- onerror = onerror || (() => {});
- 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 = () => {
- 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(path => {
- var getRequest = files.get(path);
- 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 = () => {
- fail++;
- if (ok + fail == total) finish()
- }
- });
- transaction.onerror = onerror
- };
- openRequest.onerror = onerror
- }
-};
-Module["FS"] = FS;
-var SYSCALLS = {
- DEFAULT_POLLMASK: 5,
- calculateAt: function (dirfd, path, allowEmpty) {
- if (PATH.isAbs(path)) {
- return path
- }
- var dir;
- if (dirfd === -100) {
- dir = FS.cwd()
- } else {
- var dirstream = FS.getStream(dirfd);
- if (!dirstream) throw new FS.ErrnoError(8);
- dir = dirstream.path
- }
- if (path.length == 0) {
- if (!allowEmpty) {
- throw new FS.ErrnoError(44)
- }
- return dir
- }
- return PATH.join2(dir, 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 + 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;
- 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;
- tempI64 = [Math.floor(stat.atime.getTime() / 1e3) >>> 0, (tempDouble = Math.floor(stat.atime.getTime() / 1e3), +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 + 56 >> 2] = tempI64[0], HEAP32[buf + 60 >> 2] = tempI64[1];
- HEAP32[buf + 64 >> 2] = 0;
- tempI64 = [Math.floor(stat.mtime.getTime() / 1e3) >>> 0, (tempDouble = Math.floor(stat.mtime.getTime() / 1e3), +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 + 72 >> 2] = tempI64[0], HEAP32[buf + 76 >> 2] = tempI64[1];
- HEAP32[buf + 80 >> 2] = 0;
- tempI64 = [Math.floor(stat.ctime.getTime() / 1e3) >>> 0, (tempDouble = Math.floor(stat.ctime.getTime() / 1e3), +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 + 88 >> 2] = tempI64[0], HEAP32[buf + 92 >> 2] = tempI64[1];
- HEAP32[buf + 96 >> 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 + 104 >> 2] = tempI64[0], HEAP32[buf + 108 >> 2] = tempI64[1];
- return 0
- },
- doMsync: function (addr, stream, len, flags, offset) {
- var buffer = HEAPU8.slice(addr, addr + len);
- FS.msync(stream, buffer, offset, len, flags)
- },
- varargs: undefined,
- get: function () {
- SYSCALLS.varargs += 4;
- var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
- return ret
- },
- getStr: function (ptr) {
- var ret = UTF8ToString(ptr);
- return ret
- },
- getStreamFromFD: function (fd) {
- var stream = FS.getStream(fd);
- if (!stream) throw new FS.ErrnoError(8);
- return stream
- }
-};
-Module["SYSCALLS"] = SYSCALLS;
-
-function ___syscall_fcntl64(fd, cmd, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- var stream = SYSCALLS.getStreamFromFD(fd);
- switch (cmd) {
- case 0: {
- var arg = SYSCALLS.get();
- if (arg < 0) {
- return -28
- }
- var newStream;
- newStream = FS.createStream(stream, 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 5: {
- var arg = SYSCALLS.get();
- var offset = 0;
- HEAP16[arg + offset >> 1] = 2;
- return 0
- }
- case 6:
- case 7:
- 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)) throw e;
- return -e.errno
- }
-}
-Module["___syscall_fcntl64"] = ___syscall_fcntl64;
-
-function convertI32PairToI53Checked(lo, hi) {
- return hi + 2097152 >>> 0 < 4194305 - !!lo ? (lo >>> 0) + hi * 4294967296 : NaN
-}
-Module["convertI32PairToI53Checked"] = convertI32PairToI53Checked;
-
-function ___syscall_ftruncate64(fd, length_low, length_high) {
- try {
- var length = convertI32PairToI53Checked(length_low, length_high);
- if (isNaN(length)) return -61;
- FS.ftruncate(fd, length);
- return 0
- } catch (e) {
- if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e;
- return -e.errno
- }
-}
-Module["___syscall_ftruncate64"] = ___syscall_ftruncate64;
-
-function ___syscall_ioctl(fd, op, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- var stream = SYSCALLS.getStreamFromFD(fd);
- 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:
- return -28
- }
- } catch (e) {
- if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e;
- return -e.errno
- }
-}
-Module["___syscall_ioctl"] = ___syscall_ioctl;
-
-function ___syscall_openat(dirfd, path, flags, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- path = SYSCALLS.getStr(path);
- path = SYSCALLS.calculateAt(dirfd, path);
- var mode = varargs ? SYSCALLS.get() : 0;
- return FS.open(path, flags, mode).fd
- } catch (e) {
- if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e;
- return -e.errno
- }
-}
-Module["___syscall_openat"] = ___syscall_openat;
-
-function __emscripten_date_now() {
- return Date.now()
-}
-Module["__emscripten_date_now"] = __emscripten_date_now;
-
-function readI53FromI64(ptr) {
- return HEAPU32[ptr >> 2] + HEAP32[ptr + 4 >> 2] * 4294967296
-}
-Module["readI53FromI64"] = readI53FromI64;
-
-function __localtime_js(time, tmPtr) {
- var date = new Date(readI53FromI64(time) * 1e3);
- HEAP32[tmPtr >> 2] = date.getSeconds();
- HEAP32[tmPtr + 4 >> 2] = date.getMinutes();
- HEAP32[tmPtr + 8 >> 2] = date.getHours();
- HEAP32[tmPtr + 12 >> 2] = date.getDate();
- HEAP32[tmPtr + 16 >> 2] = date.getMonth();
- HEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900;
- HEAP32[tmPtr + 24 >> 2] = date.getDay();
- var start = new Date(date.getFullYear(), 0, 1);
- var yday = (date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24) | 0;
- HEAP32[tmPtr + 28 >> 2] = yday;
- HEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60);
- var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
- var winterOffset = start.getTimezoneOffset();
- var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;
- HEAP32[tmPtr + 32 >> 2] = dst
-}
-Module["__localtime_js"] = __localtime_js;
-
-function allocateUTF8(str) {
- var size = lengthBytesUTF8(str) + 1;
- var ret = _malloc(size);
- if (ret) stringToUTF8Array(str, HEAP8, ret, size);
- return ret
-}
-Module["allocateUTF8"] = allocateUTF8;
-
-function _tzset_impl(timezone, daylight, tzname) {
- var currentYear = (new Date).getFullYear();
- var winter = new Date(currentYear, 0, 1);
- var summer = new Date(currentYear, 6, 1);
- var winterOffset = winter.getTimezoneOffset();
- var summerOffset = summer.getTimezoneOffset();
- var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
- HEAP32[timezone >> 2] = stdTimezoneOffset * 60;
- HEAP32[daylight >> 2] = Number(winterOffset != summerOffset);
-
- function extractZone(date) {
- var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
- return match ? match[1] : "GMT"
- }
- var winterName = extractZone(winter);
- var summerName = extractZone(summer);
- var winterNamePtr = allocateUTF8(winterName);
- var summerNamePtr = allocateUTF8(summerName);
- if (summerOffset < winterOffset) {
- HEAPU32[tzname >> 2] = winterNamePtr;
- HEAPU32[tzname + 4 >> 2] = summerNamePtr
- } else {
- HEAPU32[tzname >> 2] = summerNamePtr;
- HEAPU32[tzname + 4 >> 2] = winterNamePtr
- }
-}
-Module["_tzset_impl"] = _tzset_impl;
-
-function __tzset_js(timezone, daylight, tzname) {
- if (__tzset_js.called) return;
- __tzset_js.called = true;
- _tzset_impl(timezone, daylight, tzname)
-}
-Module["__tzset_js"] = __tzset_js;
-
-function _abort() {
- abort("")
-}
-Module["_abort"] = _abort;
-var readAsmConstArgsArray = [];
-Module["readAsmConstArgsArray"] = readAsmConstArgsArray;
-
-function readAsmConstArgs(sigPtr, buf) {
- readAsmConstArgsArray.length = 0;
- var ch;
- buf >>= 2;
- while (ch = HEAPU8[sigPtr++]) {
- buf += ch != 105 & buf;
- readAsmConstArgsArray.push(ch == 105 ? HEAP32[buf] : HEAPF64[buf++ >> 1]);
- ++buf
- }
- return readAsmConstArgsArray
-}
-Module["readAsmConstArgs"] = readAsmConstArgs;
-
-function _emscripten_asm_const_int(code, sigPtr, argbuf) {
- var args = readAsmConstArgs(sigPtr, argbuf);
- return ASM_CONSTS[code].apply(null, args)
-}
-Module["_emscripten_asm_const_int"] = _emscripten_asm_const_int;
-
-function _emscripten_memcpy_big(dest, src, num) {
- HEAPU8.copyWithin(dest, src, src + num)
-}
-Module["_emscripten_memcpy_big"] = _emscripten_memcpy_big;
-
-function getHeapMax() {
- return HEAPU8.length
-}
-Module["getHeapMax"] = getHeapMax;
-
-function abortOnCannotGrowMemory(requestedSize) {
- abort("OOM")
-}
-Module["abortOnCannotGrowMemory"] = abortOnCannotGrowMemory;
-
-function _emscripten_resize_heap(requestedSize) {
- var oldSize = HEAPU8.length;
- requestedSize = requestedSize >>> 0;
- abortOnCannotGrowMemory(requestedSize)
-}
-Module["_emscripten_resize_heap"] = _emscripten_resize_heap;
-var ENV = {};
-Module["ENV"] = ENV;
-
-function getExecutableName() {
- return thisProgram || "./this.program"
-}
-Module["getExecutableName"] = getExecutableName;
-
-function getEnvStrings() {
- if (!getEnvStrings.strings) {
- var lang = (typeof navigator == "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8";
- var env = {
- "USER": "web_user",
- "LOGNAME": "web_user",
- "PATH": "/",
- "PWD": "/",
- "HOME": "/home/web_user",
- "LANG": lang,
- "_": getExecutableName()
- };
- for (var x in ENV) {
- if (ENV[x] === undefined) delete env[x];
- else env[x] = ENV[x]
- }
- var strings = [];
- for (var x in env) {
- strings.push(x + "=" + env[x])
- }
- getEnvStrings.strings = strings
- }
- return getEnvStrings.strings
-}
-Module["getEnvStrings"] = getEnvStrings;
-
-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
-}
-Module["writeAsciiToMemory"] = writeAsciiToMemory;
-
-function _environ_get(__environ, environ_buf) {
- var bufSize = 0;
- getEnvStrings().forEach(function (string, i) {
- var ptr = environ_buf + bufSize;
- HEAPU32[__environ + i * 4 >> 2] = ptr;
- writeAsciiToMemory(string, ptr);
- bufSize += string.length + 1
- });
- return 0
-}
-Module["_environ_get"] = _environ_get;
-
-function _environ_sizes_get(penviron_count, penviron_buf_size) {
- var strings = getEnvStrings();
- HEAPU32[penviron_count >> 2] = strings.length;
- var bufSize = 0;
- strings.forEach(function (string) {
- bufSize += string.length + 1
- });
- HEAPU32[penviron_buf_size >> 2] = bufSize;
- return 0
-}
-Module["_environ_sizes_get"] = _environ_sizes_get;
-
-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)) throw e;
- return e.errno
- }
-}
-Module["_fd_close"] = _fd_close;
-
-function doReadv(stream, iov, iovcnt, offset) {
- var ret = 0;
- for (var i = 0; i < iovcnt; i++) {
- var ptr = HEAPU32[iov >> 2];
- var len = HEAPU32[iov + 4 >> 2];
- iov += 8;
- var curr = FS.read(stream, HEAP8, ptr, len, offset);
- if (curr < 0) return -1;
- ret += curr;
- if (curr < len) break
- }
- return ret
-}
-Module["doReadv"] = doReadv;
-
-function _fd_read(fd, iov, iovcnt, pnum) {
- try {
- var stream = SYSCALLS.getStreamFromFD(fd);
- var num = doReadv(stream, iov, iovcnt);
- HEAP32[pnum >> 2] = num;
- return 0
- } catch (e) {
- if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e;
- return e.errno
- }
-}
-Module["_fd_read"] = _fd_read;
-
-function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
- try {
- var offset = convertI32PairToI53Checked(offset_low, offset_high);
- if (isNaN(offset)) return 61;
- var stream = SYSCALLS.getStreamFromFD(fd);
- 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)) throw e;
- return e.errno
- }
-}
-Module["_fd_seek"] = _fd_seek;
-
-function doWritev(stream, iov, iovcnt, offset) {
- var ret = 0;
- for (var i = 0; i < iovcnt; i++) {
- var ptr = HEAPU32[iov >> 2];
- var len = HEAPU32[iov + 4 >> 2];
- iov += 8;
- var curr = FS.write(stream, HEAP8, ptr, len, offset);
- if (curr < 0) return -1;
- ret += curr
- }
- return ret
-}
-Module["doWritev"] = doWritev;
-
-function _fd_write(fd, iov, iovcnt, pnum) {
- try {
- var stream = SYSCALLS.getStreamFromFD(fd);
- var num = doWritev(stream, iov, iovcnt);
- HEAPU32[pnum >> 2] = num;
- return 0
- } catch (e) {
- if (typeof FS == "undefined" || !(e instanceof FS.ErrnoError)) throw e;
- return e.errno
- }
-}
-Module["_fd_write"] = _fd_write;
-
-function _setTempRet0(val) {
- setTempRet0(val)
-}
-Module["_setTempRet0"] = _setTempRet0;
-
-function __isLeapYear(year) {
- return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)
-}
-Module["__isLeapYear"] = __isLeapYear;
-
-function __arraySum(array, index) {
- var sum = 0;
- for (var i = 0; i <= index; sum += array[i++]) {}
- return sum
-}
-Module["__arraySum"] = __arraySum;
-var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-Module["__MONTH_DAYS_LEAP"] = __MONTH_DAYS_LEAP;
-var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-Module["__MONTH_DAYS_REGULAR"] = __MONTH_DAYS_REGULAR;
-
-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
-}
-Module["__addDays"] = __addDays;
-
-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
- }
- return thisDate.getFullYear()
- }
- 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"
- }
- 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 days = date.tm_yday + 7 - date.tm_wday;
- return leadingNulls(Math.floor(days / 7), 2)
- },
- "%V": function (date) {
- var val = Math.floor((date.tm_yday + 7 - (date.tm_wday + 6) % 7) / 7);
- if ((date.tm_wday + 371 - date.tm_yday - 2) % 7 <= 2) {
- val++
- }
- if (!val) {
- val = 52;
- var dec31 = (date.tm_wday + 7 - date.tm_yday - 1) % 7;
- if (dec31 == 4 || dec31 == 5 && __isLeapYear(date.tm_year % 400 - 1)) {
- val++
- }
- } else if (val == 53) {
- var jan1 = (date.tm_wday + 371 - date.tm_yday) % 7;
- if (jan1 != 4 && (jan1 != 3 || !__isLeapYear(date.tm_year))) val = 1
- }
- return leadingNulls(val, 2)
- },
- "%w": function (date) {
- return date.tm_wday
- },
- "%W": function (date) {
- var days = date.tm_yday + 7 - (date.tm_wday + 6) % 7;
- return leadingNulls(Math.floor(days / 7), 2)
- },
- "%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 "%"
- }
- };
- pattern = pattern.replace(/%%/g, "\0\0");
- for (var rule in EXPANSION_RULES_2) {
- if (pattern.includes(rule)) {
- pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date))
- }
- }
- pattern = pattern.replace(/\0\0/g, "%");
- var bytes = intArrayFromString(pattern, false);
- if (bytes.length > maxsize) {
- return 0
- }
- writeArrayToMemory(bytes, s);
- return bytes.length - 1
-}
-Module["_strftime"] = _strftime;
-
-function _strftime_l(s, maxsize, format, tm) {
- return _strftime(s, maxsize, format, tm)
-}
-Module["_strftime_l"] = _strftime_l;
-
-function _proc_exit(code) {
- EXITSTATUS = code;
- if (!keepRuntimeAlive()) {
- if (Module["onExit"]) Module["onExit"](code);
- ABORT = true
- }
- quit_(code, new ExitStatus(code))
-}
-Module["_proc_exit"] = _proc_exit;
-
-function exitJS(status, implicit) {
- EXITSTATUS = status;
- _proc_exit(status)
-}
-Module["exitJS"] = exitJS;
-
-function uleb128Encode(n, target) {
- if (n < 128) {
- target.push(n)
- } else {
- target.push(n % 128 | 128, n >> 7)
- }
-}
-Module["uleb128Encode"] = uleb128Encode;
-
-function sigToWasmTypes(sig) {
- var typeNames = {
- "i": "i32",
- "j": "i64",
- "f": "f32",
- "d": "f64",
- "p": "i32"
- };
- var type = {
- parameters: [],
- results: sig[0] == "v" ? [] : [typeNames[sig[0]]]
- };
- for (var i = 1; i < sig.length; ++i) {
- type.parameters.push(typeNames[sig[i]])
- }
- return type
-}
-Module["sigToWasmTypes"] = sigToWasmTypes;
-
-function convertJsFunctionToWasm(func, sig) {
- if (typeof WebAssembly.Function == "function") {
- return new WebAssembly.Function(sigToWasmTypes(sig), func)
- }
- var typeSectionBody = [1, 96];
- var sigRet = sig.slice(0, 1);
- var sigParam = sig.slice(1);
- var typeCodes = {
- "i": 127,
- "p": 127,
- "j": 126,
- "f": 125,
- "d": 124
- };
- uleb128Encode(sigParam.length, typeSectionBody);
- for (var i = 0; i < sigParam.length; ++i) {
- typeSectionBody.push(typeCodes[sigParam[i]])
- }
- if (sigRet == "v") {
- typeSectionBody.push(0)
- } else {
- typeSectionBody.push(1, typeCodes[sigRet])
- }
- var bytes = [0, 97, 115, 109, 1, 0, 0, 0, 1];
- uleb128Encode(typeSectionBody.length, bytes);
- bytes.push.apply(bytes, typeSectionBody);
- bytes.push(2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0);
- var module = new WebAssembly.Module(new Uint8Array(bytes));
- var instance = new WebAssembly.Instance(module, {
- "e": {
- "f": func
- }
- });
- var wrappedFunc = instance.exports["f"];
- return wrappedFunc
-}
-Module["convertJsFunctionToWasm"] = convertJsFunctionToWasm;
-var wasmTableMirror = [];
-Module["wasmTableMirror"] = wasmTableMirror;
-
-function getWasmTableEntry(funcPtr) {
- var func = wasmTableMirror[funcPtr];
- if (!func) {
- if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;
- wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr)
- }
- return func
-}
-Module["getWasmTableEntry"] = getWasmTableEntry;
-
-function updateTableMap(offset, count) {
- if (functionsInTableMap) {
- for (var i = offset; i < offset + count; i++) {
- var item = getWasmTableEntry(i);
- if (item) {
- functionsInTableMap.set(item, i)
- }
- }
- }
-}
-Module["updateTableMap"] = updateTableMap;
-var functionsInTableMap = undefined;
-Module["functionsInTableMap"] = functionsInTableMap;
-var freeTableIndexes = [];
-Module["freeTableIndexes"] = freeTableIndexes;
-
-function getEmptyTableSlot() {
- if (freeTableIndexes.length) {
- return freeTableIndexes.pop()
- }
- try {
- wasmTable.grow(1)
- } catch (err) {
- if (!(err instanceof RangeError)) {
- throw err
- }
- throw "Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."
- }
- return wasmTable.length - 1
-}
-Module["getEmptyTableSlot"] = getEmptyTableSlot;
-
-function setWasmTableEntry(idx, func) {
- wasmTable.set(idx, func);
- wasmTableMirror[idx] = wasmTable.get(idx)
-}
-Module["setWasmTableEntry"] = setWasmTableEntry;
-
-function addFunction(func, sig) {
- if (!functionsInTableMap) {
- functionsInTableMap = new WeakMap;
- updateTableMap(0, wasmTable.length)
- }
- if (functionsInTableMap.has(func)) {
- return functionsInTableMap.get(func)
- }
- var ret = getEmptyTableSlot();
- try {
- setWasmTableEntry(ret, func)
- } catch (err) {
- if (!(err instanceof TypeError)) {
- throw err
- }
- var wrapped = convertJsFunctionToWasm(func, sig);
- setWasmTableEntry(ret, wrapped)
- }
- functionsInTableMap.set(func, ret);
- return ret
-}
-Module["addFunction"] = addFunction;
-
-function removeFunction(index) {
- functionsInTableMap.delete(getWasmTableEntry(index));
- freeTableIndexes.push(index)
-}
-Module["removeFunction"] = removeFunction;
-var ALLOC_NORMAL = 0;
-Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
-var ALLOC_STACK = 1;
-Module["ALLOC_STACK"] = ALLOC_STACK;
-
-function allocate(slab, allocator) {
- var ret;
- if (allocator == ALLOC_STACK) {
- ret = stackAlloc(slab.length)
- } else {
- ret = _malloc(slab.length)
- }
- if (!slab.subarray && !slab.slice) {
- slab = new Uint8Array(slab)
- }
- HEAPU8.set(slab, ret);
- return ret
-}
-Module["allocate"] = allocate;
-
-function AsciiToString(ptr) {
- var str = "";
- while (1) {
- var ch = HEAPU8[ptr++ >> 0];
- if (!ch) return str;
- str += String.fromCharCode(ch)
- }
-}
-Module["AsciiToString"] = AsciiToString;
-
-function stringToAscii(str, outPtr) {
- return writeAsciiToMemory(str, outPtr, false)
-}
-Module["stringToAscii"] = stringToAscii;
-var UTF16Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf-16le") : undefined;
-Module["UTF16Decoder"] = UTF16Decoder;
-
-function UTF16ToString(ptr, maxBytesToRead) {
- var endPtr = ptr;
- var idx = endPtr >> 1;
- var maxIdx = idx + maxBytesToRead / 2;
- while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;
- endPtr = idx << 1;
- if (endPtr - ptr > 32 && UTF16Decoder) {
- return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr))
- } else {
- var str = "";
- for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {
- var codeUnit = HEAP16[ptr + i * 2 >> 1];
- if (codeUnit == 0) break;
- str += String.fromCharCode(codeUnit)
- }
- return str
- }
-}
-Module["UTF16ToString"] = UTF16ToString;
-
-function stringToUTF16(str, outPtr, maxBytesToWrite) {
- if (maxBytesToWrite === undefined) {
- maxBytesToWrite = 2147483647
- }
- if (maxBytesToWrite < 2) return 0;
- maxBytesToWrite -= 2;
- var startPtr = outPtr;
- var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length;
- for (var i = 0; i < numCharsToWrite; ++i) {
- var codeUnit = str.charCodeAt(i);
- HEAP16[outPtr >> 1] = codeUnit;
- outPtr += 2
- }
- HEAP16[outPtr >> 1] = 0;
- return outPtr - startPtr
-}
-Module["stringToUTF16"] = stringToUTF16;
-
-function lengthBytesUTF16(str) {
- return str.length * 2
-}
-Module["lengthBytesUTF16"] = lengthBytesUTF16;
-
-function UTF32ToString(ptr, maxBytesToRead) {
- var i = 0;
- var str = "";
- while (!(i >= maxBytesToRead / 4)) {
- var utf32 = HEAP32[ptr + i * 4 >> 2];
- if (utf32 == 0) break;
- ++i;
- if (utf32 >= 65536) {
- var ch = utf32 - 65536;
- str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
- } else {
- str += String.fromCharCode(utf32)
- }
- }
- return str
-}
-Module["UTF32ToString"] = UTF32ToString;
-
-function stringToUTF32(str, outPtr, maxBytesToWrite) {
- if (maxBytesToWrite === undefined) {
- maxBytesToWrite = 2147483647
- }
- if (maxBytesToWrite < 4) return 0;
- var startPtr = outPtr;
- var endPtr = startPtr + maxBytesToWrite - 4;
- for (var i = 0; i < str.length; ++i) {
- var codeUnit = str.charCodeAt(i);
- if (codeUnit >= 55296 && codeUnit <= 57343) {
- var trailSurrogate = str.charCodeAt(++i);
- codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023
- }
- HEAP32[outPtr >> 2] = codeUnit;
- outPtr += 4;
- if (outPtr + 4 > endPtr) break
- }
- HEAP32[outPtr >> 2] = 0;
- return outPtr - startPtr
-}
-Module["stringToUTF32"] = stringToUTF32;
-
-function lengthBytesUTF32(str) {
- var len = 0;
- for (var i = 0; i < str.length; ++i) {
- var codeUnit = str.charCodeAt(i);
- if (codeUnit >= 55296 && codeUnit <= 57343) ++i;
- len += 4
- }
- return len
-}
-Module["lengthBytesUTF32"] = lengthBytesUTF32;
-
-function allocateUTF8OnStack(str) {
- var size = lengthBytesUTF8(str) + 1;
- var ret = stackAlloc(size);
- stringToUTF8Array(str, HEAP8, ret, size);
- return ret
-}
-Module["allocateUTF8OnStack"] = allocateUTF8OnStack;
-
-function writeStringToMemory(string, buffer, dontAddNull) {
- warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");
- var lastChar, end;
- if (dontAddNull) {
- end = buffer + lengthBytesUTF8(string);
- lastChar = HEAP8[end]
- }
- stringToUTF8(string, buffer, Infinity);
- if (dontAddNull) HEAP8[end] = lastChar
-}
-Module["writeStringToMemory"] = writeStringToMemory;
-
-function 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("")
-}
-Module["intArrayToString"] = intArrayToString;
-
-function warnOnce(text) {
- if (!warnOnce.shown) warnOnce.shown = {};
- if (!warnOnce.shown[text]) {
- warnOnce.shown[text] = 1;
- if (ENVIRONMENT_IS_NODE) text = "warning: " + text;
- err(text)
- }
-}
-Module["warnOnce"] = warnOnce;
-
-function getCFunc(ident) {
- var func = Module["_" + ident];
- return func
-}
-Module["getCFunc"] = getCFunc;
-
-function ccall(ident, returnType, argTypes, args, opts) {
- var toC = {
- "string": 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": 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);
-
- function onDone(ret) {
- if (stack !== 0) stackRestore(stack);
- return convertReturnValue(ret)
- }
- ret = onDone(ret);
- return ret
-}
-Module["ccall"] = ccall;
-
-function cwrap(ident, returnType, argTypes, opts) {
- argTypes = argTypes || [];
- var numericArgs = argTypes.every(type => type === "number" || type === "boolean");
- var numericRet = returnType !== "string";
- if (numericRet && numericArgs && !opts) {
- return getCFunc(ident)
- }
- return function () {
- return ccall(ident, returnType, argTypes, arguments, opts)
- }
-}
-Module["cwrap"] = cwrap;
-var 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
-};
-var readMode = 292 | 73;
-var writeMode = 146;
-Object.defineProperties(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)
- }
- }
-});
-FS.FSNode = FSNode;
-FS.staticInit();
-var ASSERTIONS = false;
-var asmLibraryArg = {
- "a": ___assert_fail,
- "c": ___cxa_allocate_exception,
- "b": ___cxa_throw,
- "g": ___syscall_fcntl64,
- "k": ___syscall_ftruncate64,
- "w": ___syscall_ioctl,
- "v": ___syscall_openat,
- "q": __emscripten_date_now,
- "p": __localtime_js,
- "o": __tzset_js,
- "n": aa,
- "e": _abort,
- "m": _emscripten_asm_const_int,
- "l": _emscripten_memcpy_big,
- "d": _emscripten_resize_heap,
- "u": _environ_get,
- "t": _environ_sizes_get,
- "f": _fd_close,
- "s": _fd_read,
- "j": _fd_seek,
- "r": _fd_write,
- "i": _setTempRet0,
- "h": _strftime_l
-};
-var asm = createWasm();
-var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function () {
- return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["y"]).apply(null, arguments)
-};
-var _malloc = Module["_malloc"] = function () {
- return (_malloc = Module["_malloc"] = Module["asm"]["z"]).apply(null, arguments)
-};
-var _realloc = Module["_realloc"] = function () {
- return (_realloc = Module["_realloc"] = Module["asm"]["A"]).apply(null, arguments)
-};
-var _bb = Module["_bb"] = function () {
- return (_bb = Module["_bb"] = Module["asm"]["B"]).apply(null, arguments)
-};
-var _setSampleRate = Module["_setSampleRate"] = function () {
- return (_setSampleRate = Module["_setSampleRate"] = Module["asm"]["C"]).apply(null, arguments)
-};
-var _main = Module["_main"] = function () {
- return (_main = Module["_main"] = Module["asm"]["D"]).apply(null, arguments)
-};
-var _prepareRomBuffer = Module["_prepareRomBuffer"] = function () {
- return (_prepareRomBuffer = Module["_prepareRomBuffer"] = Module["asm"]["E"]).apply(null, arguments)
-};
-var _getSymbol = Module["_getSymbol"] = function () {
- return (_getSymbol = Module["_getSymbol"] = Module["asm"]["F"]).apply(null, arguments)
-};
-var _reset = Module["_reset"] = function () {
- return (_reset = Module["_reset"] = Module["asm"]["G"]).apply(null, arguments)
-};
-var _loadROM = Module["_loadROM"] = function () {
- return (_loadROM = Module["_loadROM"] = Module["asm"]["H"]).apply(null, arguments)
-};
-var _savGetSize = Module["_savGetSize"] = function () {
- return (_savGetSize = Module["_savGetSize"] = Module["asm"]["I"]).apply(null, arguments)
-};
-var _savGetPointer = Module["_savGetPointer"] = function () {
- return (_savGetPointer = Module["_savGetPointer"] = Module["asm"]["J"]).apply(null, arguments)
-};
-var _savUpdateChangeFlag = Module["_savUpdateChangeFlag"] = function () {
- return (_savUpdateChangeFlag = Module["_savUpdateChangeFlag"] = Module["asm"]["K"]).apply(null, arguments)
-};
-var _runFrame = Module["_runFrame"] = function () {
- return (_runFrame = Module["_runFrame"] = Module["asm"]["L"]).apply(null, arguments)
-};
-var _fillAudioBuffer = Module["_fillAudioBuffer"] = function () {
- return (_fillAudioBuffer = Module["_fillAudioBuffer"] = Module["asm"]["M"]).apply(null, arguments)
-};
-var _zlibCompress = Module["_zlibCompress"] = function () {
- return (_zlibCompress = Module["_zlibCompress"] = Module["asm"]["N"]).apply(null, arguments)
-};
-var _zlibDecompress = Module["_zlibDecompress"] = function () {
- return (_zlibDecompress = Module["_zlibDecompress"] = Module["asm"]["O"]).apply(null, arguments)
-};
-var _chtGetList = Module["_chtGetList"] = function () {
- return (_chtGetList = Module["_chtGetList"] = Module["asm"]["P"]).apply(null, arguments)
-};
-var _chtAddItem = Module["_chtAddItem"] = function () {
- return (_chtAddItem = Module["_chtAddItem"] = Module["asm"]["Q"]).apply(null, arguments)
-};
-var _utilStrLen = Module["_utilStrLen"] = function () {
- return (_utilStrLen = Module["_utilStrLen"] = Module["asm"]["R"]).apply(null, arguments)
-};
-var _micWriteSamples = Module["_micWriteSamples"] = function () {
- return (_micWriteSamples = Module["_micWriteSamples"] = Module["asm"]["S"]).apply(null, arguments)
-};
-var _emuSetOpt = Module["_emuSetOpt"] = function () {
- return (_emuSetOpt = Module["_emuSetOpt"] = Module["asm"]["T"]).apply(null, arguments)
-};
-var ___errno_location = Module["___errno_location"] = function () {
- return (___errno_location = Module["___errno_location"] = Module["asm"]["U"]).apply(null, arguments)
-};
-var _htons = Module["_htons"] = function () {
- return (_htons = Module["_htons"] = Module["asm"]["W"]).apply(null, arguments)
-};
-var stackSave = Module["stackSave"] = function () {
- return (stackSave = Module["stackSave"] = Module["asm"]["X"]).apply(null, arguments)
-};
-var stackRestore = Module["stackRestore"] = function () {
- return (stackRestore = Module["stackRestore"] = Module["asm"]["Y"]).apply(null, arguments)
-};
-var stackAlloc = Module["stackAlloc"] = function () {
- return (stackAlloc = Module["stackAlloc"] = Module["asm"]["Z"]).apply(null, arguments)
-};
-var ___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = function () {
- return (___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = Module["asm"]["_"]).apply(null, arguments)
-};
-var dynCall_jiji = Module["dynCall_jiji"] = function () {
- return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["$"]).apply(null, arguments)
-};
-var dynCall_viijii = Module["dynCall_viijii"] = function () {
- return (dynCall_viijii = Module["dynCall_viijii"] = Module["asm"]["n"]).apply(null, arguments)
-};
-var dynCall_iiiiij = Module["dynCall_iiiiij"] = function () {
- return (dynCall_iiiiij = Module["dynCall_iiiiij"] = Module["asm"]["ba"]).apply(null, arguments)
-};
-var dynCall_iiiiijj = Module["dynCall_iiiiijj"] = function () {
- return (dynCall_iiiiijj = Module["dynCall_iiiiijj"] = Module["asm"]["ca"]).apply(null, arguments)
-};
-var dynCall_iiiiiijj = Module["dynCall_iiiiiijj"] = function () {
- return (dynCall_iiiiiijj = Module["dynCall_iiiiiijj"] = Module["asm"]["da"]).apply(null, arguments)
-};
-Module["UTF8ToString"] = UTF8ToString;
-var calledRun;
-dependenciesFulfilled = function runCaller() {
- if (!calledRun) run();
- if (!calledRun) dependenciesFulfilled = runCaller
-};
-
-function callMain(args) {
- var entryFunction = Module["_main"];
- var argc = 0;
- var argv = 0;
- try {
- var ret = entryFunction(argc, argv);
- exitJS(ret, true);
- return ret
- } catch (e) {
- return handleException(e)
- }
-}
-
-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"]();
- if (shouldRunNow) callMain(args);
- postRun()
- }
- if (Module["setStatus"]) {
- Module["setStatus"]("Running...");
- setTimeout(function () {
- setTimeout(function () {
- Module["setStatus"]("")
- }, 1);
- doRun()
- }, 1)
- } else {
- doRun()
- }
-}
-if (Module["preInit"]) {
- if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
- while (Module["preInit"].length > 0) {
- Module["preInit"].pop()()
- }
-}
-var shouldRunNow = true;
-if (Module["noInitialRun"]) shouldRunNow = false;
-run();
\ No newline at end of file
+var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||629145600;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}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();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}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 addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}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()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="nds.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){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(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["t"];updateMemoryViews();wasmTable=Module["asm"]["I"];addOnInit(Module["asm"]["u"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}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;var ASM_CONSTS={450841:()=>{wasmReady()}};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}Module["ExitStatus"]=ExitStatus;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}Module["callRuntimeCallbacks"]=callRuntimeCallbacks;function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}Module["getValue"]=getValue;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";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;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}Module["ExceptionInfo"]=ExceptionInfo;var exceptionLast=0;Module["exceptionLast"]=exceptionLast;var uncaughtExceptionCount=0;Module["uncaughtExceptionCount"]=uncaughtExceptionCount;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}Module["___cxa_throw"]=___cxa_throw;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}Module["setErrNo"]=setErrNo;var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(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:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname: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:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};Module["PATH"]=PATH;function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}Module["getRandomDevice"]=getRandomDevice;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.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=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;i0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;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.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(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;i0){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)}},fsync: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)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};Module["TTY"]=TTY;function zeroMemory(address,size){HEAPU8.fill(0,address,address+size);return address}Module["zeroMemory"]=zeroMemory;function alignMemory(size,alignment){return Math.ceil(size/alignment)*alignment}Module["alignMemory"]=alignMemory;function mmapAlloc(size){abort()}Module["mmapAlloc"]=mmapAlloc;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;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);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>>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)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}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.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},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];parent.timestamp=Date.now()},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;i0||position+length{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}Module["asyncLoad"]=asyncLoad;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath: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:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode: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:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,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:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}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:(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:(fd_start=0,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:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};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}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open: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:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts: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:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("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(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(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: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(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(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 errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(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 errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(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;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;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 errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}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){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}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)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir: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:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink: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:(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:path=>{return FS.stat(path,true)},chmod:(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:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(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:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(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 errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(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:(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:(path,flags,mode)=>{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 errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});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}}return stream},close: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:stream=>{return stream.fd===null},llseek:(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:(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:(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.seekable&&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;return bytesWritten},allocate:(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:(stream,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,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;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:(path,data,opts={})=>{opts.flags=opts.flags||577;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:()=>FS.currentPath,chdir: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 errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>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=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(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:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{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",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{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(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(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:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(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},createPath:(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:(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:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(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{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:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return 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){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(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=(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);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||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(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;out("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(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){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{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{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)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};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(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});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=()=>{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(path=>{var getRequest=files.get(path);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=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};Module["FS"]=FS;var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,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+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;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;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+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+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+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+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+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+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;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+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};Module["SYSCALLS"]=SYSCALLS;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,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 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7: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))throw e;return-e.errno}}Module["___syscall_fcntl64"]=___syscall_fcntl64;function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}Module["convertI32PairToI53Checked"]=convertI32PairToI53Checked;function ___syscall_ftruncate64(fd,length_low,length_high){try{var length=convertI32PairToI53Checked(length_low,length_high);if(isNaN(length))return-61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}Module["___syscall_ftruncate64"]=___syscall_ftruncate64;function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);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:return-28}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}Module["___syscall_ioctl"]=___syscall_ioctl;function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}Module["___syscall_openat"]=___syscall_openat;function readI53FromI64(ptr){return HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296}Module["readI53FromI64"]=readI53FromI64;function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}Module["__isLeapYear"]=__isLeapYear;var __MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];Module["__MONTH_DAYS_LEAP_CUMULATIVE"]=__MONTH_DAYS_LEAP_CUMULATIVE;var __MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];Module["__MONTH_DAYS_REGULAR_CUMULATIVE"]=__MONTH_DAYS_REGULAR_CUMULATIVE;function __yday_from_date(date){var isLeapYear=__isLeapYear(date.getFullYear());var monthDaysCumulative=isLeapYear?__MONTH_DAYS_LEAP_CUMULATIVE:__MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday}Module["__yday_from_date"]=__yday_from_date;function __localtime_js(time,tmPtr){var date=new Date(readI53FromI64(time)*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=__yday_from_date(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}Module["__localtime_js"]=__localtime_js;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}Module["allocateUTF8"]=allocateUTF8;function __tzset_js(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}}Module["__tzset_js"]=__tzset_js;function _abort(){abort("")}Module["_abort"]=_abort;var readEmAsmArgsArray=[];Module["readEmAsmArgsArray"]=readEmAsmArgsArray;function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}Module["readEmAsmArgs"]=readEmAsmArgs;function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}Module["runEmAsmFunction"]=runEmAsmFunction;function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}Module["_emscripten_asm_const_int"]=_emscripten_asm_const_int;function _emscripten_date_now(){return Date.now()}Module["_emscripten_date_now"]=_emscripten_date_now;function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}Module["_emscripten_memcpy_big"]=_emscripten_memcpy_big;function getHeapMax(){return HEAPU8.length}Module["getHeapMax"]=getHeapMax;function abortOnCannotGrowMemory(requestedSize){abort("OOM")}Module["abortOnCannotGrowMemory"]=abortOnCannotGrowMemory;function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}Module["_emscripten_resize_heap"]=_emscripten_resize_heap;var ENV={};Module["ENV"]=ENV;function getExecutableName(){return thisProgram||"./this.program"}Module["getExecutableName"]=getExecutableName;function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}Module["getEnvStrings"]=getEnvStrings;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}Module["_environ_get"]=_environ_get;function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}Module["_environ_sizes_get"]=_environ_sizes_get;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))throw e;return e.errno}}Module["_fd_close"]=_fd_close;function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}Module["_fd_read"]=_fd_read;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);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))throw e;return e.errno}}Module["_fd_seek"]=_fd_seek;function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret}Module["doWritev"]=doWritev;function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}Module["_fd_write"]=_fd_write;function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}Module["__arraySum"]=__arraySum;var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];Module["__MONTH_DAYS_LEAP"]=__MONTH_DAYS_LEAP;var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];Module["__MONTH_DAYS_REGULAR"]=__MONTH_DAYS_REGULAR;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}Module["__addDays"]=__addDays;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;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.length0?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}return thisDate.getFullYear()}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"}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 days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%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"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}Module["_strftime"]=_strftime;function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}Module["_strftime_l"]=_strftime_l;function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}Module["_proc_exit"]=_proc_exit;function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}Module["exitJS"]=exitJS;function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}Module["handleException"]=handleException;var 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};var readMode=292|73;var writeMode=146;Object.defineProperties(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)}}});FS.FSNode=FSNode;FS.staticInit();var asmLibraryArg={"a":___cxa_throw,"d":___syscall_fcntl64,"g":___syscall_ftruncate64,"s":___syscall_ioctl,"r":___syscall_openat,"m":__localtime_js,"l":__tzset_js,"b":_abort,"k":_emscripten_asm_const_int,"j":_emscripten_date_now,"i":_emscripten_memcpy_big,"h":_emscripten_resize_heap,"q":_environ_get,"p":_environ_sizes_get,"c":_fd_close,"o":_fd_read,"f":_fd_seek,"n":_fd_write,"e":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["u"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["v"]).apply(null,arguments)};var _setSampleRate=Module["_setSampleRate"]=function(){return(_setSampleRate=Module["_setSampleRate"]=Module["asm"]["w"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["x"]).apply(null,arguments)};var _prepareRomBuffer=Module["_prepareRomBuffer"]=function(){return(_prepareRomBuffer=Module["_prepareRomBuffer"]=Module["asm"]["y"]).apply(null,arguments)};var _getSymbol=Module["_getSymbol"]=function(){return(_getSymbol=Module["_getSymbol"]=Module["asm"]["z"]).apply(null,arguments)};var _loadROM=Module["_loadROM"]=function(){return(_loadROM=Module["_loadROM"]=Module["asm"]["A"]).apply(null,arguments)};var _savGetSize=Module["_savGetSize"]=function(){return(_savGetSize=Module["_savGetSize"]=Module["asm"]["B"]).apply(null,arguments)};var _savGetPointer=Module["_savGetPointer"]=function(){return(_savGetPointer=Module["_savGetPointer"]=Module["asm"]["C"]).apply(null,arguments)};var _savUpdateChangeFlag=Module["_savUpdateChangeFlag"]=function(){return(_savUpdateChangeFlag=Module["_savUpdateChangeFlag"]=Module["asm"]["D"]).apply(null,arguments)};var _runFrame=Module["_runFrame"]=function(){return(_runFrame=Module["_runFrame"]=Module["asm"]["E"]).apply(null,arguments)};var _fillAudioBuffer=Module["_fillAudioBuffer"]=function(){return(_fillAudioBuffer=Module["_fillAudioBuffer"]=Module["asm"]["F"]).apply(null,arguments)};var _emuSetOpt=Module["_emuSetOpt"]=function(){return(_emuSetOpt=Module["_emuSetOpt"]=Module["asm"]["G"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["H"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["J"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["K"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["L"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["M"]).apply(null,arguments)};var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=function(){return(___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["S"]).apply(null,arguments)};var ___start_em_js=Module["___start_em_js"]=450784;var ___stop_em_js=Module["___stop_em_js"]=450841;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}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"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run();
diff --git a/public/Repo/ds.44670.org/build/nds.symbols b/public/Repo/ds.44670.org/build/nds.symbols
new file mode 100644
index 0000000..9c3928a
--- /dev/null
+++ b/public/Repo/ds.44670.org/build/nds.symbols
@@ -0,0 +1,2213 @@
+0:__cxa_throw
+1:abort
+2:__wasi_fd_close
+3:__syscall_fcntl64
+4:strftime_l
+5:legalimport$__wasi_fd_seek
+6:legalimport$__syscall_ftruncate64
+7:emscripten_resize_heap
+8:emscripten_memcpy_big
+9:emscripten_date_now
+10:emscripten_asm_const_int
+11:_tzset_js
+12:_localtime_js
+13:__wasi_fd_write
+14:__wasi_fd_read
+15:__wasi_environ_sizes_get
+16:__wasi_environ_get
+17:__syscall_openat
+18:__syscall_ioctl
+19:memset
+20:dlfree
+21:_MMU_ARM9_read32\28unsigned\20int\29
+22:_MMU_ARM7_read32\28unsigned\20int\29
+23:armcpu_switchMode\28armcpu_t*\2c\20unsigned\20char\29
+24:__memcpy
+25:operator\20new\28unsigned\20long\29
+26:\28anonymous\20namespace\29::ColorDistanceARGB::dist\28unsigned\20int\2c\20unsigned\20int\2c\20double\29
+27:_MMU_ARM7_read08\28unsigned\20int\29
+28:_MMU_ARM9_write32\28unsigned\20int\2c\20unsigned\20int\29
+29:puts
+30:_MMU_ARM7_write32\28unsigned\20int\2c\20unsigned\20int\29
+31:free_aligned\28void*\29
+32:std::__2::basic_string\2c\20std::__2::allocator>::~basic_string\28\29
+33:_MMU_ARM9_read08\28unsigned\20int\29
+34:memcmp
+35:iprintf
+36:_MMU_ARM7_read16\28unsigned\20int\29
+37:std::__2::basic_string\2c\20std::__2::allocator>::resize\5babi:v15006\5d\28unsigned\20long\29
+38:_MMU_ARM7_write08\28unsigned\20int\2c\20unsigned\20char\29
+39:malloc_aligned\28unsigned\20long\2c\20unsigned\20long\29
+40:Logger::log\28unsigned\20int\2c\20char\20const*\2c\20unsigned\20int\2c\20char\20const*\2c\20...\29
+41:_MMU_ARM9_read16\28unsigned\20int\29
+42:_MMU_ARM9_write08\28unsigned\20int\2c\20unsigned\20char\29
+43:strlen
+44:std::__2::basic_string\2c\20std::__2::allocator>::operator=\5babi:v15006\5d\28wchar_t\20const*\29
+45:std::__2::basic_string\2c\20std::__2::allocator>::operator=\5babi:v15006\5d\28char\20const*\29
+46:bool\20std::__2::operator==\5babi:v15006\5d>\28std::__2::istreambuf_iterator>\20const&\2c\20std::__2::istreambuf_iterator>\20const&\29
+47:bool\20std::__2::operator==\5babi:v15006\5d>\28std::__2::istreambuf_iterator>\20const&\2c\20std::__2::istreambuf_iterator>\20const&\29
+48:__shgetc
+49:SoftAPCommInterface::~SoftAPCommInterface\28\29
+50:void\20GPUEngineBase::_TransitionLineNativeToCustom<\28NDSColorFormat\29536895878>\28GPUEngineCompositorInfo&\29
+51:std::__2::__cloc\28\29
+52:dlmalloc
+53:_MMU_ARM7_write16\28unsigned\20int\2c\20unsigned\20short\29
+54:void\20GPUEngineBase::_PrecompositeNativeToCustomLineBG\28GPUEngineCompositorInfo&\29
+55:__multf3
+56:__unlockfile
+57:SNDDummyInit\28int\29
+58:std::__2::locale::id::__get\28\29
+59:memmove
+60:std::__2::locale::__imp::install\28std::__2::locale::facet*\2c\20long\29
+61:void\20std::__2::__tree_balance_after_insert*>\28std::__2::__tree_node_base*\2c\20std::__2::__tree_node_base*\29
+62:std::__2::basic_string\2c\20std::__2::allocator>::~basic_string\28\29
+63:_MMU_ARM9_write16\28unsigned\20int\2c\20unsigned\20short\29
+64:std::__2::__tree_node_base*&\20std::__2::__tree\2c\20std::__2::allocator>\2c\20void\20\28MovieData::*\29\28std::__2::basic_string\2c\20std::__2::allocator>&\2c\20std::__2::basic_string\2c\20std::__2::allocator>&\29>\2c\20std::__2::__map_value_compare\2c\20std::__2::allocator>\2c\20std::__2::__value_type\2c\20std::__2::allocator>\2c\20void\20\28MovieData::*\29\28std::__2::basic_string\2c\20std::__2::allocator>&\2c\20std::__2::basic_string\2c\20std::__2::allocator>&\29>\2c\20std::__2::less\2c\20std::__2::allocator>>\2c\20true>\2c\20std::__2::allocator\2c\20std::__2::allocator>\2c\20void\20\28MovieData::*\29\28std::__2::basic_string\2c\20std::__2::allocator>&\2c\20std::__2::basic_string\2c\20std::__2::allocator>&\29>>>::__find_equal\2c\20std::__2::allocator>>\28std::__2::__tree_end_node*>*&\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const&\29
+65:atoi
+66:is_equal\28std::type_info\20const*\2c\20std::type_info\20const*\2c\20bool\29
+67:std::__2::__throw_bad_cast\5babi:v15006\5d\28\29
+68:siprintf
+69:mass_replace\28std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const&\29
+70:std::__2::istreambuf_iterator>::operator++\5babi:v15006\5d\28\29
+71:std::__2::istreambuf_iterator>::operator++\5babi:v15006\5d\28\29
+72:_SPU_ChanUpdate\28bool\2c\20SPU_struct*\2c\20channel_struct*\29
+73:std::__2::basic_string\2c\20std::__2::allocator>::__throw_length_error\5babi:v15006\5d\28\29\20const
+74:read_timer\28int\2c\20int\29
+75:GPUEngineBase::ParseReg_BGnCNT\28GPULayerID\29
+76:void\20GPUEngineBase::_TransitionLineNativeToCustom<\28NDSColorFormat\29536891717>\28GPUEngineCompositorInfo&\29
+77:out
+78:fclose
+79:__multi3
+80:void\20GPUEngineBase::_RenderLine_BGExtended<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536891717\2c\20true\2c\20true\2c\20true>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20bool&\29
+81:void\20CopyLineExpandHinted<65535\2c\20false\2c\20false\2c\20false\2c\202ul>\28void\20const*\2c\20unsigned\20long\2c\20void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+82:std::__2::basic_string\2c\20std::__2::allocator>::operator=\5babi:v15006\5d\28std::__2::basic_string\2c\20std::__2::allocator>&&\29
+83:std::__2::basic_string\2c\20std::__2::allocator>::__init_copy_ctor_external\28char\20const*\2c\20unsigned\20long\29
+84:std::__2::__libcpp_snprintf_l\28char*\2c\20unsigned\20long\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+85:std::__2::__check_grouping\28std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*\2c\20unsigned\20int&\29
+86:pad
+87:__ashlti3
+88:std::__2::basic_string\2c\20std::__2::allocator>::append\28char\20const*\2c\20unsigned\20long\29
+89:DummyPCapInterface::freealldevs\28void*\29
+90:std::__2::ctype\20const&\20std::__2::use_facet\5babi:v15006\5d>\28std::__2::locale\20const&\29
+91:fseek
+92:unsigned\20int\20OP_STC_OPTION<1>\28unsigned\20int\29
+93:unsigned\20int\20OP_STC_OPTION<0>\28unsigned\20int\29
+94:std::__2::ctype\20const&\20std::__2::use_facet\5babi:v15006\5d>\28std::__2::locale\20const&\29
+95:fwrite
+96:__addtf3
+97:strncasecmp
+98:std::__2::vector\2c\20std::__2::allocator>\2c\20std::__2::allocator\2c\20std::__2::allocator>>>::__throw_length_error\5babi:v15006\5d\28\29\20const
+99:std::__2::char_traits::copy\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+100:std::__2::basic_string\2c\20std::__2::allocator>::begin\5babi:v15006\5d\28\29
+101:std::__2::basic_string\2c\20std::__2::allocator>::__assign_external\28char\20const*\29
+102:std::__2::__num_put_base::__identify_padding\28char*\2c\20char*\2c\20std::__2::ios_base\20const&\29
+103:fread
+104:__floatsitf
+105:std::__2::basic_string\2c\20std::__2::allocator>::append\28unsigned\20long\2c\20char\29
+106:fopen
+107:__dynamic_cast
+108:std::__2::moneypunct::do_grouping\28\29\20const
+109:TestForLoop2\28SPU_struct*\2c\20channel_struct*\29
+110:std::exception::~exception\28\29
+111:std::__2::locale::use_facet\28std::__2::locale::id&\29\20const
+112:std::__2::basic_string\2c\20std::__2::allocator>::basic_string\28std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20unsigned\20long\2c\20unsigned\20long\2c\20std::__2::allocator\20const&\29
+113:std::__2::__libcpp_locale_guard::__libcpp_locale_guard\5babi:v15006\5d\28__locale_struct*&\29
+114:__shlim
+115:void\20CopyLineExpandHinted<65535\2c\20true\2c\20false\2c\20false\2c\204ul>\28void\20const*\2c\20unsigned\20long\2c\20void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+116:strncpy
+117:std::__throw_bad_array_new_length\5babi:v15006\5d\28\29
+118:std::__2::ostreambuf_iterator>\20std::__2::__pad_and_output>\28std::__2::ostreambuf_iterator>\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20std::__2::ios_base&\2c\20char\29
+119:std::__2::char_traits::copy\28wchar_t*\2c\20wchar_t\20const*\2c\20unsigned\20long\29
+120:std::__2::basic_string\2c\20std::__2::allocator>::operator=\5babi:v15006\5d\28std::__2::basic_string\2c\20std::__2::allocator>&&\29
+121:std::__2::__num_get_base::__get_base\28std::__2::ios_base&\29
+122:std::__2::__libcpp_asprintf_l\28char**\2c\20__locale_struct*\2c\20char\20const*\2c\20...\29
+123:int\20std::__2::__get_up_to_n_digits>>\28std::__2::istreambuf_iterator>&\2c\20std::__2::istreambuf_iterator>\2c\20unsigned\20int&\2c\20std::__2::ctype\20const&\2c\20int\29
+124:int\20std::__2::__get_up_to_n_digits>>\28std::__2::istreambuf_iterator>&\2c\20std::__2::istreambuf_iterator>\2c\20unsigned\20int&\2c\20std::__2::ctype\20const&\2c\20int\29
+125:__extenddftf2
+126:std::__2::time_get>>::get\28std::__2::istreambuf_iterator>\2c\20std::__2::istreambuf_iterator>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\29\20const
+127:std::__2::time_get>>::get\28std::__2::istreambuf_iterator>\2c\20std::__2::istreambuf_iterator>\2c\20std::__2::ios_base&\2c\20unsigned\20int&\2c\20tm*\2c\20char\20const*\2c\20char\20const*\29\20const
+128:std::__2::ostreambuf_iterator>\20std::__2::__pad_and_output>\28std::__2::ostreambuf_iterator>\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const*\2c\20std::__2::ios_base&\2c\20wchar_t\29
+129:std::__2::basic_string\2c\20std::__2::allocator>::append\28char\20const*\29
+130:ftell
+131:MMU_VRAMmapControl\28unsigned\20char\2c\20unsigned\20char\29
+132:void\20GPUEngineBase::_RenderPixelIterate_Final<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536891717\2c\20true\2c\20false\2c\20true\2c\20&rot_256_map\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20short\20const*\2c\20unsigned\20char&\2c\20unsigned\20short&\29\2c\20false>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20short\20const*\29
+133:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\292\2c\20\28NDSColorFormat\29536904200\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+134:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536904200\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+135:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536904200\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+136:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536895878\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+137:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536895878\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+138:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536891717\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+139:void\20GPUEngineBase::_CompositeVRAMLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536891717\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20void\20const*\29
+140:void\20CopyLineExpandHinted<65535\2c\20true\2c\20false\2c\20false\2c\202ul>\28void\20const*\2c\20unsigned\20long\2c\20void*\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29
+141:unsigned\20int\20std::__2::__sort4\28int*\2c\20int*\2c\20int*\2c\20int*\2c\20bool\20\28*&\29\28int\2c\20int\29\29
+142:triggerDma\28EDMAMode\29
+143:strcpy
+144:std::__2::moneypunct::do_pos_format\28\29\20const
+145:std::__2::basic_string\2c\20std::__2::allocator>::end\5babi:v15006\5d\28\29
+146:std::__2::basic_string\2c\20std::__2::allocator>::end\5babi:v15006\5d\28\29
+147:std::__2::__num_put_base::__format_int\28char*\2c\20char\20const*\2c\20bool\2c\20unsigned\20int\29
+148:memchr
+149:fflush
+150:SNDDummyDeInit\28\29
+151:GPUEngineBase::ParseReg_WINOUT\28\29
+152:GPUEngineBase::ParseReg_WININ\28\29
+153:GPUEngineBase::ParseReg_MOSAIC\28\29
+154:GPUEngineBase::ParseReg_BLDCNT\28\29
+155:GPUEngineBase::ParseReg_BLDALPHA\28\29
+156:DmaController::exec\28\29
+157:vsnprintf
+158:void\20std::__2::reverse\5babi:v15006\5d\28char*\2c\20char*\29
+159:unsigned\20int\20MMU_struct::gen_IF<0>\28\29
+160:strchr
+161:std::__2::basic_string\2c\20std::__2::allocator>::push_back\28char\29
+162:std::__2::basic_string\2c\20std::__2::allocator>::basic_string\5babi:v15006\5d\28char\20const*\29
+163:scalbn
+164:bool\20GFX3D_Clipper::ClipPoly<\28ClipperMode\290>\28unsigned\20short\2c\20POLY\20const&\2c\20VERT\20const**\29
+165:__lshrti3
+166:__lockfile
+167:__letf2
+168:__cxa_atexit
+169:GPUEventHandlerDefault::DidFrameEnd\28bool\2c\20NDSDisplayInfo\20const&\29
+170:GPUEngineBase::_ResortBGLayers\28\29
+171:void\20std::__2::__double_or_nothing\28std::__2::unique_ptr&\2c\20unsigned\20int*&\2c\20unsigned\20int*&\29
+172:void\20GPUEngineBase::_RenderLine_BGExtended<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536904200\2c\20false\2c\20true\2c\20true>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20bool&\29
+173:void\20GPUEngineBase::_RenderLine_BGExtended<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536895878\2c\20false\2c\20true\2c\20true>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20bool&\29
+174:void\20GPUEngineBase::_RenderLine_BGExtended<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536891717\2c\20false\2c\20true\2c\20true>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20bool&\29
+175:std::__2::numpunct\20const&\20std::__2::use_facet\5babi:v15006\5d>\28std::__2::locale\20const&\29
+176:std::__2::numpunct\20const&\20std::__2::use_facet\5babi:v15006\5d>\28std::__2::locale\20const&\29
+177:std::__2::char_traits::move\28char*\2c\20char\20const*\2c\20unsigned\20long\29
+178:std::__2::basic_string\2c\20std::__2::allocator>::basic_string\5babi:v15006\5d\28wchar_t\20const*\29
+179:std::__2::__tree\2c\20std::__2::__map_value_compare\2c\20std::__2::less\2c\20true>\2c\20std::__2::allocator>>::destroy\28std::__2::__tree_node\2c\20void*>*\29
+180:std::__2::__num_get::__stage2_int_loop\28wchar_t\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20wchar_t\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20wchar_t\20const*\29
+181:std::__2::__num_get::__stage2_int_loop\28char\2c\20int\2c\20char*\2c\20char*&\2c\20unsigned\20int&\2c\20char\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const&\2c\20unsigned\20int*\2c\20unsigned\20int*&\2c\20char\20const*\29
+182:std::__2::__allocation_result>::pointer>\20std::__2::__allocate_at_least\5babi:v15006\5d>\28std::__2::allocator&\2c\20unsigned\20long\29
+183:sbrk
+184:fmt_u
+185:dlrealloc
+186:armcpu_init\28armcpu_t*\2c\20unsigned\20int\29
+187:__uflow
+188:__floatunsitf
+189:__cxa_allocate_exception
+190:WIFI_TXStart\28WifiTXLocIndex\2c\20IOREG_W_TXBUF_LOCATION&\29
+191:TRAPUNDEF\28armcpu_t*\29
+192:SetVertex\28\29
+193:MatrixMultiply\28int\20\28&\29\20\5b16\5d\2c\20int\20const\20\28&\29\20\5b16\5d\29
+194:GPUSubsystem::PostprocessDisplay\28NDSDisplayID\2c\20NDSDisplayInfo&\29
+195:GPUEngineBase::_RenderLine_SetupSprites\28GPUEngineCompositorInfo&\29
+196:GPUEngineBase::ResolveToCustomFramebuffer\28NDSDisplayInfo&\29
+197:GPUEngineBase::ParseReg_DISPCNT\28\29
+198:GPUEngineBase::ParseReg_BLDY\28\29
+199:Deposterize_BlendPixel\28unsigned\20int\20const*\29
+200:BackupDevice::ensure\28unsigned\20int\2c\20unsigned\20char\2c\20EMUFILE*\29
+201:writereg_POWCNT1\28int\2c\20unsigned\20int\2c\20unsigned\20int\29
+202:std::__2::ios_base::~ios_base\28\29
+203:std::__2::codecvt::do_unshift\28__mbstate_t&\2c\20char8_t*\2c\20char8_t*\2c\20char8_t*&\29\20const
+204:std::__2::basic_string\2c\20std::__2::allocator>::__grow_by_and_replace\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20char\20const*\29
+205:std::__2::basic_string\2c\20std::__2::allocator>&\20std::__2::basic_string\2c\20std::__2::allocator>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29
+206:std::__2::basic_string\2c\20std::__2::allocator>&\20std::__2::basic_string\2c\20std::__2::allocator>::__assign_no_alias\28char\20const*\2c\20unsigned\20long\29
+207:std::__2::__num_get::__stage2_int_prep\28std::__2::ios_base&\2c\20wchar_t&\29
+208:std::__2::__num_get::__do_widen\28std::__2::ios_base&\2c\20wchar_t*\29\20const
+209:std::__2::__num_get::__stage2_int_prep\28std::__2::ios_base&\2c\20char&\29
+210:std::__2::__allocation_result>::pointer>\20std::__2::__allocate_at_least\5babi:v15006\5d>\28std::__2::allocator&\2c\20unsigned\20long\29
+211:sscanf
+212:init2\28unsigned\20int*\2c\20unsigned\20int*\29
+213:execdiv\28\29
+214:__overflow
+215:WIFI_read16\28unsigned\20int\29
+216:SPU_struct::KeyOn\28int\29
+217:SNDDummyFetchSamples\28short*\2c\20unsigned\20long\2c\20ESynchMode\2c\20ISynchronizingAudioBuffer*\29
+218:ISlot1Interface::read_GCDATAIN\28unsigned\20char\29
+219:ClipperPlane<\28ClipperMode\292\2c\202\2c\201\2c\20ClipperOutput>::clipVert\28VERT\20const*\29
+220:ClipperPlane<\28ClipperMode\292\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\201\2c\20ClipperOutput>>::clipVert\28VERT\20const*\29
+221:ClipperPlane<\28ClipperMode\292\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\201\2c\20ClipperOutput>>>::clipVert\28VERT\20const*\29
+222:ClipperPlane<\28ClipperMode\292\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\201\2c\20ClipperOutput>>>>::clipVert\28VERT\20const*\29
+223:ClipperPlane<\28ClipperMode\292\2c\200\2c\201\2c\20ClipperPlane<\28ClipperMode\292\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\292\2c\202\2c\201\2c\20ClipperOutput>>>>>::clipVert\28VERT\20const*\29
+224:ClipperPlane<\28ClipperMode\291\2c\202\2c\201\2c\20ClipperOutput>::clipVert\28VERT\20const*\29
+225:ClipperPlane<\28ClipperMode\291\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\201\2c\20ClipperOutput>>::clipVert\28VERT\20const*\29
+226:ClipperPlane<\28ClipperMode\291\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\201\2c\20ClipperOutput>>>::clipVert\28VERT\20const*\29
+227:ClipperPlane<\28ClipperMode\291\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\201\2c\20ClipperOutput>>>>::clipVert\28VERT\20const*\29
+228:ClipperPlane<\28ClipperMode\291\2c\200\2c\201\2c\20ClipperPlane<\28ClipperMode\291\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\291\2c\202\2c\201\2c\20ClipperOutput>>>>>::clipVert\28VERT\20const*\29
+229:ClipperPlane<\28ClipperMode\290\2c\202\2c\201\2c\20ClipperOutput>::clipVert\28VERT\20const*\29
+230:ClipperPlane<\28ClipperMode\290\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\201\2c\20ClipperOutput>>::clipVert\28VERT\20const*\29
+231:ClipperPlane<\28ClipperMode\290\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\201\2c\20ClipperOutput>>>::clipVert\28VERT\20const*\29
+232:ClipperPlane<\28ClipperMode\290\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\201\2c\20ClipperOutput>>>>::clipVert\28VERT\20const*\29
+233:ClipperPlane<\28ClipperMode\290\2c\200\2c\201\2c\20ClipperPlane<\28ClipperMode\290\2c\201\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\201\2c\201\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\20-1\2c\20ClipperPlane<\28ClipperMode\290\2c\202\2c\201\2c\20ClipperOutput>>>>>::clipVert\28VERT\20const*\29
+234:CheatWrite\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+235:write_timer\28int\2c\20int\2c\20unsigned\20short\29
+236:write_auxspicnt\28int\2c\20int\2c\20int\2c\20int\29
+237:void\20std::__2::reverse\5babi:v15006\5d\28unsigned\20int*\2c\20unsigned\20int*\29
+238:void\20std::__2::__introsort\28int*\2c\20int*\2c\20bool\20\28*&\29\28int\2c\20int\29\2c\20std::__2::iterator_traits::difference_type\29
+239:void\20RasterizerUnit::_sort_verts\28\29
+240:void\20RasterizerUnit::_sort_verts\28\29
+241:void\20RasterizerUnit::_sort_verts\28\29
+242:void\20RasterizerUnit::_sort_verts\28\29
+243:void\20RasterizerUnit::_sort_verts\28\29
+244:void\20GPUEngineBase::_RenderPixelIterate_Final<\28GPUCompositorMode\291\2c\20\28NDSColorFormat\29536891717\2c\20true\2c\20false\2c\20true\2c\20&rot_256_map\28int\2c\20int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20short\20const*\2c\20unsigned\20char&\2c\20unsigned\20short&\29\2c\20true>\28GPUEngineCompositorInfo&\2c\20IOREG_BGnParameter\20const&\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20short\20const*\29
+245:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536904200\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+246:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536904200\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+247:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536895878\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+248:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536895878\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+249:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536891717\2c\20\28GPULayerType\291\2c\20true>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+250:void\20GPUEngineBase::_CompositeLineDeferred<\28GPUCompositorMode\29100\2c\20\28NDSColorFormat\29536891717\2c\20\28GPULayerType\291\2c\20false>\28GPUEngineCompositorInfo&\2c\20unsigned\20short\20const*\2c\20unsigned\20char\20const*\29
+251:void\20GPUEngineBase::UpdateRenderStates<\28NDSColorFormat\29536891717>\28unsigned\20long\29
+252:ungetc
+253:strtoul
+254:strcmp
+255:std::__2::moneypunct::do_decimal_point\28\29\20const
+256:std::__2::moneypunct::do_decimal_point\28\29\20const
+257:std::__2::codecvt::do_max_length\28\29\20const
+258:std::__2::basic_string\2c\20std::__2::allocator>\20const*\20std::__2::__scan_keyword>\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::ctype>\28std::__2::istreambuf_iterator>&\2c\20std::__2::istreambuf_iterator>\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::ctype\20const&\2c\20unsigned\20int&\2c\20bool\29
+259:std::__2::basic_string\2c\20std::__2::allocator>\20const*\20std::__2::__scan_keyword>\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::ctype>\28std::__2::istreambuf_iterator>&\2c\20std::__2::istreambuf_iterator>\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::basic_string\2c\20std::__2::allocator>\20const*\2c\20std::__2::ctype\20const&\2c\20unsigned\20int&\2c\20bool\29
+260:std::__2::basic_string\2c\20std::__2::allocator>::rfind\28char\2c\20unsigned\20long\29\20const
+261:std::__2::basic_string\2c\20std::__2::allocator>::__null_terminate_at\5babi:v15006\5d\28char*\2c\20unsigned\20long\29
+262:std::__2::basic_ostream>::~basic_ostream\28\29
+263:std::__2::basic_istream>::~basic_istream\28\29
+264:std::__2::basic_ios>::init\5babi:v15006\5d\28std::__2::basic_streambuf>*\29
+265:std::__2::__num_put_base::__format_float\28char*\2c\20char\20const*\2c\20unsigned\20int\29
+266:std::__2::__num_put::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20wchar_t*\2c\20wchar_t*&\2c\20wchar_t*&\2c\20std::__2::locale\20const&\29
+267:std::__2::__num_put::__widen_and_group_int\28char*\2c\20char*\2c\20char*\2c\20char*\2c\20char*&\2c\20char*&\2c\20std::__2::locale\20const&\29
+268:mbrtowc
+269:getc
+270:dispose_chunk
+271:bool\20std::__2::__insertion_sort_incomplete\28int*\2c\20int*\2c\20bool\20\28*&\29\28int\2c\20int\29\29
+272:__toread
+273:__cxxabiv1::__base_class_type_info::search_below_dst\28__cxxabiv1::__dynamic_cast_info*\2c\20void\20const*\2c\20int\2c\20bool\29\20const
+274:WifiHandler::CommStop\28\29
+275:WIFI_triggerIRQ\28WifiIRQ\29
+276:Slot1Comp_Rom::read\28\29
+277:SPU_struct::WriteLong\28unsigned\20int\2c\20unsigned\20int\29
+278:SPU_struct::SPU_struct\28int\29
+279:ParseReg_DISP3DCNT\28\29
+280:NocashMessage\28armcpu_t*\2c\20int\29
+281:MMU_struct_new::write_dma\28int\2c\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+282:MMU_IPCSync\28unsigned\20char\2c\20unsigned\20int\29
+283:IdeasLog\28armcpu_t*\29
+284:IPC_FIFOcnt\28unsigned\20char\2c\20unsigned\20short\29
+285:GameInfo::loadROM\28std::__2::basic_string\2c\20std::__2::allocator>\2c\20unsigned\20int\29
+286:GPUEngineBase::~GPUEngineBase\28\29
+287:GPUEngineBase::ParseReg_MASTER_BRIGHT\28\29
+288:GFX_FIFOsend\28unsigned\20char\2c\20unsigned\20int\29
+289:EMUFILE_FILE::get_fp\28\29
+290:CHEATSEXPORT::R4decrypt\28unsigned\20char*\2c\20unsigned\20int\2c\20unsigned\20int\29
+291:AdhocCommInterface::Start\28WifiHandler*\29
+292:wcslen
+293:wcrtomb
+294:wchar_t\20const*\20std::__2::find\5babi:v15006\5d\28wchar_t\20const*\2c\20wchar_t\20const*\2c\20wchar_t\20const&\29
+295:void\20std::__2::__introsort\28TextureStore**\2c\20TextureStore**\2c\20bool\20\28*&\29\28TextureStore*\2c\20TextureStore*\29\2c\20std::__2::iterator_traits