From dfeac352c1b88d579976bb484221607e1487f63b Mon Sep 17 00:00:00 2001 From: Oleg Sh Date: Sat, 16 Aug 2025 13:58:09 +0200 Subject: [PATCH] Support multigraph for algorithms: - Find all paths. - Find longest path. - Find all shortest paths. --- core/config/main.php | 2 +- lang/bg/home.php | 1 + lang/ch/home.php | 1 + lang/cs/home.php | 1 + lang/de/home.php | 1 + lang/el/home.php | 1 + lang/en/home.php | 1 + lang/es/home.php | 1 + lang/fr/home.php | 1 + lang/nl/home.php | 1 + lang/pl/home.php | 1 + lang/pt/home.php | 1 + lang/ru/home.php | 4 +- lang/sv/home.php | 1 + lang/ua/home.php | 1 + .../model/plugins/FindAllPatches.js | 24 ++++--- .../model/plugins/FindAllShortestPatches.js | 61 +++++++++--------- .../model/plugins/FindLongestPath.js | 25 ++++--- .../model/plugins/FindShortPatchsFromOne.js | 2 +- .../graphoffline/Graphoffline.Emscripten.js | 2 +- .../graphoffline/Graphoffline.Emscripten.wasm | Bin 450372 -> 452265 bytes .../api/index.js.cache | 2 +- .../api/index.js.cache | 2 +- .../create_graph_by_matrix/api/index.js.cache | 2 +- script/pages/editor/api/index.js.cache | 6 +- script/pages/editor/model/texts.js | 2 + tpl/home.php | 1 + 27 files changed, 89 insertions(+), 59 deletions(-) diff --git a/core/config/main.php b/core/config/main.php index 25871fa..b257693 100755 --- a/core/config/main.php +++ b/core/config/main.php @@ -94,5 +94,5 @@ $g_config['vote'] = "./tmp/vote/vote.txt"; $g_config['voteTopics'] = "./tmp/vote/voteTopics.txt_"; $g_config['use_js_cache'] = true; - $g_config['engine_version'] = 100; + $g_config['engine_version'] = 101; ?> diff --git a/lang/bg/home.php b/lang/bg/home.php index 784f969..123d7e3 100644 --- a/lang/bg/home.php +++ b/lang/bg/home.php @@ -330,4 +330,5 @@ We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/ch/home.php b/lang/ch/home.php index a98aae1..e50e3af 100644 --- a/lang/ch/home.php +++ b/lang/ch/home.php @@ -332,4 +332,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/cs/home.php b/lang/cs/home.php index efe8532..7afc6cf 100644 --- a/lang/cs/home.php +++ b/lang/cs/home.php @@ -331,4 +331,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> \ No newline at end of file diff --git a/lang/de/home.php b/lang/de/home.php index dcb2d5e..e97f4b2 100644 --- a/lang/de/home.php +++ b/lang/de/home.php @@ -289,4 +289,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/el/home.php b/lang/el/home.php index 3c122d7..9b75234 100644 --- a/lang/el/home.php +++ b/lang/el/home.php @@ -328,4 +328,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/en/home.php b/lang/en/home.php index 1ad4331..502c74b 100755 --- a/lang/en/home.php +++ b/lang/en/home.php @@ -333,4 +333,5 @@ We have added Dutch translation 🇳🇱. Thank you Willie de Wit"; $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/es/home.php b/lang/es/home.php index b3f94a0..9de5fd4 100755 --- a/lang/es/home.php +++ b/lang/es/home.php @@ -332,4 +332,5 @@ Tenemos traducciones en griego 🇬🇷. diff --git a/lang/fr/home.php b/lang/fr/home.php index 1cc2115..0c15a17 100644 --- a/lang/fr/home.php +++ b/lang/fr/home.php @@ -299,4 +299,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/nl/home.php b/lang/nl/home.php index 760583a..0398061 100644 --- a/lang/nl/home.php +++ b/lang/nl/home.php @@ -296,4 +296,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/pl/home.php b/lang/pl/home.php index 60aa1a3..fea0621 100644 --- a/lang/pl/home.php +++ b/lang/pl/home.php @@ -332,4 +332,5 @@ Dodaliśmy polskie tłumaczenie, Patryk"; $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/pt/home.php b/lang/pt/home.php index 34bafd8..30bb5e1 100644 --- a/lang/pt/home.php +++ b/lang/pt/home.php @@ -297,4 +297,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/ru/home.php b/lang/ru/home.php index afc59e3..e831095 100755 --- a/lang/ru/home.php +++ b/lang/ru/home.php @@ -287,7 +287,7 @@ $g_lang['use_context_menu'] = "Используйте контекстное меню для дополнительных действий."; $g_lang['find_longest_path'] = "Поиск самого длинного пути"; - $g_lang['length_of_longest_path_from'] = "Длина самого длинного пути ровна "; + $g_lang['length_of_longest_path_from'] = "Длина самого длинного пути равна "; $g_lang['additionl_actions'] = "Особые действия"; @@ -337,4 +337,6 @@ $g_lang['find_all_shortest_pathes'] = "Найти все кратчайшие пути между вершинами"; $g_lang['number_of_shortest_pathes_from'] = "Количество кратчайших путей из "; + $g_lang['length_is'] = "длина равна "; + ?> diff --git a/lang/sv/home.php b/lang/sv/home.php index a4dc02f..2e1e27b 100644 --- a/lang/sv/home.php +++ b/lang/sv/home.php @@ -293,4 +293,5 @@ $g_lang['find_all_shortest_pathes'] = "Find all shortest paths between 2 vertices"; $g_lang['number_of_shortest_pathes_from'] = "Number of shortest paths from "; + $g_lang['length_is'] = "length is "; ?> diff --git a/lang/ua/home.php b/lang/ua/home.php index 5c91c0c..073eece 100644 --- a/lang/ua/home.php +++ b/lang/ua/home.php @@ -335,4 +335,5 @@ $g_lang['find_all_shortest_pathes'] = "Найти все кратчайшие пути между вершинами"; $g_lang['number_of_shortest_pathes_from'] = "Количество кратчайших путей из "; + $g_lang['length_is'] = "длина равна "; ?> diff --git a/script/features/algorithms/model/plugins/FindAllPatches.js b/script/features/algorithms/model/plugins/FindAllPatches.js index d26862e..d42e28d 100644 --- a/script/features/algorithms/model/plugins/FindAllPatches.js +++ b/script/features/algorithms/model/plugins/FindAllPatches.js @@ -110,13 +110,11 @@ FindAllPathes.prototype.resultCallback = function(pathObjects, properties, resul } var subGraphIndex = 0; - var prevNodeId = -1; for (var i = 0; i < results.length; i++) { if (results[i].type == 6) { subGraphIndex++; - prevNodeId = -1; } if (results[i].type == 4) @@ -126,14 +124,15 @@ FindAllPathes.prototype.resultCallback = function(pathObjects, properties, resul var subgGraph = this.foundSubGraphs[index]; subgGraph[nodeId] = true; - this.foundPaths[index].push(nodeId); - - if (prevNodeId >= 0) - { - var edgeObject = this.graph.FindEdgeMin(prevNodeId, nodeId); - subgGraph[edgeObject.id] = true; - } - prevNodeId = nodeId; + this.foundPaths[index].push(nodeId); + } + + if (results[i].type == 5) + { + var edgeId = parseInt(results[i].value); + var index = subGraphIndex; + var subgGraph = this.foundSubGraphs[index]; + subgGraph[edgeId] = true; } } @@ -226,6 +225,11 @@ FindAllPathes.prototype.IsSupportNegativeWeight = function() return true; } +FindAllPathes.prototype.IsSupportMultiGraph = function() +{ + return true; +} + // Factory for connected components. function CreateFindAllPathes(graph, app) { diff --git a/script/features/algorithms/model/plugins/FindAllShortestPatches.js b/script/features/algorithms/model/plugins/FindAllShortestPatches.js index c8b00bf..be3ead8 100644 --- a/script/features/algorithms/model/plugins/FindAllShortestPatches.js +++ b/script/features/algorithms/model/plugins/FindAllShortestPatches.js @@ -11,6 +11,7 @@ function FindAllShortestPathes(graph, app) this.nSubgraphIndex = 0; this.nSubGraphCount = 0; this.foundPaths = {}; + this.min_len = 1E10; } @@ -50,6 +51,8 @@ FindAllShortestPathes.prototype.result = function(resultCallback) { if (this.firstObject && this.secondObject) { + this.min_len = 1E10; + this.outResultCallback = function (result ) { resultCallback(result); }; self = this; this.CalculateAlgorithm("prnpaths", [ @@ -77,7 +80,7 @@ FindAllShortestPathes.prototype.setResultMessage = function() this.message = g_numberOfShortestPathesFrom + this.firstObject.mainText + g_to + this.secondObject.mainText + g_are + - this.nSubGraphCount + ". " + g_pathN + (1 + parseInt(this.nSubgraphIndex)) + ": " + currentPath + + this.nSubGraphCount + " (" + g_length_is + this.min_len + ")" +". " + g_pathN + (1 + parseInt(this.nSubgraphIndex)) + ": " + currentPath + " "; } else @@ -100,14 +103,12 @@ FindAllShortestPathes.prototype.resultCallback = function(pathObjects, propertie if (bFound) { let patches_len = {}; - let min_len = 1E10; // Search minimal patches { let current_len = 0; var subGraphIndex = 0; - var prevNodeId = -1; let any_found = false; for (var i = 0; i < results.length; i++) { @@ -115,35 +116,28 @@ FindAllShortestPathes.prototype.resultCallback = function(pathObjects, propertie { patches_len[subGraphIndex] = current_len; subGraphIndex++; - prevNodeId = -1; - min_len = Math.min(min_len, current_len); + this.min_len = Math.min(this.min_len, current_len); current_len = 0; } - if (results[i].type == 4) + if (results[i].type == 5) { any_found = true; - var nodeId = parseInt(results[i].value); - var index = subGraphIndex; - - if (prevNodeId >= 0) - { - var edgeObject = this.graph.FindEdgeMin(prevNodeId, nodeId); - current_len = current_len + edgeObject.GetWeight(); - } - prevNodeId = nodeId; + var edgeId = parseInt(results[i].value); + let edgeObject = this.graph.FindEdgeById(edgeId); + current_len = current_len + edgeObject.GetWeight(); } } if (any_found) { patches_len[subGraphIndex] = current_len; - min_len = Math.min(min_len, current_len); + this.min_len = Math.min(this.min_len, current_len); } } let min_pathes_count = 0; for (const [key, value] of Object.entries(patches_len)) { - if (value == min_len) + if (value == this.min_len) { min_pathes_count = min_pathes_count + 1; } @@ -160,17 +154,20 @@ FindAllShortestPathes.prototype.resultCallback = function(pathObjects, propertie } var subGraphIndex = 0; - var prevNodeId = -1; + let skipGraphsCount = patches_len[subGraphIndex] > this.min_len ? 1 : 0; for (var i = 0; i < results.length; i++) { if (results[i].type == 6) { subGraphIndex++; - prevNodeId = -1; } - if (patches_len[subGraphIndex] > min_len) + if (patches_len[subGraphIndex] > this.min_len) { + if (results[i].type == 6) + { + skipGraphsCount++; + } // Skip continue; } @@ -178,18 +175,18 @@ FindAllShortestPathes.prototype.resultCallback = function(pathObjects, propertie if (results[i].type == 4) { var nodeId = parseInt(results[i].value); - var index = subGraphIndex; + var index = subGraphIndex - skipGraphsCount; var subgGraph = this.foundSubGraphs[index]; subgGraph[nodeId] = true; - this.foundPaths[index].push(nodeId); - - if (prevNodeId >= 0) - { - var edgeObject = this.graph.FindEdgeMin(prevNodeId, nodeId); - subgGraph[edgeObject.id] = true; - } - prevNodeId = nodeId; + } + + if (results[i].type == 5) + { + var index = subGraphIndex - skipGraphsCount; + var subgGraph = this.foundSubGraphs[index]; + var edgeId = parseInt(results[i].value); + subgGraph[edgeId] = true; } } @@ -258,6 +255,7 @@ FindAllShortestPathes.prototype.deselectAll = function() this.nSubgraphIndex = 0; this.nSubGraphCount = 0; this.message = g_selectStartVertex; + return true; } @@ -282,6 +280,11 @@ FindAllShortestPathes.prototype.IsSupportNegativeWeight = function() return true; } +FindAllShortestPathes.prototype.IsSupportMultiGraph = function() +{ + return true; +} + // Factory for connected components. function CreateFindAllShortestPathes(graph, app) { diff --git a/script/features/algorithms/model/plugins/FindLongestPath.js b/script/features/algorithms/model/plugins/FindLongestPath.js index 270e515..efb1edc 100644 --- a/script/features/algorithms/model/plugins/FindLongestPath.js +++ b/script/features/algorithms/model/plugins/FindLongestPath.js @@ -113,7 +113,6 @@ FindLongestPath.prototype.resultCallback = function(pathObjects, properties, res } var subGraphIndex = 0; - var prevNodeId = -1; for (var i = 0; i < results.length; i++) { if (results[i].type == 6) @@ -124,7 +123,6 @@ FindLongestPath.prototype.resultCallback = function(pathObjects, properties, res } currentLength = 0; subGraphIndex++; - prevNodeId = -1; } if (results[i].type == 4) @@ -135,14 +133,16 @@ FindLongestPath.prototype.resultCallback = function(pathObjects, properties, res subgGraph[nodeId] = true; this.foundPaths[index].push(nodeId); - - if (prevNodeId >= 0) - { - var edgeObject = this.graph.FindEdgeMax(prevNodeId, nodeId); - subgGraph[edgeObject.id] = true; - currentLength += edgeObject.GetWeight(); - } - prevNodeId = nodeId; + } + + if (results[i].type == 5) + { + var edgeId = parseInt(results[i].value); + var index = subGraphIndex; + var subgGraph = this.foundSubGraphs[index]; + subgGraph[edgeId] = true; + let edgeObject = this.graph.FindEdgeById(edgeId); + currentLength += edgeObject.GetWeight(); } } if (currentLength > this.maxPathLength) { @@ -223,6 +223,11 @@ FindLongestPath.prototype.IsSupportNegativeWeight = function() return true; } +FindLongestPath.prototype.IsSupportMultiGraph = function() +{ + return true; +} + // Factory for connected components. function CreateFindLongestPath(graph, app) { diff --git a/script/features/algorithms/model/plugins/FindShortPatchsFromOne.js b/script/features/algorithms/model/plugins/FindShortPatchsFromOne.js index 97136b9..e115262 100644 --- a/script/features/algorithms/model/plugins/FindShortPatchsFromOne.js +++ b/script/features/algorithms/model/plugins/FindShortPatchsFromOne.js @@ -66,7 +66,7 @@ FindShortPatchsFromOne.prototype.setResultMessage = function() if (this.nSubGraphCount > 0) { this.message = g_distanceFrom + this.firstObject.mainText + - g_to + this.lastVertexInPath[this.nSubgraphIndex] + g_are + + g_to + this.lastVertexInPath[this.nSubgraphIndex] + g_are + this.lengthOfPath[this.nSubgraphIndex] + " "; } else diff --git a/script/features/graphoffline/Graphoffline.Emscripten.js b/script/features/graphoffline/Graphoffline.Emscripten.js index 35c8f2b..0a245c7 100644 --- a/script/features/graphoffline/Graphoffline.Emscripten.js +++ b/script/features/graphoffline/Graphoffline.Emscripten.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&process.versions?.node&&process.type!="renderer";var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=typeof document!="undefined"?document.currentScript?.src:undefined;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{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=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith("file://");var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["o"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("Graphoffline.Emscripten.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["n"];updateMemoryViews();assignWasmExports(wasmExports);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;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.slice(-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.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[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).slice(1);to=PATH_FS.resolve(to).slice(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;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(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){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}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,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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(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(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(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(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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(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{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var preloadPlugins=[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_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){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url).then(processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";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)}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},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){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}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|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;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(...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,opts,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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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);old_node.parent=new_dir}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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){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},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)}if(!length){throw new FS.ErrnoError(28)}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)},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 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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}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,llseek:()=>0});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 randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}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)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},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){if(e.errno!=20)throw 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;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}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}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}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;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,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]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});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,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(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 dir+"/"+path},writeStat(buf,stat){HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAP32[buf+4>>2]=stats.bsize;HEAP32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAP32[buf+48>>2]=stats.fsid;HEAP32[buf+64>>2]=stats.flags;HEAP32[buf+56>>2]=stats.namelen},doMsync(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)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"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};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var 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.name==="ErrnoError"))throw e;return e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var 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(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}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{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}Module["ccall"]=ccall;Module["cwrap"]=cwrap;var _ProcessAlgorithm,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current;function assignWasmExports(wasmExports){Module["_ProcessAlgorithm"]=_ProcessAlgorithm=wasmExports["p"];__emscripten_stack_restore=wasmExports["q"];__emscripten_stack_alloc=wasmExports["r"];_emscripten_stack_get_current=wasmExports["s"]}var wasmImports={a:___assert_fail,b:___cxa_throw,e:___syscall_fcntl64,i:___syscall_ioctl,j:___syscall_openat,k:__abort_js,l:_emscripten_resize_heap,f:_environ_get,g:_environ_sizes_get,c:_fd_close,h:_fd_read,m:_fd_seek,d:_fd_write};var wasmExports;createWasm();function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run(); +var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&process.versions?.node&&process.type!="renderer";var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=typeof document!="undefined"?document.currentScript?.src:undefined;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{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=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith("file://");var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["o"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("Graphoffline.Emscripten.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["n"];updateMemoryViews();assignWasmExports(wasmExports);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;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.slice(-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.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[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).slice(1);to=PATH_FS.resolve(to).slice(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;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var 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};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(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){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}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,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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(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(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(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(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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(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{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";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)}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},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){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}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|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;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(...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,opts,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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;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);old_node.parent=new_dir}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;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return 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 link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){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)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},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}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,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,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){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},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)}if(!length){throw new FS.ErrnoError(28)}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)},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 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"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}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,llseek:()=>0});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 randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}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)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},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){if(e.errno!=20)throw 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;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}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}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}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;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,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]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});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,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(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 dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(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)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"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};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var 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.name==="ErrnoError"))throw e;return e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var 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(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}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{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}Module["ccall"]=ccall;Module["cwrap"]=cwrap;var _ProcessAlgorithm,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current;function assignWasmExports(wasmExports){Module["_ProcessAlgorithm"]=_ProcessAlgorithm=wasmExports["p"];__emscripten_stack_restore=wasmExports["q"];__emscripten_stack_alloc=wasmExports["r"];_emscripten_stack_get_current=wasmExports["s"]}var wasmImports={a:___assert_fail,b:___cxa_throw,e:___syscall_fcntl64,i:___syscall_ioctl,j:___syscall_openat,k:__abort_js,l:_emscripten_resize_heap,f:_environ_get,g:_environ_sizes_get,c:_fd_close,h:_fd_read,m:_fd_seek,d:_fd_write};var wasmExports;createWasm();function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run(); diff --git a/script/features/graphoffline/Graphoffline.Emscripten.wasm b/script/features/graphoffline/Graphoffline.Emscripten.wasm index 724a1f0ad3d7f9c99617fb143accdbc36cb1bfdb..9d2324605acabcffb6a5dbc017c6082fc18bb4f2 100644 GIT binary patch delta 59481 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 ix0XsfQXhFneDSC8;{OBuNlN1Y delta 55873 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 Bz=0;if(isMac) g_selectGroupText=document.getElementById("selectGroupMac").innerHTML;else -g_selectGroupText=document.getElementById("selectGroupWin").innerHTML;g_dragGroupText=document.getElementById("dragSelectedGroup").innerHTML;g_copyGroupeButton=document.getElementById("copySelectedGroup").innerHTML;g_removeGroupeButton=document.getElementById("removeSelectedGroup").innerHTML;g_BFSName=document.getElementById("BFSName").innerHTML;g_ColoringName=document.getElementById("ColoringName").innerHTML;g_findConnectedComponent=document.getElementById("findConnectedComponent").innerHTML;g_DFSName=document.getElementById("DFSName").innerHTML;g_EulerinLoopName=document.getElementById("EulerinLoopName").innerHTML;g_EulerinPath=document.getElementById("EulerinPath").innerHTML;g_FloidName=document.getElementById("FloidName").innerHTML;g_GraphReorder=document.getElementById("GraphReorder").innerHTML;g_HamiltoianCycleName=document.getElementById("HamiltoianCycleName").innerHTML;g_HamiltonianPath=document.getElementById("HamiltonianPath").innerHTML;g_MaxFlowName=document.getElementById("MaxFlowName").innerHTML;g_minimumSpanningTree=document.getElementById("minimumSpanningTree").innerHTML;g_modernGraphStyleName=document.getElementById("modernGraphStyleName").innerHTML;g_RadiusAndDiameter=document.getElementById("RadiusAndDiameter").innerHTML;g_findShortPathName=document.getElementById("findShortPathName").innerHTML;g_findShortPathBellmanFordName=document.getElementById("findShortPathBellmanFordName").innerHTML;g_VerticesDegreeName=document.getElementById("VerticesDegreeName").innerHTML;g_SpanningTreeResult=document.getElementById("MinSpanningTreeResult").innerHTML;g_SpanningTreeIgnoreDir=document.getElementById("MinSpanningIgnoreDir").innerHTML;g_SpanningTreeNotConnected=document.getElementById("MinSpanningNotConnected").innerHTML;g_selectFirstGraphIsomorphismCheck=document.getElementById("SelectFirstGraphIsomorphismCheck").innerHTML;g_selectSecondGraphIsomorphismCheck=document.getElementById("SelectSecondGraphIsomorphismCheck").innerHTML;g_selectFirstGraphPatternCheck=document.getElementById("SelectFirstGraphPatternCheck").innerHTML;g_selectSecondGraphForSearchSubgraph=document.getElementById("SelectSecondGraphForSearchSubgraph").innerHTML;g_graphsIsomorph=document.getElementById("GraphsIsomorph").innerHTML;g_graphsNotIsomorph=document.getElementById("GraphsNotIsomorph").innerHTML;g_numberOfIsomorphSubgraphIs=document.getElementById("NumberOfIsomorphSubgraphIs").innerHTML;g_graphHasNoIsomorphSubgraph=document.getElementById("GraphHasNoIsomorphSubgraph").innerHTML;g_searchIsomorphSubgraph=document.getElementById("SearchIsomorphSubgraph").innerHTML;g_subgraphNo=document.getElementById("SubgraphNo").innerHTML;g_graphHasNoAtleast2Graphs=document.getElementById("GraphHasNoAtleast2Graphs").innerHTML;g_IsomorphismCheck=document.getElementById("IsomorphismCheck").innerHTML;g_graphIsDisconnected=document.getElementById("GraphIsDisconnected").innerHTML;g_graphIsTrivial=document.getElementById("GraphIsTrivial").innerHTML;g_graphRadius=document.getElementById("GraphRadius").innerHTML;g_graphDiameter=document.getElementById("GraphDiameter").innerHTML;g_vertexCentral=document.getElementById("VertexCentral").innerHTML;g_vertexPeripheral=document.getElementById("VertexPeripheral").innerHTML;g_maximumDegreeOfGraph=document.getElementById("MaximumDegreeOfGraph").innerHTML;g_colorNumber=document.getElementById("ColorNumber").innerHTML;g_done=document.getElementById("Done").innerHTML;g_action=document.getElementById("ActionText").innerHTML;g_commonEdgeStyle=document.getElementById("CommonEdgeStyleText").innerHTML;g_selectedEdgeStyle=document.getElementById("SelectedEdgeStyleText").innerHTML;g_commonVertexStyle=document.getElementById("CommonVertexStyleText").innerHTML;g_selectedVertexStyle=document.getElementById("SelectedVertexStyleText").innerHTML;g_findAllPathes=document.getElementById("FindAllPathes").innerHTML;g_numberOfPathesFrom=document.getElementById("NumberOfPathesFrom").innerHTML;g_to=document.getElementById("To").innerHTML;g_are=document.getElementById("Are").innerHTML;g_pathN=document.getElementById("PathN").innerHTML;g_selectFinishVertex=document.getElementById("SelectFinishVertex").innerHTML;g_selectStartVertex=document.getElementById("SelectStartVertex").innerHTML;g_findAllPathesFromVertex=document.getElementById("findAllPathsFromVertex").innerHTML;g_distanceFrom=document.getElementById("distanceFrom").innerHTML;g_pathTo=document.getElementById("pathTo").innerHTML;g_useContextMenuText=document.getElementById("UseContextMenuText").innerHTML;g_findLongestPath=document.getElementById("findLongestPath").innerHTML;g_LengthOfLongestPathFrom=document.getElementById("LengthOfLongestPathFrom").innerHTML;g_additionalActions=document.getElementById("additionlActions").innerHTML;g_reverseAllEdges=document.getElementById("reverseAllEdges").innerHTML;g_makeAllUndirected=document.getElementById("makeAllUndirected").innerHTML;g_makeAllDirected=document.getElementById("makeAllDirected").innerHTML;g_pairWrongFormat=document.getElementById("pairWrongFormat").innerHTML;g_fix=document.getElementById("fixButton").innerHTML;g_reuseSavedEdge=document.getElementById("reuseSavedEdge").innerHTML;g_MaxClique=document.getElementById("maxClique").innerHTML;g_MaxCliqueNotFound=document.getElementById("maxCliqueNotFound").innerHTML;g_MaxCliqueSizeIs=document.getElementById("maxCliqueSizeIs").innerHTML;g_MaxCliqueContains=document.getElementById("maxCliqueContains").innerHTML;g_wrongImageFormatPNGAndJPEG=document.getElementById("wrongImageFormatPNGAndJPEG").innerHTML;g_wrongImageSizeP1=document.getElementById("wrongImageSizeP1").innerHTML;g_originalGraph=document.getElementById("originalGraph").innerHTML;g_autoSavedGraph=document.getElementById("autoSavedGraph").innerHTML;g_selectGraphToLoad=document.getElementById("selectGraphToLoad").innerHTML;g_vertexNamePlaceHolder=document.getElementById("vertexNamePlaceHolder").innerHTML;g_MaxIndependentSet=document.getElementById("maxIndependentSet").innerHTML;g_MaxIndependentSetNotFound=document.getElementById("maxIndependentSetNotFound").innerHTML;g_MaxIndependentSetSizeIs=document.getElementById("maxIndependentSetSizeIs").innerHTML;g_MaxIndependentSetContains=document.getElementById("maxIndependentSetContains").innerHTML;g_FindAllShortestPathes=document.getElementById("findAllShortestPathes").innerHTML;g_numberOfShortestPathesFrom=document.getElementById("numberOfShortestPathesFrom").innerHTML;} +g_selectGroupText=document.getElementById("selectGroupWin").innerHTML;g_dragGroupText=document.getElementById("dragSelectedGroup").innerHTML;g_copyGroupeButton=document.getElementById("copySelectedGroup").innerHTML;g_removeGroupeButton=document.getElementById("removeSelectedGroup").innerHTML;g_BFSName=document.getElementById("BFSName").innerHTML;g_ColoringName=document.getElementById("ColoringName").innerHTML;g_findConnectedComponent=document.getElementById("findConnectedComponent").innerHTML;g_DFSName=document.getElementById("DFSName").innerHTML;g_EulerinLoopName=document.getElementById("EulerinLoopName").innerHTML;g_EulerinPath=document.getElementById("EulerinPath").innerHTML;g_FloidName=document.getElementById("FloidName").innerHTML;g_GraphReorder=document.getElementById("GraphReorder").innerHTML;g_HamiltoianCycleName=document.getElementById("HamiltoianCycleName").innerHTML;g_HamiltonianPath=document.getElementById("HamiltonianPath").innerHTML;g_MaxFlowName=document.getElementById("MaxFlowName").innerHTML;g_minimumSpanningTree=document.getElementById("minimumSpanningTree").innerHTML;g_modernGraphStyleName=document.getElementById("modernGraphStyleName").innerHTML;g_RadiusAndDiameter=document.getElementById("RadiusAndDiameter").innerHTML;g_findShortPathName=document.getElementById("findShortPathName").innerHTML;g_findShortPathBellmanFordName=document.getElementById("findShortPathBellmanFordName").innerHTML;g_VerticesDegreeName=document.getElementById("VerticesDegreeName").innerHTML;g_SpanningTreeResult=document.getElementById("MinSpanningTreeResult").innerHTML;g_SpanningTreeIgnoreDir=document.getElementById("MinSpanningIgnoreDir").innerHTML;g_SpanningTreeNotConnected=document.getElementById("MinSpanningNotConnected").innerHTML;g_selectFirstGraphIsomorphismCheck=document.getElementById("SelectFirstGraphIsomorphismCheck").innerHTML;g_selectSecondGraphIsomorphismCheck=document.getElementById("SelectSecondGraphIsomorphismCheck").innerHTML;g_selectFirstGraphPatternCheck=document.getElementById("SelectFirstGraphPatternCheck").innerHTML;g_selectSecondGraphForSearchSubgraph=document.getElementById("SelectSecondGraphForSearchSubgraph").innerHTML;g_graphsIsomorph=document.getElementById("GraphsIsomorph").innerHTML;g_graphsNotIsomorph=document.getElementById("GraphsNotIsomorph").innerHTML;g_numberOfIsomorphSubgraphIs=document.getElementById("NumberOfIsomorphSubgraphIs").innerHTML;g_graphHasNoIsomorphSubgraph=document.getElementById("GraphHasNoIsomorphSubgraph").innerHTML;g_searchIsomorphSubgraph=document.getElementById("SearchIsomorphSubgraph").innerHTML;g_subgraphNo=document.getElementById("SubgraphNo").innerHTML;g_graphHasNoAtleast2Graphs=document.getElementById("GraphHasNoAtleast2Graphs").innerHTML;g_IsomorphismCheck=document.getElementById("IsomorphismCheck").innerHTML;g_graphIsDisconnected=document.getElementById("GraphIsDisconnected").innerHTML;g_graphIsTrivial=document.getElementById("GraphIsTrivial").innerHTML;g_graphRadius=document.getElementById("GraphRadius").innerHTML;g_graphDiameter=document.getElementById("GraphDiameter").innerHTML;g_vertexCentral=document.getElementById("VertexCentral").innerHTML;g_vertexPeripheral=document.getElementById("VertexPeripheral").innerHTML;g_maximumDegreeOfGraph=document.getElementById("MaximumDegreeOfGraph").innerHTML;g_colorNumber=document.getElementById("ColorNumber").innerHTML;g_done=document.getElementById("Done").innerHTML;g_action=document.getElementById("ActionText").innerHTML;g_commonEdgeStyle=document.getElementById("CommonEdgeStyleText").innerHTML;g_selectedEdgeStyle=document.getElementById("SelectedEdgeStyleText").innerHTML;g_commonVertexStyle=document.getElementById("CommonVertexStyleText").innerHTML;g_selectedVertexStyle=document.getElementById("SelectedVertexStyleText").innerHTML;g_findAllPathes=document.getElementById("FindAllPathes").innerHTML;g_numberOfPathesFrom=document.getElementById("NumberOfPathesFrom").innerHTML;g_to=document.getElementById("To").innerHTML;g_are=document.getElementById("Are").innerHTML;g_pathN=document.getElementById("PathN").innerHTML;g_selectFinishVertex=document.getElementById("SelectFinishVertex").innerHTML;g_selectStartVertex=document.getElementById("SelectStartVertex").innerHTML;g_findAllPathesFromVertex=document.getElementById("findAllPathsFromVertex").innerHTML;g_distanceFrom=document.getElementById("distanceFrom").innerHTML;g_pathTo=document.getElementById("pathTo").innerHTML;g_useContextMenuText=document.getElementById("UseContextMenuText").innerHTML;g_findLongestPath=document.getElementById("findLongestPath").innerHTML;g_LengthOfLongestPathFrom=document.getElementById("LengthOfLongestPathFrom").innerHTML;g_additionalActions=document.getElementById("additionlActions").innerHTML;g_reverseAllEdges=document.getElementById("reverseAllEdges").innerHTML;g_makeAllUndirected=document.getElementById("makeAllUndirected").innerHTML;g_makeAllDirected=document.getElementById("makeAllDirected").innerHTML;g_pairWrongFormat=document.getElementById("pairWrongFormat").innerHTML;g_fix=document.getElementById("fixButton").innerHTML;g_reuseSavedEdge=document.getElementById("reuseSavedEdge").innerHTML;g_MaxClique=document.getElementById("maxClique").innerHTML;g_MaxCliqueNotFound=document.getElementById("maxCliqueNotFound").innerHTML;g_MaxCliqueSizeIs=document.getElementById("maxCliqueSizeIs").innerHTML;g_MaxCliqueContains=document.getElementById("maxCliqueContains").innerHTML;g_wrongImageFormatPNGAndJPEG=document.getElementById("wrongImageFormatPNGAndJPEG").innerHTML;g_wrongImageSizeP1=document.getElementById("wrongImageSizeP1").innerHTML;g_originalGraph=document.getElementById("originalGraph").innerHTML;g_autoSavedGraph=document.getElementById("autoSavedGraph").innerHTML;g_selectGraphToLoad=document.getElementById("selectGraphToLoad").innerHTML;g_vertexNamePlaceHolder=document.getElementById("vertexNamePlaceHolder").innerHTML;g_MaxIndependentSet=document.getElementById("maxIndependentSet").innerHTML;g_MaxIndependentSetNotFound=document.getElementById("maxIndependentSetNotFound").innerHTML;g_MaxIndependentSetSizeIs=document.getElementById("maxIndependentSetSizeIs").innerHTML;g_MaxIndependentSetContains=document.getElementById("maxIndependentSetContains").innerHTML;g_FindAllShortestPathes=document.getElementById("findAllShortestPathes").innerHTML;g_numberOfShortestPathesFrom=document.getElementById("numberOfShortestPathesFrom").innerHTML;g_length_is=document.getElementById("lengthIs").innerHTML;} function UndoStack(maxUndoStackSize){this.undoStack=[];this.maxUndoStackSize=maxUndoStackSize;} UndoStack.prototype.PushToStack=function(actionName,dataToSave) {var object={};object.actionName=actionName;object.data=dataToSave;this.undoStack.push(object);while(this.undoStack.length>this.maxUndoStackSize) diff --git a/script/pages/editor/model/texts.js b/script/pages/editor/model/texts.js index 61a2604..be19979 100644 --- a/script/pages/editor/model/texts.js +++ b/script/pages/editor/model/texts.js @@ -220,6 +220,7 @@ var g_MaxIndependentSetContains = ". Set contains these vertecies: "; var g_FindAllShortestPathes = "Find all shortest paths"; var g_numberOfShortestPathesFrom = "Number of shortest paths from "; +var g_length_is = "length is "; function loadTexts() { @@ -449,4 +450,5 @@ function loadTexts() g_FindAllShortestPathes = document.getElementById("findAllShortestPathes").innerHTML; g_numberOfShortestPathesFrom = document.getElementById("numberOfShortestPathesFrom").innerHTML; + g_length_is = document.getElementById("lengthIs").innerHTML; } \ No newline at end of file diff --git a/tpl/home.php b/tpl/home.php index 6284e80..802676d 100755 --- a/tpl/home.php +++ b/tpl/home.php @@ -990,6 +990,7 @@

+