From 5233b16db487f5ab3838638675a793df06495509 Mon Sep 17 00:00:00 2001 From: Nicholas VanCise <40526638+thenick775@users.noreply.github.com> Date: Sat, 6 Jul 2024 14:49:36 -0700 Subject: [PATCH] fix: audio sync (#146) * fix: audio sync - bumps wasm files - approach on this branch: - reduce jitter from inconsistent main loop timing - more precise counters - adjust audio target framerate with fastforward framerate - turn on mGBA core frameskipping to match ff framerate * test: audio sync frames * test: some extra logging * test: with extra audio buffer size * feat: bump wasm files * fix: audio on resume - bumps wasm files * test: different audio sample+samples - bumps wasm files * test: revert audio sample rate to 48k * chore: bump wasm files - latest on feature/wasm --------- Co-authored-by: thenick775 --- gbajs3/src/emulator/mgba/wasm/mgba.js | 2 +- gbajs3/src/emulator/mgba/wasm/mgba.wasm | Bin 1711830 -> 1711975 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/gbajs3/src/emulator/mgba/wasm/mgba.js b/gbajs3/src/emulator/mgba/wasm/mgba.js index 70777a01..5a9faaea 100644 --- a/gbajs3/src/emulator/mgba/wasm/mgba.js +++ b/gbajs3/src/emulator/mgba/wasm/mgba.js @@ -5,7 +5,7 @@ var mGBA = (() => { return ( function(moduleArg = {}) { -var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});Module.loadGame=name=>{const loadGame=cwrap("loadGame","number",["string"]);if(loadGame(name)){const arr=name.split(".");arr.pop();const saveName=arr.join(".")+".sav";Module.gameName=name;Module.saveName=saveName.replace("/data/games/","/data/saves/");return true}return false};Module.getSave=()=>FS.readFile(Module.saveName);Module.listRoms=()=>FS.readdir("/data/games/");Module.listSaves=()=>FS.readdir("/data/saves/");Module.FSInit=()=>new Promise((resolve,reject)=>{FS.mkdir("/data");FS.mount(FS.filesystems.IDBFS,{},"/data");FS.syncfs(true,err=>{if(err){reject(new Error(`Error syncing app data from IndexedDB: ${err}`))}try{FS.mkdir("/data/saves")}catch(e){}try{FS.mkdir("/data/states")}catch(e){}try{FS.mkdir("/data/games")}catch(e){}try{FS.mkdir("/data/cheats")}catch(e){}try{FS.mkdir("/data/screenshots")}catch(e){}resolve()})});Module.FSSync=()=>new Promise((resolve,reject)=>{FS.syncfs(err=>{if(err){reject(new Error(`Error syncing app data to IndexedDB: ${err}`))}resolve()})});Module.filePaths=()=>({root:"/data",cheatsPath:"/data/cheats",gamePath:"/data/games",savePath:"/data/saves",saveStatePath:"/data/states",screenshotsPath:"/data/screenshots"});Module.uploadSaveOrSaveState=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(extension=="sav"){dir="/data/saves/"}else if(extension.startsWith("ss")){dir="/data/states/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};Module.uploadRom=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(["gba","gbc","gb","zip","7z"].includes(extension)){dir="/data/games/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};Module.uploadCheats=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(extension=="cheats"){dir="/data/cheats/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};const keyBindings=new Map([["a",0],["b",1],["select",2],["start",3],["right",4],["left",5],["up",6],["down",7],["r",8],["l",9]]);Module.buttonPress=name=>{const buttonPress=cwrap("buttonPress",null,["number"]);buttonPress(keyBindings.get(name.toLowerCase()))};Module.buttonUnpress=name=>{const buttonUnpress=cwrap("buttonUnpress",null,["number"]);buttonUnpress(keyBindings.get(name.toLowerCase()))};Module.bindKey=(bindingName,inputName)=>{const bindKey=cwrap("bindKey",null,["string","number"]);bindKey(bindingName,keyBindings.get(inputName.toLowerCase()))};Module.pauseGame=()=>{const pauseGame=cwrap("pauseGame",null,[]);pauseGame()};Module.resumeGame=()=>{const resumeGame=cwrap("resumeGame",null,[]);resumeGame()};Module.getVolume=()=>{const getVolume=cwrap("getVolume","number",[]);return getVolume()};Module.setVolume=percent=>{const setVolume=cwrap("setVolume",null,["number"]);setVolume(percent)};Module.getMainLoopTimingMode=()=>{const getMainLoopTimingMode=cwrap("getMainLoopTimingMode","number",[]);return getMainLoopTimingMode()};Module.getMainLoopTimingValue=()=>{const getMainLoopTimingValue=cwrap("getMainLoopTimingValue","number",[]);return getMainLoopTimingValue()};Module.setMainLoopTiming=(mode,value)=>{const setMainLoopTiming=cwrap("setMainLoopTiming","number",["number","number"]);setMainLoopTiming(mode,value)};Module.quitGame=()=>{const quitGame=cwrap("quitGame",null,[]);quitGame()};Module.quitMgba=()=>{const quitMgba=cwrap("quitMgba",null,[]);quitMgba()};Module.quickReload=()=>{const quickReload=cwrap("quickReload",null,[]);quickReload()};Module.toggleInput=toggle=>{const setEventEnable=cwrap("setEventEnable",null,["boolean"]);setEventEnable(toggle)};Module.screenshot=fileName=>{const screenshot=cwrap("screenshot","boolean",["string"]);return screenshot(fileName)};Module.saveState=slot=>{const saveState=cwrap("saveState","boolean",["number"]);return saveState(slot)};Module.loadState=slot=>{const loadState=cwrap("loadState","boolean",["number"]);return loadState(slot)};Module.saveStateSlot=(slot,flags)=>{var saveStateSlot=cwrap("saveStateSlot","number",["number","number"]);Module.saveStateSlot=(slot,flags)=>{if(flags===undefined){flags=63}return saveStateSlot(slot,flags)};return Module.saveStateSlot(slot,flags)};Module.loadStateSlot=(slot,flags)=>{var loadStateSlot=cwrap("loadStateSlot","number",["number","number"]);Module.loadStateSlot=(slot,flags)=>{if(flags===undefined){flags=61}return loadStateSlot(slot,flags)};return Module.loadStateSlot(slot,flags)};Module.autoLoadCheats=()=>{const autoLoadCheats=cwrap("autoLoadCheats","bool",[]);return autoLoadCheats()};Module.setFastForwardMultiplier=multiplier=>{const setFastForwardMultiplier=cwrap("setFastForwardMultiplier",null,["number"]);setFastForwardMultiplier(multiplier)};Module.getFastForwardMultiplier=()=>{const getFastForwardMultiplier=cwrap("getFastForwardMultiplier","number",[]);return getFastForwardMultiplier()};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="mgba.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{wasmBinaryFile=new URL("mgba.wasm",import.meta.url).href}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"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["_d"];updateMemoryViews();wasmTable=wasmExports["ze"];addOnInit(wasmExports["$d"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={272320:($0,$1)=>{Module.canvas.width=$0;Module.canvas.height=$1},272377:($0,$1,$2,$3,$4,$5,$6)=>{Module.version={gitCommit:UTF8ToString($0),gitShort:UTF8ToString($1),gitBranch:UTF8ToString($2),gitRevision:$3,binaryName:UTF8ToString($4),projectName:UTF8ToString($5),projectVersion:UTF8ToString($6)}},272602:()=>{FS.syncfs(function(err){assert(!err)})},272646:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},272793:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},273027:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){autoResumeAudioContext(SDL2.audioContext)}}return SDL2.audioContext===undefined?-1:0},273520:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},273588:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setTimeout(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},275240:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"])},275650:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c>2]}}},276735:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},280365:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},280448:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},280517:()=>window.innerWidth,280547:()=>window.innerHeight};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};var autoResumeAudioContext=(ctx,elements)=>{if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var dynCallLegacy=(sig,ptr,args)=>{var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args)=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn};var noExitRuntime=Module["noExitRuntime"]||true;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{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=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function 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(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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: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,0));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,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,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,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(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.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=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.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},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 dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["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,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 IDBFS={dbs:{},indexedDB:()=>{if(typeof indexedDB!="undefined")return indexedDB;var ret=null;if(typeof window=="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{Object.values(IDBFS.dbs).forEach(value=>value.close());IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={"timestamp":stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={"timestamp":cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{"timestamp":stat.mtime,"mode":stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{"timestamp":stat.mtime,"mode":stat.mode,"contents":node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){if(!src.entries[key]){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=e=>{done(this.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};create.sort().forEach(path=>{if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(path=>{if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){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){if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(val){this.shared.position=val}}})}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},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.apply(check,m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i0,ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(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",16384|511,73);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}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";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 PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);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;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];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();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},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)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.getp();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_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___syscall_ftruncate64(fd,length_low,length_high){var length=convertI32PairToI53Checked(length_low,length_high);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}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=SYSCALLS.getp();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>>0]=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=SYSCALLS.getp();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>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();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=SYSCALLS.getp();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_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}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?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var readI53FromI64=ptr=>HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;function ___syscall_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);if(!times){var atime=Date.now();var mtime=atime}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>2];atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>2];mtime=seconds*1e3+nanoseconds/(1e3*1e3)}FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_throw_longjmp=()=>{throw Infinity};var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return setTempRet0((tempDouble=ret,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)),ret>>>0};function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __msync_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;SYSCALLS.doMsync(addr,SYSCALLS.getStreamFromFD(fd),len,flags,offset);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}FS.munmap(stream)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var __tzset_js=(timezone,daylight,tzname)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=stringToNewUTF8(winterName);var summerNamePtr=stringToNewUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}};var _abort=()=>{abort("")};var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof Browser.setImmediate=="undefined"){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);Browser.setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}GL.newRenderingFrameStarted();Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object")SDL.audio?.queueNewAudioData?.();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}};var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;onload?.(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x:x,y:y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=function(ctx){var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_half_float","EXT_float_blend","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i32-Math.clz32(i===0?0:i-1),generateTempBuffers:(quads,context)=>{var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);context.tempVertexBufferCounters1=[];context.tempVertexBufferCounters2=[];context.tempVertexBufferCounters1.length=context.tempVertexBufferCounters2.length=largestIndex+1;context.tempVertexBuffers1=[];context.tempVertexBuffers2=[];context.tempVertexBuffers1.length=context.tempVertexBuffers2.length=largestIndex+1;context.tempIndexBuffers=[];context.tempIndexBuffers.length=largestIndex+1;for(var i=0;i<=largestIndex;++i){context.tempIndexBuffers[i]=null;context.tempVertexBufferCounters1[i]=context.tempVertexBufferCounters2[i]=0;var ringbufferLength=GL.numTempVertexBuffersPerSize;context.tempVertexBuffers1[i]=[];context.tempVertexBuffers2[i]=[];var ringbuffer1=context.tempVertexBuffers1[i];var ringbuffer2=context.tempVertexBuffers2[i];ringbuffer1.length=ringbuffer2.length=ringbufferLength;for(var j=0;j>1;var quadIndexes=new Uint16Array(numIndexes);var i=0,v=0;while(1){quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+1;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v+3;if(i>=numIndexes)break;v+=4}context.GLctx.bufferData(34963,quadIndexes,35044);context.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:function getTempVertexBuffer(sizeBytes){var idx=GL.log2ceilLookup(sizeBytes);var ringbuffer=GL.currentContext.tempVertexBuffers1[idx];var nextFreeBufferIndex=GL.currentContext.tempVertexBufferCounters1[idx];GL.currentContext.tempVertexBufferCounters1[idx]=GL.currentContext.tempVertexBufferCounters1[idx]+1&GL.numTempVertexBuffersPerSize-1;var vbo=ringbuffer[nextFreeBufferIndex];if(vbo){return vbo}var prevVBO=GLctx.getParameter(34964);ringbuffer[nextFreeBufferIndex]=GLctx.createBuffer();GLctx.bindBuffer(34962,ringbuffer[nextFreeBufferIndex]);GLctx.bufferData(34962,1<{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},calcBufLength:function calcBufLength(size,type,stride,count){if(stride>0){return count*stride}var typeSize=GL.byteSizeByType[type-GL.byteSizeByTypeRoot];return size*typeSize*count},usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function preDrawHandleClientVertexAttribBindings(count){GL.resetBufferBinding=false;for(var i=0;i{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}context.maxVertexAttribs=context.GLctx.getParameter(34921);context.clientBuffers=[];for(var i=0;i{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(code,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int_sync_on_main_thread=(code,sigPtr,argbuf)=>runMainThreadEmAsm(code,sigPtr,argbuf,1);var _emscripten_date_now=()=>Date.now();var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,document,window];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement};var findCanvasEventTarget=findEventTarget;var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>withStackSave(()=>{var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];return size});var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{withStackSave(()=>{var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height)})}};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};var _emscripten_get_device_pixel_ratio=()=>devicePixelRatio;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var _emscripten_get_main_loop_timing=(mode,value)=>{if(mode)HEAP32[mode>>2]=Browser.mainLoop.timingMode;if(value)HEAP32[value>>2]=Browser.mainLoop.timingValue};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height};function _glActiveTexture(x0){GLctx.activeTexture(x0)}var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{if(target==34962){GLctx.currentArrayBufferBinding=buffer}else if(target==34963){GLctx.currentElementArrayBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao]);var ibo=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=ibo?ibo.name|0:0};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;function _glBlendColor(x0,x1,x2,x3){GLctx.blendColor(x0,x1,x2,x3)}var _emscripten_glBlendColor=_glBlendColor;function _glBlendEquation(x0){GLctx.blendEquation(x0)}var _emscripten_glBlendEquation=_glBlendEquation;function _glBlendEquationSeparate(x0,x1){GLctx.blendEquationSeparate(x0,x1)}var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}var _emscripten_glBlendFunc=_glBlendFunc;function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx.blendFuncSeparate(x0,x1,x2,x3)}var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;function _glCheckFramebufferStatus(x0){return GLctx.checkFramebufferStatus(x0)}var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;function _glClear(x0){GLctx.clear(x0)}var _emscripten_glClear=_glClear;function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _emscripten_glClearColor=_glClearColor;function _glClearDepthf(x0){GLctx.clearDepth(x0)}var _emscripten_glClearDepthf=_glClearDepthf;function _glClearStencil(x0){GLctx.clearStencil(x0)}var _emscripten_glClearStencil=_glClearStencil;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;function _glCullFace(x0){GLctx.cullFace(x0)}var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GLctx.currentArrayBufferBinding)GLctx.currentArrayBufferBinding=0;if(id==GLctx.currentElementArrayBufferBinding)GLctx.currentElementArrayBufferBinding=0}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteShader=_glDeleteShader;var _glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteTextures=_glDeleteTextures;var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;function _glDepthFunc(x0){GLctx.depthFunc(x0)}var _emscripten_glDepthFunc=_glDepthFunc;var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthMask=_glDepthMask;function _glDepthRangef(x0,x1){GLctx.depthRange(x0,x1)}var _emscripten_glDepthRangef=_glDepthRangef;var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDetachShader=_glDetachShader;function _glDisable(x0){GLctx.disable(x0)}var _emscripten_glDisable=_glDisable;var _glDisableVertexAttribArray=index=>{var cb=GL.currentContext.clientBuffers[index];cb.enabled=false;GLctx.disableVertexAttribArray(index)};var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;var _glDrawArrays=(mode,first,count)=>{GL.preDrawHandleClientVertexAttribBindings(first+count);GLctx.drawArrays(mode,first,count);GL.postDrawHandleClientVertexAttribBindings()};var _emscripten_glDrawArrays=_glDrawArrays;var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{var buf;if(!GLctx.currentElementArrayBufferBinding){var size=GL.calcBufLength(1,type,0,count);buf=GL.getTempIndexBuffer(size);GLctx.bindBuffer(34963,buf);GLctx.bufferSubData(34963,0,HEAPU8.subarray(indices,indices+size));indices=0}GL.preDrawHandleClientVertexAttribBindings(count);GLctx.drawElements(mode,count,type,indices);GL.postDrawHandleClientVertexAttribBindings(count);if(!GLctx.currentElementArrayBufferBinding){GLctx.bindBuffer(34963,null)}};var _emscripten_glDrawElements=_glDrawElements;var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;function _glEnable(x0){GLctx.enable(x0)}var _emscripten_glEnable=_glEnable;var _glEnableVertexAttribArray=index=>{var cb=GL.currentContext.clientBuffers[index];cb.enabled=true;GLctx.enableVertexAttribArray(index)};var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndQueryEXT=_glEndQueryEXT;function _glFinish(){GLctx.finish()}var _emscripten_glFinish=_glFinish;function _glFlush(){GLctx.flush()}var _emscripten_glFlush=_glFlush;var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;function _glFrontFace(x0){GLctx.frontFace(x0)}var _emscripten_glFrontFace=_glFrontFace;var __glGenObject=(n,buffers,createFunction,objectTable)=>{for(var i=0;i>2]=id}};var _glGenBuffers=(n,buffers)=>{__glGenObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenBuffers=_glGenBuffers;var _glGenFramebuffers=(n,ids)=>{__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenFramebuffers=_glGenFramebuffers;var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;var _glGenTextures=(n,textures)=>{__glGenObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTextures=_glGenTextures;function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;function _glGenerateMipmap(x0){GLctx.generateMipmap(x0)}var _emscripten_glGenerateMipmap=_glGenerateMipmap;var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveUniform=_glGetActiveUniform;var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetAttribLocation=_glGetAttribLocation;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}};var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBooleanv=_glGetBooleanv;var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetError=_glGetError;var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFloatv=_glGetFloatv;var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetIntegerv=_glGetIntegerv;var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetProgramiv=_glGetProgramiv;var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderSource=_glGetShaderSource;var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _emscripten_glGetShaderiv=_glGetShaderiv;var webglGetExtensions=function $webglGetExtensions(){var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion=`OpenGL ES 2.0 (${glVersion})`}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetString=_glGetString;var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformfv=_glGetUniformfv;var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformiv=_glGetUniformiv;var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}if(GL.currentContext.clientBuffers[index].enabled){err("glGetVertexAttribPointer on client-side array: not supported, bad data returned")}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}if(GL.currentContext.clientBuffers[index].enabled){err("glGetVertexAttrib*v on client-side array: not supported, bad data returned")}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;function _glHint(x0,x1){GLctx.hint(x0,x1)}var _emscripten_glHint=_glHint;var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsBuffer=_glIsBuffer;function _glIsEnabled(x0){return GLctx.isEnabled(x0)}var _emscripten_glIsEnabled=_glIsEnabled;var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsFramebuffer=_glIsFramebuffer;var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsProgram=_glIsProgram;var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsQueryEXT=_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsShader=_glIsShader;var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTexture=_glIsTexture;var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;function _glLineWidth(x0){GLctx.lineWidth(x0)}var _emscripten_glLineWidth=_glLineWidth;var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glLinkProgram=_glLinkProgram;var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPixelStorei=_glPixelStorei;function _glPolygonOffset(x0,x1){GLctx.polygonOffset(x0,x1)}var _emscripten_glPolygonOffset=_glPolygonOffset;var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var heapAccessShiftForWebGLHeap=heap=>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)};var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReadPixels=_glReadPixels;var _glReleaseShaderCompiler=()=>{};var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;function _glRenderbufferStorage(x0,x1,x2,x3){GLctx.renderbufferStorage(x0,x1,x2,x3)}var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSampleCoverage=_glSampleCoverage;function _glScissor(x0,x1,x2,x3){GLctx.scissor(x0,x1,x2,x3)}var _emscripten_glScissor=_glScissor;var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderBinary=_glShaderBinary;var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glShaderSource=_glShaderSource;function _glStencilFunc(x0,x1,x2){GLctx.stencilFunc(x0,x1,x2)}var _emscripten_glStencilFunc=_glStencilFunc;function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx.stencilFuncSeparate(x0,x1,x2,x3)}var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;function _glStencilMask(x0){GLctx.stencilMask(x0)}var _emscripten_glStencilMask=_glStencilMask;function _glStencilMaskSeparate(x0,x1){GLctx.stencilMaskSeparate(x0,x1)}var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;function _glStencilOp(x0,x1,x2){GLctx.stencilOp(x0,x1,x2)}var _emscripten_glStencilOp=_glStencilOp;function _glStencilOpSeparate(x0,x1,x2,x3){GLctx.stencilOpSeparate(x0,x1,x2,x3)}var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)};var _emscripten_glTexImage2D=_glTexImage2D;function _glTexParameterf(x0,x1,x2){GLctx.texParameterf(x0,x1,x2)}var _emscripten_glTexParameterf=_glTexParameterf;var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameterfv=_glTexParameterfv;function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _emscripten_glTexParameteri=_glTexParameteri;var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexParameteriv=_glTexParameteriv;var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage2D=_glTexSubImage2D;var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1f=_glUniform1f;var miniTempWebGLFloatBuffers=[];var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1fv=_glUniform1fv;var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1i=_glUniform1i;var miniTempWebGLIntBuffers=[];var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1iv=_glUniform1iv;var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2f=_glUniform2f;var _glUniform2fv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2fv=_glUniform2fv;var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2i=_glUniform2i;var _glUniform2iv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2iv=_glUniform2iv;var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3f=_glUniform3f;var _glUniform3fv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3fv=_glUniform3fv;var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3i=_glUniform3i;var _glUniform3iv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3iv=_glUniform3iv;var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4f=_glUniform4f;var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4fv=_glUniform4fv;var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4i=_glUniform4i;var _glUniform4iv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4iv=_glUniform4iv;var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glUseProgram=_glUseProgram;var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glValidateProgram=_glValidateProgram;function _glVertexAttrib1f(x0,x1){GLctx.vertexAttrib1f(x0,x1)}var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;function _glVertexAttrib2f(x0,x1,x2){GLctx.vertexAttrib2f(x0,x1,x2)}var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;function _glVertexAttrib3f(x0,x1,x2,x3){GLctx.vertexAttrib3f(x0,x1,x2,x3)}var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx.vertexAttrib4f(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{var cb=GL.currentContext.clientBuffers[index];if(!GLctx.currentArrayBufferBinding){cb.size=size;cb.type=type;cb.normalized=normalized;cb.stride=stride;cb.ptr=ptr;cb.clientside=true;cb.vertexAttribPointerAdaptor=function(index,size,type,normalized,stride,ptr){this.vertexAttribPointer(index,size,type,normalized,stride,ptr)};return}cb.clientside=false;GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var _emscripten_glViewport=_glViewport;var _emscripten_has_asyncify=()=>0;var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var _emscripten_pause_main_loop=()=>{Browser.mainLoop.pause()};var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _emscripten_resume_main_loop=()=>{Browser.mainLoop.resume()};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var _emscripten_set_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0};var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread);var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var _emscripten_sleep=()=>{throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+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}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops?.fsync){return stream.stream_ops.fsync(stream)}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(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.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 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 function(){return ccall(ident,returnType,argTypes,arguments,opts)}};var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=Browser.requestFullscreen;Module["requestAnimationFrame"]=Browser.requestAnimationFrame;Module["setCanvasSize"]=Browser.setCanvasSize;Module["pauseMainLoop"]=Browser.mainLoop.pause;Module["resumeMainLoop"]=Browser.mainLoop.resume;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i+1)}var wasmImports={Q:___syscall_fcntl64,rb:___syscall_fstat64,$a:___syscall_ftruncate64,mb:___syscall_getcwd,ib:___syscall_getdents64,sb:___syscall_ioctl,ob:___syscall_lstat64,jb:___syscall_mkdirat,pb:___syscall_newfstatat,R:___syscall_openat,hb:___syscall_readlinkat,fb:___syscall_rmdir,qb:___syscall_stat64,gb:___syscall_unlinkat,db:___syscall_utimensat,tb:__emscripten_get_now_is_monotonic,ab:__emscripten_throw_longjmp,Ya:__localtime_js,Za:__mktime_js,Va:__mmap_js,Wa:__msync_js,Xa:__munmap_js,eb:__tzset_js,a:_abort,Qa:_eglBindAPI,Ua:_eglChooseConfig,Ha:_eglCreateContext,Ja:_eglCreateWindowSurface,Ia:_eglDestroyContext,Ka:_eglDestroySurface,bb:_eglGetConfigAttrib,O:_eglGetDisplay,Ga:_eglGetError,Sa:_eglInitialize,La:_eglMakeCurrent,Fa:_eglQueryString,Ma:_eglSwapBuffers,Na:_eglSwapInterval,Ta:_eglTerminate,Pa:_eglWaitGL,Oa:_eglWaitNative,i:_emscripten_asm_const_int,b:_emscripten_asm_const_int_sync_on_main_thread,S:_emscripten_date_now,za:_emscripten_exit_fullscreen,Da:_emscripten_exit_pointerlock,h:_emscripten_get_device_pixel_ratio,e:_emscripten_get_element_css_size,V:_emscripten_get_gamepad_status,Z:_emscripten_get_main_loop_timing,p:_emscripten_get_now,bc:_emscripten_get_num_gamepads,Ea:_emscripten_get_screen_size,fa:_emscripten_glActiveTexture,ea:_emscripten_glAttachShader,va:_emscripten_glBeginQueryEXT,da:_emscripten_glBindAttribLocation,ca:_emscripten_glBindBuffer,ba:_emscripten_glBindFramebuffer,aa:_emscripten_glBindRenderbuffer,$:_emscripten_glBindTexture,na:_emscripten_glBindVertexArrayOES,_:_emscripten_glBlendColor,Zd:_emscripten_glBlendEquation,Yd:_emscripten_glBlendEquationSeparate,Xd:_emscripten_glBlendFunc,Wd:_emscripten_glBlendFuncSeparate,Vd:_emscripten_glBufferData,Ud:_emscripten_glBufferSubData,Td:_emscripten_glCheckFramebufferStatus,Sd:_emscripten_glClear,Rd:_emscripten_glClearColor,Qd:_emscripten_glClearDepthf,Pd:_emscripten_glClearStencil,Od:_emscripten_glColorMask,Nd:_emscripten_glCompileShader,Md:_emscripten_glCompressedTexImage2D,Ld:_emscripten_glCompressedTexSubImage2D,Kd:_emscripten_glCopyTexImage2D,Jd:_emscripten_glCopyTexSubImage2D,Id:_emscripten_glCreateProgram,Hd:_emscripten_glCreateShader,Gd:_emscripten_glCullFace,Fd:_emscripten_glDeleteBuffers,Ed:_emscripten_glDeleteFramebuffers,Dd:_emscripten_glDeleteProgram,xa:_emscripten_glDeleteQueriesEXT,Cd:_emscripten_glDeleteRenderbuffers,Bd:_emscripten_glDeleteShader,Ad:_emscripten_glDeleteTextures,ma:_emscripten_glDeleteVertexArraysOES,zd:_emscripten_glDepthFunc,yd:_emscripten_glDepthMask,xd:_emscripten_glDepthRangef,wd:_emscripten_glDetachShader,ud:_emscripten_glDisable,td:_emscripten_glDisableVertexAttribArray,sd:_emscripten_glDrawArrays,ia:_emscripten_glDrawArraysInstancedANGLE,ja:_emscripten_glDrawBuffersWEBGL,rd:_emscripten_glDrawElements,ha:_emscripten_glDrawElementsInstancedANGLE,qd:_emscripten_glEnable,pd:_emscripten_glEnableVertexAttribArray,ua:_emscripten_glEndQueryEXT,od:_emscripten_glFinish,nd:_emscripten_glFlush,md:_emscripten_glFramebufferRenderbuffer,ld:_emscripten_glFramebufferTexture2D,kd:_emscripten_glFrontFace,jd:_emscripten_glGenBuffers,hd:_emscripten_glGenFramebuffers,ya:_emscripten_glGenQueriesEXT,gd:_emscripten_glGenRenderbuffers,fd:_emscripten_glGenTextures,la:_emscripten_glGenVertexArraysOES,id:_emscripten_glGenerateMipmap,ed:_emscripten_glGetActiveAttrib,dd:_emscripten_glGetActiveUniform,cd:_emscripten_glGetAttachedShaders,bd:_emscripten_glGetAttribLocation,ad:_emscripten_glGetBooleanv,$c:_emscripten_glGetBufferParameteriv,_c:_emscripten_glGetError,Zc:_emscripten_glGetFloatv,Yc:_emscripten_glGetFramebufferAttachmentParameteriv,Xc:_emscripten_glGetIntegerv,Vc:_emscripten_glGetProgramInfoLog,Wc:_emscripten_glGetProgramiv,pa:_emscripten_glGetQueryObjecti64vEXT,ra:_emscripten_glGetQueryObjectivEXT,oa:_emscripten_glGetQueryObjectui64vEXT,qa:_emscripten_glGetQueryObjectuivEXT,sa:_emscripten_glGetQueryivEXT,Uc:_emscripten_glGetRenderbufferParameteriv,Rc:_emscripten_glGetShaderInfoLog,Qc:_emscripten_glGetShaderPrecisionFormat,Pc:_emscripten_glGetShaderSource,Tc:_emscripten_glGetShaderiv,Oc:_emscripten_glGetString,Nc:_emscripten_glGetTexParameterfv,Mc:_emscripten_glGetTexParameteriv,Jc:_emscripten_glGetUniformLocation,Lc:_emscripten_glGetUniformfv,Kc:_emscripten_glGetUniformiv,Fc:_emscripten_glGetVertexAttribPointerv,Ic:_emscripten_glGetVertexAttribfv,Gc:_emscripten_glGetVertexAttribiv,Ec:_emscripten_glHint,Dc:_emscripten_glIsBuffer,Cc:_emscripten_glIsEnabled,Bc:_emscripten_glIsFramebuffer,Ac:_emscripten_glIsProgram,wa:_emscripten_glIsQueryEXT,zc:_emscripten_glIsRenderbuffer,yc:_emscripten_glIsShader,xc:_emscripten_glIsTexture,ka:_emscripten_glIsVertexArrayOES,wc:_emscripten_glLineWidth,vc:_emscripten_glLinkProgram,uc:_emscripten_glPixelStorei,tc:_emscripten_glPolygonOffset,ta:_emscripten_glQueryCounterEXT,sc:_emscripten_glReadPixels,rc:_emscripten_glReleaseShaderCompiler,qc:_emscripten_glRenderbufferStorage,pc:_emscripten_glSampleCoverage,oc:_emscripten_glScissor,nc:_emscripten_glShaderBinary,mc:_emscripten_glShaderSource,lc:_emscripten_glStencilFunc,kc:_emscripten_glStencilFuncSeparate,jc:_emscripten_glStencilMask,ic:_emscripten_glStencilMaskSeparate,hc:_emscripten_glStencilOp,gc:_emscripten_glStencilOpSeparate,fc:_emscripten_glTexImage2D,ec:_emscripten_glTexParameterf,dc:_emscripten_glTexParameterfv,ac:_emscripten_glTexParameteri,$b:_emscripten_glTexParameteriv,_b:_emscripten_glTexSubImage2D,Zb:_emscripten_glUniform1f,Yb:_emscripten_glUniform1fv,Xb:_emscripten_glUniform1i,Wb:_emscripten_glUniform1iv,Vb:_emscripten_glUniform2f,Ub:_emscripten_glUniform2fv,Tb:_emscripten_glUniform2i,Sb:_emscripten_glUniform2iv,Rb:_emscripten_glUniform3f,Qb:_emscripten_glUniform3fv,Pb:_emscripten_glUniform3i,Ob:_emscripten_glUniform3iv,Nb:_emscripten_glUniform4f,Mb:_emscripten_glUniform4fv,Lb:_emscripten_glUniform4i,Kb:_emscripten_glUniform4iv,Jb:_emscripten_glUniformMatrix2fv,Ib:_emscripten_glUniformMatrix3fv,Hb:_emscripten_glUniformMatrix4fv,Gb:_emscripten_glUseProgram,Fb:_emscripten_glValidateProgram,Eb:_emscripten_glVertexAttrib1f,Db:_emscripten_glVertexAttrib1fv,Cb:_emscripten_glVertexAttrib2f,Bb:_emscripten_glVertexAttrib2fv,Ab:_emscripten_glVertexAttrib3f,zb:_emscripten_glVertexAttrib3fv,yb:_emscripten_glVertexAttrib4f,xb:_emscripten_glVertexAttrib4fv,ga:_emscripten_glVertexAttribDivisorANGLE,wb:_emscripten_glVertexAttribPointer,vb:_emscripten_glViewport,o:_emscripten_has_asyncify,ub:_emscripten_memcpy_js,q:_emscripten_pause_main_loop,Aa:_emscripten_request_fullscreen_strategy,M:_emscripten_request_pointerlock,cb:_emscripten_resize_heap,N:_emscripten_resume_main_loop,W:_emscripten_sample_gamepad_data,s:_emscripten_set_beforeunload_callback_on_thread,E:_emscripten_set_blur_callback_on_thread,g:_emscripten_set_canvas_element_size,l:_emscripten_set_element_css_size,F:_emscripten_set_focus_callback_on_thread,v:_emscripten_set_fullscreenchange_callback_on_thread,U:_emscripten_set_gamepadconnected_callback_on_thread,T:_emscripten_set_gamepaddisconnected_callback_on_thread,y:_emscripten_set_keydown_callback_on_thread,w:_emscripten_set_keypress_callback_on_thread,x:_emscripten_set_keyup_callback_on_thread,Ca:_emscripten_set_main_loop,cc:_emscripten_set_main_loop_timing,K:_emscripten_set_mousedown_callback_on_thread,I:_emscripten_set_mouseenter_callback_on_thread,H:_emscripten_set_mouseleave_callback_on_thread,L:_emscripten_set_mousemove_callback_on_thread,J:_emscripten_set_mouseup_callback_on_thread,z:_emscripten_set_pointerlockchange_callback_on_thread,u:_emscripten_set_resize_callback_on_thread,A:_emscripten_set_touchcancel_callback_on_thread,C:_emscripten_set_touchend_callback_on_thread,B:_emscripten_set_touchmove_callback_on_thread,D:_emscripten_set_touchstart_callback_on_thread,t:_emscripten_set_visibilitychange_callback_on_thread,G:_emscripten_set_wheel_callback_on_thread,Ba:_emscripten_set_window_title,m:_emscripten_sleep,kb:_environ_get,lb:_environ_sizes_get,Ra:_exit,j:_fd_close,P:_fd_read,_a:_fd_seek,nb:_fd_sync,n:_fd_write,Y:invoke_ii,X:invoke_iii,c:invoke_iiii,r:invoke_iiiii,Sc:invoke_vi,d:invoke_vii,k:invoke_viii,f:invoke_viiii,Hc:invoke_viiiii,vd:invoke_viiiiiiiii};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["$d"])();var _screenshot=Module["_screenshot"]=a0=>(_screenshot=Module["_screenshot"]=wasmExports["ae"])(a0);var _buttonPress=Module["_buttonPress"]=a0=>(_buttonPress=Module["_buttonPress"]=wasmExports["be"])(a0);var _buttonUnpress=Module["_buttonUnpress"]=a0=>(_buttonUnpress=Module["_buttonUnpress"]=wasmExports["ce"])(a0);var _setVolume=Module["_setVolume"]=a0=>(_setVolume=Module["_setVolume"]=wasmExports["de"])(a0);var _getVolume=Module["_getVolume"]=()=>(_getVolume=Module["_getVolume"]=wasmExports["ee"])();var _getMainLoopTimingMode=Module["_getMainLoopTimingMode"]=()=>(_getMainLoopTimingMode=Module["_getMainLoopTimingMode"]=wasmExports["fe"])();var _getMainLoopTimingValue=Module["_getMainLoopTimingValue"]=()=>(_getMainLoopTimingValue=Module["_getMainLoopTimingValue"]=wasmExports["ge"])();var _setMainLoopTiming=Module["_setMainLoopTiming"]=(a0,a1)=>(_setMainLoopTiming=Module["_setMainLoopTiming"]=wasmExports["he"])(a0,a1);var _setFastForwardMultiplier=Module["_setFastForwardMultiplier"]=a0=>(_setFastForwardMultiplier=Module["_setFastForwardMultiplier"]=wasmExports["ie"])(a0);var _getFastForwardMultiplier=Module["_getFastForwardMultiplier"]=()=>(_getFastForwardMultiplier=Module["_getFastForwardMultiplier"]=wasmExports["je"])();var _quitGame=Module["_quitGame"]=()=>(_quitGame=Module["_quitGame"]=wasmExports["ke"])();var _quitMgba=Module["_quitMgba"]=()=>(_quitMgba=Module["_quitMgba"]=wasmExports["le"])();var _quickReload=Module["_quickReload"]=()=>(_quickReload=Module["_quickReload"]=wasmExports["me"])();var _pauseGame=Module["_pauseGame"]=()=>(_pauseGame=Module["_pauseGame"]=wasmExports["ne"])();var _resumeGame=Module["_resumeGame"]=()=>(_resumeGame=Module["_resumeGame"]=wasmExports["oe"])();var _setEventEnable=Module["_setEventEnable"]=a0=>(_setEventEnable=Module["_setEventEnable"]=wasmExports["pe"])(a0);var _bindKey=Module["_bindKey"]=(a0,a1)=>(_bindKey=Module["_bindKey"]=wasmExports["qe"])(a0,a1);var _saveState=Module["_saveState"]=a0=>(_saveState=Module["_saveState"]=wasmExports["re"])(a0);var _loadState=Module["_loadState"]=a0=>(_loadState=Module["_loadState"]=wasmExports["se"])(a0);var _autoLoadCheats=Module["_autoLoadCheats"]=()=>(_autoLoadCheats=Module["_autoLoadCheats"]=wasmExports["te"])();var _loadGame=Module["_loadGame"]=a0=>(_loadGame=Module["_loadGame"]=wasmExports["ue"])(a0);var _saveStateSlot=Module["_saveStateSlot"]=(a0,a1)=>(_saveStateSlot=Module["_saveStateSlot"]=wasmExports["ve"])(a0,a1);var _loadStateSlot=Module["_loadStateSlot"]=(a0,a1)=>(_loadStateSlot=Module["_loadStateSlot"]=wasmExports["we"])(a0,a1);var _setupConstants=Module["_setupConstants"]=()=>(_setupConstants=Module["_setupConstants"]=wasmExports["xe"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["ye"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["Ae"])(a0);var setTempRet0=a0=>(setTempRet0=wasmExports["Be"])(a0);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["Ce"])(a0,a1);var _setThrew=(a0,a1)=>(_setThrew=wasmExports["De"])(a0,a1);var stackSave=()=>(stackSave=wasmExports["Ee"])();var stackRestore=a0=>(stackRestore=wasmExports["Fe"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["Ge"])(a0);var dynCall_ji=Module["dynCall_ji"]=(a0,a1)=>(dynCall_ji=Module["dynCall_ji"]=wasmExports["He"])(a0,a1);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["Ie"])(a0,a1,a2,a3,a4);var dynCall_iiiji=Module["dynCall_iiiji"]=(a0,a1,a2,a3,a4,a5)=>(dynCall_iiiji=Module["dynCall_iiiji"]=wasmExports["Je"])(a0,a1,a2,a3,a4,a5);var dynCall_jii=Module["dynCall_jii"]=(a0,a1,a2)=>(dynCall_jii=Module["dynCall_jii"]=wasmExports["Ke"])(a0,a1,a2);var _GBAInputInfo=Module["_GBAInputInfo"]=109920;var _binaryName=Module["_binaryName"]=186992;var _projectName=Module["_projectName"]=186996;var _projectVersion=Module["_projectVersion"]=187e3;var _gitCommit=Module["_gitCommit"]=186976;var _gitCommitShort=Module["_gitCommitShort"]=186980;var _gitBranch=Module["_gitBranch"]=186984;var _gitRevision=Module["_gitRevision"]=186988;var _GBIORegisterNames=Module["_GBIORegisterNames"]=49376;var _GBSavestateMagic=Module["_GBSavestateMagic"]=64640;var _GBSavestateVersion=Module["_GBSavestateVersion"]=64644;var _GBA_LUX_LEVELS=Module["_GBA_LUX_LEVELS"]=93136;var _GBAVideoObjSizes=Module["_GBAVideoObjSizes"]=138416;var _GBASavestateMagic=Module["_GBASavestateMagic"]=138208;var _GBASavestateVersion=Module["_GBASavestateVersion"]=138212;function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["cwrap"]=cwrap;Module["FS"]=FS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});Module.loadGame=name=>{const loadGame=cwrap("loadGame","number",["string"]);if(loadGame(name)){const arr=name.split(".");arr.pop();const saveName=arr.join(".")+".sav";Module.gameName=name;Module.saveName=saveName.replace("/data/games/","/data/saves/");return true}return false};Module.getSave=()=>FS.readFile(Module.saveName);Module.listRoms=()=>FS.readdir("/data/games/");Module.listSaves=()=>FS.readdir("/data/saves/");Module.FSInit=()=>new Promise((resolve,reject)=>{FS.mkdir("/data");FS.mount(FS.filesystems.IDBFS,{},"/data");FS.syncfs(true,err=>{if(err){reject(new Error(`Error syncing app data from IndexedDB: ${err}`))}try{FS.mkdir("/data/saves")}catch(e){}try{FS.mkdir("/data/states")}catch(e){}try{FS.mkdir("/data/games")}catch(e){}try{FS.mkdir("/data/cheats")}catch(e){}try{FS.mkdir("/data/screenshots")}catch(e){}resolve()})});Module.FSSync=()=>new Promise((resolve,reject)=>{FS.syncfs(err=>{if(err){reject(new Error(`Error syncing app data to IndexedDB: ${err}`))}resolve()})});Module.filePaths=()=>({root:"/data",cheatsPath:"/data/cheats",gamePath:"/data/games",savePath:"/data/saves",saveStatePath:"/data/states",screenshotsPath:"/data/screenshots"});Module.uploadSaveOrSaveState=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(extension=="sav"){dir="/data/saves/"}else if(extension.startsWith("ss")){dir="/data/states/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};Module.uploadRom=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(["gba","gbc","gb","zip","7z"].includes(extension)){dir="/data/games/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};Module.uploadCheats=(file,callback)=>{const split=file.name.split(".");if(split.length<2){console.warn("unrecognized file extension: "+file.name);return}const extension=split[split.length-1].toLowerCase();let dir=null;if(extension=="cheats"){dir="/data/cheats/"}else{console.warn("unrecognized file extension: "+extension);return}const reader=new FileReader;reader.onload=e=>{FS.writeFile(dir+file.name,new Uint8Array(e.target.result));if(callback){callback()}};reader.readAsArrayBuffer(file)};const keyBindings=new Map([["a",0],["b",1],["select",2],["start",3],["right",4],["left",5],["up",6],["down",7],["r",8],["l",9]]);Module.buttonPress=name=>{const buttonPress=cwrap("buttonPress",null,["number"]);buttonPress(keyBindings.get(name.toLowerCase()))};Module.buttonUnpress=name=>{const buttonUnpress=cwrap("buttonUnpress",null,["number"]);buttonUnpress(keyBindings.get(name.toLowerCase()))};Module.bindKey=(bindingName,inputName)=>{const bindKey=cwrap("bindKey",null,["string","number"]);bindKey(bindingName,keyBindings.get(inputName.toLowerCase()))};Module.pauseGame=()=>{const pauseGame=cwrap("pauseGame",null,[]);pauseGame()};Module.resumeGame=()=>{const resumeGame=cwrap("resumeGame",null,[]);resumeGame()};Module.getVolume=()=>{const getVolume=cwrap("getVolume","number",[]);return getVolume()};Module.setVolume=percent=>{const setVolume=cwrap("setVolume",null,["number"]);setVolume(percent)};Module.getMainLoopTimingMode=()=>{const getMainLoopTimingMode=cwrap("getMainLoopTimingMode","number",[]);return getMainLoopTimingMode()};Module.getMainLoopTimingValue=()=>{const getMainLoopTimingValue=cwrap("getMainLoopTimingValue","number",[]);return getMainLoopTimingValue()};Module.setMainLoopTiming=(mode,value)=>{const setMainLoopTiming=cwrap("setMainLoopTiming","number",["number","number"]);setMainLoopTiming(mode,value)};Module.quitGame=()=>{const quitGame=cwrap("quitGame",null,[]);quitGame()};Module.quitMgba=()=>{const quitMgba=cwrap("quitMgba",null,[]);quitMgba()};Module.quickReload=()=>{const quickReload=cwrap("quickReload",null,[]);quickReload()};Module.toggleInput=toggle=>{const setEventEnable=cwrap("setEventEnable",null,["boolean"]);setEventEnable(toggle)};Module.screenshot=fileName=>{const screenshot=cwrap("screenshot","boolean",["string"]);return screenshot(fileName)};Module.saveState=slot=>{const saveState=cwrap("saveState","boolean",["number"]);return saveState(slot)};Module.loadState=slot=>{const loadState=cwrap("loadState","boolean",["number"]);return loadState(slot)};Module.saveStateSlot=(slot,flags)=>{var saveStateSlot=cwrap("saveStateSlot","number",["number","number"]);Module.saveStateSlot=(slot,flags)=>{if(flags===undefined){flags=63}return saveStateSlot(slot,flags)};return Module.saveStateSlot(slot,flags)};Module.loadStateSlot=(slot,flags)=>{var loadStateSlot=cwrap("loadStateSlot","number",["number","number"]);Module.loadStateSlot=(slot,flags)=>{if(flags===undefined){flags=61}return loadStateSlot(slot,flags)};return Module.loadStateSlot(slot,flags)};Module.autoLoadCheats=()=>{const autoLoadCheats=cwrap("autoLoadCheats","bool",[]);return autoLoadCheats()};Module.setFastForwardMultiplier=multiplier=>{const setFastForwardMultiplier=cwrap("setFastForwardMultiplier",null,["number"]);setFastForwardMultiplier(multiplier)};Module.getFastForwardMultiplier=()=>{const getFastForwardMultiplier=cwrap("getFastForwardMultiplier","number",[]);return getFastForwardMultiplier()};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="mgba.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{wasmBinaryFile=new URL("mgba.wasm",import.meta.url).href}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"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["_d"];updateMemoryViews();wasmTable=wasmExports["ze"];addOnInit(wasmExports["$d"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={272336:($0,$1)=>{Module.canvas.width=$0;Module.canvas.height=$1},272393:($0,$1,$2,$3,$4,$5,$6)=>{Module.version={gitCommit:UTF8ToString($0),gitShort:UTF8ToString($1),gitBranch:UTF8ToString($2),gitRevision:$3,binaryName:UTF8ToString($4),projectName:UTF8ToString($5),projectVersion:UTF8ToString($6)}},272618:()=>{FS.syncfs(function(err){assert(!err)})},272662:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},272809:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},273043:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){autoResumeAudioContext(SDL2.audioContext)}}return SDL2.audioContext===undefined?-1:0},273536:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},273604:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setTimeout(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},275256:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"])},275666:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c>2]}}},276751:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},280381:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},280464:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},280533:()=>window.innerWidth,280563:()=>window.innerHeight};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};var autoResumeAudioContext=(ctx,elements)=>{if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var dynCallLegacy=(sig,ptr,args)=>{var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args)=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn};var noExitRuntime=Module["noExitRuntime"]||true;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{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=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function 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(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}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: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,0));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,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,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,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(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.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=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.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},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 dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["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,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 IDBFS={dbs:{},indexedDB:()=>{if(typeof indexedDB!="undefined")return indexedDB;var ret=null;if(typeof window=="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{Object.values(IDBFS.dbs).forEach(value=>value.close());IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={"timestamp":stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={"timestamp":cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{"timestamp":stat.mtime,"mode":stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{"timestamp":stat.mtime,"mode":stat.mode,"contents":node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){if(!src.entries[key]){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=e=>{done(this.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};create.sort().forEach(path=>{if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(path=>{if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}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){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){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){if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(val){this.shared.position=val}}})}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},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.apply(check,m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i0,ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(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",16384|511,73);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}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";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 PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);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;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];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();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},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)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.getp();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_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___syscall_ftruncate64(fd,length_low,length_high){var length=convertI32PairToI53Checked(length_low,length_high);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}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=SYSCALLS.getp();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>>0]=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=SYSCALLS.getp();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>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();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=SYSCALLS.getp();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_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}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?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var readI53FromI64=ptr=>HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296;function ___syscall_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);if(!times){var atime=Date.now();var mtime=atime}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>2];atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>2];mtime=seconds*1e3+nanoseconds/(1e3*1e3)}FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_throw_longjmp=()=>{throw Infinity};var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return setTempRet0((tempDouble=ret,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)),ret>>>0};function __mmap_js(len,prot,flags,fd,offset_low,offset_high,allocated,addr){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __msync_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;SYSCALLS.doMsync(addr,SYSCALLS.getStreamFromFD(fd),len,flags,offset);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset_low,offset_high){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}FS.munmap(stream)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var __tzset_js=(timezone,daylight,tzname)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=stringToNewUTF8(winterName);var summerNamePtr=stringToNewUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}};var _abort=()=>{abort("")};var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof Browser.setImmediate=="undefined"){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);Browser.setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object")SDL.audio?.queueNewAudioData?.();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}};var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;onload?.(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x:x,y:y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=function(ctx){var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_half_float","EXT_float_blend","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(code,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int_sync_on_main_thread=(code,sigPtr,argbuf)=>runMainThreadEmAsm(code,sigPtr,argbuf,1);var _emscripten_date_now=()=>Date.now();var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,document,window];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||document.querySelector(target);return domElement};var findCanvasEventTarget=findEventTarget;var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>withStackSave(()=>{var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];return size});var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{withStackSave(()=>{var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height)})}};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};var _emscripten_get_device_pixel_ratio=()=>devicePixelRatio;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var _emscripten_get_main_loop_timing=(mode,value)=>{if(mode)HEAP32[mode>>2]=Browser.mainLoop.timingMode;if(value)HEAP32[value>>2]=Browser.mainLoop.timingValue};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height};function _glActiveTexture(x0){GLctx.activeTexture(x0)}var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;function _glBlendColor(x0,x1,x2,x3){GLctx.blendColor(x0,x1,x2,x3)}var _emscripten_glBlendColor=_glBlendColor;function _glBlendEquation(x0){GLctx.blendEquation(x0)}var _emscripten_glBlendEquation=_glBlendEquation;function _glBlendEquationSeparate(x0,x1){GLctx.blendEquationSeparate(x0,x1)}var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}var _emscripten_glBlendFunc=_glBlendFunc;function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx.blendFuncSeparate(x0,x1,x2,x3)}var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;function _glCheckFramebufferStatus(x0){return GLctx.checkFramebufferStatus(x0)}var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;function _glClear(x0){GLctx.clear(x0)}var _emscripten_glClear=_glClear;function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _emscripten_glClearColor=_glClearColor;function _glClearDepthf(x0){GLctx.clearDepth(x0)}var _emscripten_glClearDepthf=_glClearDepthf;function _glClearStencil(x0){GLctx.clearStencil(x0)}var _emscripten_glClearStencil=_glClearStencil;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;function _glCullFace(x0){GLctx.cullFace(x0)}var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteShader=_glDeleteShader;var _glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteTextures=_glDeleteTextures;var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;function _glDepthFunc(x0){GLctx.depthFunc(x0)}var _emscripten_glDepthFunc=_glDepthFunc;var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthMask=_glDepthMask;function _glDepthRangef(x0,x1){GLctx.depthRange(x0,x1)}var _emscripten_glDepthRangef=_glDepthRangef;var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDetachShader=_glDetachShader;function _glDisable(x0){GLctx.disable(x0)}var _emscripten_glDisable=_glDisable;var _glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};var _emscripten_glDrawArrays=_glDrawArrays;var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};var _emscripten_glDrawElements=_glDrawElements;var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;function _glEnable(x0){GLctx.enable(x0)}var _emscripten_glEnable=_glEnable;var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndQueryEXT=_glEndQueryEXT;function _glFinish(){GLctx.finish()}var _emscripten_glFinish=_glFinish;function _glFlush(){GLctx.flush()}var _emscripten_glFlush=_glFlush;var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;function _glFrontFace(x0){GLctx.frontFace(x0)}var _emscripten_glFrontFace=_glFrontFace;var __glGenObject=(n,buffers,createFunction,objectTable)=>{for(var i=0;i>2]=id}};var _glGenBuffers=(n,buffers)=>{__glGenObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenBuffers=_glGenBuffers;var _glGenFramebuffers=(n,ids)=>{__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenFramebuffers=_glGenFramebuffers;var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;var _glGenTextures=(n,textures)=>{__glGenObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTextures=_glGenTextures;function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;function _glGenerateMipmap(x0){GLctx.generateMipmap(x0)}var _emscripten_glGenerateMipmap=_glGenerateMipmap;var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveUniform=_glGetActiveUniform;var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetAttribLocation=_glGetAttribLocation;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}};var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBooleanv=_glGetBooleanv;var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetError=_glGetError;var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFloatv=_glGetFloatv;var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetIntegerv=_glGetIntegerv;var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetProgramiv=_glGetProgramiv;var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderSource=_glGetShaderSource;var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _emscripten_glGetShaderiv=_glGetShaderiv;var webglGetExtensions=function $webglGetExtensions(){var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion=`OpenGL ES 2.0 (${glVersion})`}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetString=_glGetString;var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformfv=_glGetUniformfv;var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformiv=_glGetUniformiv;var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;function _glHint(x0,x1){GLctx.hint(x0,x1)}var _emscripten_glHint=_glHint;var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsBuffer=_glIsBuffer;function _glIsEnabled(x0){return GLctx.isEnabled(x0)}var _emscripten_glIsEnabled=_glIsEnabled;var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsFramebuffer=_glIsFramebuffer;var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsProgram=_glIsProgram;var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsQueryEXT=_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsShader=_glIsShader;var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTexture=_glIsTexture;var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;function _glLineWidth(x0){GLctx.lineWidth(x0)}var _emscripten_glLineWidth=_glLineWidth;var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glLinkProgram=_glLinkProgram;var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPixelStorei=_glPixelStorei;function _glPolygonOffset(x0,x1){GLctx.polygonOffset(x0,x1)}var _emscripten_glPolygonOffset=_glPolygonOffset;var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var heapAccessShiftForWebGLHeap=heap=>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)};var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReadPixels=_glReadPixels;var _glReleaseShaderCompiler=()=>{};var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;function _glRenderbufferStorage(x0,x1,x2,x3){GLctx.renderbufferStorage(x0,x1,x2,x3)}var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSampleCoverage=_glSampleCoverage;function _glScissor(x0,x1,x2,x3){GLctx.scissor(x0,x1,x2,x3)}var _emscripten_glScissor=_glScissor;var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderBinary=_glShaderBinary;var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glShaderSource=_glShaderSource;function _glStencilFunc(x0,x1,x2){GLctx.stencilFunc(x0,x1,x2)}var _emscripten_glStencilFunc=_glStencilFunc;function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx.stencilFuncSeparate(x0,x1,x2,x3)}var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;function _glStencilMask(x0){GLctx.stencilMask(x0)}var _emscripten_glStencilMask=_glStencilMask;function _glStencilMaskSeparate(x0,x1){GLctx.stencilMaskSeparate(x0,x1)}var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;function _glStencilOp(x0,x1,x2){GLctx.stencilOp(x0,x1,x2)}var _emscripten_glStencilOp=_glStencilOp;function _glStencilOpSeparate(x0,x1,x2,x3){GLctx.stencilOpSeparate(x0,x1,x2,x3)}var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)};var _emscripten_glTexImage2D=_glTexImage2D;function _glTexParameterf(x0,x1,x2){GLctx.texParameterf(x0,x1,x2)}var _emscripten_glTexParameterf=_glTexParameterf;var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameterfv=_glTexParameterfv;function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _emscripten_glTexParameteri=_glTexParameteri;var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexParameteriv=_glTexParameteriv;var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage2D=_glTexSubImage2D;var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1f=_glUniform1f;var miniTempWebGLFloatBuffers=[];var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1fv=_glUniform1fv;var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1i=_glUniform1i;var miniTempWebGLIntBuffers=[];var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1iv=_glUniform1iv;var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2f=_glUniform2f;var _glUniform2fv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2fv=_glUniform2fv;var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2i=_glUniform2i;var _glUniform2iv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2iv=_glUniform2iv;var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3f=_glUniform3f;var _glUniform3fv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3fv=_glUniform3fv;var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3i=_glUniform3i;var _glUniform3iv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3iv=_glUniform3iv;var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4f=_glUniform4f;var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4fv=_glUniform4fv;var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4i=_glUniform4i;var _glUniform4iv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4iv=_glUniform4iv;var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glUseProgram=_glUseProgram;var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glValidateProgram=_glValidateProgram;function _glVertexAttrib1f(x0,x1){GLctx.vertexAttrib1f(x0,x1)}var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;function _glVertexAttrib2f(x0,x1,x2){GLctx.vertexAttrib2f(x0,x1,x2)}var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;function _glVertexAttrib3f(x0,x1,x2,x3){GLctx.vertexAttrib3f(x0,x1,x2,x3)}var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx.vertexAttrib4f(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var _emscripten_glViewport=_glViewport;var _emscripten_has_asyncify=()=>0;var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var _emscripten_pause_main_loop=()=>{Browser.mainLoop.pause()};var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _emscripten_resume_main_loop=()=>{Browser.mainLoop.resume()};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var _emscripten_set_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0};var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread);var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var _emscripten_sleep=()=>{throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+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}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops?.fsync){return stream.stream_ops.fsync(stream)}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(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.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 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 function(){return ccall(ident,returnType,argTypes,arguments,opts)}};var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=Browser.requestFullscreen;Module["requestAnimationFrame"]=Browser.requestAnimationFrame;Module["setCanvasSize"]=Browser.setCanvasSize;Module["pauseMainLoop"]=Browser.mainLoop.pause;Module["resumeMainLoop"]=Browser.mainLoop.resume;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i+1)}var wasmImports={Q:___syscall_fcntl64,rb:___syscall_fstat64,ab:___syscall_ftruncate64,mb:___syscall_getcwd,ib:___syscall_getdents64,sb:___syscall_ioctl,ob:___syscall_lstat64,jb:___syscall_mkdirat,pb:___syscall_newfstatat,S:___syscall_openat,hb:___syscall_readlinkat,fb:___syscall_rmdir,qb:___syscall_stat64,gb:___syscall_unlinkat,db:___syscall_utimensat,tb:__emscripten_get_now_is_monotonic,bb:__emscripten_throw_longjmp,Za:__localtime_js,_a:__mktime_js,Wa:__mmap_js,Xa:__msync_js,Ya:__munmap_js,eb:__tzset_js,a:_abort,Qa:_eglBindAPI,Ua:_eglChooseConfig,Ga:_eglCreateContext,Ja:_eglCreateWindowSurface,Ha:_eglDestroyContext,Ka:_eglDestroySurface,Va:_eglGetConfigAttrib,O:_eglGetDisplay,Fa:_eglGetError,Ra:_eglInitialize,La:_eglMakeCurrent,Ea:_eglQueryString,Ma:_eglSwapBuffers,Na:_eglSwapInterval,Ta:_eglTerminate,Pa:_eglWaitGL,Oa:_eglWaitNative,i:_emscripten_asm_const_int,b:_emscripten_asm_const_int_sync_on_main_thread,T:_emscripten_date_now,ya:_emscripten_exit_fullscreen,Ca:_emscripten_exit_pointerlock,h:_emscripten_get_device_pixel_ratio,e:_emscripten_get_element_css_size,V:_emscripten_get_gamepad_status,X:_emscripten_get_main_loop_timing,l:_emscripten_get_now,Ub:_emscripten_get_num_gamepads,Da:_emscripten_get_screen_size,ea:_emscripten_glActiveTexture,da:_emscripten_glAttachShader,ua:_emscripten_glBeginQueryEXT,ca:_emscripten_glBindAttribLocation,ba:_emscripten_glBindBuffer,aa:_emscripten_glBindFramebuffer,$:_emscripten_glBindRenderbuffer,_:_emscripten_glBindTexture,ma:_emscripten_glBindVertexArrayOES,Zd:_emscripten_glBlendColor,Yd:_emscripten_glBlendEquation,Xd:_emscripten_glBlendEquationSeparate,Wd:_emscripten_glBlendFunc,Vd:_emscripten_glBlendFuncSeparate,Ud:_emscripten_glBufferData,Td:_emscripten_glBufferSubData,Sd:_emscripten_glCheckFramebufferStatus,Rd:_emscripten_glClear,Qd:_emscripten_glClearColor,Pd:_emscripten_glClearDepthf,Od:_emscripten_glClearStencil,Nd:_emscripten_glColorMask,Md:_emscripten_glCompileShader,Ld:_emscripten_glCompressedTexImage2D,Kd:_emscripten_glCompressedTexSubImage2D,Jd:_emscripten_glCopyTexImage2D,Id:_emscripten_glCopyTexSubImage2D,Hd:_emscripten_glCreateProgram,Gd:_emscripten_glCreateShader,Fd:_emscripten_glCullFace,Ed:_emscripten_glDeleteBuffers,Dd:_emscripten_glDeleteFramebuffers,Cd:_emscripten_glDeleteProgram,wa:_emscripten_glDeleteQueriesEXT,Bd:_emscripten_glDeleteRenderbuffers,Ad:_emscripten_glDeleteShader,zd:_emscripten_glDeleteTextures,la:_emscripten_glDeleteVertexArraysOES,yd:_emscripten_glDepthFunc,xd:_emscripten_glDepthMask,wd:_emscripten_glDepthRangef,vd:_emscripten_glDetachShader,ud:_emscripten_glDisable,td:_emscripten_glDisableVertexAttribArray,sd:_emscripten_glDrawArrays,ha:_emscripten_glDrawArraysInstancedANGLE,ia:_emscripten_glDrawBuffersWEBGL,rd:_emscripten_glDrawElements,ga:_emscripten_glDrawElementsInstancedANGLE,qd:_emscripten_glEnable,pd:_emscripten_glEnableVertexAttribArray,ta:_emscripten_glEndQueryEXT,od:_emscripten_glFinish,nd:_emscripten_glFlush,md:_emscripten_glFramebufferRenderbuffer,kd:_emscripten_glFramebufferTexture2D,jd:_emscripten_glFrontFace,id:_emscripten_glGenBuffers,gd:_emscripten_glGenFramebuffers,xa:_emscripten_glGenQueriesEXT,fd:_emscripten_glGenRenderbuffers,ed:_emscripten_glGenTextures,ka:_emscripten_glGenVertexArraysOES,hd:_emscripten_glGenerateMipmap,dd:_emscripten_glGetActiveAttrib,cd:_emscripten_glGetActiveUniform,bd:_emscripten_glGetAttachedShaders,ad:_emscripten_glGetAttribLocation,$c:_emscripten_glGetBooleanv,_c:_emscripten_glGetBufferParameteriv,Zc:_emscripten_glGetError,Yc:_emscripten_glGetFloatv,Xc:_emscripten_glGetFramebufferAttachmentParameteriv,Wc:_emscripten_glGetIntegerv,Uc:_emscripten_glGetProgramInfoLog,Vc:_emscripten_glGetProgramiv,oa:_emscripten_glGetQueryObjecti64vEXT,qa:_emscripten_glGetQueryObjectivEXT,na:_emscripten_glGetQueryObjectui64vEXT,pa:_emscripten_glGetQueryObjectuivEXT,ra:_emscripten_glGetQueryivEXT,Tc:_emscripten_glGetRenderbufferParameteriv,Rc:_emscripten_glGetShaderInfoLog,Qc:_emscripten_glGetShaderPrecisionFormat,Pc:_emscripten_glGetShaderSource,Sc:_emscripten_glGetShaderiv,Oc:_emscripten_glGetString,Nc:_emscripten_glGetTexParameterfv,Mc:_emscripten_glGetTexParameteriv,Jc:_emscripten_glGetUniformLocation,Lc:_emscripten_glGetUniformfv,Kc:_emscripten_glGetUniformiv,Fc:_emscripten_glGetVertexAttribPointerv,Hc:_emscripten_glGetVertexAttribfv,Gc:_emscripten_glGetVertexAttribiv,Ec:_emscripten_glHint,Dc:_emscripten_glIsBuffer,Cc:_emscripten_glIsEnabled,Bc:_emscripten_glIsFramebuffer,Ac:_emscripten_glIsProgram,va:_emscripten_glIsQueryEXT,zc:_emscripten_glIsRenderbuffer,yc:_emscripten_glIsShader,wc:_emscripten_glIsTexture,ja:_emscripten_glIsVertexArrayOES,vc:_emscripten_glLineWidth,uc:_emscripten_glLinkProgram,tc:_emscripten_glPixelStorei,sc:_emscripten_glPolygonOffset,sa:_emscripten_glQueryCounterEXT,rc:_emscripten_glReadPixels,qc:_emscripten_glReleaseShaderCompiler,pc:_emscripten_glRenderbufferStorage,oc:_emscripten_glSampleCoverage,nc:_emscripten_glScissor,mc:_emscripten_glShaderBinary,lc:_emscripten_glShaderSource,kc:_emscripten_glStencilFunc,jc:_emscripten_glStencilFuncSeparate,ic:_emscripten_glStencilMask,hc:_emscripten_glStencilMaskSeparate,gc:_emscripten_glStencilOp,fc:_emscripten_glStencilOpSeparate,ec:_emscripten_glTexImage2D,dc:_emscripten_glTexParameterf,cc:_emscripten_glTexParameterfv,bc:_emscripten_glTexParameteri,ac:_emscripten_glTexParameteriv,$b:_emscripten_glTexSubImage2D,_b:_emscripten_glUniform1f,Zb:_emscripten_glUniform1fv,Yb:_emscripten_glUniform1i,Xb:_emscripten_glUniform1iv,Wb:_emscripten_glUniform2f,Vb:_emscripten_glUniform2fv,Tb:_emscripten_glUniform2i,Sb:_emscripten_glUniform2iv,Rb:_emscripten_glUniform3f,Qb:_emscripten_glUniform3fv,Pb:_emscripten_glUniform3i,Ob:_emscripten_glUniform3iv,Nb:_emscripten_glUniform4f,Mb:_emscripten_glUniform4fv,Lb:_emscripten_glUniform4i,Kb:_emscripten_glUniform4iv,Jb:_emscripten_glUniformMatrix2fv,Ib:_emscripten_glUniformMatrix3fv,Hb:_emscripten_glUniformMatrix4fv,Gb:_emscripten_glUseProgram,Fb:_emscripten_glValidateProgram,Eb:_emscripten_glVertexAttrib1f,Db:_emscripten_glVertexAttrib1fv,Cb:_emscripten_glVertexAttrib2f,Bb:_emscripten_glVertexAttrib2fv,Ab:_emscripten_glVertexAttrib3f,zb:_emscripten_glVertexAttrib3fv,yb:_emscripten_glVertexAttrib4f,xb:_emscripten_glVertexAttrib4fv,fa:_emscripten_glVertexAttribDivisorANGLE,wb:_emscripten_glVertexAttribPointer,vb:_emscripten_glViewport,o:_emscripten_has_asyncify,ub:_emscripten_memcpy_js,q:_emscripten_pause_main_loop,za:_emscripten_request_fullscreen_strategy,N:_emscripten_request_pointerlock,cb:_emscripten_resize_heap,M:_emscripten_resume_main_loop,W:_emscripten_sample_gamepad_data,s:_emscripten_set_beforeunload_callback_on_thread,E:_emscripten_set_blur_callback_on_thread,g:_emscripten_set_canvas_element_size,m:_emscripten_set_element_css_size,F:_emscripten_set_focus_callback_on_thread,v:_emscripten_set_fullscreenchange_callback_on_thread,U:_emscripten_set_gamepadconnected_callback_on_thread,R:_emscripten_set_gamepaddisconnected_callback_on_thread,y:_emscripten_set_keydown_callback_on_thread,w:_emscripten_set_keypress_callback_on_thread,x:_emscripten_set_keyup_callback_on_thread,Ba:_emscripten_set_main_loop,Sa:_emscripten_set_main_loop_timing,K:_emscripten_set_mousedown_callback_on_thread,I:_emscripten_set_mouseenter_callback_on_thread,H:_emscripten_set_mouseleave_callback_on_thread,L:_emscripten_set_mousemove_callback_on_thread,J:_emscripten_set_mouseup_callback_on_thread,z:_emscripten_set_pointerlockchange_callback_on_thread,u:_emscripten_set_resize_callback_on_thread,A:_emscripten_set_touchcancel_callback_on_thread,C:_emscripten_set_touchend_callback_on_thread,B:_emscripten_set_touchmove_callback_on_thread,D:_emscripten_set_touchstart_callback_on_thread,t:_emscripten_set_visibilitychange_callback_on_thread,G:_emscripten_set_wheel_callback_on_thread,Aa:_emscripten_set_window_title,n:_emscripten_sleep,kb:_environ_get,lb:_environ_sizes_get,Ia:_exit,j:_fd_close,P:_fd_read,$a:_fd_seek,nb:_fd_sync,p:_fd_write,Z:invoke_ii,Y:invoke_iii,c:invoke_iiii,r:invoke_iiiii,Ic:invoke_vi,d:invoke_vii,k:invoke_viii,f:invoke_viiii,xc:invoke_viiiii,ld:invoke_viiiiiiiii};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["$d"])();var _screenshot=Module["_screenshot"]=a0=>(_screenshot=Module["_screenshot"]=wasmExports["ae"])(a0);var _buttonPress=Module["_buttonPress"]=a0=>(_buttonPress=Module["_buttonPress"]=wasmExports["be"])(a0);var _buttonUnpress=Module["_buttonUnpress"]=a0=>(_buttonUnpress=Module["_buttonUnpress"]=wasmExports["ce"])(a0);var _setVolume=Module["_setVolume"]=a0=>(_setVolume=Module["_setVolume"]=wasmExports["de"])(a0);var _getVolume=Module["_getVolume"]=()=>(_getVolume=Module["_getVolume"]=wasmExports["ee"])();var _getMainLoopTimingMode=Module["_getMainLoopTimingMode"]=()=>(_getMainLoopTimingMode=Module["_getMainLoopTimingMode"]=wasmExports["fe"])();var _getMainLoopTimingValue=Module["_getMainLoopTimingValue"]=()=>(_getMainLoopTimingValue=Module["_getMainLoopTimingValue"]=wasmExports["ge"])();var _setMainLoopTiming=Module["_setMainLoopTiming"]=(a0,a1)=>(_setMainLoopTiming=Module["_setMainLoopTiming"]=wasmExports["he"])(a0,a1);var _setFastForwardMultiplier=Module["_setFastForwardMultiplier"]=a0=>(_setFastForwardMultiplier=Module["_setFastForwardMultiplier"]=wasmExports["ie"])(a0);var _getFastForwardMultiplier=Module["_getFastForwardMultiplier"]=()=>(_getFastForwardMultiplier=Module["_getFastForwardMultiplier"]=wasmExports["je"])();var _quitGame=Module["_quitGame"]=()=>(_quitGame=Module["_quitGame"]=wasmExports["ke"])();var _quitMgba=Module["_quitMgba"]=()=>(_quitMgba=Module["_quitMgba"]=wasmExports["le"])();var _quickReload=Module["_quickReload"]=()=>(_quickReload=Module["_quickReload"]=wasmExports["me"])();var _pauseGame=Module["_pauseGame"]=()=>(_pauseGame=Module["_pauseGame"]=wasmExports["ne"])();var _resumeGame=Module["_resumeGame"]=()=>(_resumeGame=Module["_resumeGame"]=wasmExports["oe"])();var _setEventEnable=Module["_setEventEnable"]=a0=>(_setEventEnable=Module["_setEventEnable"]=wasmExports["pe"])(a0);var _bindKey=Module["_bindKey"]=(a0,a1)=>(_bindKey=Module["_bindKey"]=wasmExports["qe"])(a0,a1);var _saveState=Module["_saveState"]=a0=>(_saveState=Module["_saveState"]=wasmExports["re"])(a0);var _loadState=Module["_loadState"]=a0=>(_loadState=Module["_loadState"]=wasmExports["se"])(a0);var _autoLoadCheats=Module["_autoLoadCheats"]=()=>(_autoLoadCheats=Module["_autoLoadCheats"]=wasmExports["te"])();var _loadGame=Module["_loadGame"]=a0=>(_loadGame=Module["_loadGame"]=wasmExports["ue"])(a0);var _saveStateSlot=Module["_saveStateSlot"]=(a0,a1)=>(_saveStateSlot=Module["_saveStateSlot"]=wasmExports["ve"])(a0,a1);var _loadStateSlot=Module["_loadStateSlot"]=(a0,a1)=>(_loadStateSlot=Module["_loadStateSlot"]=wasmExports["we"])(a0,a1);var _setupConstants=Module["_setupConstants"]=()=>(_setupConstants=Module["_setupConstants"]=wasmExports["xe"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["ye"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["Ae"])(a0);var setTempRet0=a0=>(setTempRet0=wasmExports["Be"])(a0);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["Ce"])(a0,a1);var _setThrew=(a0,a1)=>(_setThrew=wasmExports["De"])(a0,a1);var stackSave=()=>(stackSave=wasmExports["Ee"])();var stackRestore=a0=>(stackRestore=wasmExports["Fe"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["Ge"])(a0);var dynCall_ji=Module["dynCall_ji"]=(a0,a1)=>(dynCall_ji=Module["dynCall_ji"]=wasmExports["He"])(a0,a1);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["Ie"])(a0,a1,a2,a3,a4);var dynCall_iiiji=Module["dynCall_iiiji"]=(a0,a1,a2,a3,a4,a5)=>(dynCall_iiiji=Module["dynCall_iiiji"]=wasmExports["Je"])(a0,a1,a2,a3,a4,a5);var dynCall_jii=Module["dynCall_jii"]=(a0,a1,a2)=>(dynCall_jii=Module["dynCall_jii"]=wasmExports["Ke"])(a0,a1,a2);var _GBAInputInfo=Module["_GBAInputInfo"]=109920;var _binaryName=Module["_binaryName"]=186992;var _projectName=Module["_projectName"]=186996;var _projectVersion=Module["_projectVersion"]=187e3;var _gitCommit=Module["_gitCommit"]=186976;var _gitCommitShort=Module["_gitCommitShort"]=186980;var _gitBranch=Module["_gitBranch"]=186984;var _gitRevision=Module["_gitRevision"]=186988;var _GBIORegisterNames=Module["_GBIORegisterNames"]=49376;var _GBSavestateMagic=Module["_GBSavestateMagic"]=64640;var _GBSavestateVersion=Module["_GBSavestateVersion"]=64644;var _GBA_LUX_LEVELS=Module["_GBA_LUX_LEVELS"]=93136;var _GBAVideoObjSizes=Module["_GBAVideoObjSizes"]=138416;var _GBASavestateMagic=Module["_GBASavestateMagic"]=138208;var _GBASavestateVersion=Module["_GBASavestateVersion"]=138212;function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["cwrap"]=cwrap;Module["FS"]=FS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); return moduleArg.ready diff --git a/gbajs3/src/emulator/mgba/wasm/mgba.wasm b/gbajs3/src/emulator/mgba/wasm/mgba.wasm index 300b719036d28021fd9a1ae3f247ff12f478f97c..00c383f74ff78fbe193ba4e149831b3685c93824 100755 GIT binary patch delta 77912 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 delta 78921 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