var Module=void 0!==Module?Module:{};function opn(){setTimeout((function(){document.getElementById("shut").innerHTML=2,document.getElementById("circle").width=window.innerWidth,document.getElementById("circle").height=window.innerHeight}),350)}opn();const statusElement=document.getElementById("status"),progressElement=document.getElementById("progress");var Module={preRun:[],postRun:[],print:function(){const e=document.getElementById("output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){const e=document.getElementById("bcanvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e===Module.setStatus.text)return;const t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),r=Date.now();t&&r-Date.now()<30||(t?(e=t[1],progressElement.value=100*parseInt(t[2],10),progressElement.max=100*parseInt(t[4],10),progressElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0),statusElement.innerHTML=e)},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing...("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("|Download|"),window.onerror=function(e){Module.setStatus("Exception thrown,see JavaScript console"),Module.setStatus=function(e){e&&Module.printErr("[post-exception status]"+e)}},function(){var e=function(e){for(var t in this.input=null,this.inputDisplay=null,this.slider=null,this.sliderWidth=0,this.sliderLeft=0,this.pointerWidth=0,this.pointerR=null,this.pointerL=null,this.activePointer=null,this.selected=null,this.scale=null,this.step=0,this.tipL=null,this.tipR=null,this.timeout=null,this.valRange=!1,this.values={start:null,end:null},this.conf={target:null,values:null,set:null,range:!1,width:null,scale:!0,labels:!0,tooltip:!0,step:null,disabled:!1,onChange:null},this.cls={container:"rs-container",background:"rs-bg",selected:"rs-selected",pointer:"rs-pointer",scale:"rs-scale",noscale:"rs-noscale",tip:"rs-tooltip"},this.conf)e.hasOwnProperty(t)&&(this.conf[t]=e[t]);this.init()};e.prototype.init=function(){return"object"==typeof this.conf.target?this.input=this.conf.target:this.input=document.getElementById(this.conf.target.replace("#","")),this.input?(this.inputDisplay=getComputedStyle(this.input,null).display,this.input.style.display="none",this.valRange=!(this.conf.values instanceof Array),!this.valRange||this.conf.values.hasOwnProperty("min")&&this.conf.values.hasOwnProperty("max")?this.createSlider():console.log("Missing min or max value...")):console.log("Cannot find target element...")},e.prototype.createSlider=function(){return this.slider=t("div",this.cls.container),this.slider.innerHTML='<div class="rs-bg"></div>',this.selected=t("div",this.cls.selected),this.pointerL=t("div",this.cls.pointer,["dir","left"]),this.scale=t("div",this.cls.scale),this.conf.tooltip&&(this.tipL=t("div",this.cls.tip),this.tipR=t("div",this.cls.tip),this.pointerL.appendChild(this.tipL)),this.slider.appendChild(this.selected),this.slider.appendChild(this.scale),this.slider.appendChild(this.pointerL),this.conf.range&&(this.pointerR=t("div",this.cls.pointer,["dir","right"]),this.conf.tooltip&&this.pointerR.appendChild(this.tipR),this.slider.appendChild(this.pointerR)),this.input.parentNode.insertBefore(this.slider,this.input.nextSibling),this.conf.width&&(this.slider.style.width=parseInt(this.conf.width)+"px"),this.sliderLeft=this.slider.getBoundingClientRect().left,this.sliderWidth=this.slider.clientWidth,this.pointerWidth=this.pointerL.clientWidth,this.conf.scale||this.slider.classList.add(this.cls.noscale),this.setInitialValues()},e.prototype.setInitialValues=function(){if(this.disabled(this.conf.disabled),this.valRange&&(this.conf.values=n(this.conf)),this.values.start=0,this.values.end=this.conf.range?this.conf.values.length-1:0,this.conf.set&&this.conf.set.length&&i(this.conf)){var e=this.conf.set;this.conf.range?(this.values.start=this.conf.values.indexOf(e[0]),this.values.end=this.conf.set[1]?this.conf.values.indexOf(e[1]):null):this.values.end=this.conf.values.indexOf(e[0])}return this.createScale()},e.prototype.createScale=function(e){this.step=this.sliderWidth/(this.conf.values.length-1);for(var r=0,n=this.conf.values.length;r<n;r++){var i=t("span"),o=t("ins");i.appendChild(o),this.scale.appendChild(i),i.style.width=r===n-1?0:this.step+"px",this.conf.labels?o.innerHTML=this.conf.values[r]:0!==r&&r!==n-1||(o.innerHTML=this.conf.values[r]),o.style.marginLeft=o.clientWidth/2*-1+"px"}return this.addEvents()},e.prototype.updateScale=function(){this.step=this.sliderWidth/(this.conf.values.length-1);for(var e=this.slider.querySelectorAll("span"),t=0,r=e.length;t<r;t++)e[t].style.width=this.step+"px";return this.setValues()},e.prototype.addEvents=function(){var e=this.slider.querySelectorAll("."+this.cls.pointer),t=this.slider.querySelectorAll("span");r(document,"mousemove touchmove",this.move.bind(this)),r(document,"mouseup touchend touchcancel",this.drop.bind(this));for(var n=0,i=e.length;n<i;n++)r(e[n],"mousedown touchstart",this.drag.bind(this));for(n=0,i=t.length;n<i;n++)r(t[n],"click",this.onClickPiece.bind(this));return window.addEventListener("resize",this.onResize.bind(this)),this.setValues()},e.prototype.drag=function(e){if(e.preventDefault(),!this.conf.disabled){var t=e.target.getAttribute("data-dir");return"left"===t&&(this.activePointer=this.pointerL),"right"===t&&(this.activePointer=this.pointerR),this.slider.classList.add("sliding")}},e.prototype.move=function(e){if(this.activePointer&&!this.conf.disabled){var t=("touchmove"===e.type?e.touches[0].clientX:e.pageX)-this.sliderLeft-this.pointerWidth/2;return(t=Math.round(t/this.step))<=0&&(t=0),t>this.conf.values.length-1&&(t=this.conf.values.length-1),this.conf.range?(this.activePointer===this.pointerL&&(this.values.start=t),this.activePointer===this.pointerR&&(this.values.end=t)):this.values.end=t,this.setValues()}},e.prototype.drop=function(){this.activePointer=null},e.prototype.setValues=function(e,t){var r=this.conf.range?"start":"end";return e&&this.conf.values.indexOf(e)>-1&&(this.values[r]=this.conf.values.indexOf(e)),t&&this.conf.values.indexOf(t)>-1&&(this.values.end=this.conf.values.indexOf(t)),this.conf.range&&this.values.start>this.values.end&&(this.values.start=this.values.end),this.pointerL.style.left=this.values[r]*this.step-this.pointerWidth/2+"px",this.conf.range?(this.conf.tooltip&&(this.tipL.innerHTML=this.conf.values[this.values.start],this.tipR.innerHTML=this.conf.values[this.values.end]),this.input.value=this.conf.values[this.values.start]+","+this.conf.values[this.values.end],this.pointerR.style.left=this.values.end*this.step-this.pointerWidth/2+"px"):(this.conf.tooltip&&(this.tipL.innerHTML=this.conf.values[this.values.end]),this.input.value=this.conf.values[this.values.end]),this.values.end>this.conf.values.length-1&&(this.values.end=this.conf.values.length-1),this.values.start<0&&(this.values.start=0),this.selected.style.width=(this.values.end-this.values.start)*this.step+"px",this.selected.style.left=this.values.start*this.step+"px",this.onChange()},e.prototype.onClickPiece=function(e){if(!this.conf.disabled){var t=Math.round((e.clientX-this.sliderLeft)/this.step);return t>this.conf.values.length-1&&(t=this.conf.values.length-1),t<0&&(t=0),this.conf.range&&t-this.values.start<=this.values.end-t?this.values.start=t:this.values.end=t,this.slider.classList.remove("sliding"),this.setValues()}},e.prototype.onChange=function(){var e=this;this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout((function(){if(e.conf.onChange&&"function"==typeof e.conf.onChange)return e.conf.onChange(e.input.value)}),500)},e.prototype.onResize=function(){return this.sliderLeft=this.slider.getBoundingClientRect().left,this.sliderWidth=this.slider.clientWidth,this.updateScale()},e.prototype.disabled=function(e){this.conf.disabled=e,this.slider.classList[e?"add":"remove"]("disabled")},e.prototype.getValue=function(){return this.input.value},e.prototype.destroy=function(){this.input.style.display=this.inputDisplay,this.slider.remove()};var t=function(e,t,r){var n=document.createElement(e);return t&&(n.className=t),r&&2===r.length&&n.setAttribute("data-"+r[0],r[1]),n},r=function(e,t,r){for(var n=t.split(" "),i=0,o=n.length;i<o;i++)e.addEventListener(n[i],r)},n=function(e){var t=[],r=e.values.max-e.values.min;if(!e.step)return console.log("No step defined..."),[e.values.min,e.values.max];for(var n=0,i=r/e.step;n<i;n++)t.push(e.values.min+n*e.step);return t.indexOf(e.values.max)<0&&t.push(e.values.max),t},i=function(e){return!e.set||e.set.length<1||e.values.indexOf(e.set[0])<0?null:!e.range||!(e.set.length<2||e.values.indexOf(e.set[1])<0)||null};window.rSlider=e}(),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;"undefined"!=typeof window?t=window:"undefined"!=typeof global?t=global:"undefined"!=typeof self&&(t=self),t.Slideout=e()}}((function(){return function e(t,r,n){function i(a,s){if(!r[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=r[a]={exports:{}};t[a][0].call(u.exports,(function(e){var r=t[a][1][e];return i(r||e)}),u,u.exports,e,t,r,n)}return r[a].exports}for(var o="function"==typeof require&&require,a=0;a<n.length;a++)i(n[a]);return i}({1:[function(e,t,r){var n,i=e("decouple"),o=e("emitter"),a=!1,s=window.document,c=s.documentElement,l=window.navigator.msPointerEnabled,u={start:l?"MSPointerDown":"touchstart",move:l?"MSPointerMove":"touchmove",end:l?"MSPointerUp":"touchend"},d=function(){var e=/^(Webkit|Khtml|Moz|ms|O)(?=[A-Z])/,t=s.getElementsByTagName("script")[0].style;for(var r in t)if(e.test(r))return"-"+r.match(e)[0].toLowerCase()+"-";return"WebkitOpacity"in t?"-webkit-":"KhtmlOpacity"in t?"-khtml-":""}();function m(e){e=e||{},this._startOffsetX=0,this._currentOffsetX=0,this._opening=!1,this._moved=!1,this._opened=!1,this._preventOpen=!1,this.panel=e.panel,this.menu=e.menu,this._touch=(void 0===e.touch||e.touch)&&!0,this._side=e.side||"left",this._easing=e.fx||e.easing||"ease",this._duration=parseInt(e.duration,10)||300,this._tolerance=parseInt(e.tolerance,10)||70,this._padding=this._translateTo=parseInt(e.padding,10)||256,this._orientation="right"===this._side?-1:1,this._translateTo*=this._orientation,this.panel.classList.contains("slideout-panel")||this.panel.classList.add("slideout-panel"),this.panel.classList.contains("slideout-panel-"+this._side)||this.panel.classList.add("slideout-panel-"+this._side),this.menu.classList.contains("slideout-menu")||this.menu.classList.add("slideout-menu"),this.menu.classList.contains("slideout-menu-"+this._side)||this.menu.classList.add("slideout-menu-"+this._side),this._touch&&this._initTouchEvents()}!function(e,t){e.prototype=function(e,t){for(var r in t)t[r]&&(e[r]=t[r]);return e}(e.prototype||{},t.prototype)}(m,o),m.prototype.open=function(){var e=this;return this.emit("beforeopen"),c.classList.contains("slideout-open")||c.classList.add("slideout-open"),this._setTransition(),this._translateXTo(this._translateTo),this._opened=!0,setTimeout((function(){e.panel.style.transition=e.panel.style["-webkit-transition"]="",e.emit("open")}),this._duration+50),this},m.prototype.close=function(){var e=this;return this.isOpen()||this._opening?(this.emit("beforeclose"),this._setTransition(),this._translateXTo(0),this._opened=!1,setTimeout((function(){c.classList.remove("slideout-open"),e.panel.style.transition=e.panel.style["-webkit-transition"]=e.panel.style[d+"transform"]=e.panel.style.transform="",e.emit("close")}),this._duration+50),this):this},m.prototype.toggle=function(){return this.isOpen()?this.close():this.open()},m.prototype.isOpen=function(){return this._opened},m.prototype._translateXTo=function(e){return this._currentOffsetX=e,this.panel.style[d+"transform"]=this.panel.style.transform="translateX("+e+"px)",this},m.prototype._setTransition=function(){return this.panel.style[d+"transition"]=this.panel.style.transition=d+"transform "+this._duration+"ms "+this._easing,this},m.prototype._initTouchEvents=function(){var e=this;return this._onScrollFn=i(s,"scroll",(function(){e._moved||(clearTimeout(n),a=!0,n=setTimeout((function(){a=!1}),250))})),this._preventMove=function(t){e._moved&&t.preventDefault()},s.addEventListener(u.move,this._preventMove),this._resetTouchFn=function(t){void 0!==t.touches&&(e._moved=!1,e._opening=!1,e._startOffsetX=t.touches[0].pageX,e._preventOpen=!e._touch||!e.isOpen()&&0!==e.menu.clientWidth)},this.panel.addEventListener(u.start,this._resetTouchFn),this._onTouchCancelFn=function(){e._moved=!1,e._opening=!1},this.panel.addEventListener("touchcancel",this._onTouchCancelFn),this._onTouchEndFn=function(){e._moved&&(e.emit("translateend"),e._opening&&Math.abs(e._currentOffsetX)>e._tolerance?e.open():e.close()),e._moved=!1},this.panel.addEventListener(u.end,this._onTouchEndFn),this._onTouchMoveFn=function(t){if(!(a||e._preventOpen||void 0===t.touches||function(e){for(;e.parentNode;){if(null!==e.getAttribute("data-slideout-ignore"))return e;e=e.parentNode}return null}(t.target))){var r=t.touches[0].clientX-e._startOffsetX,n=e._currentOffsetX=r;if(!(Math.abs(n)>e._padding)&&Math.abs(r)>20){e._opening=!0;var i=r*e._orientation;if(e._opened&&i>0||!e._opened&&i<0)return;e._moved||e.emit("translatestart"),i<=0&&(n=r+e._padding*e._orientation,e._opening=!1),e._moved&&c.classList.contains("slideout-open")||c.classList.add("slideout-open"),e.panel.style[d+"transform"]=e.panel.style.transform="translateX("+n+"px)",e.emit("translate",n),e._moved=!0}}},this.panel.addEventListener(u.move,this._onTouchMoveFn),this},m.prototype.enableTouch=function(){return this._touch=!0,this},m.prototype.disableTouch=function(){return this._touch=!1,this},m.prototype.destroy=function(){return this.close(),s.removeEventListener(u.move,this._preventMove),this.panel.removeEventListener(u.start,this._resetTouchFn),this.panel.removeEventListener("touchcancel",this._onTouchCancelFn),this.panel.removeEventListener(u.end,this._onTouchEndFn),this.panel.removeEventListener(u.move,this._onTouchMoveFn),s.removeEventListener("scroll",this._onScrollFn),this.open=this.close=function(){},this},t.exports=m},{decouple:2,emitter:3}],2:[function(e,t,r){var n=window.requestAnimationFrame||window.webkitRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)};t.exports=function(e,t,r){var i,o=!1;function a(e){i=e,o||(n(s),o=!0)}function s(){r.call(e,i),o=!1}return e.addEventListener(t,a,!1),a}},{}],3:[function(e,t,r){r.__esModule=!0;var n=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.prototype.on=function(e,t){return this._eventCollection=this._eventCollection||{},this._eventCollection[e]=this._eventCollection[e]||[],this._eventCollection[e].push(t),this},e.prototype.once=function(e,t){var r=this;function n(){r.off(e,n),t.apply(this,arguments)}return n.listener=t,this.on(e,n),this},e.prototype.off=function(e,t){var r=void 0;return this._eventCollection&&(r=this._eventCollection[e])?(r.forEach((function(e,n){e!==t&&e.listener!==t||r.splice(n,1)})),0===r.length&&delete this._eventCollection[e],this):this},e.prototype.emit=function(e){for(var t=this,r=arguments.length,n=Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];var o=void 0;return this._eventCollection&&(o=this._eventCollection[e])?(o=o.slice(0),o.forEach((function(e){return e.apply(t,n)})),this):this},e}();r.default=n,t.exports=r.default},{}]},{},[1])(1)}));var moduleOverrides=Object.assign({},Module),arguments_=[],thisProgram="./this.program",quit_=(e,t)=>{throw t},ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");var scriptDirectory="",read_,readAsync,readBinary,setWindowTitle;function locateFile(e){return Module.locateFile?Module.locateFile(e,scriptDirectory):scriptDirectory+e}function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let t=e;e&&"object"==typeof e&&e.stack&&(t=[e,e.stack]),err("exiting due to exception: "+t)}if(ENVIRONMENT_IS_NODE){if("undefined"==typeof process||!process.release||"node"!==process.release.name)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var fs=require("fs"),nodePath=require("path");scriptDirectory=ENVIRONMENT_IS_WORKER?nodePath.dirname(scriptDirectory)+"/":__dirname+"/",read_=(e,t)=>(e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFileSync(e,t?void 0:"utf8")),readBinary=e=>{var t=read_(e,!0);return t.buffer||(t=new Uint8Array(t)),assert(t.buffer),t},readAsync=(e,t,r)=>{e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFile(e,(function(e,n){e?r(e):t(n.buffer)}))},process.argv.length>1&&(thisProgram=process.argv[1].replace(/\\/g,"/")),arguments_=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",(function(e){if(!(e instanceof ExitStatus))throw e})),process.on("unhandledRejection",(function(e){throw e})),quit_=(e,t)=>{if(keepRuntimeAlive())throw process.exitCode=e,t;logExceptionOnExit(t),process.exit(e)},Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if("object"==typeof process&&"function"==typeof require||"object"==typeof window||"function"==typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");"undefined"!=typeof read&&(read_=function(e){return read(e)}),readBinary=function(e){let t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(t=read(e,"binary"),assert("object"==typeof t),t)},readAsync=function(e,t,r){setTimeout((()=>t(readBinary(e))),0)},"undefined"!=typeof scriptArgs?arguments_=scriptArgs:"undefined"!=typeof arguments&&(arguments_=arguments),"function"==typeof quit&&(quit_=(e,t)=>{logExceptionOnExit(t),quit(e)}),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)}else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw new Error("environment detection error");if(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:"undefined"!=typeof document&&document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf("blob:")?scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1):"","object"!=typeof window&&"function"!=typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");read_=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},ENVIRONMENT_IS_WORKER&&(readBinary=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),readAsync=(e,t,r)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?t(n.response):r()},n.onerror=r,n.send(null)},setWindowTitle=e=>document.title=e}var out=Module.print||console.log.bind(console),err=Module.printErr||console.warn.bind(console);Object.assign(Module,moduleOverrides),moduleOverrides=null,checkIncomingModuleAPI(),Module.arguments&&(arguments_=Module.arguments),legacyModuleProp("arguments","arguments_"),Module.thisProgram&&(thisProgram=Module.thisProgram),legacyModuleProp("thisProgram","thisProgram"),Module.quit&&(quit_=Module.quit),legacyModuleProp("quit","quit_"),assert(void 0===Module.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),assert(void 0===Module.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),assert(void 0===Module.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),assert(void 0===Module.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),assert(void 0===Module.read,"Module.read option was removed (modify read_ in JS)"),assert(void 0===Module.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),assert(void 0===Module.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),assert(void 0===Module.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),assert(void 0===Module.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),legacyModuleProp("read","read_"),legacyModuleProp("readAsync","readAsync"),legacyModuleProp("readBinary","readBinary"),legacyModuleProp("setWindowTitle","setWindowTitle");var IDBFS="IDBFS is no longer included by default; build with -lidbfs.js",PROXYFS="PROXYFS is no longer included by default; build with -lproxyfs.js",WORKERFS="WORKERFS is no longer included by default; build with -lworkerfs.js",NODEFS="NODEFS is no longer included by default; build with -lnodefs.js";assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time.  Add 'shell' to `-sENVIRONMENT` to enable.");var STACK_ALIGN=16,POINTER_SIZE=4,wasmBinary;function getNativeTypeSize(e){switch(e){case"i1":case"i8":case"u8":return 1;case"i16":case"u16":return 2;case"i32":case"u32":case"float":return 4;case"i64":case"u64":case"double":return 8;default:if("*"===e[e.length-1])return POINTER_SIZE;if("i"===e[0]){const t=Number(e.substr(1));return assert(t%8==0,"getNativeTypeSize invalid bits "+t+", type "+e),t/8}return 0}}function legacyModuleProp(e,t){Object.getOwnPropertyDescriptor(Module,e)||Object.defineProperty(Module,e,{configurable:!0,get:function(){abort("Module."+e+" has been replaced with plain "+t+" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}function ignoredModuleProp(e){Object.getOwnPropertyDescriptor(Module,e)&&abort("`Module."+e+"` was supplied but `"+e+"` not included in INCOMING_MODULE_JS_API")}function isExportedByForceFilesystem(e){return"FS_createPath"===e||"FS_createDataFile"===e||"FS_createPreloadedFile"===e||"FS_unlink"===e||"addRunDependency"===e||"FS_createLazyFile"===e||"FS_createDevice"===e||"removeRunDependency"===e}function missingLibrarySymbol(e){"undefined"==typeof globalThis||Object.getOwnPropertyDescriptor(globalThis,e)||Object.defineProperty(globalThis,e,{configurable:!0,get:function(){var t="`"+e+"` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line",r=e;r.startsWith("_")||(r="$"+e),t+=" (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE="+r+")",isExportedByForceFilesystem(e)&&(t+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),warnOnce(t)}})}function unexportedRuntimeSymbol(e){Object.getOwnPropertyDescriptor(Module,e)||Object.defineProperty(Module,e,{configurable:!0,get:function(){var t="'"+e+"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";isExportedByForceFilesystem(e)&&(t+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),abort(t)}})}Module.wasmBinary&&(wasmBinary=Module.wasmBinary),legacyModuleProp("wasmBinary","wasmBinary");var noExitRuntime=Module.noExitRuntime||!0,wasmMemory;legacyModuleProp("noExitRuntime","noExitRuntime"),"object"!=typeof WebAssembly&&abort("no native wasm support detected");var ABORT=!1,EXITSTATUS;function assert(e,t){e||abort("Assertion failed"+(t?": "+t:""))}var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function UTF8ArrayToString(e,t,r){for(var n=t+r,i=t;e[i]&&!(i>=n);)++i;if(i-t>16&&e.buffer&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(t,i));for(var o="";t<i;){var a=e[t++];if(128&a){var s=63&e[t++];if(192!=(224&a)){var c=63&e[t++];if(224==(240&a)?a=(15&a)<<12|s<<6|c:(240!=(248&a)&&warnOnce("Invalid UTF-8 leading byte "+ptrToString(a)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!"),a=(7&a)<<18|s<<12|c<<6|63&e[t++]),a<65536)o+=String.fromCharCode(a);else{var l=a-65536;o+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}function UTF8ToString(e,t){return e?UTF8ArrayToString(HEAPU8,e,t):""}function stringToUTF8Array(e,t,r,n){if(!(n>0))return 0;for(var i=r,o=r+n-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a);if(s<=127){if(r>=o)break;t[r++]=s}else if(s<=2047){if(r+1>=o)break;t[r++]=192|s>>6,t[r++]=128|63&s}else if(s<=65535){if(r+2>=o)break;t[r++]=224|s>>12,t[r++]=128|s>>6&63,t[r++]=128|63&s}else{if(r+3>=o)break;s>1114111&&warnOnce("Invalid Unicode code point "+ptrToString(s)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),t[r++]=240|s>>18,t[r++]=128|s>>12&63,t[r++]=128|s>>6&63,t[r++]=128|63&s}}return t[r]=0,r-i}function stringToUTF8(e,t,r){return assert("number"==typeof r,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),stringToUTF8Array(e,HEAPU8,t,r)}function lengthBytesUTF8(e){for(var t=0,r=0;r<e.length;++r){var n=e.charCodeAt(r);n<=127?t++:n<=2047?t+=2:n>=55296&&n<=57343?(t+=4,++r):t+=3}return t}function updateGlobalBufferAndViews(e){buffer=e,Module.HEAP8=HEAP8=new Int8Array(e),Module.HEAP16=HEAP16=new Int16Array(e),Module.HEAP32=HEAP32=new Int32Array(e),Module.HEAPU8=HEAPU8=new Uint8Array(e),Module.HEAPU16=HEAPU16=new Uint16Array(e),Module.HEAPU32=HEAPU32=new Uint32Array(e),Module.HEAPF32=HEAPF32=new Float32Array(e),Module.HEAPF64=HEAPF64=new Float64Array(e)}var STACK_SIZE=65536;Module.STACK_SIZE&&assert(STACK_SIZE===Module.STACK_SIZE,"the stack size can no longer be determined at runtime");var INITIAL_MEMORY=Module.INITIAL_MEMORY||2147483648,wasmTable;function writeStackCookie(){var e=_emscripten_stack_get_end();assert(0==(3&e)),0==e&&(e+=4),HEAPU32[e>>2]=34821223,HEAPU32[e+4>>2]=2310721022,HEAPU32[0]=1668509029}function checkStackCookie(){if(!ABORT){var e=_emscripten_stack_get_end();0==e&&(e+=4);var t=HEAPU32[e>>2],r=HEAPU32[e+4>>2];34821223==t&&2310721022==r||abort("Stack overflow! Stack cookie has been overwritten at "+ptrToString(e)+", expected hex dwords 0x89BACDFE and 0x2135467, but received "+ptrToString(r)+" "+ptrToString(t)),1668509029!==HEAPU32[0]&&abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}legacyModuleProp("INITIAL_MEMORY","INITIAL_MEMORY"),assert(INITIAL_MEMORY>=STACK_SIZE,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+INITIAL_MEMORY+"! (STACK_SIZE="+STACK_SIZE+")"),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support"),assert(!Module.wasmMemory,"Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally"),assert(2147483648==INITIAL_MEMORY,"Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),function(){var e=new Int16Array(1),t=new Int8Array(e.buffer);if(e[0]=25459,115!==t[0]||99!==t[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"}();var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){assert(!runtimeInitialized),runtimeInitialized=!0,checkStackCookie(),Module.noFSInit||FS.init.initialized||FS.init(),FS.ignorePermissions=!1,TTY.init(),callRuntimeCallbacks(__ATINIT__)}function preMain(){checkStackCookie(),callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(checkStackCookie(),Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPreMain(e){__ATMAIN__.unshift(e)}function addOnExit(e){}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null,runDependencyTracking={};function getUniqueRunDependency(e){for(var t=e;;){if(!runDependencyTracking[e])return e;e=t+Math.random()}}function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),e?(assert(!runDependencyTracking[e]),runDependencyTracking[e]=1,null===runDependencyWatcher&&"undefined"!=typeof setInterval&&(runDependencyWatcher=setInterval((function(){if(ABORT)return clearInterval(runDependencyWatcher),void(runDependencyWatcher=null);var e=!1;for(var t in runDependencyTracking)e||(e=!0,err("still waiting on run dependencies:")),err("dependency: "+t);e&&err("(end of list)")}),1e4))):err("warning: run dependency added without ID")}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),e?(assert(runDependencyTracking[e]),delete runDependencyTracking[e]):err("warning: run dependency removed without ID"),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var t=dependenciesFulfilled;dependenciesFulfilled=null,t()}}function abort(e){Module.onAbort&&Module.onAbort(e),err(e="Aborted("+e+")"),ABORT=!0,EXITSTATUS=1,___trap()}var dataURIPrefix="data:application/octet-stream;base64,",wasmBinaryFile,tempDouble,tempI64;function isDataURI(e){return e.startsWith(dataURIPrefix)}function isFileURI(e){return e.startsWith("file://")}function createExportWrapper(e,t){return function(){var r=e,n=t;return t||(n=Module.asm),assert(runtimeInitialized,"native function `"+r+"` called before runtime initialization"),n[e]||assert(n[e],"exported native function `"+r+"` not found"),n[e].apply(null,arguments)}}function getBinary(e){try{if(e==wasmBinaryFile&&wasmBinary)return new Uint8Array(wasmBinary);if(readBinary)return readBinary(e);throw"both async and sync fetching of the wasm failed"}catch(e){abort(e)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if("function"==typeof fetch&&!isFileURI(wasmBinaryFile))return fetch(wasmBinaryFile,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+wasmBinaryFile+"'";return e.arrayBuffer()})).catch((function(){return getBinary(wasmBinaryFile)}));if(readAsync)return new Promise((function(e,t){readAsync(wasmBinaryFile,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return getBinary(wasmBinaryFile)}))}function createWasm(){var e={env:asmLibraryArg,wasi_snapshot_preview1:asmLibraryArg};function t(e,t){var r=e.exports;Module.asm=r,assert(wasmMemory=Module.asm.memory,"memory not found in wasm exports"),updateGlobalBufferAndViews(wasmMemory.buffer),assert(wasmTable=Module.asm.__indirect_function_table,"table not found in wasm exports"),addOnInit(Module.asm.__wasm_call_ctors),removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");var r=Module;function n(e){assert(Module===r,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),r=null,t(e.instance)}function i(t){return getBinaryPromise().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){err("failed to asynchronously prepare wasm: "+e),isFileURI(wasmBinaryFile)&&err("warning: Loading from a file URI ("+wasmBinaryFile+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),abort(e)}))}if(Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return err("Module.instantiateWasm callback failed with error: "+e),!1}return wasmBinary||"function"!=typeof WebAssembly.instantiateStreaming||isDataURI(wasmBinaryFile)||isFileURI(wasmBinaryFile)||ENVIRONMENT_IS_NODE||"function"!=typeof fetch?i(n):fetch(wasmBinaryFile,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(n,(function(e){return err("wasm streaming compile failed: "+e),err("falling back to ArrayBuffer instantiation"),i(n)}))})),{}}wasmBinaryFile="s3001.wasm",isDataURI(wasmBinaryFile)||(wasmBinaryFile=locateFile(wasmBinaryFile));var ASM_CONSTS={159754:()=>{FS.mkdir("/snd"),FS.mkdir("/shader")},159807:e=>{var t=UTF8ToString(e)+"\n\nAbort/Retry/Ignore/AlwaysIgnore? [ariA] :",r=window.prompt(t,"i");return null===r&&(r="i"),allocate(intArrayFromString(r),"i8",ALLOC_NORMAL)},160032:()=>"undefined"!=typeof AudioContext||"undefined"!=typeof webkitAudioContext,160179:()=>void 0!==navigator.mediaDevices&&void 0!==navigator.mediaDevices.getUserMedia||void 0!==navigator.webkitGetUserMedia,160413:e=>{void 0===Module.SDL2&&(Module.SDL2={});var t=Module.SDL2;return e?t.capture={}:t.audio={},t.audioContext||("undefined"!=typeof AudioContext?t.audioContext=new AudioContext:"undefined"!=typeof webkitAudioContext&&(t.audioContext=new webkitAudioContext),t.audioContext&&autoResumeAudioContext(t.audioContext)),void 0===t.audioContext?-1:0},160906:()=>Module.SDL2.audioContext.sampleRate,160974:(e,t,r,n)=>{var i=Module.SDL2,o=function(o){void 0!==i.capture.silenceTimer&&(clearTimeout(i.capture.silenceTimer),i.capture.silenceTimer=void 0),i.capture.mediaStreamNode=i.audioContext.createMediaStreamSource(o),i.capture.scriptProcessorNode=i.audioContext.createScriptProcessor(t,e,1),i.capture.scriptProcessorNode.onaudioprocess=function(e){void 0!==i&&void 0!==i.capture&&(e.outputBuffer.getChannelData(0).fill(0),i.capture.currentCaptureBuffer=e.inputBuffer,dynCall("vi",r,[n]))},i.capture.mediaStreamNode.connect(i.capture.scriptProcessorNode),i.capture.scriptProcessorNode.connect(i.audioContext.destination),i.capture.stream=o},a=function(e){};i.capture.silenceBuffer=i.audioContext.createBuffer(e,t,i.audioContext.sampleRate),i.capture.silenceBuffer.getChannelData(0).fill(0);i.capture.silenceTimer=setTimeout((function(){i.capture.currentCaptureBuffer=i.capture.silenceBuffer,dynCall("vi",r,[n])}),t/i.audioContext.sampleRate*1e3),void 0!==navigator.mediaDevices&&void 0!==navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia({audio:!0,video:!1}).then(o).catch(a):void 0!==navigator.webkitGetUserMedia&&navigator.webkitGetUserMedia({audio:!0,video:!1},o,a)},162626:(e,t,r,n)=>{var i=Module.SDL2;i.audio.scriptProcessorNode=i.audioContext.createScriptProcessor(t,0,e),i.audio.scriptProcessorNode.onaudioprocess=function(e){void 0!==i&&void 0!==i.audio&&(i.audio.currentOutputBuffer=e.outputBuffer,dynCall("vi",r,[n]))},i.audio.scriptProcessorNode.connect(i.audioContext.destination)},163036:(e,t)=>{for(var r=Module.SDL2,n=r.capture.currentCaptureBuffer.numberOfChannels,i=0;i<n;++i){var o=r.capture.currentCaptureBuffer.getChannelData(i);if(o.length!=t)throw"Web Audio capture buffer length mismatch! Destination size: "+o.length+" samples vs expected "+t+" samples!";if(1==n)for(var a=0;a<t;++a)setValue(e+4*a,o[a],"float");else for(a=0;a<t;++a)setValue(e+4*(a*n+i),o[a],"float")}},163641:(e,t)=>{for(var r=Module.SDL2,n=r.audio.currentOutputBuffer.numberOfChannels,i=0;i<n;++i){var o=r.audio.currentOutputBuffer.getChannelData(i);if(o.length!=t)throw"Web Audio output buffer length mismatch! Destination size: "+o.length+" samples vs expected "+t+" samples!";for(var a=0;a<t;++a)o[a]=HEAPF32[e+(a*n+i<<2)>>2]}},164121:e=>{var t=Module.SDL2;if(e){if(void 0!==t.capture.silenceTimer&&clearTimeout(t.capture.silenceTimer),void 0!==t.capture.stream){for(var r=t.capture.stream.getAudioTracks(),n=0;n<r.length;n++)t.capture.stream.removeTrack(r[n]);t.capture.stream=void 0}void 0!==t.capture.scriptProcessorNode&&(t.capture.scriptProcessorNode.onaudioprocess=function(e){},t.capture.scriptProcessorNode.disconnect(),t.capture.scriptProcessorNode=void 0),void 0!==t.capture.mediaStreamNode&&(t.capture.mediaStreamNode.disconnect(),t.capture.mediaStreamNode=void 0),void 0!==t.capture.silenceBuffer&&(t.capture.silenceBuffer=void 0),t.capture=void 0}else null!=t.audio.scriptProcessorNode&&(t.audio.scriptProcessorNode.disconnect(),t.audio.scriptProcessorNode=void 0),t.audio=void 0;void 0!==t.audioContext&&void 0===t.audio&&void 0===t.capture&&(t.audioContext.close(),t.audioContext=void 0)},165293:(e,t,r)=>{var n=e,i=t,o=r;Module.SDL2||(Module.SDL2={});var a=Module.SDL2;a.ctxCanvas!==Module.canvas&&(a.ctx=Module.createContext(Module.canvas,!1,!0),a.ctxCanvas=Module.canvas),a.w===n&&a.h===i&&a.imageCtx===a.ctx||(a.image=a.ctx.createImageData(n,i),a.w=n,a.h=i,a.imageCtx=a.ctx);var s,c=a.image.data,l=o>>2,u=0;if("undefined"!=typeof CanvasPixelArray&&c instanceof CanvasPixelArray)for(s=c.length;u<s;){var d=HEAP32[l];c[u]=255&d,c[u+1]=d>>8&255,c[u+2]=d>>16&255,c[u+3]=255,l++,u+=4}else{a.data32Data!==c&&(a.data32=new Int32Array(c.buffer),a.data8=new Uint8Array(c.buffer),a.data32Data=c);var m=a.data32;s=m.length,m.set(HEAP32.subarray(l,l+s));var f=a.data8,p=3,_=p+4*s;if(s%8==0)for(;p<_;)f[p]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,f[p=p+4|0]=255,p=p+4|0;else for(;p<_;)f[p]=255,p=p+4|0}a.ctx.putImageData(a.image,0,0)},166762:(e,t,r,n,i)=>{var o=e,a=t,s=r,c=n,l=i,u=document.createElement("canvas");u.width=o,u.height=a;var d,m=u.getContext("2d"),f=m.createImageData(o,a),p=f.data,_=l>>2,g=0;if("undefined"!=typeof CanvasPixelArray&&p instanceof CanvasPixelArray)for(d=p.length;g<d;){var h=HEAP32[_];p[g]=255&h,p[g+1]=h>>8&255,p[g+2]=h>>16&255,p[g+3]=h>>24&255,_++,g+=4}else{var v=new Int32Array(p.buffer);d=v.length,v.set(HEAP32.subarray(_,_+d))}m.putImageData(f,0,0);var E=0===s&&0===c?"url("+u.toDataURL()+"), auto":"url("+u.toDataURL()+") "+s+" "+c+", auto",b=_malloc(E.length+1);return stringToUTF8(E,b,E.length+1),b},167751:e=>{Module.canvas&&(Module.canvas.style.cursor=UTF8ToString(e))},167834:()=>{Module.canvas&&(Module.canvas.style.cursor="none")},167903:()=>window.innerWidth,167933:()=>window.innerHeight};function ma(){const pnnl=document.body;var vv=document.getElementById("mv"),intervalLoop=null,rv,loopLoop,a,b,stp;function doKey(e){"Space"==e.code&&e.preventDefault(),"KeyZ"==e.code&&((vv=document.getElementById("mv")).pause(),loopLoop=!0,rv=!0,a=vv.currentTime-2,b=vv.currentTime),"KeyX"==e.code&&(vv=document.getElementById("mv"),loopLoop=!1,vv.play())}pnnl.addEventListener("keydown",doKey);var w$=parseInt(document.getElementById("wid").innerHTML,10),h$=parseInt(document.getElementById("hig").innerHTML,10);const $H=Module.HEAPF32.buffer;var la=h$*h$*4,pointa=77*la,agav=new Float32Array($H,pointa,300),sz=h$*h$/8,avag=.75,min=1,max=0;agav.fill(avag,0,33),agav.fill(min,100,33),agav.fill(max,200,33);const bcanvas=document.getElementById("bcanvas"),gl=bcanvas.getContext("webgl2",{colorType:"float64",preferLowPowerToHighPerformance:!1,precision:"highp",logarithmicDepthBuffer:!0,colorSpace:"display-p3",alpha:!0,depth:!0,stencil:!0,imageSmoothingEnabled:!0,preserveDrawingBuffer:!0,premultipliedAlpha:!1,desynchronized:!1,lowLatency:!0,powerPreference:"high-performance",antialias:!0,willReadFrequently:!0,majorVersion:2,minorVersion:0}),g=new GPU({canvas:bcanvas,webGl:gl}),g2=new GPU,glslAve="float Ave(float a,float b,float c){return(a+b+c)/3.0;}",glslAlphe="float Alphe(float a,float b,float f,float g){return(((3.0*((1.0-b)-(((((1.0-f)-(a)+b)*1.5)/2.0)+((f-0.5)*((1.0-f)*0.25))-((0.5-f)*(f*0.25))-((g-f)*((1.0-g)*(1.0-g)))))))/3.0);}",glslAveg="float Aveg(float a,float b){return(1.0-(((a)-(b))*((a)*(1.0/(1.0-b)))));}";g.addNativeFunction("Ave",glslAve,{returnType:"Number"}),g.addNativeFunction("Alphe",glslAlphe,{returnType:"Number"}),g.addNativeFunction("Aveg",glslAveg,{returnType:"Number"}),g2.addNativeFunction("Aveg",glslAveg,{returnType:"Number"}),g2.addNativeFunction("Ave",glslAve,{returnType:"Number"});const R=g2.createKernel((function(e){const t=e[this.thread.y][4*this.thread.x];return Ave(t[0],t[1],t[2])})).setTactic("speed").setDynamicOutput(!0).setOutput([sz]),t=g.createKernel((function(e){const t=e[this.thread.y][this.thread.x-this.constants.blnk-this.constants.nblnk],r=Ave(t[0],t[1],t[2]);return[t[0],t[1],t[2],r]})).setTactic("precision").setPipeline(!0).setDynamicOutput(!0).setOutput([w$,h$]),r=g.createKernel((function(e){const t=e[this.thread.y][this.thread.x-this.constants.nblnk-this.constants.blnk],r=this.constants.amax,n=this.constants.amin,i=this.constants.aavg,o=Alphe(r,n,i,t[3]),a=(r-(i-n))/2*4,s=Math.max(a,o),c=Aveg(t[3],s);this.color(t[0],t[1],t[2],c)})).setTactic("precision").setGraphical(!0).setArgumentTypes(["HTMLVideo"]).setDynamicOutput(!0).setOutput([w$,h$]);gl.getExtension("WEBGL_color_buffer_float"),gl.getExtension("WEBGL_color_buffer_half_float"),gl.getExtension("OES_texture_float_linear"),gl.getExtension("OES_texture_half_float_linear"),gl.getExtension("EXT_float_blend"),gl.getExtension("EXT_frag_depth"),gl.getExtension("EXT_shader_texture_lod"),gl.getExtension("EXT_sRGB"),gl.getExtension("EXT_blend_minmax"),gl.getExtension("ANGLE_instanced_arrays"),gl.getExtension("EXT_disjoint_timer_query"),gl.getExtension("EXT_clip_cull_distance"),gl.getExtension("EXT_disjoint_timer_query_webgl2"),gl.getExtension("KHR_parallel_shader_compile"),gl.getExtension("OES_draw_buffers_indexed"),gl.getExtension("OES_element_index_uint"),gl.getExtension("OES_fbo_render_mipmap"),gl.getExtension("OES_standard_derivatives"),gl.getExtension("OES_vertex_array_object"),gl.getExtension("WEBGL_blend_equation_advanced_coherent"),gl.getExtension("WEBGL_depth_texture"),gl.getExtension("WEBGL_draw_buffers"),gl.getExtension("WEBGL_provoking_vertex"),gl.getExtension("EXT_framebuffer_sRGB"),gl.getExtension("OES_depth32"),gl.getExtension("OES_fixed_point"),gl.getExtension("OES_shader_multisample_interpolation"),gl.getExtension("WEBGL_webcodecs_video_frame"),gl.getExtension("OES_single_precision"),gl.getExtension("GL_EXT_texture_shadow_lod"),gl.getExtension("GL_NV_memory_attachment"),gl.getExtension("NV_depth_nonlinear"),gl.getExtension("EXT_gl_colorspace_display_p3"),gl.getExtension("GL_ARB_multisample"),gl.hint(gl.GENERATE_MIPMAP_HINT,gl.NICEST),gl.drawingBufferColorSpace="display-p3",gl.disable(gl.DITHER),gl.blendColor(1,1,1,1),gl.blendFuncSeparate(gl.DST_COLOR,gl.SRC_COLOR,gl.SRC_COLOR,gl.ONE_MINUS_SRC_ALPHA),gl.blendEquationSeparate(gl.FUNC_SUBTRACT,gl.FUNC_ADD),w$=parseInt(document.getElementById("wid").innerHTML,10),h$=parseInt(document.getElementById("hig").innerHTML,10),vv=document.getElementById("mv");var blank$=Math.max(0*(w$-h$)/2,0),nblank$=Math.max(0*(h$-w$)/2,0),l=w$*h$*16;la=h$*h$*4;var al=w$*h$*8;for(sz=h$*h$/8,pointa=77*la,agav=new Float32Array($H,pointa,300),R.setOutput([sz]),i=0;i<65;i++){var j=i+1;eval("var point"+j+"="+i+"*la;var $"+j+"=new Float32Array($H,point"+j+",la);")}var pointb=77*la,$B=new Float32Array($H,pointb,sz),$F=1,$Bu=33;r.setConstants({nblnk:nblank$,blnk:blank$,favg:agav[$F],fmin:agav[$F+100],fmax:agav[$F+200],amin:agav[100],amax:agav[200],aavg:agav[0]}),t.setConstants({nblnk:nblank$,blnk:blank$});for(var $$1=t(vv),i=0;i<65;i++){var j=i+1;eval("var point"+j+"="+i+"*la;var $"+j+"=new Float32Array($H,point"+j+",la);$"+j+".set($$1);")}var d=S();function S(){w$=parseInt(document.getElementById("wid").innerHTML,10),h$=parseInt(document.getElementById("hig").innerHTML,10);var blank$=Math.max(0*(w$-h$)/2,0),nblank$=Math.max(0*(h$-w$)/2,0);l=w$*h$*16,la=h$*h$*4,al=w$*h$*8,sz=h$*h$/8,pointa=77*la;var agav=new Float32Array($H,pointa,300);R.setOutput([sz]);for(var i=0;i<65;i++){var j=i+1;eval("var point"+j+"="+i+"*la;var $"+j+"=new Float32Array($H,point"+j+",la);")}pointb=66*la;var $B=new Float32Array($H,pointb,sz);r.setConstants({nblnk:nblank$,blnk:blank$,favg:agav[$F],fmin:agav[$F+100],fmax:agav[$F+200],amin:agav[100],amax:agav[200],aavg:agav[0]}),t.setConstants({nblnk:nblank$,blnk:blank$});var T=!1;function M(){if(vv=document.getElementById("mv"),t.setConstants({nblnk:nblank$,blnk:blank$}),r.setConstants({nblnk:nblank$,blnk:blank$,favg:agav[$F],fmin:agav[$F+100],fmax:agav[$F+200],amin:agav[100],amax:agav[200],aavg:agav[0]}),!T){for(var i=64;i>0;i--){var loca=$F+1;loca>64&&(loca=1);var locb=$Bu+1;locb>64&&(locb=1),eval("if ($F=="+i+"){var $r"+i+"=t($"+i+");r($r"+i+");}"),eval("if ($F=="+i+"){var $$"+$Bu+"=t(vv);$"+$Bu+".set($$"+$Bu+");$F="+loca+";$Bu="+locb+";}")}if($F%8==0){var $bb=R(vv);$B.set($bb,0,sz),pointb=66*la,Module.ccall("nano",null,["Number","Number","Number","Number"],[$F,sz,pointb,pointa])}setTimeout((function(){M(),1==loopLoop&&(1==rv&&(vv.currentTime>a?vv.currentTime-=.016666:(rv=!1,vv.currentTime<b&&(vv.currentTime+=.016666))),0==rv&&(vv.currentTime<b?vv.currentTime+=.016666:(rv=!0,vv.currentTime>a&&(vv.currentTime-=.016666))))}),16.666666)}}return M(),document.getElementById("di").onclick=function(){T=!0,S()},()=>{T=!0}}d&&d(),d=S()}function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function listenOnce(e,t,r){e.addEventListener(t,r,{once:!0})}function autoResumeAudioContext(e,t){t||(t=[document,document.getElementById("canvas")]),["keydown","mousedown","touchstart"].forEach((function(r){t.forEach((function(t){t&&listenOnce(t,r,(()=>{"suspended"===e.state&&e.resume()}))}))}))}function callRuntimeCallbacks(e){for(;e.length>0;)e.shift()(Module)}function getCppExceptionTag(){return Module.asm.__cpp_exception}function getCppExceptionThrownObjectFromWebAssemblyException(e){var t=e.getArg(getCppExceptionTag(),0);return ___thrown_object_from_unwind_exception(t)}function decrementExceptionRefcount(e){var t=getCppExceptionThrownObjectFromWebAssemblyException(e);___cxa_decrement_exception_refcount(t)}function dynCallLegacy(e,t,r){assert("dynCall_"+e in Module,"bad function pointer type - dynCall function not found for sig '"+e+"'"),r&&r.length?assert(r.length===e.substring(1).replace(/j/g,"--").length):assert(1==e.length);var n=Module["dynCall_"+e];return r&&r.length?n.apply(null,[t].concat(r)):n.call(null,t)}var wasmTableMirror=[];function getWasmTableEntry(e){var t=wasmTableMirror[e];return t||(e>=wasmTableMirror.length&&(wasmTableMirror.length=e+1),wasmTableMirror[e]=t=wasmTable.get(e)),assert(wasmTable.get(e)==t,"JavaScript-side Wasm function table mirror is out of date!"),t}function dynCall(e,t,r){return e.includes("j")?dynCallLegacy(e,t,r):(assert(getWasmTableEntry(t),"missing table entry in dynCall: "+t),getWasmTableEntry(t).apply(null,r))}function withStackSave(e){var t=stackSave(),r=e();return stackRestore(t),r}function getExceptionMessageCommon(e){return withStackSave((function(){var t=stackAlloc(4),r=stackAlloc(4);___get_exception_message(e,t,r);var n,i=HEAPU32[t>>2],o=HEAPU32[r>>2],a=UTF8ToString(i);return _free(i),o&&(n=UTF8ToString(o),_free(o)),[a,n]}))}function getExceptionMessage(e){return getExceptionMessageCommon(getCppExceptionThrownObjectFromWebAssemblyException(e))}function getValue(e,t="i8"){switch(t.endsWith("*")&&(t="*"),t){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];case"*":return HEAPU32[e>>2];default:abort("invalid type for getValue: "+t)}return null}function incrementExceptionRefcount(e){var t=getCppExceptionThrownObjectFromWebAssemblyException(e);___cxa_increment_exception_refcount(t)}function ptrToString(e){return assert("number"==typeof e),"0x"+e.toString(16).padStart(8,"0")}function setValue(e,t,r="i8"){switch(r.endsWith("*")&&(r="*"),r){case"i1":case"i8":HEAP8[e>>0]=t;break;case"i16":HEAP16[e>>1]=t;break;case"i32":HEAP32[e>>2]=t;break;case"i64":tempI64=[t>>>0,(tempDouble=t,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=t;break;case"double":HEAPF64[e>>3]=t;break;case"*":HEAPU32[e>>2]=t;break;default:abort("invalid type for setValue: "+r)}}function warnOnce(e){warnOnce.shown||(warnOnce.shown={}),warnOnce.shown[e]||(warnOnce.shown[e]=1,ENVIRONMENT_IS_NODE&&(e="warning: "+e),err(e))}function ___assert_fail(e,t,r,n){abort("Assertion failed: "+UTF8ToString(e)+", at: "+[t?UTF8ToString(t):"unknown filename",r,n?UTF8ToString(n):"unknown function"])}function setErrNo(e){return HEAP32[___errno_location()>>2]=e,e}Module.getExceptionMessage=getExceptionMessage;var PATH={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,t)=>{for(var r=0,n=e.length-1;n>=0;n--){var i=e[n];"."===i?e.splice(n,1):".."===i?(e.splice(n,1),r++):r&&(e.splice(n,1),r--)}if(t)for(;r;r--)e.unshift("..");return e},normalize:e=>{var t=PATH.isAbs(e),r="/"===e.substr(-1);return(e=PATH.normalizeArray(e.split("/").filter((e=>!!e)),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e},dirname:e=>{var t=PATH.splitPath(e),r=t[0],n=t[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},basename:e=>{if("/"===e)return"/";var t=(e=(e=PATH.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===t?e:e.substr(t+1)},join:function(){var e=Array.prototype.slice.call(arguments);return PATH.normalize(e.join("/"))},join2:(e,t)=>PATH.normalize(e+"/"+t)};function getRandomDevice(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return()=>(crypto.getRandomValues(e),e[0])}if(ENVIRONMENT_IS_NODE)try{var t=require("crypto");return()=>t.randomBytes(1)[0]}catch(e){}return()=>abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}var PATH_FS={resolve:function(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var n=r>=0?arguments[r]:FS.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,t=PATH.isAbs(n)}return(t?"/":"")+(e=PATH.normalizeArray(e.split("/").filter((e=>!!e)),!t).join("/"))||"."},relative:(e,t)=>{function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var r=e.length-1;r>=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=PATH_FS.resolve(e).substr(1),t=PATH_FS.resolve(t).substr(1);for(var n=r(e.split("/")),i=r(t.split("/")),o=Math.min(n.length,i.length),a=o,s=0;s<o;s++)if(n[s]!==i[s]){a=s;break}var c=[];for(s=a;s<n.length;s++)c.push("..");return(c=c.concat(i.slice(a))).join("/")}};function intArrayFromString(e,t,r){var n=r>0?r:lengthBytesUTF8(e)+1,i=new Array(n),o=stringToUTF8Array(e,i,0,i.length);return t&&(i.length=o),i}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(e,t){TTY.ttys[e]={input:[],output:[],ops:t},FS.registerDevice(e,TTY.stream_ops)},stream_ops:{open:function(e){var t=TTY.ttys[e.node.rdev];if(!t)throw new FS.ErrnoError(43);e.tty=t,e.seekable=!1},close:function(e){e.tty.ops.fsync(e.tty)},fsync:function(e){e.tty.ops.fsync(e.tty)},read:function(e,t,r,n,i){if(!e.tty||!e.tty.ops.get_char)throw new FS.ErrnoError(60);for(var o=0,a=0;a<n;a++){var s;try{s=e.tty.ops.get_char(e.tty)}catch(e){throw new FS.ErrnoError(29)}if(void 0===s&&0===o)throw new FS.ErrnoError(6);if(null==s)break;o++,t[r+a]=s}return o&&(e.node.timestamp=Date.now()),o},write:function(e,t,r,n,i){if(!e.tty||!e.tty.ops.put_char)throw new FS.ErrnoError(60);try{for(var o=0;o<n;o++)e.tty.ops.put_char(e.tty,t[r+o])}catch(e){throw new FS.ErrnoError(29)}return n&&(e.node.timestamp=Date.now()),o}},default_tty_ops:{get_char:function(e){if(!e.input.length){var t=null;if(ENVIRONMENT_IS_NODE){var r=Buffer.alloc(256),n=0;try{n=fs.readSync(process.stdin.fd,r,0,256,-1)}catch(e){if(!e.toString().includes("EOF"))throw e;n=0}t=n>0?r.slice(0,n).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(t=window.prompt("Input: "))&&(t+="\n"):"function"==typeof readline&&null!==(t=readline())&&(t+="\n");if(!t)return null;e.input=intArrayFromString(t,!0)}return e.input.shift()},put_char:function(e,t){null===t||10===t?(out(UTF8ArrayToString(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},fsync:function(e){e.output&&e.output.length>0&&(out(UTF8ArrayToString(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,t){null===t||10===t?(err(UTF8ArrayToString(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},fsync:function(e){e.output&&e.output.length>0&&(err(UTF8ArrayToString(e.output,0)),e.output=[])}}};function zeroMemory(e,t){return HEAPU8.fill(0,e,e+t),e}function alignMemory(e,t){return assert(t,"alignment argument is required"),Math.ceil(e/t)*t}function mmapAlloc(e){abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")}var MEMFS={ops_table:null,mount:function(e){return MEMFS.createNode(null,"/",16895,0)},createNode:function(e,t,r,n){if(FS.isBlkdev(r)||FS.isFIFO(r))throw new FS.ErrnoError(63);MEMFS.ops_table||(MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}});var i=FS.createNode(e,t,r,n);return FS.isDir(i.mode)?(i.node_ops=MEMFS.ops_table.dir.node,i.stream_ops=MEMFS.ops_table.dir.stream,i.contents={}):FS.isFile(i.mode)?(i.node_ops=MEMFS.ops_table.file.node,i.stream_ops=MEMFS.ops_table.file.stream,i.usedBytes=0,i.contents=null):FS.isLink(i.mode)?(i.node_ops=MEMFS.ops_table.link.node,i.stream_ops=MEMFS.ops_table.link.stream):FS.isChrdev(i.mode)&&(i.node_ops=MEMFS.ops_table.chrdev.node,i.stream_ops=MEMFS.ops_table.chrdev.stream),i.timestamp=Date.now(),e&&(e.contents[t]=i,e.timestamp=i.timestamp),i},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage:function(e,t){var r=e.contents?e.contents.length:0;if(!(r>=t)){t=Math.max(t,r*(r<1048576?2:1.125)>>>0),0!=r&&(t=Math.max(t,256));var n=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,t){if(e.usedBytes!=t)if(0==t)e.contents=null,e.usedBytes=0;else{var r=e.contents;e.contents=new Uint8Array(t),r&&e.contents.set(r.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr:function(e){var t={};return t.dev=FS.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,FS.isDir(e.mode)?t.size=4096:FS.isFile(e.mode)?t.size=e.usedBytes:FS.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.timestamp),t.mtime=new Date(e.timestamp),t.ctime=new Date(e.timestamp),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr:function(e,t){void 0!==t.mode&&(e.mode=t.mode),void 0!==t.timestamp&&(e.timestamp=t.timestamp),void 0!==t.size&&MEMFS.resizeFileStorage(e,t.size)},lookup:function(e,t){throw FS.genericErrors[44]},mknod:function(e,t,r,n){return MEMFS.createNode(e,t,r,n)},rename:function(e,t,r){if(FS.isDir(e.mode)){var n;try{n=FS.lookupNode(t,r)}catch(e){}if(n)for(var i in n.contents)throw new FS.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=r,t.contents[r]=e,t.timestamp=e.parent.timestamp,e.parent=t},unlink:function(e,t){delete e.contents[t],e.timestamp=Date.now()},rmdir:function(e,t){var r=FS.lookupNode(e,t);for(var n in r.contents)throw new FS.ErrnoError(55);delete e.contents[t],e.timestamp=Date.now()},readdir:function(e){var t=[".",".."];for(var r in e.contents)e.contents.hasOwnProperty(r)&&t.push(r);return t},symlink:function(e,t,r){var n=MEMFS.createNode(e,t,41471,0);return n.link=r,n},readlink:function(e){if(!FS.isLink(e.mode))throw new FS.ErrnoError(28);return e.link}},stream_ops:{read:function(e,t,r,n,i){var o=e.node.contents;if(i>=e.node.usedBytes)return 0;var a=Math.min(e.node.usedBytes-i,n);if(assert(a>=0),a>8&&o.subarray)t.set(o.subarray(i,i+a),r);else for(var s=0;s<a;s++)t[r+s]=o[i+s];return a},write:function(e,t,r,n,i,o){if(assert(!(t instanceof ArrayBuffer)),!n)return 0;var a=e.node;if(a.timestamp=Date.now(),t.subarray&&(!a.contents||a.contents.subarray)){if(o)return assert(0===i,"canOwn must imply no weird position inside the file"),a.contents=t.subarray(r,r+n),a.usedBytes=n,n;if(0===a.usedBytes&&0===i)return a.contents=t.slice(r,r+n),a.usedBytes=n,n;if(i+n<=a.usedBytes)return a.contents.set(t.subarray(r,r+n),i),n}if(MEMFS.expandFileStorage(a,i+n),a.contents.subarray&&t.subarray)a.contents.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)a.contents[i+s]=t[r+s];return a.usedBytes=Math.max(a.usedBytes,i+n),n},llseek:function(e,t,r){var n=t;if(1===r?n+=e.position:2===r&&FS.isFile(e.node.mode)&&(n+=e.node.usedBytes),n<0)throw new FS.ErrnoError(28);return n},allocate:function(e,t,r){MEMFS.expandFileStorage(e.node,t+r),e.node.usedBytes=Math.max(e.node.usedBytes,t+r)},mmap:function(e,t,r,n,i){if(!FS.isFile(e.node.mode))throw new FS.ErrnoError(43);var o,a,s=e.node.contents;if(2&i||s.buffer!==buffer){if((r>0||r+t<s.length)&&(s=s.subarray?s.subarray(r,r+t):Array.prototype.slice.call(s,r,r+t)),a=!0,!(o=mmapAlloc(t)))throw new FS.ErrnoError(48);HEAP8.set(s,o)}else a=!1,o=s.byteOffset;return{ptr:o,allocated:a}},msync:function(e,t,r,n,i){return MEMFS.stream_ops.write(e,t,0,n,r,!1),0}}};function asyncLoad(e,t,r,n){var i=n?"":getUniqueRunDependency("al "+e);readAsync(e,(r=>{assert(r,'Loading data file "'+e+'" failed (no arrayBuffer).'),t(new Uint8Array(r)),i&&removeRunDependency(i)}),(t=>{if(!r)throw'Loading data file "'+e+'" failed.';r()})),i&&addRunDependency(i)}var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can   access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"},ERRNO_CODES={};function demangle(e){return warnOnce("warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling"),e}function demangleAll(e){return e.replace(/\b_Z[\w\d_]+/g,(function(e){var t=demangle(e);return e===t?e:t+" ["+e+"]"}))}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(e,t={})=>{if(!(e=PATH_FS.resolve(e)))return{path:"",node:null};if((t=Object.assign({follow_mount:!0,recurse_count:0},t)).recurse_count>8)throw new FS.ErrnoError(32);for(var r=e.split("/").filter((e=>!!e)),n=FS.root,i="/",o=0;o<r.length;o++){var a=o===r.length-1;if(a&&t.parent)break;if(n=FS.lookupNode(n,r[o]),i=PATH.join2(i,r[o]),FS.isMountpoint(n)&&(!a||a&&t.follow_mount)&&(n=n.mounted.root),!a||t.follow)for(var s=0;FS.isLink(n.mode);){var c=FS.readlink(i);if(i=PATH_FS.resolve(PATH.dirname(i),c),n=FS.lookupPath(i,{recurse_count:t.recurse_count+1}).node,s++>40)throw new FS.ErrnoError(32)}}return{path:i,node:n}},getPath:e=>{for(var t;;){if(FS.isRoot(e)){var r=e.mount.mountpoint;return t?"/"!==r[r.length-1]?r+"/"+t:r+t:r}t=t?e.name+"/"+t:e.name,e=e.parent}},hashName:(e,t)=>{for(var r=0,n=0;n<t.length;n++)r=(r<<5)-r+t.charCodeAt(n)|0;return(e+r>>>0)%FS.nameTable.length},hashAddNode:e=>{var t=FS.hashName(e.parent.id,e.name);e.name_next=FS.nameTable[t],FS.nameTable[t]=e},hashRemoveNode:e=>{var t=FS.hashName(e.parent.id,e.name);if(FS.nameTable[t]===e)FS.nameTable[t]=e.name_next;else for(var r=FS.nameTable[t];r;){if(r.name_next===e){r.name_next=e.name_next;break}r=r.name_next}},lookupNode:(e,t)=>{var r=FS.mayLookup(e);if(r)throw new FS.ErrnoError(r,e);for(var n=FS.hashName(e.id,t),i=FS.nameTable[n];i;i=i.name_next){var o=i.name;if(i.parent.id===e.id&&o===t)return i}return FS.lookup(e,t)},createNode:(e,t,r,n)=>{assert("object"==typeof e);var i=new FS.FSNode(e,t,r,n);return FS.hashAddNode(i),i},destroyNode:e=>{FS.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:e=>{var t=FS.flagModes[e];if(void 0===t)throw new Error("Unknown file open mode: "+e);return t},flagsToPermissionString:e=>{var t=["r","w","rw"][3&e];return 512&e&&(t+="w"),t},nodePermissions:(e,t)=>FS.ignorePermissions||(!t.includes("r")||292&e.mode)&&(!t.includes("w")||146&e.mode)&&(!t.includes("x")||73&e.mode)?0:2,mayLookup:e=>{var t=FS.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate:(e,t)=>{try{FS.lookupNode(e,t);return 20}catch(e){}return FS.nodePermissions(e,"wx")},mayDelete:(e,t,r)=>{var n;try{n=FS.lookupNode(e,t)}catch(e){return e.errno}var i=FS.nodePermissions(e,"wx");if(i)return i;if(r){if(!FS.isDir(n.mode))return 54;if(FS.isRoot(n)||FS.getPath(n)===FS.cwd())return 10}else if(FS.isDir(n.mode))return 31;return 0},mayOpen:(e,t)=>e?FS.isLink(e.mode)?32:FS.isDir(e.mode)&&("r"!==FS.flagsToPermissionString(t)||512&t)?31:FS.nodePermissions(e,FS.flagsToPermissionString(t)):44,MAX_OPEN_FDS:4096,nextfd:(e=0,t=FS.MAX_OPEN_FDS)=>{for(var r=e;r<=t;r++)if(!FS.streams[r])return r;throw new FS.ErrnoError(33)},getStream:e=>FS.streams[e],createStream:(e,t,r)=>{FS.FSStream||(FS.FSStream=function(){this.shared={}},FS.FSStream.prototype={},Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}},flags:{get:function(){return this.shared.flags},set:function(e){this.shared.flags=e}},position:{get:function(){return this.shared.position},set:function(e){this.shared.position=e}}})),e=Object.assign(new FS.FSStream,e);var n=FS.nextfd(t,r);return e.fd=n,FS.streams[n]=e,e},closeStream:e=>{FS.streams[e]=null},chrdev_stream_ops:{open:e=>{var t=FS.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:()=>{throw new FS.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,t)=>e<<8|t,registerDevice:(e,t)=>{FS.devices[e]={stream_ops:t}},getDevice:e=>FS.devices[e],getMounts:e=>{for(var t=[],r=[e];r.length;){var n=r.pop();t.push(n),r.push.apply(r,n.mounts)}return t},syncfs:(e,t)=>{"function"==typeof e&&(t=e,e=!1),FS.syncFSRequests++,FS.syncFSRequests>1&&err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=FS.getMounts(FS.root.mount),n=0;function i(e){return assert(FS.syncFSRequests>0),FS.syncFSRequests--,t(e)}function o(e){if(e)return o.errored?void 0:(o.errored=!0,i(e));++n>=r.length&&i(null)}r.forEach((t=>{if(!t.type.syncfs)return o(null);t.type.syncfs(t,e,o)}))},mount:(e,t,r)=>{if("string"==typeof e)throw e;var n,i="/"===r,o=!r;if(i&&FS.root)throw new FS.ErrnoError(10);if(!i&&!o){var a=FS.lookupPath(r,{follow_mount:!1});if(r=a.path,n=a.node,FS.isMountpoint(n))throw new FS.ErrnoError(10);if(!FS.isDir(n.mode))throw new FS.ErrnoError(54)}var s={type:e,opts:t,mountpoint:r,mounts:[]},c=e.mount(s);return c.mount=s,s.root=c,i?FS.root=c:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),c},unmount:e=>{var t=FS.lookupPath(e,{follow_mount:!1});if(!FS.isMountpoint(t.node))throw new FS.ErrnoError(28);var r=t.node,n=r.mounted,i=FS.getMounts(n);Object.keys(FS.nameTable).forEach((e=>{for(var t=FS.nameTable[e];t;){var r=t.name_next;i.includes(t.mount)&&FS.destroyNode(t),t=r}})),r.mounted=null;var o=r.mount.mounts.indexOf(n);assert(-1!==o),r.mount.mounts.splice(o,1)},lookup:(e,t)=>e.node_ops.lookup(e,t),mknod:(e,t,r)=>{var n=FS.lookupPath(e,{parent:!0}).node,i=PATH.basename(e);if(!i||"."===i||".."===i)throw new FS.ErrnoError(28);var o=FS.mayCreate(n,i);if(o)throw new FS.ErrnoError(o);if(!n.node_ops.mknod)throw new FS.ErrnoError(63);return n.node_ops.mknod(n,i,t,r)},create:(e,t)=>(t=void 0!==t?t:438,t&=4095,t|=32768,FS.mknod(e,t,0)),mkdir:(e,t)=>(t=void 0!==t?t:511,t&=1023,t|=16384,FS.mknod(e,t,0)),mkdirTree:(e,t)=>{for(var r=e.split("/"),n="",i=0;i<r.length;++i)if(r[i]){n+="/"+r[i];try{FS.mkdir(n,t)}catch(e){if(20!=e.errno)throw e}}},mkdev:(e,t,r)=>(void 0===r&&(r=t,t=438),t|=8192,FS.mknod(e,t,r)),symlink:(e,t)=>{if(!PATH_FS.resolve(e))throw new FS.ErrnoError(44);var r=FS.lookupPath(t,{parent:!0}).node;if(!r)throw new FS.ErrnoError(44);var n=PATH.basename(t),i=FS.mayCreate(r,n);if(i)throw new FS.ErrnoError(i);if(!r.node_ops.symlink)throw new FS.ErrnoError(63);return r.node_ops.symlink(r,n,e)},rename:(e,t)=>{var r,n,i=PATH.dirname(e),o=PATH.dirname(t),a=PATH.basename(e),s=PATH.basename(t);if(r=FS.lookupPath(e,{parent:!0}).node,n=FS.lookupPath(t,{parent:!0}).node,!r||!n)throw new FS.ErrnoError(44);if(r.mount!==n.mount)throw new FS.ErrnoError(75);var c,l=FS.lookupNode(r,a),u=PATH_FS.relative(e,o);if("."!==u.charAt(0))throw new FS.ErrnoError(28);if("."!==(u=PATH_FS.relative(t,i)).charAt(0))throw new FS.ErrnoError(55);try{c=FS.lookupNode(n,s)}catch(e){}if(l!==c){var d=FS.isDir(l.mode),m=FS.mayDelete(r,a,d);if(m)throw new FS.ErrnoError(m);if(m=c?FS.mayDelete(n,s,d):FS.mayCreate(n,s))throw new FS.ErrnoError(m);if(!r.node_ops.rename)throw new FS.ErrnoError(63);if(FS.isMountpoint(l)||c&&FS.isMountpoint(c))throw new FS.ErrnoError(10);if(n!==r&&(m=FS.nodePermissions(r,"w")))throw new FS.ErrnoError(m);FS.hashRemoveNode(l);try{r.node_ops.rename(l,n,s)}catch(e){throw e}finally{FS.hashAddNode(l)}}},rmdir:e=>{var t=FS.lookupPath(e,{parent:!0}).node,r=PATH.basename(e),n=FS.lookupNode(t,r),i=FS.mayDelete(t,r,!0);if(i)throw new FS.ErrnoError(i);if(!t.node_ops.rmdir)throw new FS.ErrnoError(63);if(FS.isMountpoint(n))throw new FS.ErrnoError(10);t.node_ops.rmdir(t,r),FS.destroyNode(n)},readdir:e=>{var t=FS.lookupPath(e,{follow:!0}).node;if(!t.node_ops.readdir)throw new FS.ErrnoError(54);return t.node_ops.readdir(t)},unlink:e=>{var t=FS.lookupPath(e,{parent:!0}).node;if(!t)throw new FS.ErrnoError(44);var r=PATH.basename(e),n=FS.lookupNode(t,r),i=FS.mayDelete(t,r,!1);if(i)throw new FS.ErrnoError(i);if(!t.node_ops.unlink)throw new FS.ErrnoError(63);if(FS.isMountpoint(n))throw new FS.ErrnoError(10);t.node_ops.unlink(t,r),FS.destroyNode(n)},readlink:e=>{var t=FS.lookupPath(e).node;if(!t)throw new FS.ErrnoError(44);if(!t.node_ops.readlink)throw new FS.ErrnoError(28);return PATH_FS.resolve(FS.getPath(t.parent),t.node_ops.readlink(t))},stat:(e,t)=>{var r=FS.lookupPath(e,{follow:!t}).node;if(!r)throw new FS.ErrnoError(44);if(!r.node_ops.getattr)throw new FS.ErrnoError(63);return r.node_ops.getattr(r)},lstat:e=>FS.stat(e,!0),chmod:(e,t,r)=>{var n;"string"==typeof e?n=FS.lookupPath(e,{follow:!r}).node:n=e;if(!n.node_ops.setattr)throw new FS.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&t|-4096&n.mode,timestamp:Date.now()})},lchmod:(e,t)=>{FS.chmod(e,t,!0)},fchmod:(e,t)=>{var r=FS.getStream(e);if(!r)throw new FS.ErrnoError(8);FS.chmod(r.node,t)},chown:(e,t,r,n)=>{var i;"string"==typeof e?i=FS.lookupPath(e,{follow:!n}).node:i=e;if(!i.node_ops.setattr)throw new FS.ErrnoError(63);i.node_ops.setattr(i,{timestamp:Date.now()})},lchown:(e,t,r)=>{FS.chown(e,t,r,!0)},fchown:(e,t,r)=>{var n=FS.getStream(e);if(!n)throw new FS.ErrnoError(8);FS.chown(n.node,t,r)},truncate:(e,t)=>{if(t<0)throw new FS.ErrnoError(28);var r;"string"==typeof e?r=FS.lookupPath(e,{follow:!0}).node:r=e;if(!r.node_ops.setattr)throw new FS.ErrnoError(63);if(FS.isDir(r.mode))throw new FS.ErrnoError(31);if(!FS.isFile(r.mode))throw new FS.ErrnoError(28);var n=FS.nodePermissions(r,"w");if(n)throw new FS.ErrnoError(n);r.node_ops.setattr(r,{size:t,timestamp:Date.now()})},ftruncate:(e,t)=>{var r=FS.getStream(e);if(!r)throw new FS.ErrnoError(8);if(0==(2097155&r.flags))throw new FS.ErrnoError(28);FS.truncate(r.node,t)},utime:(e,t,r)=>{var n=FS.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(t,r)})},open:(e,t,r)=>{if(""===e)throw new FS.ErrnoError(44);var n;if(r=void 0===r?438:r,r=64&(t="string"==typeof t?FS.modeStringToFlags(t):t)?4095&r|32768:0,"object"==typeof e)n=e;else{e=PATH.normalize(e);try{n=FS.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var i=!1;if(64&t)if(n){if(128&t)throw new FS.ErrnoError(20)}else n=FS.mknod(e,r,0),i=!0;if(!n)throw new FS.ErrnoError(44);if(FS.isChrdev(n.mode)&&(t&=-513),65536&t&&!FS.isDir(n.mode))throw new FS.ErrnoError(54);if(!i){var o=FS.mayOpen(n,t);if(o)throw new FS.ErrnoError(o)}512&t&&!i&&FS.truncate(n,0),t&=-131713;var a=FS.createStream({node:n,path:FS.getPath(n),flags:t,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1});return a.stream_ops.open&&a.stream_ops.open(a),!Module.logReadFiles||1&t||(FS.readFiles||(FS.readFiles={}),e in FS.readFiles||(FS.readFiles[e]=1)),a},close:e=>{if(FS.isClosed(e))throw new FS.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{FS.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek:(e,t,r)=>{if(FS.isClosed(e))throw new FS.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new FS.ErrnoError(70);if(0!=r&&1!=r&&2!=r)throw new FS.ErrnoError(28);return e.position=e.stream_ops.llseek(e,t,r),e.ungotten=[],e.position},read:(e,t,r,n,i)=>{if(n<0||i<0)throw new FS.ErrnoError(28);if(FS.isClosed(e))throw new FS.ErrnoError(8);if(1==(2097155&e.flags))throw new FS.ErrnoError(8);if(FS.isDir(e.node.mode))throw new FS.ErrnoError(31);if(!e.stream_ops.read)throw new FS.ErrnoError(28);var o=void 0!==i;if(o){if(!e.seekable)throw new FS.ErrnoError(70)}else i=e.position;var a=e.stream_ops.read(e,t,r,n,i);return o||(e.position+=a),a},write:(e,t,r,n,i,o)=>{if(n<0||i<0)throw new FS.ErrnoError(28);if(FS.isClosed(e))throw new FS.ErrnoError(8);if(0==(2097155&e.flags))throw new FS.ErrnoError(8);if(FS.isDir(e.node.mode))throw new FS.ErrnoError(31);if(!e.stream_ops.write)throw new FS.ErrnoError(28);e.seekable&&1024&e.flags&&FS.llseek(e,0,2);var a=void 0!==i;if(a){if(!e.seekable)throw new FS.ErrnoError(70)}else i=e.position;var s=e.stream_ops.write(e,t,r,n,i,o);return a||(e.position+=s),s},allocate:(e,t,r)=>{if(FS.isClosed(e))throw new FS.ErrnoError(8);if(t<0||r<=0)throw new FS.ErrnoError(28);if(0==(2097155&e.flags))throw new FS.ErrnoError(8);if(!FS.isFile(e.node.mode)&&!FS.isDir(e.node.mode))throw new FS.ErrnoError(43);if(!e.stream_ops.allocate)throw new FS.ErrnoError(138);e.stream_ops.allocate(e,t,r)},mmap:(e,t,r,n,i)=>{if(0!=(2&n)&&0==(2&i)&&2!=(2097155&e.flags))throw new FS.ErrnoError(2);if(1==(2097155&e.flags))throw new FS.ErrnoError(2);if(!e.stream_ops.mmap)throw new FS.ErrnoError(43);return e.stream_ops.mmap(e,t,r,n,i)},msync:(e,t,r,n,i)=>e.stream_ops.msync?e.stream_ops.msync(e,t,r,n,i):0,munmap:e=>0,ioctl:(e,t,r)=>{if(!e.stream_ops.ioctl)throw new FS.ErrnoError(59);return e.stream_ops.ioctl(e,t,r)},readFile:(e,t={})=>{if(t.flags=t.flags||0,t.encoding=t.encoding||"binary","utf8"!==t.encoding&&"binary"!==t.encoding)throw new Error('Invalid encoding type "'+t.encoding+'"');var r,n=FS.open(e,t.flags),i=FS.stat(e).size,o=new Uint8Array(i);return FS.read(n,o,0,i,0),"utf8"===t.encoding?r=UTF8ArrayToString(o,0):"binary"===t.encoding&&(r=o),FS.close(n),r},writeFile:(e,t,r={})=>{r.flags=r.flags||577;var n=FS.open(e,r.flags,r.mode);if("string"==typeof t){var i=new Uint8Array(lengthBytesUTF8(t)+1),o=stringToUTF8Array(t,i,0,i.length);FS.write(n,i,0,o,void 0,r.canOwn)}else{if(!ArrayBuffer.isView(t))throw new Error("Unsupported data type");FS.write(n,t,0,t.byteLength,void 0,r.canOwn)}FS.close(n)},cwd:()=>FS.currentPath,chdir:e=>{var t=FS.lookupPath(e,{follow:!0});if(null===t.node)throw new FS.ErrnoError(44);if(!FS.isDir(t.node.mode))throw new FS.ErrnoError(54);var r=FS.nodePermissions(t.node,"x");if(r)throw new FS.ErrnoError(r);FS.currentPath=t.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:(e,t,r,n,i)=>n}),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 e=getRandomDevice();FS.createDevice("/dev","random",e),FS.createDevice("/dev","urandom",e),FS.mkdir("/dev/shm"),FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var e=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd"),FS.mount({mount:()=>{var t=FS.createNode(e,"fd",16895,73);return t.node_ops={lookup:(e,t)=>{var r=+t,n=FS.getStream(r);if(!n)throw new FS.ErrnoError(8);var i={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return i.parent=i,i}},t}},{},"/proc/self/fd")},createStandardStreams:()=>{Module.stdin?FS.createDevice("/dev","stdin",Module.stdin):FS.symlink("/dev/tty","/dev/stdin"),Module.stdout?FS.createDevice("/dev","stdout",null,Module.stdout):FS.symlink("/dev/tty","/dev/stdout"),Module.stderr?FS.createDevice("/dev","stderr",null,Module.stderr):FS.symlink("/dev/tty1","/dev/stderr");var e=FS.open("/dev/stdin",0),t=FS.open("/dev/stdout",1),r=FS.open("/dev/stderr",1);assert(0===e.fd,"invalid handle for stdin ("+e.fd+")"),assert(1===t.fd,"invalid handle for stdout ("+t.fd+")"),assert(2===r.fd,"invalid handle for stderr ("+r.fd+")")},ensureErrnoError:()=>{FS.ErrnoError||(FS.ErrnoError=function(e,t){this.node=t,this.setErrno=function(e){for(var t in this.errno=e,ERRNO_CODES)if(ERRNO_CODES[t]===e){this.code=t;break}},this.setErrno(e),this.message=ERRNO_MESSAGES[e],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=demangleAll(this.stack))},FS.ErrnoError.prototype=new Error,FS.ErrnoError.prototype.constructor=FS.ErrnoError,[44].forEach((e=>{FS.genericErrors[e]=new FS.ErrnoError(e),FS.genericErrors[e].stack="<generic error, no stack>"})))},staticInit:()=>{FS.ensureErrnoError(),FS.nameTable=new Array(4096),FS.mount(MEMFS,{},"/"),FS.createDefaultDirectories(),FS.createDefaultDevices(),FS.createSpecialDirectories(),FS.filesystems={MEMFS}},init:(e,t,r)=>{assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),FS.init.initialized=!0,FS.ensureErrnoError(),Module.stdin=e||Module.stdin,Module.stdout=t||Module.stdout,Module.stderr=r||Module.stderr,FS.createStandardStreams()},quit:()=>{FS.init.initialized=!1,_fflush(0);for(var e=0;e<FS.streams.length;e++){var t=FS.streams[e];t&&FS.close(t)}},getMode:(e,t)=>{var r=0;return e&&(r|=365),t&&(r|=146),r},findObject:(e,t)=>{var r=FS.analyzePath(e,t);return r.exists?r.object:null},analyzePath:(e,t)=>{try{e=(n=FS.lookupPath(e,{follow:!t})).path}catch(e){}var r={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var n=FS.lookupPath(e,{parent:!0});r.parentExists=!0,r.parentPath=n.path,r.parentObject=n.node,r.name=PATH.basename(e),n=FS.lookupPath(e,{follow:!t}),r.exists=!0,r.path=n.path,r.object=n.node,r.name=n.node.name,r.isRoot="/"===n.path}catch(e){r.error=e.errno}return r},createPath:(e,t,r,n)=>{e="string"==typeof e?e:FS.getPath(e);for(var i=t.split("/").reverse();i.length;){var o=i.pop();if(o){var a=PATH.join2(e,o);try{FS.mkdir(a)}catch(e){}e=a}}return a},createFile:(e,t,r,n,i)=>{var o=PATH.join2("string"==typeof e?e:FS.getPath(e),t),a=FS.getMode(n,i);return FS.create(o,a)},createDataFile:(e,t,r,n,i,o)=>{var a=t;e&&(e="string"==typeof e?e:FS.getPath(e),a=t?PATH.join2(e,t):e);var s=FS.getMode(n,i),c=FS.create(a,s);if(r){if("string"==typeof r){for(var l=new Array(r.length),u=0,d=r.length;u<d;++u)l[u]=r.charCodeAt(u);r=l}FS.chmod(c,146|s);var m=FS.open(c,577);FS.write(m,r,0,r.length,0,o),FS.close(m),FS.chmod(c,s)}return c},createDevice:(e,t,r,n)=>{var i=PATH.join2("string"==typeof e?e:FS.getPath(e),t),o=FS.getMode(!!r,!!n);FS.createDevice.major||(FS.createDevice.major=64);var a=FS.makedev(FS.createDevice.major++,0);return FS.registerDevice(a,{open:e=>{e.seekable=!1},close:e=>{n&&n.buffer&&n.buffer.length&&n(10)},read:(e,t,n,i,o)=>{for(var a=0,s=0;s<i;s++){var c;try{c=r()}catch(e){throw new FS.ErrnoError(29)}if(void 0===c&&0===a)throw new FS.ErrnoError(6);if(null==c)break;a++,t[n+s]=c}return a&&(e.node.timestamp=Date.now()),a},write:(e,t,r,i,o)=>{for(var a=0;a<i;a++)try{n(t[r+a])}catch(e){throw new FS.ErrnoError(29)}return i&&(e.node.timestamp=Date.now()),a}}),FS.mkdev(i,o,a)},forceLoadFile:e=>{if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!read_)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=intArrayFromString(read_(e.url),!0),e.usedBytes=e.contents.length}catch(e){throw new FS.ErrnoError(29)}},createLazyFile:(e,t,r,n,i)=>{function o(){this.lengthKnown=!1,this.chunks=[]}if(o.prototype.get=function(e){if(!(e>this.length-1||e<0)){var t=e%this.chunkSize,r=e/this.chunkSize|0;return this.getter(r)[t]}},o.prototype.setDataGetter=function(e){this.getter=e},o.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",r,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+r+". Status: "+e.status);var t,n=Number(e.getResponseHeader("Content-length")),i=(t=e.getResponseHeader("Accept-Ranges"))&&"bytes"===t,o=(t=e.getResponseHeader("Content-Encoding"))&&"gzip"===t,a=1048576;i||(a=n);var s=this;s.setDataGetter((e=>{var t=e*a,i=(e+1)*a-1;if(i=Math.min(i,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,t)=>{if(e>t)throw new Error("invalid range ("+e+", "+t+") or no bytes requested!");if(t>n-1)throw new Error("only "+n+" bytes available! programmer error!");var i=new XMLHttpRequest;if(i.open("GET",r,!1),n!==a&&i.setRequestHeader("Range","bytes="+e+"-"+t),i.responseType="arraybuffer",i.overrideMimeType&&i.overrideMimeType("text/plain; charset=x-user-defined"),i.send(null),!(i.status>=200&&i.status<300||304===i.status))throw new Error("Couldn't load "+r+". Status: "+i.status);return void 0!==i.response?new Uint8Array(i.response||[]):intArrayFromString(i.responseText||"",!0)})(t,i)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!o&&n||(a=n=1,n=this.getter(0).length,a=n,out("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=a,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a=new o;Object.defineProperties(a,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:a}}else s={isDevice:!1,url:r};var c=FS.createFile(e,t,s,n,i);s.contents?c.contents=s.contents:s.url&&(c.contents=null,c.url=s.url),Object.defineProperties(c,{usedBytes:{get:function(){return this.contents.length}}});var l={};function u(e,t,r,n,i){var o=e.node.contents;if(i>=o.length)return 0;var a=Math.min(o.length-i,n);if(assert(a>=0),o.slice)for(var s=0;s<a;s++)t[r+s]=o[i+s];else for(s=0;s<a;s++)t[r+s]=o.get(i+s);return a}return Object.keys(c.stream_ops).forEach((e=>{var t=c.stream_ops[e];l[e]=function(){return FS.forceLoadFile(c),t.apply(null,arguments)}})),l.read=(e,t,r,n,i)=>(FS.forceLoadFile(c),u(e,t,r,n,i)),l.mmap=(e,t,r,n,i)=>{FS.forceLoadFile(c);var o=mmapAlloc(t);if(!o)throw new FS.ErrnoError(48);return u(e,HEAP8,o,t,r),{ptr:o,allocated:!0}},c.stream_ops=l,c},createPreloadedFile:(e,t,r,n,i,o,a,s,c,l)=>{var u=t?PATH_FS.resolve(PATH.join2(e,t)):e,d=getUniqueRunDependency("cp "+u);function m(r){function m(r){l&&l(),s||FS.createDataFile(e,t,r,n,i,c),o&&o(),removeRunDependency(d)}Browser.handledByPreloadPlugin(r,u,m,(()=>{a&&a(),removeRunDependency(d)}))||m(r)}addRunDependency(d),"string"==typeof r?asyncLoad(r,(e=>m(e)),a):m(r)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>"EM_FS_"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(e,t,r)=>{t=t||(()=>{}),r=r||(()=>{});var n=FS.indexedDB();try{var i=n.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return r(e)}i.onupgradeneeded=()=>{out("creating db"),i.result.createObjectStore(FS.DB_STORE_NAME)},i.onsuccess=()=>{var n=i.result.transaction([FS.DB_STORE_NAME],"readwrite"),o=n.objectStore(FS.DB_STORE_NAME),a=0,s=0,c=e.length;function l(){0==s?t():r()}e.forEach((e=>{var t=o.put(FS.analyzePath(e).object.contents,e);t.onsuccess=()=>{++a+s==c&&l()},t.onerror=()=>{s++,a+s==c&&l()}})),n.onerror=r},i.onerror=r},loadFilesFromDB:(e,t,r)=>{t=t||(()=>{}),r=r||(()=>{});var n=FS.indexedDB();try{var i=n.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return r(e)}i.onupgradeneeded=r,i.onsuccess=()=>{var n=i.result;try{var o=n.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){return void r(e)}var a=o.objectStore(FS.DB_STORE_NAME),s=0,c=0,l=e.length;function u(){0==c?t():r()}e.forEach((e=>{var t=a.get(e);t.onsuccess=()=>{FS.analyzePath(e).exists&&FS.unlink(e),FS.createDataFile(PATH.dirname(e),PATH.basename(e),t.result,!0,!0,!0),++s+c==l&&u()},t.onerror=()=>{c++,s+c==l&&u()}})),o.onerror=r},i.onerror=r},absolutePath:()=>{abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{abort("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{abort("FS.standardizePath has been removed; use PATH.normalize instead")}},SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(e,t,r){if(PATH.isAbs(t))return t;var n;-100===e?n=FS.cwd():n=SYSCALLS.getStreamFromFD(e).path;if(0==t.length){if(!r)throw new FS.ErrnoError(44);return n}return PATH.join2(n,t)},doStat:function(e,t,r){try{var n=e(t)}catch(e){if(e&&e.node&&PATH.normalize(t)!==PATH.normalize(FS.getPath(e.node)))return-54;throw e}HEAP32[r>>2]=n.dev,HEAP32[r+8>>2]=n.ino,HEAP32[r+12>>2]=n.mode,HEAPU32[r+16>>2]=n.nlink,HEAP32[r+20>>2]=n.uid,HEAP32[r+24>>2]=n.gid,HEAP32[r+28>>2]=n.rdev,tempI64=[n.size>>>0,(tempDouble=n.size,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+40>>2]=tempI64[0],HEAP32[r+44>>2]=tempI64[1],HEAP32[r+48>>2]=4096,HEAP32[r+52>>2]=n.blocks;var i=n.atime.getTime(),o=n.mtime.getTime(),a=n.ctime.getTime();return tempI64=[Math.floor(i/1e3)>>>0,(tempDouble=Math.floor(i/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+56>>2]=tempI64[0],HEAP32[r+60>>2]=tempI64[1],HEAPU32[r+64>>2]=i%1e3*1e3,tempI64=[Math.floor(o/1e3)>>>0,(tempDouble=Math.floor(o/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+72>>2]=tempI64[0],HEAP32[r+76>>2]=tempI64[1],HEAPU32[r+80>>2]=o%1e3*1e3,tempI64=[Math.floor(a/1e3)>>>0,(tempDouble=Math.floor(a/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+88>>2]=tempI64[0],HEAP32[r+92>>2]=tempI64[1],HEAPU32[r+96>>2]=a%1e3*1e3,tempI64=[n.ino>>>0,(tempDouble=n.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+104>>2]=tempI64[0],HEAP32[r+108>>2]=tempI64[1],0},doMsync:function(e,t,r,n,i){if(!FS.isFile(t.node.mode))throw new FS.ErrnoError(43);if(2&n)return 0;var o=HEAPU8.slice(e,e+r);FS.msync(t,o,i,r,n)},varargs:void 0,get:function(){return assert(null!=SYSCALLS.varargs),SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(e){return UTF8ToString(e)},getStreamFromFD:function(e){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(8);return t}};function ___syscall_fcntl64(e,t,r){SYSCALLS.varargs=r;try{var n=SYSCALLS.getStreamFromFD(e);switch(t){case 0:return(i=SYSCALLS.get())<0?-28:FS.createStream(n,i).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var i=SYSCALLS.get();return n.flags|=i,0;case 5:i=SYSCALLS.get();return HEAP16[i+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return setErrNo(28),-1}}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(e,t,r){SYSCALLS.varargs=r;try{var n=SYSCALLS.getStreamFromFD(e);switch(t){case 21509:case 21505:case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:case 21523:case 21524:return n.tty?0:-59;case 21519:if(!n.tty)return-59;var i=SYSCALLS.get();return HEAP32[i>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:i=SYSCALLS.get();return FS.ioctl(n,t,i);default:return-28}}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(e,t,r,n){SYSCALLS.varargs=n;try{t=SYSCALLS.getStr(t),t=SYSCALLS.calculateAt(e,t);var i=n?SYSCALLS.get():0;return FS.open(t,r,i).fd}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___throw_exception_with_stack_trace(e){var t=new WebAssembly.Exception(getCppExceptionTag(),[e],{traceStack:!0});t.message=getExceptionMessage(t);var r=t.stack.split("\n");throw r.splice(1,1),t.stack=r.join("\n"),t}var nowIsMonotonic=!0,_emscripten_get_now;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function _abort(){abort("native code called abort()")}function _emscripten_set_main_loop_timing(e,t){if(Browser.mainLoop.timingMode=e,Browser.mainLoop.timingValue=t,!Browser.mainLoop.func)return err("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up."),1;if(Browser.mainLoop.running||(Browser.mainLoop.running=!0),0==e)Browser.mainLoop.scheduler=function(){var e=0|Math.max(0,Browser.mainLoop.tickStartTime+t-_emscripten_get_now());setTimeout(Browser.mainLoop.runner,e)},Browser.mainLoop.method="timeout";else if(1==e)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==e){if("undefined"==typeof setImmediate){var r=[],n="setimmediate";addEventListener("message",(e=>{e.data!==n&&e.data.target!==n||(e.stopPropagation(),r.shift()())}),!0),setImmediate=function(e){r.push(e),ENVIRONMENT_IS_WORKER?(void 0===Module.setImmediates&&(Module.setImmediates=[]),Module.setImmediates.push(e),postMessage({target:n})):postMessage(n,"*")}}Browser.mainLoop.scheduler=function(){setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function setMainLoop(e,t,r,n,i){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=e,Browser.mainLoop.arg=n;var o=Browser.mainLoop.currentlyRunningMainloop;function a(){return!(o<Browser.mainLoop.currentlyRunningMainloop)}if(Browser.mainLoop.running=!1,Browser.mainLoop.runner=function(){if(!ABORT)if(Browser.mainLoop.queue.length>0){var t=Date.now(),r=Browser.mainLoop.queue.shift();if(r.func(r.arg),Browser.mainLoop.remainingBlockers){var n=Browser.mainLoop.remainingBlockers,i=n%1==0?n-1:Math.floor(n);r.counted?Browser.mainLoop.remainingBlockers=i:(i+=.5,Browser.mainLoop.remainingBlockers=(8*n+i)/9)}if(out('main loop blocker "'+r.name+'" took '+(Date.now()-t)+" ms"),Browser.mainLoop.updateStatus(),!a())return;setTimeout(Browser.mainLoop.runner,0)}else a()&&(Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0,1==Browser.mainLoop.timingMode&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0?Browser.mainLoop.scheduler():(0==Browser.mainLoop.timingMode&&(Browser.mainLoop.tickStartTime=_emscripten_get_now()),GL.newRenderingFrameStarted(),"timeout"===Browser.mainLoop.method&&Module.ctx&&(warnOnce("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(e),checkStackCookie(),a()&&("object"==typeof SDL&&SDL.audio&&SDL.audio.queueNewAudioData&&SDL.audio.queueNewAudioData(),Browser.mainLoop.scheduler())))},i||(t&&t>0?_emscripten_set_main_loop_timing(0,1e3/t):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"unwind"}function handleException(e){if(e instanceof ExitStatus||"unwind"==e)return EXITSTATUS;checkStackCookie(),e instanceof WebAssembly.RuntimeError&&_emscripten_stack_get_current()<=0&&err("Stack overflow detected.  You can try increasing -sSTACK_SIZE (currently set to "+STACK_SIZE+")"),quit_(1,e)}function callUserCallback(e){if(ABORT)err("user callback triggered after runtime exited or application aborted.  Ignoring.");else try{e()}catch(e){handleException(e)}}function safeSetTimeout(e,t){return setTimeout((function(){callUserCallback(e)}),t)}_emscripten_get_now=ENVIRONMENT_IS_NODE?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now();var Browser={mainLoop:{running:!1,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var e=Browser.mainLoop.timingMode,t=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,setMainLoop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(e,t),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var e=Module.statusMessage||"Please wait...",t=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;t?t<r?Module.setStatus(e+" ("+(r-t)+"/"+r+")"):Module.setStatus(e):Module.setStatus("")}},runIter:function(e){if(!ABORT){if(Module.preMainLoop)if(!1===Module.preMainLoop())return;callUserCallback(e),Module.postMainLoop&&Module.postMainLoop()}}},isFullscreen:!1,pointerLock:!1,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(Module.preloadPlugins||(Module.preloadPlugins=[]),!Browser.initted){Browser.initted=!0;try{new Blob,Browser.hasBlobConstructor=!0}catch(e){Browser.hasBlobConstructor=!1,err("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Browser.hasBlobConstructor?null:err("warning: no BlobBuilder"),Browser.URLObject="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:void 0,Module.noImageDecoding||void 0!==Browser.URLObject||(err("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var e={canHandle:function(e){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(e)},handle:function(e,t,r,n){var i=null;if(Browser.hasBlobConstructor)try{(i=new Blob([e],{type:Browser.getMimetype(t)})).size!==e.length&&(i=new Blob([new Uint8Array(e).buffer],{type:Browser.getMimetype(t)}))}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}if(!i){var o=new Browser.BlobBuilder;o.append(new Uint8Array(e).buffer),i=o.getBlob()}var a=Browser.URLObject.createObjectURL(i);assert("string"==typeof a,"createObjectURL must return a url as a string");var s=new Image;s.onload=()=>{assert(s.complete,"Image "+t+" could not be decoded");var n=document.createElement("canvas");n.width=s.width,n.height=s.height,n.getContext("2d").drawImage(s,0,0),preloadedImages[t]=n,Browser.URLObject.revokeObjectURL(a),r&&r(e)},s.onerror=e=>{out("Image "+a+" could not be decoded"),n&&n()},s.src=a}};Module.preloadPlugins.push(e);var t={canHandle:function(e){return!Module.noAudioDecoding&&e.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(e,t,r,n){var i=!1;function o(n){i||(i=!0,preloadedAudios[t]=n,r&&r(e))}function a(){i||(i=!0,preloadedAudios[t]=new Audio,n&&n())}if(!Browser.hasBlobConstructor)return a();try{var s=new Blob([e],{type:Browser.getMimetype(t)})}catch(e){return a()}var c=Browser.URLObject.createObjectURL(s);assert("string"==typeof c,"createObjectURL must return a url as a string");var l=new Audio;l.addEventListener("canplaythrough",(()=>o(l)),!1),l.onerror=function(r){i||(err("warning: browser could not fully decode audio "+t+", trying slower base64 approach"),l.src="data:audio/x-"+t.substr(-3)+";base64,"+function(e){for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="",n=0,i=0,o=0;o<e.length;o++)for(n=n<<8|e[o],i+=8;i>=6;){var a=n>>i-6&63;i-=6,r+=t[a]}return 2==i?(r+=t[(3&n)<<4],r+="=="):4==i&&(r+=t[(15&n)<<2],r+="="),r}(e),o(l))},l.src=c,safeSetTimeout((function(){o(l)}),1e4)}};Module.preloadPlugins.push(t);var r=Module.canvas;r&&(r.requestPointerLock=r.requestPointerLock||r.mozRequestPointerLock||r.webkitRequestPointerLock||r.msRequestPointerLock||(()=>{}),r.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||(()=>{}),r.exitPointerLock=r.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",n,!1),document.addEventListener("mozpointerlockchange",n,!1),document.addEventListener("webkitpointerlockchange",n,!1),document.addEventListener("mspointerlockchange",n,!1),Module.elementPointerLock&&r.addEventListener("click",(e=>{!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),e.preventDefault())}),!1))}function n(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}},handledByPreloadPlugin:function(e,t,r,n){Browser.init();var i=!1;return Module.preloadPlugins.forEach((function(o){i||o.canHandle(t)&&(o.handle(e,t,r,n),i=!0)})),i},createContext:function(e,t,r,n){if(t&&Module.ctx&&e==Module.canvas)return Module.ctx;var i,o;if(t){var a={antialias:!1,alpha:!1,majorVersion:2};if(n)for(var s in n)a[s]=n[s];void 0!==GL&&(o=GL.createContext(e,a))&&(i=GL.getContext(o).GLctx)}else i=e.getContext("2d");return i?(r&&(t||assert(void 0===GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=i,t&&GL.makeContextCurrent(o),Module.useWebGL=t,Browser.moduleContextCreatedCallbacks.forEach((function(e){e()})),Browser.init()),i):null},destroyContext:function(e,t,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,t){Browser.lockPointer=e,Browser.resizeCanvas=t,void 0===Browser.lockPointer&&(Browser.lockPointer=!0),void 0===Browser.resizeCanvas&&(Browser.resizeCanvas=!1);var r=Module.canvas;function n(){Browser.isFullscreen=!1;var e=r.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(r.exitFullscreen=Browser.exitFullscreen,Browser.lockPointer&&r.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas?Browser.setFullscreenCanvasSize():Browser.updateCanvasDimensions(r)):(e.parentNode.insertBefore(r,e),e.parentNode.removeChild(e),Browser.resizeCanvas?Browser.setWindowedCanvasSize():Browser.updateCanvasDimensions(r)),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("MSFullscreenChange",n,!1));var i=document.createElement("div");r.parentNode.insertBefore(i,r),i.appendChild(r),i.requestFullscreen=i.requestFullscreen||i.mozRequestFullScreen||i.msRequestFullscreen||(i.webkitRequestFullscreen?()=>i.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):null)||(i.webkitRequestFullScreen?()=>i.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):null),i.requestFullscreen()},requestFullScreen:function(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen:function(){return!!Browser.isFullscreen&&((document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){}).apply(document,[]),!0)},nextRAF:0,fakeRequestAnimationFrame:function(e){var t=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=t+1e3/60;else for(;t+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-t,0);setTimeout(e,r)},requestAnimationFrame:function(e){"function"!=typeof requestAnimationFrame?(0,Browser.fakeRequestAnimationFrame)(e):requestAnimationFrame(e)},safeSetTimeout:function(e,t){return safeSetTimeout(e,t)},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame((function(){callUserCallback(e)}))},getMimetype:function(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var t=0;switch(e.type){case"DOMMouseScroll":t=e.detail/3;break;case"mousewheel":t=e.wheelDelta/120;break;case"wheel":switch(t=e.deltaY,e.deltaMode){case 0:t/=100;break;case 1:t/=3;break;case 2:t*=80;break;default:throw"unrecognized mouse wheel delta mode: "+e.deltaMode}break;default:throw"unrecognized mouse wheel event: "+e.type}return t},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if(Browser.pointerLock)"mousemove"!=e.type&&"mozMovementX"in e?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(e),Browser.mouseMovementY=Browser.getMovementY(e)),"undefined"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var t=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,n=Module.canvas.height,i=void 0!==window.scrollX?window.scrollX:window.pageXOffset,o=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if(assert(void 0!==i&&void 0!==o,"Unable to retrieve scroll position, mouse positions likely broken."),"touchstart"===e.type||"touchend"===e.type||"touchmove"===e.type){var a=e.touch;if(void 0===a)return;var s=a.pageX-(i+t.left),c=a.pageY-(o+t.top),l={x:s*=r/t.width,y:c*=n/t.height};if("touchstart"===e.type)Browser.lastTouches[a.identifier]=l,Browser.touches[a.identifier]=l;else if("touchend"===e.type||"touchmove"===e.type){var u=Browser.touches[a.identifier];u||(u=l),Browser.lastTouches[a.identifier]=u,Browser.touches[a.identifier]=l}return}var d=e.pageX-(i+t.left),m=e.pageY-(o+t.top);d*=r/t.width,m*=n/t.height,Browser.mouseMovementX=d-Browser.mouseX,Browser.mouseMovementY=m-Browser.mouseY,Browser.mouseX=d,Browser.mouseY=m}},resizeListeners:[],updateResizeListeners:function(){var e=Module.canvas;Browser.resizeListeners.forEach((function(t){t(e.width,e.height)}))},setCanvasSize:function(e,t,r){var n=Module.canvas;Browser.updateCanvasDimensions(n,e,t),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen>>2];e|=8388608,HEAP32[SDL.screen>>2]=e}Browser.updateCanvasDimensions(Module.canvas),Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen>>2];e&=-8388609,HEAP32[SDL.screen>>2]=e}Browser.updateCanvasDimensions(Module.canvas),Browser.updateResizeListeners()},updateCanvasDimensions:function(e,t,r){t&&r?(e.widthNative=t,e.heightNative=r):(t=e.widthNative,r=e.heightNative);var n=t,i=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(n/i<Module.forcedAspectRatio?n=Math.round(i*Module.forcedAspectRatio):i=Math.round(n/Module.forcedAspectRatio)),(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e.parentNode&&"undefined"!=typeof screen){var o=Math.min(screen.width/n,screen.height/i);n=Math.round(n*o),i=Math.round(i*o)}Browser.resizeCanvas?(e.width!=n&&(e.width=n),e.height!=i&&(e.height=i),void 0!==e.style&&(e.style.removeProperty("width"),e.style.removeProperty("height"))):(e.width!=t&&(e.width=t),e.height!=r&&(e.height=r),void 0!==e.style&&(n!=t||i!=r?(e.style.setProperty("width",n+"px","important"),e.style.setProperty("height",i+"px","important")):(e.style.removeProperty("width"),e.style.removeProperty("height"))))}},EGL={errorCode:12288,defaultDisplayInitialized:!1,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:!1,depth:!1,stencil:!1,antialias:!1},stringCache:{},setErrorCode:function(e){EGL.errorCode=e},chooseConfig:function(e,t,r,n,i){if(62e3!=e)return EGL.setErrorCode(12296),0;if(t)for(;;){var o=HEAP32[t>>2];if(12321==o){var a=HEAP32[t+4>>2];EGL.contextAttributes.alpha=a>0}else if(12325==o){var s=HEAP32[t+4>>2];EGL.contextAttributes.depth=s>0}else if(12326==o){var c=HEAP32[t+4>>2];EGL.contextAttributes.stencil=c>0}else if(12337==o){var l=HEAP32[t+4>>2];EGL.contextAttributes.antialias=l>0}else if(12338==o){l=HEAP32[t+4>>2];EGL.contextAttributes.antialias=1==l}else if(12544==o){var u=HEAP32[t+4>>2];EGL.contextAttributes.lowLatency=12547!=u}else if(12344==o)break;t+=8}return r&&n||i?(i&&(HEAP32[i>>2]=1),r&&n>0&&(HEAP32[r>>2]=62002),EGL.setErrorCode(12288),1):(EGL.setErrorCode(12300),0)}};function _eglBindAPI(e){return 12448==e?(EGL.setErrorCode(12288),1):(EGL.setErrorCode(12300),0)}function _eglChooseConfig(e,t,r,n,i){return EGL.chooseConfig(e,t,r,n,i)}function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(e){return!!(e.dibvbi=e.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(e){return!!(e.mdibvbi=e.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw(e){return!!(e.multiDrawWebgl=e.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function(e){GL.lastError||(GL.lastError=e)},getNewId:function(e){for(var t=GL.counter++,r=e.length;r<t;r++)e[r]=null;return t},MAX_TEMP_BUFFER_SIZE:2097152,numTempVertexBuffersPerSize:64,log2ceilLookup:function(e){return 32-Math.clz32(0===e?0:e-1)},generateTempBuffers:function(e,t){var r=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);t.tempVertexBufferCounters1=[],t.tempVertexBufferCounters2=[],t.tempVertexBufferCounters1.length=t.tempVertexBufferCounters2.length=r+1,t.tempVertexBuffers1=[],t.tempVertexBuffers2=[],t.tempVertexBuffers1.length=t.tempVertexBuffers2.length=r+1,t.tempIndexBuffers=[],t.tempIndexBuffers.length=r+1;for(var n=0;n<=r;++n){t.tempIndexBuffers[n]=null,t.tempVertexBufferCounters1[n]=t.tempVertexBufferCounters2[n]=0;var i=GL.numTempVertexBuffersPerSize;t.tempVertexBuffers1[n]=[],t.tempVertexBuffers2[n]=[];var o=t.tempVertexBuffers1[n],a=t.tempVertexBuffers2[n];o.length=a.length=i;for(var s=0;s<i;++s)o[s]=a[s]=null}if(e){t.tempQuadIndexBuffer=GLctx.createBuffer(),t.GLctx.bindBuffer(34963,t.tempQuadIndexBuffer);for(var c=GL.MAX_TEMP_BUFFER_SIZE>>1,l=new Uint16Array(c),u=(n=0,0);!(l[n++]=u,n>=c||(l[n++]=u+1,n>=c)||(l[n++]=u+2,n>=c)||(l[n++]=u,n>=c)||(l[n++]=u+2,n>=c)||(l[n++]=u+3,n>=c));)u+=4;t.GLctx.bufferData(34963,l,35044),t.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:function(e){var t=GL.log2ceilLookup(e),r=GL.currentContext.tempVertexBuffers1[t],n=GL.currentContext.tempVertexBufferCounters1[t];GL.currentContext.tempVertexBufferCounters1[t]=GL.currentContext.tempVertexBufferCounters1[t]+1&GL.numTempVertexBuffersPerSize-1;var i=r[n];if(i)return i;var o=GLctx.getParameter(34964);return r[n]=GLctx.createBuffer(),GLctx.bindBuffer(34962,r[n]),GLctx.bufferData(34962,1<<t,35048),GLctx.bindBuffer(34962,o),r[n]},getTempIndexBuffer:function(e){var t=GL.log2ceilLookup(e),r=GL.currentContext.tempIndexBuffers[t];if(r)return r;var n=GLctx.getParameter(34965);return GL.currentContext.tempIndexBuffers[t]=GLctx.createBuffer(),GLctx.bindBuffer(34963,GL.currentContext.tempIndexBuffers[t]),GLctx.bufferData(34963,1<<t,35048),GLctx.bindBuffer(34963,n),GL.currentContext.tempIndexBuffers[t]},newRenderingFrameStarted:function(){if(GL.currentContext){var e=GL.currentContext.tempVertexBuffers1;GL.currentContext.tempVertexBuffers1=GL.currentContext.tempVertexBuffers2,GL.currentContext.tempVertexBuffers2=e,e=GL.currentContext.tempVertexBufferCounters1,GL.currentContext.tempVertexBufferCounters1=GL.currentContext.tempVertexBufferCounters2,GL.currentContext.tempVertexBufferCounters2=e;for(var t=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE),r=0;r<=t;++r)GL.currentContext.tempVertexBufferCounters1[r]=0}},getSource:function(e,t,r,n){for(var i="",o=0;o<t;++o){var a=n?HEAP32[n+4*o>>2]:-1;i+=UTF8ToString(HEAP32[r+4*o>>2],a<0?void 0:a)}return i},calcBufLength:function(e,t,r,n){return r>0?n*r:e*GL.byteSizeByType[t-GL.byteSizeByTypeRoot]*n},usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function(e){GL.resetBufferBinding=!1;for(var t=0;t<GL.currentContext.maxVertexAttribs;++t){var r=GL.currentContext.clientBuffers[t];if(r.clientside&&r.enabled){GL.resetBufferBinding=!0;var n=GL.calcBufLength(r.size,r.type,r.stride,e),i=GL.getTempVertexBuffer(n);GLctx.bindBuffer(34962,i),GLctx.bufferSubData(34962,0,HEAPU8.subarray(r.ptr,r.ptr+n)),r.vertexAttribPointerAdaptor.call(GLctx,t,r.size,r.type,r.normalized,r.stride,0)}}},postDrawHandleClientVertexAttribBindings:function(){GL.resetBufferBinding&&GLctx.bindBuffer(34962,GL.buffers[GLctx.currentArrayBufferBinding])},createContext:function(e,t){if(!e.getContextSafariWebGL2Fixed){e.getContextSafariWebGL2Fixed=e.getContext,e.getContext=function(t,r){var n=e.getContextSafariWebGL2Fixed(t,r);return"webgl"==t==n instanceof WebGLRenderingContext?n:null}}var r=e.getContext("webgl2",t);return r?GL.registerContext(r,t):0},registerContext:function(e,t){var r=GL.getNewId(GL.contexts),n={handle:r,attributes:t,version:t.majorVersion,GLctx:e};e.canvas&&(e.canvas.GLctxObject=n),GL.contexts[r]=n,(void 0===t.enableExtensionsByDefault||t.enableExtensionsByDefault)&&GL.initExtensions(n),n.maxVertexAttribs=n.GLctx.getParameter(34921),n.clientBuffers=[];for(var i=0;i<n.maxVertexAttribs;i++)n.clientBuffers[i]={enabled:!1,clientside:!1,size:0,type:0,normalized:0,stride:0,ptr:0,vertexAttribPointerAdaptor:null};return GL.generateTempBuffers(!1,n),r},makeContextCurrent:function(e){return GL.currentContext=GL.contexts[e],Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx,!(e&&!GLctx)},getContext:function(e){return GL.contexts[e]},deleteContext:function(e){GL.currentContext===GL.contexts[e]&&(GL.currentContext=null),"object"==typeof JSEvents&&JSEvents.removeAllHandlersOnTarget(GL.contexts[e].GLctx.canvas),GL.contexts[e]&&GL.contexts[e].GLctx.canvas&&(GL.contexts[e].GLctx.canvas.GLctxObject=void 0),GL.contexts[e]=null},initExtensions:function(e){if(e||(e=GL.currentContext),!e.initExtensionsDone){e.initExtensionsDone=!0;var t=e.GLctx;__webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(t),__webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(t),e.version>=2&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query_webgl2")),(e.version<2||!t.disjointTimerQueryExt)&&(t.disjointTimerQueryExt=t.getExtension("EXT_disjoint_timer_query")),__webgl_enable_WEBGL_multi_draw(t),(t.getSupportedExtensions()||[]).forEach((function(e){e.includes("lose_context")||e.includes("debug")||t.getExtension(e)}))}}};function _eglCreateContext(e,t,r,n){if(62e3!=e)return EGL.setErrorCode(12296),0;for(var i=1;;){var o=HEAP32[n>>2];if(12440!=o){if(12344==o)break;return EGL.setErrorCode(12292),0}i=HEAP32[n+4>>2],n+=8}return i<2||i>3?(EGL.setErrorCode(12293),0):(EGL.contextAttributes.majorVersion=i-1,EGL.contextAttributes.minorVersion=0,EGL.context=GL.createContext(Module.canvas,EGL.contextAttributes),0!=EGL.context?(EGL.setErrorCode(12288),GL.makeContextCurrent(EGL.context),Module.useWebGL=!0,Browser.moduleContextCreatedCallbacks.forEach((function(e){e()})),GL.makeContextCurrent(null),62004):(EGL.setErrorCode(12297),0))}function _eglCreateWindowSurface(e,t,r,n){return 62e3!=e?(EGL.setErrorCode(12296),0):62002!=t?(EGL.setErrorCode(12293),0):(EGL.setErrorCode(12288),62006)}function _eglDestroyContext(e,t){return 62e3!=e?(EGL.setErrorCode(12296),0):62004!=t?(EGL.setErrorCode(12294),0):(GL.deleteContext(EGL.context),EGL.setErrorCode(12288),EGL.currentContext==t&&(EGL.currentContext=0),1)}function _eglDestroySurface(e,t){return 62e3!=e?(EGL.setErrorCode(12296),0):62006!=t?(EGL.setErrorCode(12301),1):(EGL.currentReadSurface==t&&(EGL.currentReadSurface=0),EGL.currentDrawSurface==t&&(EGL.currentDrawSurface=0),EGL.setErrorCode(12288),1)}function _eglGetConfigAttrib(e,t,r,n){if(62e3!=e)return EGL.setErrorCode(12296),0;if(62002!=t)return EGL.setErrorCode(12293),0;if(!n)return EGL.setErrorCode(12300),0;switch(EGL.setErrorCode(12288),r){case 12320:return HEAP32[n>>2]=EGL.contextAttributes.alpha?32:24,1;case 12321:return HEAP32[n>>2]=EGL.contextAttributes.alpha?8:0,1;case 12322:case 12323:case 12324:return HEAP32[n>>2]=8,1;case 12325:return HEAP32[n>>2]=EGL.contextAttributes.depth?24:0,1;case 12326:return HEAP32[n>>2]=EGL.contextAttributes.stencil?8:0,1;case 12327:case 12335:case 12340:return HEAP32[n>>2]=12344,1;case 12328:return HEAP32[n>>2]=62002,1;case 12329:case 12333:case 12334:case 12345:case 12346:case 12347:case 12349:case 12350:case 12354:return HEAP32[n>>2]=0,1;case 12330:case 12332:return HEAP32[n>>2]=4096,1;case 12331:return HEAP32[n>>2]=16777216,1;case 12337:return HEAP32[n>>2]=EGL.contextAttributes.antialias?4:0,1;case 12338:return HEAP32[n>>2]=EGL.contextAttributes.antialias?1:0,1;case 12339:case 12352:return HEAP32[n>>2]=4,1;case 12341:case 12342:case 12343:return HEAP32[n>>2]=-1,1;case 12348:return HEAP32[n>>2]=1,1;case 12351:return HEAP32[n>>2]=12430,1;default:return EGL.setErrorCode(12292),0}}function _eglGetDisplay(e){return EGL.setErrorCode(12288),62e3}function _eglGetError(){return EGL.errorCode}function _eglInitialize(e,t,r){return 62e3!=e?(EGL.setErrorCode(12296),0):(t&&(HEAP32[t>>2]=1),r&&(HEAP32[r>>2]=4),EGL.defaultDisplayInitialized=!0,EGL.setErrorCode(12288),1)}function _eglMakeCurrent(e,t,r,n){return 62e3!=e?(EGL.setErrorCode(12296),0):0!=n&&62004!=n?(EGL.setErrorCode(12294),0):0!=r&&62006!=r||0!=t&&62006!=t?(EGL.setErrorCode(12301),0):(GL.makeContextCurrent(n?EGL.context:null),EGL.currentContext=n,EGL.currentDrawSurface=t,EGL.currentReadSurface=r,EGL.setErrorCode(12288),1)}function allocateUTF8(e){var t=lengthBytesUTF8(e)+1,r=_malloc(t);return r&&stringToUTF8Array(e,HEAP8,r,t),r}function _eglQueryString(e,t){if(62e3!=e)return EGL.setErrorCode(12296),0;if(EGL.setErrorCode(12288),EGL.stringCache[t])return EGL.stringCache[t];var r;switch(t){case 12371:r=allocateUTF8("Emscripten");break;case 12372:r=allocateUTF8("1.4 Emscripten EGL");break;case 12373:r=allocateUTF8("");break;case 12429:r=allocateUTF8("OpenGL_ES");break;default:return EGL.setErrorCode(12300),0}return EGL.stringCache[t]=r,r}function _eglSwapBuffers(){if(EGL.defaultDisplayInitialized)if(Module.ctx){if(!Module.ctx.isContextLost())return EGL.setErrorCode(12288),1;EGL.setErrorCode(12302)}else EGL.setErrorCode(12290);else EGL.setErrorCode(12289);return 0}function _eglSwapInterval(e,t){return 62e3!=e?(EGL.setErrorCode(12296),0):(0==t?_emscripten_set_main_loop_timing(0,0):_emscripten_set_main_loop_timing(1,t),EGL.setErrorCode(12288),1)}function _eglTerminate(e){return 62e3!=e?(EGL.setErrorCode(12296),0):(EGL.currentContext=0,EGL.currentReadSurface=0,EGL.currentDrawSurface=0,EGL.defaultDisplayInitialized=!1,EGL.setErrorCode(12288),1)}function _eglWaitClient(){return EGL.setErrorCode(12288),1}var _eglWaitGL=_eglWaitClient;function _eglWaitNative(e){return EGL.setErrorCode(12288),1}var readEmAsmArgsArray=[];function readEmAsmArgs(e,t){var r;for(assert(Array.isArray(readEmAsmArgsArray)),assert(t%16==0),readEmAsmArgsArray.length=0,t>>=2;r=HEAPU8[e++];){var n=String.fromCharCode(r),i=["d","f","i"];assert(i.includes(n),"Invalid character "+r+'("'+n+'") in readEmAsmArgs! Use only ['+i+'], and do not specify "v" for void return argument.'),t+=105!=r&t,readEmAsmArgsArray.push(105==r?HEAP32[t]:HEAPF64[t++>>1]),++t}return readEmAsmArgsArray}function runEmAsmFunction(e,t,r){var n=readEmAsmArgs(t,r);return ASM_CONSTS.hasOwnProperty(e)||abort("No EM_ASM constant found at address "+e),ASM_CONSTS[e].apply(null,n)}function _emscripten_asm_const_int(e,t,r){return runEmAsmFunction(e,t,r)}function runMainThreadEmAsm(e,t,r,n){var i=readEmAsmArgs(t,r);return ASM_CONSTS.hasOwnProperty(e)||abort("No EM_ASM constant found at address "+e),ASM_CONSTS[e].apply(null,i)}function _emscripten_asm_const_int_sync_on_main_thread(e,t,r){return runMainThreadEmAsm(e,t,r,1)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause(),Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var e=JSEvents.eventHandlers.length-1;e>=0;--e)JSEvents._removeHandler(e);JSEvents.eventHandlers=[],JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){JSEvents.removeEventListenersRegistered||(__ATEXIT__.push(JSEvents.removeAllEventListeners),JSEvents.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(e,t,r){function n(e,t){if(e.length!=t.length)return!1;for(var r in e)if(e[r]!=t[r])return!1;return!0}for(var i in JSEvents.deferredCalls){var o=JSEvents.deferredCalls[i];if(o.targetFunction==e&&n(o.argsList,r))return}JSEvents.deferredCalls.push({targetFunction:e,precedence:t,argsList:r}),JSEvents.deferredCalls.sort((function(e,t){return e.precedence<t.precedence}))},removeDeferredCalls:function(e){for(var t=0;t<JSEvents.deferredCalls.length;++t)JSEvents.deferredCalls[t].targetFunction==e&&(JSEvents.deferredCalls.splice(t,1),--t)},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(JSEvents.canPerformEventHandlerRequests())for(var e=0;e<JSEvents.deferredCalls.length;++e){var t=JSEvents.deferredCalls[e];JSEvents.deferredCalls.splice(e,1),--e,t.targetFunction.apply(null,t.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(e,t){for(var r=0;r<JSEvents.eventHandlers.length;++r)JSEvents.eventHandlers[r].target!=e||t&&t!=JSEvents.eventHandlers[r].eventTypeString||JSEvents._removeHandler(r--)},_removeHandler:function(e){var t=JSEvents.eventHandlers[e];t.target.removeEventListener(t.eventTypeString,t.eventListenerFunc,t.useCapture),JSEvents.eventHandlers.splice(e,1)},registerOrRemoveHandler:function(e){var t=function(t){++JSEvents.inEventHandler,JSEvents.currentEventHandler=e,JSEvents.runDeferredCalls(),e.handlerFunc(t),JSEvents.runDeferredCalls(),--JSEvents.inEventHandler};if(e.callbackfunc)e.eventListenerFunc=t,e.target.addEventListener(e.eventTypeString,t,e.useCapture),JSEvents.eventHandlers.push(e),JSEvents.registerRemoveEventListeners();else for(var r=0;r<JSEvents.eventHandlers.length;++r)JSEvents.eventHandlers[r].target==e.target&&JSEvents.eventHandlers[r].eventTypeString==e.eventTypeString&&JSEvents._removeHandler(r--)},getNodeNameForTarget:function(e){return e?e==window?"#window":e==screen?"#screen":e&&e.nodeName?e.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}},currentFullscreenStrategy={};function maybeCStringToJsString(e){return e>2?UTF8ToString(e):e}var specialHTMLTargets=[0,"undefined"!=typeof document?document:0,"undefined"!=typeof window?window:0];function findEventTarget(e){return e=maybeCStringToJsString(e),specialHTMLTargets[e]||("undefined"!=typeof document?document.querySelector(e):void 0)}function findCanvasEventTarget(e){return findEventTarget(e)}function _emscripten_get_canvas_element_size(e,t,r){var n=findCanvasEventTarget(e);if(!n)return-4;HEAP32[t>>2]=n.width,HEAP32[r>>2]=n.height}function getCanvasElementSize(e){return withStackSave((function(){var t=stackAlloc(8),r=t+4,n=stackAlloc(e.id.length+1);stringToUTF8(e.id,n,e.id.length+1);_emscripten_get_canvas_element_size(n,t,r);return[HEAP32[t>>2],HEAP32[r>>2]]}))}function _emscripten_set_canvas_element_size(e,t,r){var n=findCanvasEventTarget(e);return n?(n.width=t,n.height=r,0):-4}function setCanvasElementSize(e,t,r){e.controlTransferredOffscreen?withStackSave((function(){var n=stackAlloc(e.id.length+1);stringToUTF8(e.id,n,e.id.length+1),_emscripten_set_canvas_element_size(n,t,r)})):(e.width=t,e.height=r)}function registerRestoreOldStyle(e){var t=getCanvasElementSize(e),r=t[0],n=t[1],i=e.style.width,o=e.style.height,a=e.style.backgroundColor,s=document.body.style.backgroundColor,c=e.style.paddingLeft,l=e.style.paddingRight,u=e.style.paddingTop,d=e.style.paddingBottom,m=e.style.marginLeft,f=e.style.marginRight,p=e.style.marginTop,_=e.style.marginBottom,g=document.body.style.margin,h=document.documentElement.style.overflow,v=document.body.scroll,E=e.style.imageRendering;function b(){document.fullscreenElement||document.webkitFullscreenElement||(document.removeEventListener("fullscreenchange",b),document.removeEventListener("webkitfullscreenchange",b),setCanvasElementSize(e,r,n),e.style.width=i,e.style.height=o,e.style.backgroundColor=a,s||(document.body.style.backgroundColor="white"),document.body.style.backgroundColor=s,e.style.paddingLeft=c,e.style.paddingRight=l,e.style.paddingTop=u,e.style.paddingBottom=d,e.style.marginLeft=m,e.style.marginRight=f,e.style.marginTop=p,e.style.marginBottom=_,document.body.style.margin=g,document.documentElement.style.overflow=h,document.body.scroll=v,e.style.imageRendering=E,e.GLctxObject&&e.GLctxObject.GLctx.viewport(0,0,r,n),currentFullscreenStrategy.canvasResizedCallback&&getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData))}return document.addEventListener("fullscreenchange",b),document.addEventListener("webkitfullscreenchange",b),b}function setLetterbox(e,t,r){e.style.paddingLeft=e.style.paddingRight=r+"px",e.style.paddingTop=e.style.paddingBottom=t+"px"}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0}}function JSEvents_resizeCanvasForFullscreen(e,t){var r=registerRestoreOldStyle(e),n=t.softFullscreen?innerWidth:screen.width,i=t.softFullscreen?innerHeight:screen.height,o=getBoundingClientRect(e),a=o.width,s=o.height,c=getCanvasElementSize(e),l=c[0],u=c[1];if(3==t.scaleMode)setLetterbox(e,(i-s)/2,(n-a)/2),n=a,i=s;else if(2==t.scaleMode)if(n*u<l*i){var d=u*n/l;setLetterbox(e,(i-d)/2,0),i=d}else{var m=l*i/u;setLetterbox(e,0,(n-m)/2),n=m}e.style.backgroundColor||(e.style.backgroundColor="black"),document.body.style.backgroundColor||(document.body.style.backgroundColor="black"),e.style.width=n+"px",e.style.height=i+"px",1==t.filteringMode&&(e.style.imageRendering="optimizeSpeed",e.style.imageRendering="-moz-crisp-edges",e.style.imageRendering="-o-crisp-edges",e.style.imageRendering="-webkit-optimize-contrast",e.style.imageRendering="optimize-contrast",e.style.imageRendering="crisp-edges",e.style.imageRendering="pixelated");var f=2==t.canvasResolutionScaleMode?devicePixelRatio:1;if(0!=t.canvasResolutionScaleMode){var p=n*f|0,_=i*f|0;setCanvasElementSize(e,p,_),e.GLctxObject&&e.GLctxObject.GLctx.viewport(0,0,p,_)}return r}function JSEvents_requestFullscreen(e,t){if(0==t.scaleMode&&0==t.canvasResolutionScaleMode||JSEvents_resizeCanvasForFullscreen(e,t),e.requestFullscreen)e.requestFullscreen();else{if(!e.webkitRequestFullscreen)return JSEvents.fullscreenEnabled()?-3:-1;e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}return currentFullscreenStrategy=t,t.canvasResizedCallback&&getWasmTableEntry(t.canvasResizedCallback)(37,0,t.canvasResizedCallbackUserData),0}function _emscripten_exit_fullscreen(){if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var e=specialHTMLTargets[1];if(e.exitFullscreen)e.fullscreenElement&&e.exitFullscreen();else{if(!e.webkitExitFullscreen)return-1;e.webkitFullscreenElement&&e.webkitExitFullscreen()}return 0}function requestPointerLock(e){return e.requestPointerLock?(e.requestPointerLock(),0):document.body.requestPointerLock?-3:-1}function _emscripten_exit_pointerlock(){return JSEvents.removeDeferredCalls(requestPointerLock),document.exitPointerLock?(document.exitPointerLock(),0):-1}function _emscripten_get_device_pixel_ratio(){return"number"==typeof devicePixelRatio&&devicePixelRatio||1}function _emscripten_get_element_css_size(e,t,r){if(!(e=findEventTarget(e)))return-4;var n=getBoundingClientRect(e);return HEAPF64[t>>3]=n.width,HEAPF64[r>>3]=n.height,0}function fillGamepadEventData(e,t){HEAPF64[e>>3]=t.timestamp;for(var r=0;r<t.axes.length;++r)HEAPF64[e+8*r+16>>3]=t.axes[r];for(r=0;r<t.buttons.length;++r)"object"==typeof t.buttons[r]?HEAPF64[e+8*r+528>>3]=t.buttons[r].value:HEAPF64[e+8*r+528>>3]=t.buttons[r];for(r=0;r<t.buttons.length;++r)"object"==typeof t.buttons[r]?HEAP32[e+4*r+1040>>2]=t.buttons[r].pressed:HEAP32[e+4*r+1040>>2]=1==t.buttons[r];HEAP32[e+1296>>2]=t.connected,HEAP32[e+1300>>2]=t.index,HEAP32[e+8>>2]=t.axes.length,HEAP32[e+12>>2]=t.buttons.length,stringToUTF8(t.id,e+1304,64),stringToUTF8(t.mapping,e+1368,64)}function _emscripten_get_gamepad_status(e,t){if(!JSEvents.lastGamepadState)throw"emscripten_get_gamepad_status() can only be called after having first called emscripten_sample_gamepad_data() and that function has returned EMSCRIPTEN_RESULT_SUCCESS!";return e<0||e>=JSEvents.lastGamepadState.length?-5:JSEvents.lastGamepadState[e]?(fillGamepadEventData(t,JSEvents.lastGamepadState[e]),0):-7}function _emscripten_get_num_gamepads(){if(!JSEvents.lastGamepadState)throw"emscripten_get_num_gamepads() can only be called after having first called emscripten_sample_gamepad_data() and that function has returned EMSCRIPTEN_RESULT_SUCCESS!";return JSEvents.lastGamepadState.length}function _emscripten_get_screen_size(e,t){HEAP32[e>>2]=screen.width,HEAP32[t>>2]=screen.height}function _emscripten_glActiveTexture(e){GLctx.activeTexture(e)}function _emscripten_glAttachShader(e,t){GLctx.attachShader(GL.programs[e],GL.shaders[t])}function _emscripten_glBeginQuery(e,t){GLctx.beginQuery(e,GL.queries[t])}function _emscripten_glBeginQueryEXT(e,t){GLctx.disjointTimerQueryExt.beginQueryEXT(e,GL.queries[t])}function _emscripten_glBeginTransformFeedback(e){GLctx.beginTransformFeedback(e)}function _emscripten_glBindAttribLocation(e,t,r){GLctx.bindAttribLocation(GL.programs[e],t,UTF8ToString(r))}function _emscripten_glBindBuffer(e,t){34962==e?GLctx.currentArrayBufferBinding=t:34963==e&&(GLctx.currentElementArrayBufferBinding=t),35051==e?GLctx.currentPixelPackBufferBinding=t:35052==e&&(GLctx.currentPixelUnpackBufferBinding=t),GLctx.bindBuffer(e,GL.buffers[t])}function _emscripten_glBindBufferBase(e,t,r){GLctx.bindBufferBase(e,t,GL.buffers[r])}function _emscripten_glBindBufferRange(e,t,r,n,i){GLctx.bindBufferRange(e,t,GL.buffers[r],n,i)}function _emscripten_glBindFramebuffer(e,t){GLctx.bindFramebuffer(e,GL.framebuffers[t])}function _emscripten_glBindRenderbuffer(e,t){GLctx.bindRenderbuffer(e,GL.renderbuffers[t])}function _emscripten_glBindSampler(e,t){GLctx.bindSampler(e,GL.samplers[t])}function _emscripten_glBindTexture(e,t){GLctx.bindTexture(e,GL.textures[t])}function _emscripten_glBindTransformFeedback(e,t){GLctx.bindTransformFeedback(e,GL.transformFeedbacks[t])}function _emscripten_glBindVertexArray(e){GLctx.bindVertexArray(GL.vaos[e]);var t=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=t?0|t.name:0}function _emscripten_glBindVertexArrayOES(e){GLctx.bindVertexArray(GL.vaos[e]);var t=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=t?0|t.name:0}function _emscripten_glBlendColor(e,t,r,n){GLctx.blendColor(e,t,r,n)}function _emscripten_glBlendEquation(e){GLctx.blendEquation(e)}function _emscripten_glBlendEquationSeparate(e,t){GLctx.blendEquationSeparate(e,t)}function _emscripten_glBlendFunc(e,t){GLctx.blendFunc(e,t)}function _emscripten_glBlendFuncSeparate(e,t,r,n){GLctx.blendFuncSeparate(e,t,r,n)}function _emscripten_glBlitFramebuffer(e,t,r,n,i,o,a,s,c,l){GLctx.blitFramebuffer(e,t,r,n,i,o,a,s,c,l)}function _emscripten_glBufferData(e,t,r,n){r&&t?GLctx.bufferData(e,HEAPU8,n,r,t):GLctx.bufferData(e,t,n)}function _emscripten_glBufferSubData(e,t,r,n){r&&GLctx.bufferSubData(e,t,HEAPU8,n,r)}function _emscripten_glCheckFramebufferStatus(e){return GLctx.checkFramebufferStatus(e)}function _emscripten_glClear(e){GLctx.clear(e)}function _emscripten_glClearBufferfi(e,t,r,n){GLctx.clearBufferfi(e,t,r,n)}function _emscripten_glClearBufferfv(e,t,r){GLctx.clearBufferfv(e,t,HEAPF32,r>>2)}function _emscripten_glClearBufferiv(e,t,r){GLctx.clearBufferiv(e,t,HEAP32,r>>2)}function _emscripten_glClearBufferuiv(e,t,r){GLctx.clearBufferuiv(e,t,HEAPU32,r>>2)}function _emscripten_glClearColor(e,t,r,n){GLctx.clearColor(e,t,r,n)}function _emscripten_glClearDepthf(e){GLctx.clearDepth(e)}function _emscripten_glClearStencil(e){GLctx.clearStencil(e)}function convertI32PairToI53(e,t){return assert(t===(0|t)),(e>>>0)+4294967296*t}function _emscripten_glClientWaitSync(e,t,r,n){return GLctx.clientWaitSync(GL.syncs[e],t,convertI32PairToI53(r,n))}function _emscripten_glColorMask(e,t,r,n){GLctx.colorMask(!!e,!!t,!!r,!!n)}function _emscripten_glCompileShader(e){GLctx.compileShader(GL.shaders[e])}function _emscripten_glCompressedTexImage2D(e,t,r,n,i,o,a,s){GLctx.currentPixelUnpackBufferBinding||!a?GLctx.compressedTexImage2D(e,t,r,n,i,o,a,s):GLctx.compressedTexImage2D(e,t,r,n,i,o,HEAPU8,s,a)}function _emscripten_glCompressedTexImage3D(e,t,r,n,i,o,a,s,c){GLctx.currentPixelUnpackBufferBinding?GLctx.compressedTexImage3D(e,t,r,n,i,o,a,s,c):GLctx.compressedTexImage3D(e,t,r,n,i,o,a,HEAPU8,c,s)}function _emscripten_glCompressedTexSubImage2D(e,t,r,n,i,o,a,s,c){GLctx.currentPixelUnpackBufferBinding||!s?GLctx.compressedTexSubImage2D(e,t,r,n,i,o,a,s,c):GLctx.compressedTexSubImage2D(e,t,r,n,i,o,a,HEAPU8,c,s)}function _emscripten_glCompressedTexSubImage3D(e,t,r,n,i,o,a,s,c,l,u){GLctx.currentPixelUnpackBufferBinding?GLctx.compressedTexSubImage3D(e,t,r,n,i,o,a,s,c,l,u):GLctx.compressedTexSubImage3D(e,t,r,n,i,o,a,s,c,HEAPU8,u,l)}function _emscripten_glCopyBufferSubData(e,t,r,n,i){GLctx.copyBufferSubData(e,t,r,n,i)}function _emscripten_glCopyTexImage2D(e,t,r,n,i,o,a,s){GLctx.copyTexImage2D(e,t,r,n,i,o,a,s)}function _emscripten_glCopyTexSubImage2D(e,t,r,n,i,o,a,s){GLctx.copyTexSubImage2D(e,t,r,n,i,o,a,s)}function _emscripten_glCopyTexSubImage3D(e,t,r,n,i,o,a,s,c){GLctx.copyTexSubImage3D(e,t,r,n,i,o,a,s,c)}function _emscripten_glCreateProgram(){var e=GL.getNewId(GL.programs),t=GLctx.createProgram();return t.name=e,t.maxUniformLength=t.maxAttributeLength=t.maxUniformBlockNameLength=0,t.uniformIdCounter=1,GL.programs[e]=t,e}function _emscripten_glCreateShader(e){var t=GL.getNewId(GL.shaders);return GL.shaders[t]=GLctx.createShader(e),t}function _emscripten_glCullFace(e){GLctx.cullFace(e)}function _emscripten_glDeleteBuffers(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.buffers[n];i&&(GLctx.deleteBuffer(i),i.name=0,GL.buffers[n]=null,n==GLctx.currentArrayBufferBinding&&(GLctx.currentArrayBufferBinding=0),n==GLctx.currentElementArrayBufferBinding&&(GLctx.currentElementArrayBufferBinding=0),n==GLctx.currentPixelPackBufferBinding&&(GLctx.currentPixelPackBufferBinding=0),n==GLctx.currentPixelUnpackBufferBinding&&(GLctx.currentPixelUnpackBufferBinding=0))}}function _emscripten_glDeleteFramebuffers(e,t){for(var r=0;r<e;++r){var n=HEAP32[t+4*r>>2],i=GL.framebuffers[n];i&&(GLctx.deleteFramebuffer(i),i.name=0,GL.framebuffers[n]=null)}}function _emscripten_glDeleteProgram(e){if(e){var t=GL.programs[e];t?(GLctx.deleteProgram(t),t.name=0,GL.programs[e]=null):GL.recordError(1281)}}function _emscripten_glDeleteQueries(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.queries[n];i&&(GLctx.deleteQuery(i),GL.queries[n]=null)}}function _emscripten_glDeleteQueriesEXT(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.queries[n];i&&(GLctx.disjointTimerQueryExt.deleteQueryEXT(i),GL.queries[n]=null)}}function _emscripten_glDeleteRenderbuffers(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.renderbuffers[n];i&&(GLctx.deleteRenderbuffer(i),i.name=0,GL.renderbuffers[n]=null)}}function _emscripten_glDeleteSamplers(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.samplers[n];i&&(GLctx.deleteSampler(i),i.name=0,GL.samplers[n]=null)}}function _emscripten_glDeleteShader(e){if(e){var t=GL.shaders[e];t?(GLctx.deleteShader(t),GL.shaders[e]=null):GL.recordError(1281)}}function _emscripten_glDeleteSync(e){if(e){var t=GL.syncs[e];t?(GLctx.deleteSync(t),t.name=0,GL.syncs[e]=null):GL.recordError(1281)}}function _emscripten_glDeleteTextures(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.textures[n];i&&(GLctx.deleteTexture(i),i.name=0,GL.textures[n]=null)}}function _emscripten_glDeleteTransformFeedbacks(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2],i=GL.transformFeedbacks[n];i&&(GLctx.deleteTransformFeedback(i),i.name=0,GL.transformFeedbacks[n]=null)}}function _emscripten_glDeleteVertexArrays(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2];GLctx.deleteVertexArray(GL.vaos[n]),GL.vaos[n]=null}}function _emscripten_glDeleteVertexArraysOES(e,t){for(var r=0;r<e;r++){var n=HEAP32[t+4*r>>2];GLctx.deleteVertexArray(GL.vaos[n]),GL.vaos[n]=null}}function _emscripten_glDepthFunc(e){GLctx.depthFunc(e)}function _emscripten_glDepthMask(e){GLctx.depthMask(!!e)}function _emscripten_glDepthRangef(e,t){GLctx.depthRange(e,t)}function _emscripten_glDetachShader(e,t){GLctx.detachShader(GL.programs[e],GL.shaders[t])}function _emscripten_glDisable(e){GLctx.disable(e)}function _emscripten_glDisableVertexAttribArray(e){GL.currentContext.clientBuffers[e].enabled=!1,GLctx.disableVertexAttribArray(e)}function _emscripten_glDrawArrays(e,t,r){GL.preDrawHandleClientVertexAttribBindings(t+r),GLctx.drawArrays(e,t,r),GL.postDrawHandleClientVertexAttribBindings()}function _emscripten_glDrawArraysInstanced(e,t,r,n){GLctx.drawArraysInstanced(e,t,r,n)}function _emscripten_glDrawArraysInstancedANGLE(e,t,r,n){GLctx.drawArraysInstanced(e,t,r,n)}function _emscripten_glDrawArraysInstancedARB(e,t,r,n){GLctx.drawArraysInstanced(e,t,r,n)}function _emscripten_glDrawArraysInstancedEXT(e,t,r,n){GLctx.drawArraysInstanced(e,t,r,n)}function _emscripten_glDrawArraysInstancedNV(e,t,r,n){GLctx.drawArraysInstanced(e,t,r,n)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffers(e,t){for(var r=tempFixedLengthArray[e],n=0;n<e;n++)r[n]=HEAP32[t+4*n>>2];GLctx.drawBuffers(r)}function _emscripten_glDrawBuffersEXT(e,t){for(var r=tempFixedLengthArray[e],n=0;n<e;n++)r[n]=HEAP32[t+4*n>>2];GLctx.drawBuffers(r)}function _emscripten_glDrawBuffersWEBGL(e,t){for(var r=tempFixedLengthArray[e],n=0;n<e;n++)r[n]=HEAP32[t+4*n>>2];GLctx.drawBuffers(r)}function _emscripten_glDrawElements(e,t,r,n){var i;if(!GLctx.currentElementArrayBufferBinding){var o=GL.calcBufLength(1,r,0,t);i=GL.getTempIndexBuffer(o),GLctx.bindBuffer(34963,i),GLctx.bufferSubData(34963,0,HEAPU8.subarray(n,n+o)),n=0}GL.preDrawHandleClientVertexAttribBindings(t),GLctx.drawElements(e,t,r,n),GL.postDrawHandleClientVertexAttribBindings(t),GLctx.currentElementArrayBufferBinding||GLctx.bindBuffer(34963,null)}function _emscripten_glDrawElementsInstanced(e,t,r,n,i){GLctx.drawElementsInstanced(e,t,r,n,i)}function _emscripten_glDrawElementsInstancedANGLE(e,t,r,n,i){GLctx.drawElementsInstanced(e,t,r,n,i)}function _emscripten_glDrawElementsInstancedARB(e,t,r,n,i){GLctx.drawElementsInstanced(e,t,r,n,i)}function _emscripten_glDrawElementsInstancedEXT(e,t,r,n,i){GLctx.drawElementsInstanced(e,t,r,n,i)}function _emscripten_glDrawElementsInstancedNV(e,t,r,n,i){GLctx.drawElementsInstanced(e,t,r,n,i)}function _glDrawElements(e,t,r,n){var i;if(!GLctx.currentElementArrayBufferBinding){var o=GL.calcBufLength(1,r,0,t);i=GL.getTempIndexBuffer(o),GLctx.bindBuffer(34963,i),GLctx.bufferSubData(34963,0,HEAPU8.subarray(n,n+o)),n=0}GL.preDrawHandleClientVertexAttribBindings(t),GLctx.drawElements(e,t,r,n),GL.postDrawHandleClientVertexAttribBindings(t),GLctx.currentElementArrayBufferBinding||GLctx.bindBuffer(34963,null)}function _emscripten_glDrawRangeElements(e,t,r,n,i,o){_glDrawElements(e,n,i,o)}function _emscripten_glEnable(e){GLctx.enable(e)}function _emscripten_glEnableVertexAttribArray(e){GL.currentContext.clientBuffers[e].enabled=!0,GLctx.enableVertexAttribArray(e)}function _emscripten_glEndQuery(e){GLctx.endQuery(e)}function _emscripten_glEndQueryEXT(e){GLctx.disjointTimerQueryExt.endQueryEXT(e)}function _emscripten_glEndTransformFeedback(){GLctx.endTransformFeedback()}function _emscripten_glFenceSync(e,t){var r=GLctx.fenceSync(e,t);if(r){var n=GL.getNewId(GL.syncs);return r.name=n,GL.syncs[n]=r,n}return 0}function _emscripten_glFinish(){GLctx.finish()}function _emscripten_glFlush(){GLctx.flush()}function emscriptenWebGLGetBufferBinding(e){switch(e){case 34962:e=34964;break;case 34963:e=34965;break;case 35051:e=35053;break;case 35052:e=35055;break;case 35982:e=35983;break;case 36662:e=36662;break;case 36663:e=36663;break;case 35345:e=35368}var t=GLctx.getParameter(e);return t?0|t.name:0}function emscriptenWebGLValidateMapBufferTarget(e){switch(e){case 34962:case 34963:case 36662:case 36663:case 35051:case 35052:case 35882:case 35982:case 35345:return!0;default:return!1}}function _emscripten_glFlushMappedBufferRange(e,t,r){if(!emscriptenWebGLValidateMapBufferTarget(e))return GL.recordError(1280),void err("GL_INVALID_ENUM in glFlushMappedBufferRange");var n=GL.mappedBuffers[emscriptenWebGLGetBufferBinding(e)];return n?16&n.access?t<0||r<0||t+r>n.length?(GL.recordError(1281),void err("invalid range in glFlushMappedBufferRange")):void GLctx.bufferSubData(e,n.offset,HEAPU8.subarray(n.mem+t,n.mem+t+r)):(GL.recordError(1282),void err("buffer was not mapped with GL_MAP_FLUSH_EXPLICIT_BIT in glFlushMappedBufferRange")):(GL.recordError(1282),void err("buffer was never mapped in glFlushMappedBufferRange"))}function _emscripten_glFramebufferRenderbuffer(e,t,r,n){GLctx.framebufferRenderbuffer(e,t,r,GL.renderbuffers[n])}function _emscripten_glFramebufferTexture2D(e,t,r,n,i){GLctx.framebufferTexture2D(e,t,r,GL.textures[n],i)}function _emscripten_glFramebufferTextureLayer(e,t,r,n,i){GLctx.framebufferTextureLayer(e,t,GL.textures[r],n,i)}function _emscripten_glFrontFace(e){GLctx.frontFace(e)}function __glGenObject(e,t,r,n){for(var i=0;i<e;i++){var o=GLctx[r](),a=o&&GL.getNewId(n);o?(o.name=a,n[a]=o):GL.recordError(1282),HEAP32[t+4*i>>2]=a}}function _emscripten_glGenBuffers(e,t){__glGenObject(e,t,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(e,t){__glGenObject(e,t,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueries(e,t){__glGenObject(e,t,"createQuery",GL.queries)}function _emscripten_glGenQueriesEXT(e,t){for(var r=0;r<e;r++){var n=GLctx.disjointTimerQueryExt.createQueryEXT();if(!n){for(GL.recordError(1282);r<e;)HEAP32[t+4*r++>>2]=0;return}var i=GL.getNewId(GL.queries);n.name=i,GL.queries[i]=n,HEAP32[t+4*r>>2]=i}}function _emscripten_glGenRenderbuffers(e,t){__glGenObject(e,t,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenSamplers(e,t){__glGenObject(e,t,"createSampler",GL.samplers)}function _emscripten_glGenTextures(e,t){__glGenObject(e,t,"createTexture",GL.textures)}function _emscripten_glGenTransformFeedbacks(e,t){__glGenObject(e,t,"createTransformFeedback",GL.transformFeedbacks)}function _emscripten_glGenVertexArrays(e,t){__glGenObject(e,t,"createVertexArray",GL.vaos)}function _emscripten_glGenVertexArraysOES(e,t){__glGenObject(e,t,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(e){GLctx.generateMipmap(e)}function __glGetActiveAttribOrUniform(e,t,r,n,i,o,a,s){t=GL.programs[t];var c=GLctx[e](t,r);if(c){var l=s&&stringToUTF8(c.name,s,n);i&&(HEAP32[i>>2]=l),o&&(HEAP32[o>>2]=c.size),a&&(HEAP32[a>>2]=c.type)}}function _emscripten_glGetActiveAttrib(e,t,r,n,i,o,a){__glGetActiveAttribOrUniform("getActiveAttrib",e,t,r,n,i,o,a)}function _emscripten_glGetActiveUniform(e,t,r,n,i,o,a){__glGetActiveAttribOrUniform("getActiveUniform",e,t,r,n,i,o,a)}function _emscripten_glGetActiveUniformBlockName(e,t,r,n,i){e=GL.programs[e];var o=GLctx.getActiveUniformBlockName(e,t);if(o)if(i&&r>0){var a=stringToUTF8(o,i,r);n&&(HEAP32[n>>2]=a)}else n&&(HEAP32[n>>2]=0)}function _emscripten_glGetActiveUniformBlockiv(e,t,r,n){if(n)if(e=GL.programs[e],35393!=r){var i=GLctx.getActiveUniformBlockParameter(e,t,r);if(null!==i)if(35395==r)for(var o=0;o<i.length;o++)HEAP32[n+4*o>>2]=i[o];else HEAP32[n>>2]=i}else{var a=GLctx.getActiveUniformBlockName(e,t);HEAP32[n>>2]=a.length+1}else GL.recordError(1281)}function _emscripten_glGetActiveUniformsiv(e,t,r,n,i){if(i)if(t>0&&0==r)GL.recordError(1281);else{e=GL.programs[e];for(var o=[],a=0;a<t;a++)o.push(HEAP32[r+4*a>>2]);var s=GLctx.getActiveUniforms(e,o,n);if(s){var c=s.length;for(a=0;a<c;a++)HEAP32[i+4*a>>2]=s[a]}}else GL.recordError(1281)}function _emscripten_glGetAttachedShaders(e,t,r,n){var i=GLctx.getAttachedShaders(GL.programs[e]),o=i.length;o>t&&(o=t),HEAP32[r>>2]=o;for(var a=0;a<o;++a){var s=GL.shaders.indexOf(i[a]);HEAP32[n+4*a>>2]=s}}function _emscripten_glGetAttribLocation(e,t){return GLctx.getAttribLocation(GL.programs[e],UTF8ToString(t))}function readI53FromI64(e){return HEAPU32[e>>2]+4294967296*HEAP32[e+4>>2]}function readI53FromU64(e){return HEAPU32[e>>2]+4294967296*HEAPU32[e+4>>2]}function writeI53ToI64(e,t){HEAPU32[e>>2]=t,HEAPU32[e+4>>2]=(t-HEAPU32[e>>2])/4294967296;var r=t>=0?readI53FromU64(e):readI53FromI64(e);r!=t&&warnOnce("writeI53ToI64() out of range: serialized JS Number "+t+" to Wasm heap as bytes lo="+ptrToString(HEAPU32[e>>2])+", hi="+ptrToString(HEAPU32[e+4>>2])+", which deserializes back to "+r+" instead!")}function emscriptenWebGLGet(e,t,r){if(t){var n=void 0;switch(e){case 36346:n=1;break;case 36344:return void(0!=r&&1!=r&&GL.recordError(1280));case 34814:case 36345:n=0;break;case 34466:var i=GLctx.getParameter(34467);n=i?i.length:0;break;case 33309:if(GL.currentContext.version<2)return void GL.recordError(1282);n=2*(GLctx.getSupportedExtensions()||[]).length;break;case 33307:case 33308:if(GL.currentContext.version<2)return void GL.recordError(1280);n=33307==e?3:0}if(void 0===n){var o=GLctx.getParameter(e);switch(typeof o){case"number":n=o;break;case"boolean":n=o?1:0;break;case"string":return void GL.recordError(1280);case"object":if(null===o)switch(e){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:n=0;break;default:return void GL.recordError(1280)}else{if(o instanceof Float32Array||o instanceof Uint32Array||o instanceof Int32Array||o instanceof Array){for(var a=0;a<o.length;++a)switch(r){case 0:HEAP32[t+4*a>>2]=o[a];break;case 2:HEAPF32[t+4*a>>2]=o[a];break;case 4:HEAP8[t+a>>0]=o[a]?1:0}return}try{n=0|o.name}catch(t){return GL.recordError(1280),void err("GL_INVALID_ENUM in glGet"+r+"v: Unknown object returned from WebGL getParameter("+e+")! (error: "+t+")")}}break;default:return GL.recordError(1280),void err("GL_INVALID_ENUM in glGet"+r+"v: Native code calling glGet"+r+"v("+e+") and it returns "+o+" of type "+typeof o+"!")}}switch(r){case 1:writeI53ToI64(t,n);break;case 0:HEAP32[t>>2]=n;break;case 2:HEAPF32[t>>2]=n;break;case 4:HEAP8[t>>0]=n?1:0}}else GL.recordError(1281)}function _emscripten_glGetBooleanv(e,t){emscriptenWebGLGet(e,t,4)}function _emscripten_glGetBufferParameteri64v(e,t,r){r?writeI53ToI64(r,GLctx.getBufferParameter(e,t)):GL.recordError(1281)}function _emscripten_glGetBufferParameteriv(e,t,r){r?HEAP32[r>>2]=GLctx.getBufferParameter(e,t):GL.recordError(1281)}function _emscripten_glGetBufferPointerv(e,t,r){if(35005==t){var n=0,i=GL.mappedBuffers[emscriptenWebGLGetBufferBinding(e)];i&&(n=i.mem),HEAP32[r>>2]=n}else GL.recordError(1280),err("GL_INVALID_ENUM in glGetBufferPointerv")}function _emscripten_glGetError(){var e=GLctx.getError()||GL.lastError;return GL.lastError=0,e}function _emscripten_glGetFloatv(e,t){emscriptenWebGLGet(e,t,2)}function _emscripten_glGetFragDataLocation(e,t){return GLctx.getFragDataLocation(GL.programs[e],UTF8ToString(t))}function _emscripten_glGetFramebufferAttachmentParameteriv(e,t,r,n){var i=GLctx.getFramebufferAttachmentParameter(e,t,r);(i instanceof WebGLRenderbuffer||i instanceof WebGLTexture)&&(i=0|i.name),HEAP32[n>>2]=i}function emscriptenWebGLGetIndexed(e,t,r,n){if(r){var i,o=GLctx.getIndexedParameter(e,t);switch(typeof o){case"boolean":i=o?1:0;break;case"number":i=o;break;case"object":if(null===o)switch(e){case 35983:case 35368:i=0;break;default:return void GL.recordError(1280)}else{if(!(o instanceof WebGLBuffer))return void GL.recordError(1280);i=0|o.name}break;default:return void GL.recordError(1280)}switch(n){case 1:writeI53ToI64(r,i);break;case 0:HEAP32[r>>2]=i;break;case 2:HEAPF32[r>>2]=i;break;case 4:HEAP8[r>>0]=i?1:0;break;default:throw"internal emscriptenWebGLGetIndexed() error, bad type: "+n}}else GL.recordError(1281)}function _emscripten_glGetInteger64i_v(e,t,r){emscriptenWebGLGetIndexed(e,t,r,1)}function _emscripten_glGetInteger64v(e,t){emscriptenWebGLGet(e,t,1)}function _emscripten_glGetIntegeri_v(e,t,r){emscriptenWebGLGetIndexed(e,t,r,0)}function _emscripten_glGetIntegerv(e,t){emscriptenWebGLGet(e,t,0)}function _emscripten_glGetInternalformativ(e,t,r,n,i){if(n<0)GL.recordError(1281);else if(i){var o=GLctx.getInternalformatParameter(e,t,r);if(null!==o)for(var a=0;a<o.length&&a<n;++a)HEAP32[i+4*a>>2]=o[a]}else GL.recordError(1281)}function _emscripten_glGetProgramBinary(e,t,r,n,i){GL.recordError(1282)}function _emscripten_glGetProgramInfoLog(e,t,r,n){var i=GLctx.getProgramInfoLog(GL.programs[e]);null===i&&(i="(unknown error)");var o=t>0&&n?stringToUTF8(i,n,t):0;r&&(HEAP32[r>>2]=o)}function _emscripten_glGetProgramiv(e,t,r){if(r)if(e>=GL.counter)GL.recordError(1281);else if(e=GL.programs[e],35716==t){var n=GLctx.getProgramInfoLog(e);null===n&&(n="(unknown error)"),HEAP32[r>>2]=n.length+1}else if(35719==t){if(!e.maxUniformLength)for(var i=0;i<GLctx.getProgramParameter(e,35718);++i)e.maxUniformLength=Math.max(e.maxUniformLength,GLctx.getActiveUniform(e,i).name.length+1);HEAP32[r>>2]=e.maxUniformLength}else if(35722==t){if(!e.maxAttributeLength)for(i=0;i<GLctx.getProgramParameter(e,35721);++i)e.maxAttributeLength=Math.max(e.maxAttributeLength,GLctx.getActiveAttrib(e,i).name.length+1);HEAP32[r>>2]=e.maxAttributeLength}else if(35381==t){if(!e.maxUniformBlockNameLength)for(i=0;i<GLctx.getProgramParameter(e,35382);++i)e.maxUniformBlockNameLength=Math.max(e.maxUniformBlockNameLength,GLctx.getActiveUniformBlockName(e,i).length+1);HEAP32[r>>2]=e.maxUniformBlockNameLength}else HEAP32[r>>2]=GLctx.getProgramParameter(e,t);else GL.recordError(1281)}function _emscripten_glGetQueryObjecti64vEXT(e,t,r){if(r){var n,i=GL.queries[e];writeI53ToI64(r,"boolean"==typeof(n=GL.currentContext.version<2?GLctx.disjointTimerQueryExt.getQueryObjectEXT(i,t):GLctx.getQueryParameter(i,t))?n?1:0:n)}else GL.recordError(1281)}function _emscripten_glGetQueryObjectivEXT(e,t,r){if(r){var n,i=GL.queries[e],o=GLctx.disjointTimerQueryExt.getQueryObjectEXT(i,t);n="boolean"==typeof o?o?1:0:o,HEAP32[r>>2]=n}else GL.recordError(1281)}function _emscripten_glGetQueryObjectui64vEXT(e,t,r){if(r){var n,i=GL.queries[e];writeI53ToI64(r,"boolean"==typeof(n=GL.currentContext.version<2?GLctx.disjointTimerQueryExt.getQueryObjectEXT(i,t):GLctx.getQueryParameter(i,t))?n?1:0:n)}else GL.recordError(1281)}function _emscripten_glGetQueryObjectuiv(e,t,r){if(r){var n,i=GL.queries[e],o=GLctx.getQueryParameter(i,t);n="boolean"==typeof o?o?1:0:o,HEAP32[r>>2]=n}else GL.recordError(1281)}function _emscripten_glGetQueryObjectuivEXT(e,t,r){if(r){var n,i=GL.queries[e],o=GLctx.disjointTimerQueryExt.getQueryObjectEXT(i,t);n="boolean"==typeof o?o?1:0:o,HEAP32[r>>2]=n}else GL.recordError(1281)}function _emscripten_glGetQueryiv(e,t,r){r?HEAP32[r>>2]=GLctx.getQuery(e,t):GL.recordError(1281)}function _emscripten_glGetQueryivEXT(e,t,r){r?HEAP32[r>>2]=GLctx.disjointTimerQueryExt.getQueryEXT(e,t):GL.recordError(1281)}function _emscripten_glGetRenderbufferParameteriv(e,t,r){r?HEAP32[r>>2]=GLctx.getRenderbufferParameter(e,t):GL.recordError(1281)}function _emscripten_glGetSamplerParameterfv(e,t,r){r?HEAPF32[r>>2]=GLctx.getSamplerParameter(GL.samplers[e],t):GL.recordError(1281)}function _emscripten_glGetSamplerParameteriv(e,t,r){r?HEAP32[r>>2]=GLctx.getSamplerParameter(GL.samplers[e],t):GL.recordError(1281)}function _emscripten_glGetShaderInfoLog(e,t,r,n){var i=GLctx.getShaderInfoLog(GL.shaders[e]);null===i&&(i="(unknown error)");var o=t>0&&n?stringToUTF8(i,n,t):0;r&&(HEAP32[r>>2]=o)}function _emscripten_glGetShaderPrecisionFormat(e,t,r,n){var i=GLctx.getShaderPrecisionFormat(e,t);HEAP32[r>>2]=i.rangeMin,HEAP32[r+4>>2]=i.rangeMax,HEAP32[n>>2]=i.precision}function _emscripten_glGetShaderSource(e,t,r,n){var i=GLctx.getShaderSource(GL.shaders[e]);if(i){var o=t>0&&n?stringToUTF8(i,n,t):0;r&&(HEAP32[r>>2]=o)}}function _emscripten_glGetShaderiv(e,t,r){if(r)if(35716==t){var n=GLctx.getShaderInfoLog(GL.shaders[e]);null===n&&(n="(unknown error)");var i=n?n.length+1:0;HEAP32[r>>2]=i}else if(35720==t){var o=GLctx.getShaderSource(GL.shaders[e]),a=o?o.length+1:0;HEAP32[r>>2]=a}else HEAP32[r>>2]=GLctx.getShaderParameter(GL.shaders[e],t);else GL.recordError(1281)}function stringToNewUTF8(e){var t=lengthBytesUTF8(e)+1,r=_malloc(t);return stringToUTF8(e,r,t),r}function _emscripten_glGetString(e){var t=GL.stringCache[e];if(!t){switch(e){case 7939:var r=GLctx.getSupportedExtensions()||[];t=stringToNewUTF8((r=r.concat(r.map((function(e){return"GL_"+e})))).join(" "));break;case 7936:case 7937:case 37445:case 37446:var n=GLctx.getParameter(e);n||GL.recordError(1280),t=n&&stringToNewUTF8(n);break;case 7938:var i=GLctx.getParameter(7938);t=stringToNewUTF8(i="OpenGL ES 3.0 ("+i+")");break;case 35724:var o=GLctx.getParameter(35724),a=o.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==a&&(3==a[1].length&&(a[1]=a[1]+"0"),o="OpenGL ES GLSL ES "+a[1]+" ("+o+")"),t=stringToNewUTF8(o);break;default:GL.recordError(1280)}GL.stringCache[e]=t}return t}function _emscripten_glGetStringi(e,t){if(GL.currentContext.version<2)return GL.recordError(1282),0;var r=GL.stringiCache[e];if(r)return t<0||t>=r.length?(GL.recordError(1281),0):r[t];if(7939===e){var n=GLctx.getSupportedExtensions()||[];return n=(n=n.concat(n.map((function(e){return"GL_"+e})))).map((function(e){return stringToNewUTF8(e)})),r=GL.stringiCache[e]=n,t<0||t>=r.length?(GL.recordError(1281),0):r[t]}return GL.recordError(1280),0}function _emscripten_glGetSynciv(e,t,r,n,i){if(r<0)GL.recordError(1281);else if(i){var o=GLctx.getSyncParameter(GL.syncs[e],t);null!==o&&(HEAP32[i>>2]=o,n&&(HEAP32[n>>2]=1))}else GL.recordError(1281)}function _emscripten_glGetTexParameterfv(e,t,r){r?HEAPF32[r>>2]=GLctx.getTexParameter(e,t):GL.recordError(1281)}function _emscripten_glGetTexParameteriv(e,t,r){r?HEAP32[r>>2]=GLctx.getTexParameter(e,t):GL.recordError(1281)}function _emscripten_glGetTransformFeedbackVarying(e,t,r,n,i,o,a){e=GL.programs[e];var s=GLctx.getTransformFeedbackVarying(e,t);if(s){if(a&&r>0){var c=stringToUTF8(s.name,a,r);n&&(HEAP32[n>>2]=c)}else n&&(HEAP32[n>>2]=0);i&&(HEAP32[i>>2]=s.size),o&&(HEAP32[o>>2]=s.type)}}function _emscripten_glGetUniformBlockIndex(e,t){return GLctx.getUniformBlockIndex(GL.programs[e],UTF8ToString(t))}function _emscripten_glGetUniformIndices(e,t,r,n){if(n)if(t>0&&(0==r||0==n))GL.recordError(1281);else{e=GL.programs[e];for(var i=[],o=0;o<t;o++)i.push(UTF8ToString(HEAP32[r+4*o>>2]));var a=GLctx.getUniformIndices(e,i);if(a){var s=a.length;for(o=0;o<s;o++)HEAP32[n+4*o>>2]=a[o]}}else GL.recordError(1281)}function jstoi_q(e){return parseInt(e)}function webglGetLeftBracePos(e){return"]"==e.slice(-1)&&e.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(e){var t,r,n=e.uniformLocsById,i=e.uniformSizeAndIdsByName;if(!n)for(e.uniformLocsById=n={},e.uniformArrayNamesById={},t=0;t<GLctx.getProgramParameter(e,35718);++t){var o=GLctx.getActiveUniform(e,t),a=o.name,s=o.size,c=webglGetLeftBracePos(a),l=c>0?a.slice(0,c):a,u=e.uniformIdCounter;for(e.uniformIdCounter+=s,i[l]=[s,u],r=0;r<s;++r)n[u]=r,e.uniformArrayNamesById[u++]=l}}function _emscripten_glGetUniformLocation(e,t){if(t=UTF8ToString(t),e=GL.programs[e]){webglPrepareUniformLocationsBeforeFirstUse(e);var r=e.uniformLocsById,n=0,i=t,o=webglGetLeftBracePos(t);o>0&&(n=jstoi_q(t.slice(o+1))>>>0,i=t.slice(0,o));var a=e.uniformSizeAndIdsByName[i];if(a&&n<a[0]&&(r[n+=a[1]]=r[n]||GLctx.getUniformLocation(e,t)))return n}else GL.recordError(1281);return-1}function webglGetUniformLocation(e){var t=GLctx.currentProgram;if(t){var r=t.uniformLocsById[e];return"number"==typeof r&&(t.uniformLocsById[e]=r=GLctx.getUniformLocation(t,t.uniformArrayNamesById[e]+(r>0?"["+r+"]":""))),r}GL.recordError(1282)}function emscriptenWebGLGetUniform(e,t,r,n){if(r){webglPrepareUniformLocationsBeforeFirstUse(e=GL.programs[e]);var i=GLctx.getUniform(e,webglGetUniformLocation(t));if("number"==typeof i||"boolean"==typeof i)switch(n){case 0:HEAP32[r>>2]=i;break;case 2:HEAPF32[r>>2]=i}else for(var o=0;o<i.length;o++)switch(n){case 0:HEAP32[r+4*o>>2]=i[o];break;case 2:HEAPF32[r+4*o>>2]=i[o]}}else GL.recordError(1281)}function _emscripten_glGetUniformfv(e,t,r){emscriptenWebGLGetUniform(e,t,r,2)}function _emscripten_glGetUniformiv(e,t,r){emscriptenWebGLGetUniform(e,t,r,0)}function _emscripten_glGetUniformuiv(e,t,r){emscriptenWebGLGetUniform(e,t,r,0)}function emscriptenWebGLGetVertexAttrib(e,t,r,n){if(r){GL.currentContext.clientBuffers[e].enabled&&err("glGetVertexAttrib*v on client-side array: not supported, bad data returned");var i=GLctx.getVertexAttrib(e,t);if(34975==t)HEAP32[r>>2]=i&&i.name;else if("number"==typeof i||"boolean"==typeof i)switch(n){case 0:HEAP32[r>>2]=i;break;case 2:HEAPF32[r>>2]=i;break;case 5:HEAP32[r>>2]=Math.fround(i)}else for(var o=0;o<i.length;o++)switch(n){case 0:HEAP32[r+4*o>>2]=i[o];break;case 2:HEAPF32[r+4*o>>2]=i[o];break;case 5:HEAP32[r+4*o>>2]=Math.fround(i[o])}}else GL.recordError(1281)}function _emscripten_glGetVertexAttribIiv(e,t,r){emscriptenWebGLGetVertexAttrib(e,t,r,0)}function _emscripten_glGetVertexAttribIuiv(e,t,r){emscriptenWebGLGetVertexAttrib(e,t,r,0)}function _emscripten_glGetVertexAttribPointerv(e,t,r){r?(GL.currentContext.clientBuffers[e].enabled&&err("glGetVertexAttribPointer on client-side array: not supported, bad data returned"),HEAP32[r>>2]=GLctx.getVertexAttribOffset(e,t)):GL.recordError(1281)}function _emscripten_glGetVertexAttribfv(e,t,r){emscriptenWebGLGetVertexAttrib(e,t,r,2)}function _emscripten_glGetVertexAttribiv(e,t,r){emscriptenWebGLGetVertexAttrib(e,t,r,5)}function _emscripten_glHint(e,t){GLctx.hint(e,t)}function _emscripten_glInvalidateFramebuffer(e,t,r){for(var n=tempFixedLengthArray[t],i=0;i<t;i++)n[i]=HEAP32[r+4*i>>2];GLctx.invalidateFramebuffer(e,n)}function _emscripten_glInvalidateSubFramebuffer(e,t,r,n,i,o,a){for(var s=tempFixedLengthArray[t],c=0;c<t;c++)s[c]=HEAP32[r+4*c>>2];GLctx.invalidateSubFramebuffer(e,s,n,i,o,a)}function _emscripten_glIsBuffer(e){var t=GL.buffers[e];return t?GLctx.isBuffer(t):0}function _emscripten_glIsEnabled(e){return GLctx.isEnabled(e)}function _emscripten_glIsFramebuffer(e){var t=GL.framebuffers[e];return t?GLctx.isFramebuffer(t):0}function _emscripten_glIsProgram(e){return(e=GL.programs[e])?GLctx.isProgram(e):0}function _emscripten_glIsQuery(e){var t=GL.queries[e];return t?GLctx.isQuery(t):0}function _emscripten_glIsQueryEXT(e){var t=GL.queries[e];return t?GLctx.disjointTimerQueryExt.isQueryEXT(t):0}function _emscripten_glIsRenderbuffer(e){var t=GL.renderbuffers[e];return t?GLctx.isRenderbuffer(t):0}function _emscripten_glIsSampler(e){var t=GL.samplers[e];return t?GLctx.isSampler(t):0}function _emscripten_glIsShader(e){var t=GL.shaders[e];return t?GLctx.isShader(t):0}function _emscripten_glIsSync(e){return GLctx.isSync(GL.syncs[e])}function _emscripten_glIsTexture(e){var t=GL.textures[e];return t?GLctx.isTexture(t):0}function _emscripten_glIsTransformFeedback(e){return GLctx.isTransformFeedback(GL.transformFeedbacks[e])}function _emscripten_glIsVertexArray(e){var t=GL.vaos[e];return t?GLctx.isVertexArray(t):0}function _emscripten_glIsVertexArrayOES(e){var t=GL.vaos[e];return t?GLctx.isVertexArray(t):0}function _emscripten_glLineWidth(e){GLctx.lineWidth(e)}function _emscripten_glLinkProgram(e){e=GL.programs[e],GLctx.linkProgram(e),e.uniformLocsById=0,e.uniformSizeAndIdsByName={}}function _emscripten_glMapBufferRange(e,t,r,n){if(0!=(33&n))return err("glMapBufferRange access does not support MAP_READ or MAP_UNSYNCHRONIZED"),0;if(0==(2&n))return err("glMapBufferRange access must include MAP_WRITE"),0;if(0==(12&n))return err("glMapBufferRange access must include INVALIDATE_BUFFER or INVALIDATE_RANGE"),0;if(!emscriptenWebGLValidateMapBufferTarget(e))return GL.recordError(1280),err("GL_INVALID_ENUM in glMapBufferRange"),0;var i=_malloc(r);return i?(GL.mappedBuffers[emscriptenWebGLGetBufferBinding(e)]={offset:t,length:r,mem:i,access:n},i):0}function _emscripten_glPauseTransformFeedback(){GLctx.pauseTransformFeedback()}function _emscripten_glPixelStorei(e,t){3317==e&&(GL.unpackAlignment=t),GLctx.pixelStorei(e,t)}function _emscripten_glPolygonOffset(e,t){GLctx.polygonOffset(e,t)}function _emscripten_glProgramBinary(e,t,r,n){GL.recordError(1280)}function _emscripten_glProgramParameteri(e,t,r){GL.recordError(1280)}function _emscripten_glQueryCounterEXT(e,t){GLctx.disjointTimerQueryExt.queryCounterEXT(GL.queries[e],t)}function _emscripten_glReadBuffer(e){GLctx.readBuffer(e)}function computeUnpackAlignedImageSize(e,t,r,n){var i;return t*(e*r+(i=n)-1&-i)}function __colorChannelsInGlTextureFormat(e){return{5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4}[e-6402]||1}function heapObjectForWebGLType(e){return 0==(e-=5120)?HEAP8:1==e?HEAPU8:2==e?HEAP16:4==e?HEAP32:6==e?HEAPF32:5==e||28922==e||28520==e||30779==e||30782==e?HEAPU32:HEAPU16}function heapAccessShiftForWebGLHeap(e){return 31-Math.clz32(e.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(e,t,r,n,i,o){var a=heapObjectForWebGLType(e),s=heapAccessShiftForWebGLHeap(a),c=1<<s,l=computeUnpackAlignedImageSize(r,n,__colorChannelsInGlTextureFormat(t)*c,GL.unpackAlignment);return a.subarray(i>>s,i+l>>s)}function _emscripten_glReadPixels(e,t,r,n,i,o,a){if(GLctx.currentPixelPackBufferBinding)GLctx.readPixels(e,t,r,n,i,o,a);else{var s=heapObjectForWebGLType(o);GLctx.readPixels(e,t,r,n,i,o,s,a>>heapAccessShiftForWebGLHeap(s))}}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(e,t,r,n){GLctx.renderbufferStorage(e,t,r,n)}function _emscripten_glRenderbufferStorageMultisample(e,t,r,n,i){GLctx.renderbufferStorageMultisample(e,t,r,n,i)}function _emscripten_glResumeTransformFeedback(){GLctx.resumeTransformFeedback()}function _emscripten_glSampleCoverage(e,t){GLctx.sampleCoverage(e,!!t)}function _emscripten_glSamplerParameterf(e,t,r){GLctx.samplerParameterf(GL.samplers[e],t,r)}function _emscripten_glSamplerParameterfv(e,t,r){var n=HEAPF32[r>>2];GLctx.samplerParameterf(GL.samplers[e],t,n)}function _emscripten_glSamplerParameteri(e,t,r){GLctx.samplerParameteri(GL.samplers[e],t,r)}function _emscripten_glSamplerParameteriv(e,t,r){var n=HEAP32[r>>2];GLctx.samplerParameteri(GL.samplers[e],t,n)}function _emscripten_glScissor(e,t,r,n){GLctx.scissor(e,t,r,n)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(e,t,r,n){var i=GL.getSource(e,t,r,n);GLctx.shaderSource(GL.shaders[e],i)}function _emscripten_glStencilFunc(e,t,r){GLctx.stencilFunc(e,t,r)}function _emscripten_glStencilFuncSeparate(e,t,r,n){GLctx.stencilFuncSeparate(e,t,r,n)}function _emscripten_glStencilMask(e){GLctx.stencilMask(e)}function _emscripten_glStencilMaskSeparate(e,t){GLctx.stencilMaskSeparate(e,t)}function _emscripten_glStencilOp(e,t,r){GLctx.stencilOp(e,t,r)}function _emscripten_glStencilOpSeparate(e,t,r,n){GLctx.stencilOpSeparate(e,t,r,n)}function _emscripten_glTexImage2D(e,t,r,n,i,o,a,s,c){if(GLctx.currentPixelUnpackBufferBinding)GLctx.texImage2D(e,t,r,n,i,o,a,s,c);else if(c){var l=heapObjectForWebGLType(s);GLctx.texImage2D(e,t,r,n,i,o,a,s,l,c>>heapAccessShiftForWebGLHeap(l))}else GLctx.texImage2D(e,t,r,n,i,o,a,s,null)}function _emscripten_glTexImage3D(e,t,r,n,i,o,a,s,c,l){if(GLctx.currentPixelUnpackBufferBinding)GLctx.texImage3D(e,t,r,n,i,o,a,s,c,l);else if(l){var u=heapObjectForWebGLType(c);GLctx.texImage3D(e,t,r,n,i,o,a,s,c,u,l>>heapAccessShiftForWebGLHeap(u))}else GLctx.texImage3D(e,t,r,n,i,o,a,s,c,null)}function _emscripten_glTexParameterf(e,t,r){GLctx.texParameterf(e,t,r)}function _emscripten_glTexParameterfv(e,t,r){var n=HEAPF32[r>>2];GLctx.texParameterf(e,t,n)}function _emscripten_glTexParameteri(e,t,r){GLctx.texParameteri(e,t,r)}function _emscripten_glTexParameteriv(e,t,r){var n=HEAP32[r>>2];GLctx.texParameteri(e,t,n)}function _emscripten_glTexStorage2D(e,t,r,n,i){GLctx.texStorage2D(e,t,r,n,i)}function _emscripten_glTexStorage3D(e,t,r,n,i,o){GLctx.texStorage3D(e,t,r,n,i,o)}function _emscripten_glTexSubImage2D(e,t,r,n,i,o,a,s,c){if(GLctx.currentPixelUnpackBufferBinding)GLctx.texSubImage2D(e,t,r,n,i,o,a,s,c);else if(c){var l=heapObjectForWebGLType(s);GLctx.texSubImage2D(e,t,r,n,i,o,a,s,l,c>>heapAccessShiftForWebGLHeap(l))}else GLctx.texSubImage2D(e,t,r,n,i,o,a,s,null)}function _emscripten_glTexSubImage3D(e,t,r,n,i,o,a,s,c,l,u){if(GLctx.currentPixelUnpackBufferBinding)GLctx.texSubImage3D(e,t,r,n,i,o,a,s,c,l,u);else if(u){var d=heapObjectForWebGLType(l);GLctx.texSubImage3D(e,t,r,n,i,o,a,s,c,l,d,u>>heapAccessShiftForWebGLHeap(d))}else GLctx.texSubImage3D(e,t,r,n,i,o,a,s,c,l,null)}function _emscripten_glTransformFeedbackVaryings(e,t,r,n){e=GL.programs[e];for(var i=[],o=0;o<t;o++)i.push(UTF8ToString(HEAP32[r+4*o>>2]));GLctx.transformFeedbackVaryings(e,i,n)}function _emscripten_glUniform1f(e,t){GLctx.uniform1f(webglGetUniformLocation(e),t)}function _emscripten_glUniform1fv(e,t,r){t&&GLctx.uniform1fv(webglGetUniformLocation(e),HEAPF32,r>>2,t)}function _emscripten_glUniform1i(e,t){GLctx.uniform1i(webglGetUniformLocation(e),t)}function _emscripten_glUniform1iv(e,t,r){t&&GLctx.uniform1iv(webglGetUniformLocation(e),HEAP32,r>>2,t)}function _emscripten_glUniform1ui(e,t){GLctx.uniform1ui(webglGetUniformLocation(e),t)}function _emscripten_glUniform1uiv(e,t,r){t&&GLctx.uniform1uiv(webglGetUniformLocation(e),HEAPU32,r>>2,t)}function _emscripten_glUniform2f(e,t,r){GLctx.uniform2f(webglGetUniformLocation(e),t,r)}function _emscripten_glUniform2fv(e,t,r){t&&GLctx.uniform2fv(webglGetUniformLocation(e),HEAPF32,r>>2,2*t)}function _emscripten_glUniform2i(e,t,r){GLctx.uniform2i(webglGetUniformLocation(e),t,r)}function _emscripten_glUniform2iv(e,t,r){t&&GLctx.uniform2iv(webglGetUniformLocation(e),HEAP32,r>>2,2*t)}function _emscripten_glUniform2ui(e,t,r){GLctx.uniform2ui(webglGetUniformLocation(e),t,r)}function _emscripten_glUniform2uiv(e,t,r){t&&GLctx.uniform2uiv(webglGetUniformLocation(e),HEAPU32,r>>2,2*t)}function _emscripten_glUniform3f(e,t,r,n){GLctx.uniform3f(webglGetUniformLocation(e),t,r,n)}function _emscripten_glUniform3fv(e,t,r){t&&GLctx.uniform3fv(webglGetUniformLocation(e),HEAPF32,r>>2,3*t)}function _emscripten_glUniform3i(e,t,r,n){GLctx.uniform3i(webglGetUniformLocation(e),t,r,n)}function _emscripten_glUniform3iv(e,t,r){t&&GLctx.uniform3iv(webglGetUniformLocation(e),HEAP32,r>>2,3*t)}function _emscripten_glUniform3ui(e,t,r,n){GLctx.uniform3ui(webglGetUniformLocation(e),t,r,n)}function _emscripten_glUniform3uiv(e,t,r){t&&GLctx.uniform3uiv(webglGetUniformLocation(e),HEAPU32,r>>2,3*t)}function _emscripten_glUniform4f(e,t,r,n,i){GLctx.uniform4f(webglGetUniformLocation(e),t,r,n,i)}function _emscripten_glUniform4fv(e,t,r){t&&GLctx.uniform4fv(webglGetUniformLocation(e),HEAPF32,r>>2,4*t)}function _emscripten_glUniform4i(e,t,r,n,i){GLctx.uniform4i(webglGetUniformLocation(e),t,r,n,i)}function _emscripten_glUniform4iv(e,t,r){t&&GLctx.uniform4iv(webglGetUniformLocation(e),HEAP32,r>>2,4*t)}function _emscripten_glUniform4ui(e,t,r,n,i){GLctx.uniform4ui(webglGetUniformLocation(e),t,r,n,i)}function _emscripten_glUniform4uiv(e,t,r){t&&GLctx.uniform4uiv(webglGetUniformLocation(e),HEAPU32,r>>2,4*t)}function _emscripten_glUniformBlockBinding(e,t,r){e=GL.programs[e],GLctx.uniformBlockBinding(e,t,r)}function _emscripten_glUniformMatrix2fv(e,t,r,n){t&&GLctx.uniformMatrix2fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,4*t)}function _emscripten_glUniformMatrix2x3fv(e,t,r,n){t&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,6*t)}function _emscripten_glUniformMatrix2x4fv(e,t,r,n){t&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,8*t)}function _emscripten_glUniformMatrix3fv(e,t,r,n){t&&GLctx.uniformMatrix3fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,9*t)}function _emscripten_glUniformMatrix3x2fv(e,t,r,n){t&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,6*t)}function _emscripten_glUniformMatrix3x4fv(e,t,r,n){t&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,12*t)}function _emscripten_glUniformMatrix4fv(e,t,r,n){t&&GLctx.uniformMatrix4fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,16*t)}function _emscripten_glUniformMatrix4x2fv(e,t,r,n){t&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,8*t)}function _emscripten_glUniformMatrix4x3fv(e,t,r,n){t&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(e),!!r,HEAPF32,n>>2,12*t)}function _emscripten_glUnmapBuffer(e){if(!emscriptenWebGLValidateMapBufferTarget(e))return GL.recordError(1280),err("GL_INVALID_ENUM in glUnmapBuffer"),0;var t=emscriptenWebGLGetBufferBinding(e),r=GL.mappedBuffers[t];return r?(GL.mappedBuffers[t]=null,16&r.access||GLctx.bufferSubData(e,r.offset,HEAPU8,r.mem,r.length),_free(r.mem),1):(GL.recordError(1282),err("buffer was never mapped in glUnmapBuffer"),0)}function _emscripten_glUseProgram(e){e=GL.programs[e],GLctx.useProgram(e),GLctx.currentProgram=e}function _emscripten_glValidateProgram(e){GLctx.validateProgram(GL.programs[e])}function _emscripten_glVertexAttrib1f(e,t){GLctx.vertexAttrib1f(e,t)}function _emscripten_glVertexAttrib1fv(e,t){GLctx.vertexAttrib1f(e,HEAPF32[t>>2])}function _emscripten_glVertexAttrib2f(e,t,r){GLctx.vertexAttrib2f(e,t,r)}function _emscripten_glVertexAttrib2fv(e,t){GLctx.vertexAttrib2f(e,HEAPF32[t>>2],HEAPF32[t+4>>2])}function _emscripten_glVertexAttrib3f(e,t,r,n){GLctx.vertexAttrib3f(e,t,r,n)}function _emscripten_glVertexAttrib3fv(e,t){GLctx.vertexAttrib3f(e,HEAPF32[t>>2],HEAPF32[t+4>>2],HEAPF32[t+8>>2])}function _emscripten_glVertexAttrib4f(e,t,r,n,i){GLctx.vertexAttrib4f(e,t,r,n,i)}function _emscripten_glVertexAttrib4fv(e,t){GLctx.vertexAttrib4f(e,HEAPF32[t>>2],HEAPF32[t+4>>2],HEAPF32[t+8>>2],HEAPF32[t+12>>2])}function _emscripten_glVertexAttribDivisor(e,t){GLctx.vertexAttribDivisor(e,t)}function _emscripten_glVertexAttribDivisorANGLE(e,t){GLctx.vertexAttribDivisor(e,t)}function _emscripten_glVertexAttribDivisorARB(e,t){GLctx.vertexAttribDivisor(e,t)}function _emscripten_glVertexAttribDivisorEXT(e,t){GLctx.vertexAttribDivisor(e,t)}function _emscripten_glVertexAttribDivisorNV(e,t){GLctx.vertexAttribDivisor(e,t)}function _emscripten_glVertexAttribI4i(e,t,r,n,i){GLctx.vertexAttribI4i(e,t,r,n,i)}function _emscripten_glVertexAttribI4iv(e,t){GLctx.vertexAttribI4i(e,HEAP32[t>>2],HEAP32[t+4>>2],HEAP32[t+8>>2],HEAP32[t+12>>2])}function _emscripten_glVertexAttribI4ui(e,t,r,n,i){GLctx.vertexAttribI4ui(e,t,r,n,i)}function _emscripten_glVertexAttribI4uiv(e,t){GLctx.vertexAttribI4ui(e,HEAPU32[t>>2],HEAPU32[t+4>>2],HEAPU32[t+8>>2],HEAPU32[t+12>>2])}function _emscripten_glVertexAttribIPointer(e,t,r,n,i){var o=GL.currentContext.clientBuffers[e];if(!GLctx.currentArrayBufferBinding)return o.size=t,o.type=r,o.normalized=!1,o.stride=n,o.ptr=i,o.clientside=!0,void(o.vertexAttribPointerAdaptor=function(e,t,r,n,i,o){this.vertexAttribIPointer(e,t,r,i,o)});o.clientside=!1,GLctx.vertexAttribIPointer(e,t,r,n,i)}function _emscripten_glVertexAttribPointer(e,t,r,n,i,o){var a=GL.currentContext.clientBuffers[e];if(!GLctx.currentArrayBufferBinding)return a.size=t,a.type=r,a.normalized=n,a.stride=i,a.ptr=o,a.clientside=!0,void(a.vertexAttribPointerAdaptor=function(e,t,r,n,i,o){this.vertexAttribPointer(e,t,r,n,i,o)});a.clientside=!1,GLctx.vertexAttribPointer(e,t,r,!!n,i,o)}function _emscripten_glViewport(e,t,r,n){GLctx.viewport(e,t,r,n)}function _emscripten_glWaitSync(e,t,r,n){GLctx.waitSync(GL.syncs[e],t,convertI32PairToI53(r,n))}function _emscripten_has_asyncify(){return 0}function _emscripten_memcpy_big(e,t,r){HEAPU8.copyWithin(e,t,t+r)}function doRequestFullscreen(e,t){return JSEvents.fullscreenEnabled()?(e=findEventTarget(e))?e.requestFullscreen||e.webkitRequestFullscreen?JSEvents.canPerformEventHandlerRequests()?JSEvents_requestFullscreen(e,t):t.deferUntilInEventHandler?(JSEvents.deferCall(JSEvents_requestFullscreen,1,[e,t]),1):-2:-3:-4:-1}function _emscripten_request_fullscreen_strategy(e,t,r){return doRequestFullscreen(e,{scaleMode:HEAP32[r>>2],canvasResolutionScaleMode:HEAP32[r+4>>2],filteringMode:HEAP32[r+8>>2],deferUntilInEventHandler:t,canvasResizedCallback:HEAP32[r+12>>2],canvasResizedCallbackUserData:HEAP32[r+16>>2]})}function _emscripten_request_pointerlock(e,t){return(e=findEventTarget(e))?e.requestPointerLock?JSEvents.canPerformEventHandlerRequests()?requestPointerLock(e):t?(JSEvents.deferCall(requestPointerLock,2,[e]),1):-2:-1:-4}function getHeapMax(){return HEAPU8.length}function abortOnCannotGrowMemory(e){abort("Cannot enlarge memory arrays to size "+e+" bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value "+HEAP8.length+", (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0")}function _emscripten_resize_heap(e){HEAPU8.length;abortOnCannotGrowMemory(e>>>=0)}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function registerBeforeUnloadEventCallback(e,t,r,n,i,o){var a={target:findEventTarget(e),eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=getWasmTableEntry(n)(i,0,t);if(o&&(o=UTF8ToString(o)),o)return r.preventDefault(),r.returnValue=o,o},useCapture:r};JSEvents.registerOrRemoveHandler(a)}function _emscripten_set_beforeunload_callback_on_thread(e,t,r){return"undefined"==typeof onbeforeunload?-1:1!==r?-5:(registerBeforeUnloadEventCallback(2,e,!0,t,28,"beforeunload"),0)}function registerFocusEventCallback(e,t,r,n,i,o,a){JSEvents.focusEvent||(JSEvents.focusEvent=_malloc(256));var s={target:findEventTarget(e),eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=JSEvents.getNodeNameForTarget(r.target),a=r.target.id?r.target.id:"",s=JSEvents.focusEvent;stringToUTF8(o,s+0,128),stringToUTF8(a,s+128,128),getWasmTableEntry(n)(i,s,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_blur_callback_on_thread(e,t,r,n,i){return registerFocusEventCallback(e,t,r,n,12,"blur",i),0}function fillMouseEventData(e,t,r){assert(e%4==0),HEAPF64[e>>3]=t.timeStamp;var n=e>>2;HEAP32[n+2]=t.screenX,HEAP32[n+3]=t.screenY,HEAP32[n+4]=t.clientX,HEAP32[n+5]=t.clientY,HEAP32[n+6]=t.ctrlKey,HEAP32[n+7]=t.shiftKey,HEAP32[n+8]=t.altKey,HEAP32[n+9]=t.metaKey,HEAP16[2*n+20]=t.button,HEAP16[2*n+21]=t.buttons,HEAP32[n+11]=t.movementX,HEAP32[n+12]=t.movementY;var i=getBoundingClientRect(r);HEAP32[n+13]=t.clientX-i.left,HEAP32[n+14]=t.clientY-i.top}function registerMouseEventCallback(e,t,r,n,i,o,a){JSEvents.mouseEvent||(JSEvents.mouseEvent=_malloc(72));var s={target:e=findEventTarget(e),allowsDeferredCalls:"mousemove"!=o&&"mouseenter"!=o&&"mouseleave"!=o,eventTypeString:o,callbackfunc:n,handlerFunc:function(r){var o=r||event;fillMouseEventData(JSEvents.mouseEvent,o,e),getWasmTableEntry(n)(i,JSEvents.mouseEvent,t)&&o.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_click_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,4,"click",i),0}function _emscripten_set_element_css_size(e,t,r){return(e=findEventTarget(e))?(e.style.width=t+"px",e.style.height=r+"px",0):-4}function _emscripten_set_focus_callback_on_thread(e,t,r,n,i){return registerFocusEventCallback(e,t,r,n,13,"focus",i),0}function fillFullscreenChangeEventData(e){var t=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement,r=!!t;HEAP32[e>>2]=r,HEAP32[e+4>>2]=JSEvents.fullscreenEnabled();var n=r?t:JSEvents.previousFullscreenElement,i=JSEvents.getNodeNameForTarget(n),o=n&&n.id?n.id:"";stringToUTF8(i,e+8,128),stringToUTF8(o,e+136,128),HEAP32[e+264>>2]=n?n.clientWidth:0,HEAP32[e+268>>2]=n?n.clientHeight:0,HEAP32[e+272>>2]=screen.width,HEAP32[e+276>>2]=screen.height,r&&(JSEvents.previousFullscreenElement=t)}function registerFullscreenChangeEventCallback(e,t,r,n,i,o,a){JSEvents.fullscreenChangeEvent||(JSEvents.fullscreenChangeEvent=_malloc(280));var s={target:e,eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(o),getWasmTableEntry(n)(i,o,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_fullscreenchange_callback_on_thread(e,t,r,n,i){return JSEvents.fullscreenEnabled()?(e=findEventTarget(e))?(registerFullscreenChangeEventCallback(e,t,r,n,19,"fullscreenchange",i),registerFullscreenChangeEventCallback(e,t,r,n,19,"webkitfullscreenchange",i),0):-4:-1}function registerGamepadEventCallback(e,t,r,n,i,o,a){JSEvents.gamepadEvent||(JSEvents.gamepadEvent=_malloc(1432));var s={target:findEventTarget(e),allowsDeferredCalls:!0,eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=JSEvents.gamepadEvent;fillGamepadEventData(o,r.gamepad),getWasmTableEntry(n)(i,o,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_gamepadconnected_callback_on_thread(e,t,r,n){return navigator.getGamepads||navigator.webkitGetGamepads?(registerGamepadEventCallback(2,e,t,r,26,"gamepadconnected",n),0):-1}function _emscripten_set_gamepaddisconnected_callback_on_thread(e,t,r,n){return navigator.getGamepads||navigator.webkitGetGamepads?(registerGamepadEventCallback(2,e,t,r,27,"gamepaddisconnected",n),0):-1}function registerKeyEventCallback(e,t,r,n,i,o,a){JSEvents.keyEvent||(JSEvents.keyEvent=_malloc(176));var s={target:findEventTarget(e),allowsDeferredCalls:!0,eventTypeString:o,callbackfunc:n,handlerFunc:function(e){assert(e);var r=JSEvents.keyEvent;HEAPF64[r>>3]=e.timeStamp;var o=r>>2;HEAP32[o+2]=e.location,HEAP32[o+3]=e.ctrlKey,HEAP32[o+4]=e.shiftKey,HEAP32[o+5]=e.altKey,HEAP32[o+6]=e.metaKey,HEAP32[o+7]=e.repeat,HEAP32[o+8]=e.charCode,HEAP32[o+9]=e.keyCode,HEAP32[o+10]=e.which,stringToUTF8(e.key||"",r+44,32),stringToUTF8(e.code||"",r+76,32),stringToUTF8(e.char||"",r+108,32),stringToUTF8(e.locale||"",r+140,32),getWasmTableEntry(n)(i,r,t)&&e.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_keydown_callback_on_thread(e,t,r,n,i){return registerKeyEventCallback(e,t,r,n,2,"keydown",i),0}function _emscripten_set_keypress_callback_on_thread(e,t,r,n,i){return registerKeyEventCallback(e,t,r,n,1,"keypress",i),0}function _emscripten_set_keyup_callback_on_thread(e,t,r,n,i){return registerKeyEventCallback(e,t,r,n,3,"keyup",i),0}function _emscripten_set_main_loop(e,t,r){setMainLoop(getWasmTableEntry(e),t,r)}function _emscripten_set_mousedown_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,5,"mousedown",i),0}function _emscripten_set_mouseenter_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,33,"mouseenter",i),0}function _emscripten_set_mouseleave_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,34,"mouseleave",i),0}function _emscripten_set_mousemove_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,8,"mousemove",i),0}function _emscripten_set_mouseup_callback_on_thread(e,t,r,n,i){return registerMouseEventCallback(e,t,r,n,6,"mouseup",i),0}function fillPointerlockChangeEventData(e){var t=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement,r=!!t;HEAP32[e>>2]=r;var n=JSEvents.getNodeNameForTarget(t),i=t&&t.id?t.id:"";stringToUTF8(n,e+4,128),stringToUTF8(i,e+132,128)}function registerPointerlockChangeEventCallback(e,t,r,n,i,o,a){JSEvents.pointerlockChangeEvent||(JSEvents.pointerlockChangeEvent=_malloc(260));var s={target:e,eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(o),getWasmTableEntry(n)(i,o,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_pointerlockchange_callback_on_thread(e,t,r,n,i){return document&&document.body&&(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock)?(e=findEventTarget(e))?(registerPointerlockChangeEventCallback(e,t,r,n,20,"pointerlockchange",i),registerPointerlockChangeEventCallback(e,t,r,n,20,"mozpointerlockchange",i),registerPointerlockChangeEventCallback(e,t,r,n,20,"webkitpointerlockchange",i),registerPointerlockChangeEventCallback(e,t,r,n,20,"mspointerlockchange",i),0):-4:-1}function registerUiEventCallback(e,t,r,n,i,o,a){JSEvents.uiEvent||(JSEvents.uiEvent=_malloc(36));var s={target:e=findEventTarget(e),eventTypeString:o,callbackfunc:n,handlerFunc:function(r){var o=r||event;if(o.target==e){var a=document.body;if(a){var s=JSEvents.uiEvent;HEAP32[s>>2]=o.detail,HEAP32[s+4>>2]=a.clientWidth,HEAP32[s+8>>2]=a.clientHeight,HEAP32[s+12>>2]=innerWidth,HEAP32[s+16>>2]=innerHeight,HEAP32[s+20>>2]=outerWidth,HEAP32[s+24>>2]=outerHeight,HEAP32[s+28>>2]=pageXOffset,HEAP32[s+32>>2]=pageYOffset,getWasmTableEntry(n)(i,s,t)&&o.preventDefault()}}},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_resize_callback_on_thread(e,t,r,n,i){return registerUiEventCallback(e,t,r,n,10,"resize",i),0}function registerTouchEventCallback(e,t,r,n,i,o,a){JSEvents.touchEvent||(JSEvents.touchEvent=_malloc(1696));var s={target:e=findEventTarget(e),allowsDeferredCalls:"touchstart"==o||"touchend"==o,eventTypeString:o,callbackfunc:n,handlerFunc:function(r){assert(r);for(var o,a={},s=r.touches,c=0;c<s.length;++c)(o=s[c]).isChanged=o.onTarget=0,a[o.identifier]=o;for(c=0;c<r.changedTouches.length;++c)(o=r.changedTouches[c]).isChanged=1,a[o.identifier]=o;for(c=0;c<r.targetTouches.length;++c)a[r.targetTouches[c].identifier].onTarget=1;var l=JSEvents.touchEvent;HEAPF64[l>>3]=r.timeStamp;var u=l>>2;HEAP32[u+3]=r.ctrlKey,HEAP32[u+4]=r.shiftKey,HEAP32[u+5]=r.altKey,HEAP32[u+6]=r.metaKey,u+=7;var d=getBoundingClientRect(e),m=0;for(var c in a)if(o=a[c],HEAP32[u+0]=o.identifier,HEAP32[u+1]=o.screenX,HEAP32[u+2]=o.screenY,HEAP32[u+3]=o.clientX,HEAP32[u+4]=o.clientY,HEAP32[u+5]=o.pageX,HEAP32[u+6]=o.pageY,HEAP32[u+7]=o.isChanged,HEAP32[u+8]=o.onTarget,HEAP32[u+9]=o.clientX-d.left,HEAP32[u+10]=o.clientY-d.top,u+=13,++m>31)break;HEAP32[l+8>>2]=m,getWasmTableEntry(n)(i,l,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_touchcancel_callback_on_thread(e,t,r,n,i){return registerTouchEventCallback(e,t,r,n,25,"touchcancel",i),0}function _emscripten_set_touchend_callback_on_thread(e,t,r,n,i){return registerTouchEventCallback(e,t,r,n,23,"touchend",i),0}function _emscripten_set_touchmove_callback_on_thread(e,t,r,n,i){return registerTouchEventCallback(e,t,r,n,24,"touchmove",i),0}function _emscripten_set_touchstart_callback_on_thread(e,t,r,n,i){return registerTouchEventCallback(e,t,r,n,22,"touchstart",i),0}function fillVisibilityChangeEventData(e){var t=["hidden","visible","prerender","unloaded"].indexOf(document.visibilityState);HEAP32[e>>2]=document.hidden,HEAP32[e+4>>2]=t}function registerVisibilityChangeEventCallback(e,t,r,n,i,o,a){JSEvents.visibilityChangeEvent||(JSEvents.visibilityChangeEvent=_malloc(8));var s={target:e,eventTypeString:o,callbackfunc:n,handlerFunc:function(e){var r=e||event,o=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(o),getWasmTableEntry(n)(i,o,t)&&r.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_visibilitychange_callback_on_thread(e,t,r,n){return specialHTMLTargets[1]?(registerVisibilityChangeEventCallback(specialHTMLTargets[1],e,t,r,21,"visibilitychange",n),0):-4}function registerWheelEventCallback(e,t,r,n,i,o,a){JSEvents.wheelEvent||(JSEvents.wheelEvent=_malloc(104));var s={target:e,allowsDeferredCalls:!0,eventTypeString:o,callbackfunc:n,handlerFunc:function(r){var o=r||event,a=JSEvents.wheelEvent;fillMouseEventData(a,o,e),HEAPF64[a+72>>3]=o.deltaX,HEAPF64[a+80>>3]=o.deltaY,HEAPF64[a+88>>3]=o.deltaZ,HEAP32[a+96>>2]=o.deltaMode,getWasmTableEntry(n)(i,a,t)&&o.preventDefault()},useCapture:r};JSEvents.registerOrRemoveHandler(s)}function _emscripten_set_wheel_callback_on_thread(e,t,r,n,i){return void 0!==(e=findEventTarget(e)).onwheel?(registerWheelEventCallback(e,t,r,n,9,"wheel",i),0):-1}function _emscripten_set_window_title(e){setWindowTitle(UTF8ToString(e))}function _emscripten_sleep(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(e,t){assert(t);var r=t>>2,n=HEAP32[r+6],i={alpha:!!HEAP32[r+0],depth:!!HEAP32[r+1],stencil:!!HEAP32[r+2],antialias:!!HEAP32[r+3],premultipliedAlpha:!!HEAP32[r+4],preserveDrawingBuffer:!!HEAP32[r+5],powerPreference:__emscripten_webgl_power_preferences[n],failIfMajorPerformanceCaveat:!!HEAP32[r+7],majorVersion:HEAP32[r+8],minorVersion:HEAP32[r+9],enableExtensionsByDefault:HEAP32[r+10],explicitSwapControl:HEAP32[r+11],proxyContextToMainThread:HEAP32[r+12],renderViaOffscreenBackBuffer:HEAP32[r+13]},o=findCanvasEventTarget(e);return o?i.explicitSwapControl?0:GL.createContext(o,i):0}var _emscripten_webgl_create_context=_emscripten_webgl_do_create_context;function _emscripten_webgl_enable_extension(e,t){var r=GL.getContext(e),n=UTF8ToString(t);return n.startsWith("GL_")&&(n=n.substr(3)),"WEBGL_draw_instanced_base_vertex_base_instance"==n&&__webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx),"WEBGL_multi_draw_instanced_base_vertex_base_instance"==n&&__webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx),"WEBGL_multi_draw"==n&&__webgl_enable_WEBGL_multi_draw(GLctx),!!r.GLctx.getExtension(n)}function _emscripten_webgl_init_context_attributes(e){assert(e);for(var t=e>>2,r=0;r<14;++r)HEAP32[t+r]=0;HEAP32[t+0]=HEAP32[t+1]=HEAP32[t+3]=HEAP32[t+4]=HEAP32[t+8]=HEAP32[t+10]=1}function _emscripten_webgl_make_context_current(e){return GL.makeContextCurrent(e)?0:-5}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:getExecutableName()};for(var t in ENV)void 0===ENV[t]?delete e[t]:e[t]=ENV[t];var r=[];for(var t in e)r.push(t+"="+e[t]);getEnvStrings.strings=r}return getEnvStrings.strings}function writeAsciiToMemory(e,t,r){for(var n=0;n<e.length;++n)assert(e.charCodeAt(n)===(255&e.charCodeAt(n))),HEAP8[t++>>0]=e.charCodeAt(n);r||(HEAP8[t>>0]=0)}function _environ_get(e,t){var r=0;return getEnvStrings().forEach((function(n,i){var o=t+r;HEAPU32[e+4*i>>2]=o,writeAsciiToMemory(n,o),r+=n.length+1})),0}function _environ_sizes_get(e,t){var r=getEnvStrings();HEAPU32[e>>2]=r.length;var n=0;return r.forEach((function(e){n+=e.length+1})),HEAPU32[t>>2]=n,0}function _fd_close(e){try{var t=SYSCALLS.getStreamFromFD(e);return FS.close(t),0}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(e,t,r,n){for(var i=0,o=0;o<r;o++){var a=HEAPU32[t>>2],s=HEAPU32[t+4>>2];t+=8;var c=FS.read(e,HEAP8,a,s,n);if(c<0)return-1;if(i+=c,c<s)break;void 0!==n&&(n+=c)}return i}function _fd_read(e,t,r,n){try{var i=doReadv(SYSCALLS.getStreamFromFD(e),t,r);return HEAPU32[n>>2]=i,0}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(e,t){return assert(e==e>>>0||e==(0|e)),assert(t===(0|t)),t+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*t:NaN}function _fd_seek(e,t,r,n,i){try{var o=convertI32PairToI53Checked(t,r);if(isNaN(o))return 61;var a=SYSCALLS.getStreamFromFD(e);return FS.llseek(a,o,n),tempI64=[a.position>>>0,(tempDouble=a.position,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1],a.getdents&&0===o&&0===n&&(a.getdents=null),0}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(e,t,r,n){for(var i=0,o=0;o<r;o++){var a=HEAPU32[t>>2],s=HEAPU32[t+4>>2];t+=8;var c=FS.write(e,HEAP8,a,s,n);if(c<0)return-1;i+=c,void 0!==n&&(n+=c)}return i}function _fd_write(e,t,r,n){try{var i=doWritev(SYSCALLS.getStreamFromFD(e),t,r);return HEAPU32[n>>2]=i,0}catch(e){if(void 0===FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _glAttachShader(e,t){GLctx.attachShader(GL.programs[e],GL.shaders[t])}function _glBindAttribLocation(e,t,r){GLctx.bindAttribLocation(GL.programs[e],t,UTF8ToString(r))}function _glBindBuffer(e,t){34962==e?GLctx.currentArrayBufferBinding=t:34963==e&&(GLctx.currentElementArrayBufferBinding=t),35051==e?GLctx.currentPixelPackBufferBinding=t:35052==e&&(GLctx.currentPixelUnpackBufferBinding=t),GLctx.bindBuffer(e,GL.buffers[t])}function _glBindVertexArray(e){GLctx.bindVertexArray(GL.vaos[e]);var t=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=t?0|t.name:0}function _glBlendColor(e,t,r,n){GLctx.blendColor(e,t,r,n)}function _glBlendEquationSeparate(e,t){GLctx.blendEquationSeparate(e,t)}function _glBlendFuncSeparate(e,t,r,n){GLctx.blendFuncSeparate(e,t,r,n)}function _glBufferData(e,t,r,n){r&&t?GLctx.bufferData(e,HEAPU8,n,r,t):GLctx.bufferData(e,t,n)}function _glClear(e){GLctx.clear(e)}function _glClearColor(e,t,r,n){GLctx.clearColor(e,t,r,n)}function _glClearDepth(e){GLctx.clearDepth(e)}function _glCompileShader(e){GLctx.compileShader(GL.shaders[e])}function _glCreateProgram(){var e=GL.getNewId(GL.programs),t=GLctx.createProgram();return t.name=e,t.maxUniformLength=t.maxAttributeLength=t.maxUniformBlockNameLength=0,t.uniformIdCounter=1,GL.programs[e]=t,e}function _glCreateShader(e){var t=GL.getNewId(GL.shaders);return GL.shaders[t]=GLctx.createShader(e),t}function _glDeleteShader(e){if(e){var t=GL.shaders[e];t?(GLctx.deleteShader(t),GL.shaders[e]=null):GL.recordError(1281)}}function _glDepthFunc(e){GLctx.depthFunc(e)}function _glDisable(e){GLctx.disable(e)}function _glEnable(e){GLctx.enable(e)}function _glEnableVertexAttribArray(e){GL.currentContext.clientBuffers[e].enabled=!0,GLctx.enableVertexAttribArray(e)}function _glFrontFace(e){GLctx.frontFace(e)}function _glGenBuffers(e,t){__glGenObject(e,t,"createBuffer",GL.buffers)}function _glGenVertexArrays(e,t){__glGenObject(e,t,"createVertexArray",GL.vaos)}function _glGetAttribLocation(e,t){return GLctx.getAttribLocation(GL.programs[e],UTF8ToString(t))}function _glGetUniformLocation(e,t){if(t=UTF8ToString(t),e=GL.programs[e]){webglPrepareUniformLocationsBeforeFirstUse(e);var r=e.uniformLocsById,n=0,i=t,o=webglGetLeftBracePos(t);o>0&&(n=jstoi_q(t.slice(o+1))>>>0,i=t.slice(0,o));var a=e.uniformSizeAndIdsByName[i];if(a&&n<a[0]&&(r[n+=a[1]]=r[n]||GLctx.getUniformLocation(e,t)))return n}else GL.recordError(1281);return-1}function _glHint(e,t){GLctx.hint(e,t)}function _glLinkProgram(e){e=GL.programs[e],GLctx.linkProgram(e),e.uniformLocsById=0,e.uniformSizeAndIdsByName={}}function _glReleaseShaderCompiler(){}function _glScissor(e,t,r,n){GLctx.scissor(e,t,r,n)}function _glShaderSource(e,t,r,n){var i=GL.getSource(e,t,r,n);GLctx.shaderSource(GL.shaders[e],i)}function _glUniform1f(e,t){GLctx.uniform1f(webglGetUniformLocation(e),t)}function _glUniform1i(e,t){GLctx.uniform1i(webglGetUniformLocation(e),t)}function _glUniform3f(e,t,r,n){GLctx.uniform3f(webglGetUniformLocation(e),t,r,n)}function _glUniform4f(e,t,r,n,i){GLctx.uniform4f(webglGetUniformLocation(e),t,r,n,i)}function _glUseProgram(e){e=GL.programs[e],GLctx.useProgram(e),GLctx.currentProgram=e}function _glVertexAttribPointer(e,t,r,n,i,o){var a=GL.currentContext.clientBuffers[e];if(!GLctx.currentArrayBufferBinding)return a.size=t,a.type=r,a.normalized=n,a.stride=i,a.ptr=o,a.clientside=!0,void(a.vertexAttribPointerAdaptor=function(e,t,r,n,i,o){this.vertexAttribPointer(e,t,r,n,i,o)});a.clientside=!1,GLctx.vertexAttribPointer(e,t,r,!!n,i,o)}function _glViewport(e,t,r,n){GLctx.viewport(e,t,r,n)}function _proc_exit(e){EXITSTATUS=e,keepRuntimeAlive()||(Module.onExit&&Module.onExit(e),ABORT=!0),quit_(e,new ExitStatus(e))}function exitJS(e,t){(EXITSTATUS=e,checkUnflushedContent(),keepRuntimeAlive()&&!t)&&err("program exited (with status: "+e+"), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)");_proc_exit(e)}function getCFunc(e){var t=Module["_"+e];return assert(t,"Cannot call unknown function "+e+", make sure it is exported"),t}function writeArrayToMemory(e,t){assert(e.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),HEAP8.set(e,t)}function ccall(e,t,r,n,i){var o={string:e=>{var t=0;if(null!=e&&0!==e){var r=1+(e.length<<2);stringToUTF8(e,t=stackAlloc(r),r)}return t},array:e=>{var t=stackAlloc(e.length);return writeArrayToMemory(e,t),t}};var a=getCFunc(e),s=[],c=0;if(assert("array"!==t,'Return type should not be "array".'),n)for(var l=0;l<n.length;l++){var u=o[r[l]];u?(0===c&&(c=stackSave()),s[l]=u(n[l])):s[l]=n[l]}var d=a.apply(null,s);return d=function(e){return 0!==c&&stackRestore(c),function(e){return"string"===t?UTF8ToString(e):"boolean"===t?Boolean(e):e}(e)}(d)}var FSNode=function(e,t,r,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=FS.nextInode++,this.name=t,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=n},readMode=365,writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(e){e?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(e){e?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}}),FS.FSNode=FSNode,FS.staticInit(),Module.FS_createPath=FS.createPath,Module.FS_createDataFile=FS.createDataFile,Module.FS_createPreloadedFile=FS.createPreloadedFile,Module.FS_unlink=FS.unlink,Module.FS_createLazyFile=FS.createLazyFile,Module.FS_createDevice=FS.createDevice,ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},Module.requestFullscreen=function(e,t){Browser.requestFullscreen(e,t)},Module.requestFullScreen=function(){Browser.requestFullScreen()},Module.requestAnimationFrame=function(e){Browser.requestAnimationFrame(e)},Module.setCanvasSize=function(e,t,r){Browser.setCanvasSize(e,t,r)},Module.pauseMainLoop=function(){Browser.mainLoop.pause()},Module.resumeMainLoop=function(){Browser.mainLoop.resume()},Module.getUserMedia=function(){Browser.getUserMedia()},Module.createContext=function(e,t,r,n){return Browser.createContext(e,t,r,n)};for(var preloadedImages={},preloadedAudios={},GLctx,i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var ASSERTIONS=!0,decodeBase64="function"==typeof atob?atob:function(e){var t,r,n,i,o,a,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c="",l=0;e=e.replace(/[^A-Za-z0-9\+\/=]/g,"");do{t=s.indexOf(e.charAt(l++))<<2|(i=s.indexOf(e.charAt(l++)))>>4,r=(15&i)<<4|(o=s.indexOf(e.charAt(l++)))>>2,n=(3&o)<<6|(a=s.indexOf(e.charAt(l++))),c+=String.fromCharCode(t),64!==o&&(c+=String.fromCharCode(r)),64!==a&&(c+=String.fromCharCode(n))}while(l<e.length);return c};function intArrayFromBase64(e){if("boolean"==typeof ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_NODE){var t=Buffer.from(e,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}try{for(var r=decodeBase64(e),n=new Uint8Array(r.length),i=0;i<r.length;++i)n[i]=r.charCodeAt(i);return n}catch(e){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(e){if(isDataURI(e))return intArrayFromBase64(e.slice(dataURIPrefix.length))}function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var asmLibraryArg={__assert_fail:___assert_fail,__syscall_fcntl64:___syscall_fcntl64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,__throw_exception_with_stack_trace:___throw_exception_with_stack_trace,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,abort:_abort,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryString:_eglQueryString,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_date_now:_emscripten_date_now,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_exit_pointerlock:_emscripten_exit_pointerlock,emscripten_get_device_pixel_ratio:_emscripten_get_device_pixel_ratio,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_now:_emscripten_get_now,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBeginQuery:_emscripten_glBeginQuery,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBeginTransformFeedback:_emscripten_glBeginTransformFeedback,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindBufferBase:_emscripten_glBindBufferBase,emscripten_glBindBufferRange:_emscripten_glBindBufferRange,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindSampler:_emscripten_glBindSampler,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindTransformFeedback:_emscripten_glBindTransformFeedback,emscripten_glBindVertexArray:_emscripten_glBindVertexArray,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBlitFramebuffer:_emscripten_glBlitFramebuffer,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearBufferfi:_emscripten_glClearBufferfi,emscripten_glClearBufferfv:_emscripten_glClearBufferfv,emscripten_glClearBufferiv:_emscripten_glClearBufferiv,emscripten_glClearBufferuiv:_emscripten_glClearBufferuiv,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClientWaitSync:_emscripten_glClientWaitSync,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexImage3D:_emscripten_glCompressedTexImage3D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCompressedTexSubImage3D:_emscripten_glCompressedTexSubImage3D,emscripten_glCopyBufferSubData:_emscripten_glCopyBufferSubData,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCopyTexSubImage3D:_emscripten_glCopyTexSubImage3D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueries:_emscripten_glDeleteQueries,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteSamplers:_emscripten_glDeleteSamplers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteSync:_emscripten_glDeleteSync,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteTransformFeedbacks:_emscripten_glDeleteTransformFeedbacks,emscripten_glDeleteVertexArrays:_emscripten_glDeleteVertexArrays,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstanced:_emscripten_glDrawArraysInstanced,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawArraysInstancedARB:_emscripten_glDrawArraysInstancedARB,emscripten_glDrawArraysInstancedEXT:_emscripten_glDrawArraysInstancedEXT,emscripten_glDrawArraysInstancedNV:_emscripten_glDrawArraysInstancedNV,emscripten_glDrawBuffers:_emscripten_glDrawBuffers,emscripten_glDrawBuffersEXT:_emscripten_glDrawBuffersEXT,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstanced:_emscripten_glDrawElementsInstanced,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawElementsInstancedARB:_emscripten_glDrawElementsInstancedARB,emscripten_glDrawElementsInstancedEXT:_emscripten_glDrawElementsInstancedEXT,emscripten_glDrawElementsInstancedNV:_emscripten_glDrawElementsInstancedNV,emscripten_glDrawRangeElements:_emscripten_glDrawRangeElements,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQuery:_emscripten_glEndQuery,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glEndTransformFeedback:_emscripten_glEndTransformFeedback,emscripten_glFenceSync:_emscripten_glFenceSync,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFlushMappedBufferRange:_emscripten_glFlushMappedBufferRange,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFramebufferTextureLayer:_emscripten_glFramebufferTextureLayer,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueries:_emscripten_glGenQueries,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenSamplers:_emscripten_glGenSamplers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenTransformFeedbacks:_emscripten_glGenTransformFeedbacks,emscripten_glGenVertexArrays:_emscripten_glGenVertexArrays,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetActiveUniformBlockName:_emscripten_glGetActiveUniformBlockName,emscripten_glGetActiveUniformBlockiv:_emscripten_glGetActiveUniformBlockiv,emscripten_glGetActiveUniformsiv:_emscripten_glGetActiveUniformsiv,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteri64v:_emscripten_glGetBufferParameteri64v,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetBufferPointerv:_emscripten_glGetBufferPointerv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFragDataLocation:_emscripten_glGetFragDataLocation,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetInteger64i_v:_emscripten_glGetInteger64i_v,emscripten_glGetInteger64v:_emscripten_glGetInteger64v,emscripten_glGetIntegeri_v:_emscripten_glGetIntegeri_v,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetInternalformativ:_emscripten_glGetInternalformativ,emscripten_glGetProgramBinary:_emscripten_glGetProgramBinary,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuiv:_emscripten_glGetQueryObjectuiv,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryiv:_emscripten_glGetQueryiv,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetSamplerParameterfv:_emscripten_glGetSamplerParameterfv,emscripten_glGetSamplerParameteriv:_emscripten_glGetSamplerParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetStringi:_emscripten_glGetStringi,emscripten_glGetSynciv:_emscripten_glGetSynciv,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetTransformFeedbackVarying:_emscripten_glGetTransformFeedbackVarying,emscripten_glGetUniformBlockIndex:_emscripten_glGetUniformBlockIndex,emscripten_glGetUniformIndices:_emscripten_glGetUniformIndices,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetUniformuiv:_emscripten_glGetUniformuiv,emscripten_glGetVertexAttribIiv:_emscripten_glGetVertexAttribIiv,emscripten_glGetVertexAttribIuiv:_emscripten_glGetVertexAttribIuiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glInvalidateFramebuffer:_emscripten_glInvalidateFramebuffer,emscripten_glInvalidateSubFramebuffer:_emscripten_glInvalidateSubFramebuffer,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQuery:_emscripten_glIsQuery,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsSampler:_emscripten_glIsSampler,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsSync:_emscripten_glIsSync,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsTransformFeedback:_emscripten_glIsTransformFeedback,emscripten_glIsVertexArray:_emscripten_glIsVertexArray,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glMapBufferRange:_emscripten_glMapBufferRange,emscripten_glPauseTransformFeedback:_emscripten_glPauseTransformFeedback,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glProgramBinary:_emscripten_glProgramBinary,emscripten_glProgramParameteri:_emscripten_glProgramParameteri,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadBuffer:_emscripten_glReadBuffer,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glRenderbufferStorageMultisample:_emscripten_glRenderbufferStorageMultisample,emscripten_glResumeTransformFeedback:_emscripten_glResumeTransformFeedback,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glSamplerParameterf:_emscripten_glSamplerParameterf,emscripten_glSamplerParameterfv:_emscripten_glSamplerParameterfv,emscripten_glSamplerParameteri:_emscripten_glSamplerParameteri,emscripten_glSamplerParameteriv:_emscripten_glSamplerParameteriv,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexImage3D:_emscripten_glTexImage3D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexStorage2D:_emscripten_glTexStorage2D,emscripten_glTexStorage3D:_emscripten_glTexStorage3D,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glTexSubImage3D:_emscripten_glTexSubImage3D,emscripten_glTransformFeedbackVaryings:_emscripten_glTransformFeedbackVaryings,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform1ui:_emscripten_glUniform1ui,emscripten_glUniform1uiv:_emscripten_glUniform1uiv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform2ui:_emscripten_glUniform2ui,emscripten_glUniform2uiv:_emscripten_glUniform2uiv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform3ui:_emscripten_glUniform3ui,emscripten_glUniform3uiv:_emscripten_glUniform3uiv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniform4ui:_emscripten_glUniform4ui,emscripten_glUniform4uiv:_emscripten_glUniform4uiv,emscripten_glUniformBlockBinding:_emscripten_glUniformBlockBinding,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix2x3fv:_emscripten_glUniformMatrix2x3fv,emscripten_glUniformMatrix2x4fv:_emscripten_glUniformMatrix2x4fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix3x2fv:_emscripten_glUniformMatrix3x2fv,emscripten_glUniformMatrix3x4fv:_emscripten_glUniformMatrix3x4fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUniformMatrix4x2fv:_emscripten_glUniformMatrix4x2fv,emscripten_glUniformMatrix4x3fv:_emscripten_glUniformMatrix4x3fv,emscripten_glUnmapBuffer:_emscripten_glUnmapBuffer,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisor:_emscripten_glVertexAttribDivisor,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribDivisorARB:_emscripten_glVertexAttribDivisorARB,emscripten_glVertexAttribDivisorEXT:_emscripten_glVertexAttribDivisorEXT,emscripten_glVertexAttribDivisorNV:_emscripten_glVertexAttribDivisorNV,emscripten_glVertexAttribI4i:_emscripten_glVertexAttribI4i,emscripten_glVertexAttribI4iv:_emscripten_glVertexAttribI4iv,emscripten_glVertexAttribI4ui:_emscripten_glVertexAttribI4ui,emscripten_glVertexAttribI4uiv:_emscripten_glVertexAttribI4uiv,emscripten_glVertexAttribIPointer:_emscripten_glVertexAttribIPointer,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_glWaitSync:_emscripten_glWaitSync,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_memcpy_big:_emscripten_memcpy_big,emscripten_request_fullscreen_strategy:_emscripten_request_fullscreen_strategy,emscripten_request_pointerlock:_emscripten_request_pointerlock,emscripten_resize_heap:_emscripten_resize_heap,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_set_beforeunload_callback_on_thread:_emscripten_set_beforeunload_callback_on_thread,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_click_callback_on_thread:_emscripten_set_click_callback_on_thread,emscripten_set_element_css_size:_emscripten_set_element_css_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keypress_callback_on_thread:_emscripten_set_keypress_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mouseenter_callback_on_thread:_emscripten_set_mouseenter_callback_on_thread,emscripten_set_mouseleave_callback_on_thread:_emscripten_set_mouseleave_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_pointerlockchange_callback_on_thread:_emscripten_set_pointerlockchange_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_visibilitychange_callback_on_thread:_emscripten_set_visibilitychange_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,emscripten_webgl_create_context:_emscripten_webgl_create_context,emscripten_webgl_enable_extension:_emscripten_webgl_enable_extension,emscripten_webgl_init_context_attributes:_emscripten_webgl_init_context_attributes,emscripten_webgl_make_context_current:_emscripten_webgl_make_context_current,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glAttachShader:_glAttachShader,glBindAttribLocation:_glBindAttribLocation,glBindBuffer:_glBindBuffer,glBindVertexArray:_glBindVertexArray,glBlendColor:_glBlendColor,glBlendEquationSeparate:_glBlendEquationSeparate,glBlendFuncSeparate:_glBlendFuncSeparate,glBufferData:_glBufferData,glClear:_glClear,glClearColor:_glClearColor,glClearDepth:_glClearDepth,glCompileShader:_glCompileShader,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glDeleteShader:_glDeleteShader,glDepthFunc:_glDepthFunc,glDisable:_glDisable,glDrawElements:_glDrawElements,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glFrontFace:_glFrontFace,glGenBuffers:_glGenBuffers,glGenVertexArrays:_glGenVertexArrays,glGetAttribLocation:_glGetAttribLocation,glGetUniformLocation:_glGetUniformLocation,glHint:_glHint,glLinkProgram:_glLinkProgram,glReleaseShaderCompiler:_glReleaseShaderCompiler,glScissor:_glScissor,glShaderSource:_glShaderSource,glUniform1f:_glUniform1f,glUniform1i:_glUniform1i,glUniform3f:_glUniform3f,glUniform4f:_glUniform4f,glUseProgram:_glUseProgram,glVertexAttribPointer:_glVertexAttribPointer,glViewport:_glViewport,ma},asm=createWasm(),___wasm_call_ctors=Module.___wasm_call_ctors=createExportWrapper("__wasm_call_ctors"),_nano=Module._nano=createExportWrapper("nano"),_malloc=Module._malloc=createExportWrapper("malloc"),_str=Module._str=createExportWrapper("str"),_pl=Module._pl=createExportWrapper("pl"),_b3=Module._b3=createExportWrapper("b3"),_main=Module._main=createExportWrapper("main"),_free=Module._free=createExportWrapper("free"),_memcpy=Module._memcpy=createExportWrapper("memcpy"),___errno_location=Module.___errno_location=createExportWrapper("__errno_location"),___dl_seterr=Module.___dl_seterr=createExportWrapper("__dl_seterr"),_fflush=Module._fflush=createExportWrapper("fflush"),___trap=Module.___trap=function(){return(___trap=Module.___trap=Module.asm.__trap).apply(null,arguments)},_emscripten_stack_init=Module._emscripten_stack_init=function(){return(_emscripten_stack_init=Module._emscripten_stack_init=Module.asm.emscripten_stack_init).apply(null,arguments)},_emscripten_stack_get_free=Module._emscripten_stack_get_free=function(){return(_emscripten_stack_get_free=Module._emscripten_stack_get_free=Module.asm.emscripten_stack_get_free).apply(null,arguments)},_emscripten_stack_get_base=Module._emscripten_stack_get_base=function(){return(_emscripten_stack_get_base=Module._emscripten_stack_get_base=Module.asm.emscripten_stack_get_base).apply(null,arguments)},_emscripten_stack_get_end=Module._emscripten_stack_get_end=function(){return(_emscripten_stack_get_end=Module._emscripten_stack_get_end=Module.asm.emscripten_stack_get_end).apply(null,arguments)},stackSave=Module.stackSave=createExportWrapper("stackSave"),stackRestore=Module.stackRestore=createExportWrapper("stackRestore"),stackAlloc=Module.stackAlloc=createExportWrapper("stackAlloc"),_emscripten_stack_get_current=Module._emscripten_stack_get_current=function(){return(_emscripten_stack_get_current=Module._emscripten_stack_get_current=Module.asm.emscripten_stack_get_current).apply(null,arguments)},___cxa_decrement_exception_refcount=Module.___cxa_decrement_exception_refcount=createExportWrapper("__cxa_decrement_exception_refcount"),___cxa_increment_exception_refcount=Module.___cxa_increment_exception_refcount=createExportWrapper("__cxa_increment_exception_refcount"),___thrown_object_from_unwind_exception=Module.___thrown_object_from_unwind_exception=createExportWrapper("__thrown_object_from_unwind_exception"),___get_exception_message=Module.___get_exception_message=createExportWrapper("__get_exception_message"),dynCall_jiji=Module.dynCall_jiji=createExportWrapper("dynCall_jiji"),dynCall_ji=Module.dynCall_ji=createExportWrapper("dynCall_ji"),___start_em_js=Module.___start_em_js=152348,___stop_em_js=Module.___stop_em_js=159754;Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.FS_createPath=FS.createPath,Module.FS_createDataFile=FS.createDataFile,Module.FS_createPreloadedFile=FS.createPreloadedFile,Module.FS_createLazyFile=FS.createLazyFile,Module.FS_createDevice=FS.createDevice,Module.FS_unlink=FS.unlink,Module.ccall=ccall;var unexportedRuntimeSymbols=["run","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","FS_createFolder","FS_createLink","getLEB","getFunctionTables","alignFunctionTables","registerFunctions","prettyPrint","getCompilerSetting","out","err","callMain","abort","keepRuntimeAlive","wasmMemory","stackAlloc","stackSave","stackRestore","getTempRet0","setTempRet0","writeStackCookie","checkStackCookie","ptrToString","zeroMemory","stringToNewUTF8","exitJS","getHeapMax","abortOnCannotGrowMemory","emscripten_realloc_buffer","ENV","ERRNO_CODES","ERRNO_MESSAGES","setErrNo","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","DNS","getHostByName","Protocols","Sockets","getRandomDevice","warnOnce","traverseStack","UNWIND_CACHE","convertPCtoSourceLocation","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","runMainThreadEmAsm","jstoi_q","jstoi_s","getExecutableName","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","handleException","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","safeSetTimeout","asmjsMangle","asyncLoad","alignMemory","mmapAlloc","handleAllocator","writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getCFunc","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","setValue","getValue","PATH","PATH_FS","intArrayFromString","intArrayToString","AsciiToString","stringToAscii","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","allocateUTF8","allocateUTF8OnStack","writeStringToMemory","writeArrayToMemory","writeAsciiToMemory","SYSCALLS","getSocketFromFD","getSocketAddress","JSEvents","registerKeyEventCallback","specialHTMLTargets","maybeCStringToJsString","findEventTarget","findCanvasEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","currentFullscreenStrategy","restoreOldWindowedStyle","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","demangle","demangleAll","jsStackTrace","stackTrace","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","dlopenMissingError","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","promiseMap","newNativePromise","getPromise","getExceptionMessageCommon","getCppExceptionTag","getCppExceptionThrownObjectFromWebAssemblyException","incrementExceptionRefcount","decrementExceptionRefcount","getExceptionMessage","Browser","setMainLoop","wget","FS","MEMFS","TTY","PIPEFS","SOCKFS","_setNetworkCallback","tempFixedLengthArray","miniTempWebGLFloatBuffers","heapObjectForWebGLType","heapAccessShiftForWebGLHeap","GL","emscriptenWebGLGet","computeUnpackAlignedImageSize","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","emscriptenWebGLGetBufferBinding","emscriptenWebGLValidateMapBufferTarget","writeGLArray","AL","SDL_unicode","SDL_ttfContext","SDL_audio","SDL","SDL_gfx","GLUT","EGL","GLFW_Window","GLFW","GLEW","IDBStore","runAndAbortIfError","emscriptenWebGLGetIndexed","ALLOC_NORMAL","ALLOC_STACK","allocate"];unexportedRuntimeSymbols.forEach(unexportedRuntimeSymbol);var missingLibrarySymbols=["emscripten_realloc_buffer","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","getHostByName","traverseStack","convertPCtoSourceLocation","jstoi_s","getDynCaller","runtimeKeepalivePush","runtimeKeepalivePop","maybeExit","asmjsMangle","handleAllocator","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","convertU32PairToI53","cwrap","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","allocateUTF8OnStack","writeStringToMemory","getSocketFromFD","getSocketAddress","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","hideEverythingExceptGivenElement","restoreHiddenElements","softFullscreenResizeWebGLRenderTarget","registerPointerlockErrorEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","jsStackTrace","stackTrace","checkWasiClock","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","newNativePromise","getPromise","_setNetworkCallback","writeGLArray","SDL_unicode","SDL_ttfContext","SDL_audio","GLFW_Window","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate"],calledRun;function callMain(e){assert(0==runDependencies,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'),assert(0==__ATPRERUN__.length,"cannot call main when preRun functions remain to be called");var t=Module._main;try{var r=t(0,0);return exitJS(r,!0),r}catch(e){return handleException(e)}}function stackCheckInit(){_emscripten_stack_init(),writeStackCookie()}function run(e){function t(){calledRun||(calledRun=!0,Module.calledRun=!0,ABORT||(initRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),shouldRunNow&&callMain(e),postRun()))}e=e||arguments_,runDependencies>0||(stackCheckInit(),preRun(),runDependencies>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Module.setStatus("")}),1),t()}),1)):t(),checkStackCookie()))}function checkUnflushedContent(){var e=out,t=err,r=!1;out=err=e=>{r=!0};try{_fflush(0),["stdout","stderr"].forEach((function(e){var t=FS.analyzePath("/dev/"+e);if(t){var n=t.object.rdev,i=TTY.ttys[n];i&&i.output&&i.output.length&&(r=!0)}}))}catch(e){}out=e,err=t,r&&warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}if(missingLibrarySymbols.forEach(missingLibrarySymbol),dependenciesFulfilled=function e(){calledRun||run(),calledRun||(dependenciesFulfilled=e)},Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run();let bz=new BroadcastChannel("bez");function pll(){Module.ccall("pl")}let fll=new BroadcastChannel("file"),tsl,slt,$ll,$h,r$,$w,$r,$hi,$lt,$hg,rnum,$sc,$ls,lo,mv,he,wi,$pt,mil,randSong,randShade;fll.addEventListener("message",(e=>{let t=new Uint8Array(e.data.data);FS.writeFile("/snd/sample.wav",t),setTimeout((function(){pll()}),1e3),new BroadcastChannel("shutDown").postMessage({data:222})}));let $iwid=document.getElementById("iwid"),mV=document.getElementById("mv"),loadV=document.getElementById("ldv"),$sngs=[],$vids=[],$shds=[];function sngs(e){var t=(new DOMParser).parseFromString(e.responseText,"text/html").getElementsByTagName("pre")[0].getElementsByTagName("a");$sngs[0]=t.length;for(var r=1;r<t.length;r++){var n=t[r].href,i=location.href;i=i.replace(/1ink.1ink/,""),n=n.replace(i,""),$sngs[r]=i+"songs/"+n}}function vids(e){var t=(new DOMParser).parseFromString(e.responseText,"text/html").getElementsByTagName("pre")[0].getElementsByTagName("a");$vids[0]=t.length;for(var r=1;r<t.length;r++){var n=t[r].href,i=location.href;i=i.replace(/1ink.1ink/,""),n=n.replace(i,""),$vids[r]=i+"video/"+n}}function shds(e){var t=(new DOMParser).parseFromString(e.responseText,"text/html").getElementsByTagName("pre")[0].getElementsByTagName("a");$shds[0]=t.length;for(var r=1;r<t.length;r++){var n=t[r].href,i=location.href;i=i.replace(/1ink.1ink/,""),n=n.replace(i,""),$shds[r+1]="https://glsl.1ink.us/shaders/"+n}randShade=Math.random(),randShade=Math.floor($shds[0]*randShade)+5;let o=document.getElementById("path").innerHTML,a=new XMLHttpRequest;a.open("GET",o,!0),a.responseType="arraybuffer",a.onload=function(e){let t=a.response;if(t){let e=new Uint8ClampedArray(t);FS.writeFile("/shader/shader1.toy",e)}},a.send(null),setTimeout((function(){Module.ccall("str")}),500)}function scanSongs(){var e=new XMLHttpRequest;e.onreadystatechange=function(){4==this.readyState&&200==this.status&&sngs(this)},e.open("GET","songs/",!0),e.send()}function scanVideos(){var e=new XMLHttpRequest;e.onreadystatechange=function(){4==this.readyState&&200==this.status&&vids(this)},e.open("GET","video/",!0),e.send()}function scanShaders(){var e=new XMLHttpRequest;e.onreadystatechange=function(){4==this.readyState&&200==this.status&&shds(this)},e.open("GET","https://glsl.1ink.us/shaders/",!0),e.send()}function snd(){randSong=Math.floor(($sngs[0]-5)*Math.random());let e=$sngs[randSong+5];document.getElementById("track").src=e,new BroadcastChannel("sng").postMessage({data:e})}scanVideos(),scanShaders(),scanSongs(),document.getElementById("pmhig").innerHTML=parseInt(window.innerHeight,10),document.getElementById("ihig").innerHTML=parseInt(window.innerHeight,10),document.getElementById("scanvas").height=parseInt(window.innerHeight,10),document.getElementById("scanvas").width=parseInt(window.innerHeight,10),document.getElementById("mv").load(),document.getElementById("ldv").load(),document.getElementById("btn8").addEventListener("click",(function(){setTimeout((function(){window.open("./flac")}),250),setTimeout((function(){snd()}),1200)})),document.getElementById("btn6").addEventListener("click",(function(){Module.ccall("stp"),scanShaders(),setTimeout((function(){Module.ccall("str")}),500)}));let tem=document.getElementById("tim");ban=document.getElementById("btn1");let sfr=document.getElementById("slideframe");function grab$lt(){$lt=Math.round($lt)}$lt=tem.innerHTML,grab$lt();let slo=new Slideout({panel:document.getElementById("panel"),menu:document.getElementById("menu"),padding:384,tolerance:70,easing:"cubic-bezier(.32,2,.55,.27)"});ban.addEventListener("click",(function(){slo.toggle(),sfr.innerHTML="",setTimeout((function(){grab$lt(),slt=$lt/1e3,slt=Math.round(slt),sfr.innerHTML='<input type="text" id="timeslider"/>',tsl=new rSlider({target:"#timeslider",values:{min:1,max:45},step:[.5],labels:!1,tooltip:!0,scale:!1}),grab$lt(),slt=$lt/1e3,slt*=100,slt=Math.round(slt),slt/=100,tsl.setValues(slt),document.getElementById("menu").addEventListener("click",(function(){$ll=tsl.getValue(),$ll*=100,$ll=Math.round($ll),$ll/=100,$ll*=1e3,tem.innerHTML=$ll})),setTimeout((function(){slt=tem.innerHTML}),8)}),16)}));let adr="./intro.mp4";wi=1920,he=1080,hii=window.innerHeight,document.getElementById("ihid").innerHTML=hii,r$=hii/he,$w=wi*r$;let $ihigB=document.getElementById("ihid"),$ihig=document.getElementById("ihig");function loada(){loadV.addEventListener("canplay",(function(){loadV.width=this.videoWidth,loadV.height=this.videoHeight,document.getElementById("wid").innerHTML=this.videoWidth,document.getElementById("hig").innerHTML=this.videoHeight,$sc=this.duration,mil=Math.round(1e3*$sc),$pt=Math.random()*mil,$pt*=1e3,$pt/=1e3,$pt=Math.round($pt),$pt/=1e3,document.getElementById("idur").innerHTML=mil/1e3,document.getElementById("itim").innerHTML=$pt})),vide=document.querySelectorAll("video"),document.getElementById("pmhig").innerHTML=parseInt(window.innerHeight,10),hii=window.innerHeight,document.getElementById("ihid").innerHTML=hii,$lt=Math.round(tem.innerHTML),$ldt=document.getElementById("tim").innerHTML,$ls=$lt/1e3,$ls*=1e3,$ls=Math.round($ls),$ls/=1e3,rnum=Math.floor(Math.random()*($vids[0]-5)+5),document.getElementById("isrc").innerHTML=$vids[rnum],$h=window.innerHeight,he=document.getElementById("hig").innerHTML,wi=document.getElementById("wid").innerHTML,r$=he/$h,$w=wi/r$,hii=$ihigB.innerHTML,$hi=$h-hii,$hi>1&&($h=$ihigB.innerHTML,$ihig.innerHTML=$h,$r=$h/he,$r*=1e3,$r/=1e3,$w=wi*$r),$hg=$h+"px",window.scroll(0,0),mv=vide[0].id,lo=vide[1].id,vide[0].id=lo,vide[1].id=mv,document.getElementById("ldv").src=document.getElementById("isrc").innerHTML,document.getElementById("ldv").currentTime=document.getElementById("itim").innerHTML,$iwid.innerHTML=parseInt($w,10),$ihig.innerHTML=parseInt(window.innerHeight,10),document.getElementById("pmhig").innerHTML=parseInt(window.innerHeight,10),setTimeout((function(){document.getElementById("circle").height=parseInt(window.innerHeight,10),document.getElementById("circle").width=parseInt(window.innerWidth,10),document.getElementById("di").click()}),500),setTimeout((function(){loada()}),$ldt)}$hg=hii+"px",$ihig.innerHTML=parseInt(window.innerHeight,10),$iwid.innerHTML=parseInt($w,10),document.getElementById("wrap").style.lineheight=$hg,document.getElementById("wrap").style.pointerEvents="auto",document.getElementById("isrc").innerHTML=adr,mV.play(),setTimeout((function(){bz.postMessage({data:222})}),600),loada();