Files
microw8/v0.2.1/index.html
2025-03-01 11:04:04 +00:00

1 line
17 KiB
HTML

<!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>html,body,canvas{margin:0;padding:0}html{color:#808070;height:100%;background-color:#202024;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body{height:100%;grid-template-rows:1fr 0fr;display:grid}#uw8{position:absolute}#uw8 a{font-size:130%}#centered{place-self:center}a{color:#303630}a:hover{color:#405040}.screen{width:320px;height:240px;image-rendering:pixelated;background-color:#202428;border:4px solid #303040;margin-bottom:8px;box-shadow:5px 5px 20px #000}#screen{cursor:none}#start{font-size:150%}#timer:before{content:"";width:12px;height:12px;background-color:red;border-radius:6px;margin-right:3px;display:inline-block}#message{margin-bottom:8px}.error{color:#e04030}button{color:#808070;background-color:#303440;border:1px solid #404040;border-radius:4px;padding:4px;font-family:inherit}button:hover{background-color:#202010}button:active{background-color:#504450}@media (min-width:680px) and (min-height:620px){.screen{width:640px;height:480px}}@media (min-width:1000px) and (min-height:800px){.screen{width:960px;height:720px}}@media (width:640px) and (height:480px){.screen{width:640px;height:480px;border:0;margin:0}body{overflow:hidden}}</style></head><body> <div id="uw8"> <a href="https://exoticorn.github.io/microw8">MicroW8</a> 0.2.1 </div> <div id="centered"> <canvas class="screen" id="screen" width="320" height="240"> </canvas> <button class="screen" id="start" style="display:none">Click to start</button> <div id="timer" hidden></div> <div id="message"></div> <button id="cartButton" style="visibility:hidden">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function e(e){return e&&e.__esModule?e.default:e}class t extends AudioWorkletNode{constructor(e){super(e,"apu",{outputChannelCount:[2]})}}let a=(...e)=>new Uint8Array(...e),n=(...e)=>new Uint32Array(...e);let s=function(s,A={}){A.setMessage||(A.setMessage=(e,t)=>{t&&console.log("error: "+t)});let r,B,o,i,l,d,F,u,g=s.getContext("2d"),c=g.createImageData(320,240),D=A.devkitMode,C=0,f=null==A.keyboardElement?s:A.keyboardElement;if(f){let e=e=>{let t,a="keydown"==e.type;switch(e.code){case"ArrowUp":t=1;break;case"ArrowDown":t=2;break;case"ArrowLeft":t=4;break;case"ArrowRight":t=8;break;case"KeyZ":t=16;break;case"KeyX":t=32;break;case"KeyA":t=64;break;case"KeyS":t=128;break;case"KeyR":a&&w(B,!0);break;case"F9":a&&s.toBlob((e=>{h(e,".png")})),e.preventDefault();break;case"F10":a&&function(){if(l)return l.stop(),l=null,F.disconnect(u),F=null,void(u=null);let e=s.captureStream();u=o.createMediaStreamDestination(),F=i,i.connect(u),e.addTrack(u.stream.getAudioTracks()[0]),l=new MediaRecorder(e,{mimeType:"video/webm",videoBitsPerSecond:25e6});let t=[];l.ondataavailable=e=>{t.push(e.data)};let a=A.timerElement;a&&(a.hidden=!1,a.innerText="00:00");function n(){if(d){if(a){let e=Math.floor((Date.now()-d)/1e3);a.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(n,1e3)}}l.onstop=()=>{a&&(a.hidden=!0),h(new Blob(t,{type:"video/webm"}),".webm")},l.start(),d=Date.now(),setTimeout(n,1e3)}(),e.preventDefault()}a?C|=t:C&=~t};f.onkeydown=e,f.onkeyup=e}async function w(l,d){r&&(r(),r=null),o=new AudioContext({sampleRate:44100});let F=!0,u=new AbortController;r=()=>{o.close(),F=!1,u.abort()};let f=l.byteLength;if(A.setMessage(f),0==f)return;await o.audioWorklet.addModule(e("data:application/javascript,let%20e%3D%28...e%29%3D%3Enew%20Uint8Array%28...e%29%3Bclass%20s%20extends%20AudioWorkletProcessor%7Bconstructor%28%29%7Bsuper%28%29%2Cthis.sampleIndex%3D0%2Cthis.currentTime%3D0%2Cthis.isFirstMessage%3D%210%2Cthis.pendingUpdates%3D%5B%5D%2Cthis.port.onmessage%3De%3D%3E%7Bthis.memory%3F%28this.isFirstMessage%26%26%28this.currentTime%2B%3D%28e.data.t-this.currentTime%29%2F8%2Cthis.isFirstMessage%3D%211%29%2Cthis.pendingUpdates.push%28e.data%29%29%3Athis.load%28e.data%5B0%5D%2Ce.data%5B1%5D%29%7D%7Dasync%20load%28e%2Cs%29%7Blet%20t%3Dnew%20WebAssembly.Memory%28%7Binitial%3A4%2Cmaximum%3A4%7D%29%2Ci%3D%7Benv%3A%7Bmemory%3At%7D%7D%3Bfor%28let%20e%20of%5B%22acos%22%2C%22asin%22%2C%22atan%22%2C%22atan2%22%2C%22cos%22%2C%22exp%22%2C%22log%22%2C%22sin%22%2C%22tan%22%2C%22pow%22%5D%29i.env%5Be%5D%3DMath%5Be%5D%3Bfor%28let%20e%3D9%3Be%3C64%3B%2B%2Be%29i.env%5B%22reserved%22%2Be%5D%3D%28%29%3D%3E%7B%7D%3Blet%20r%3D%22%22%3Bi.env.logChar%3De%3D%3E%7B10%3D%3De%3F%28console.log%28r%29%2Cr%3D%22%22%29%3Ar%2B%3DString.fromCharCode%28e%29%7D%3Bfor%28let%20e%3D0%3Be%3C16%3B%2B%2Be%29i.env%5B%22g_reserved%22%2Be%5D%3D0%3Blet%20n%3Dasync%20e%3D%3E%28await%20WebAssembly.instantiate%28e%2Ci%29%29.instance%2Ca%3Dawait%20n%28e%29%3Bfor%28let%20e%20in%20a.exports%29i.env%5Be%5D%3Da.exports%5Be%5D%3Blet%20o%3Dawait%20n%28s%29%3Bthis.memory%3Dt%2Cthis.snd%3Do.exports.snd%7C%7Ca.exports.gesSnd%2Cthis.port.postMessage%282%29%7Dprocess%28s%2Ct%2Ci%29%7Bif%28this.isFirstMessage%3D%210%2Cthis.snd%29%7Bfor%28%3Bthis.pendingUpdates.length%3E0%26%26this.pendingUpdates%5B0%5D.t%3C%3Dthis.currentTime%3B%29e%28this.memory.buffer%2C80%2C32%29.set%28e%28this.pendingUpdates.shift%28%29.r%29%29%3Bnew%20Uint32Array%28this.memory.buffer%29%5B16%5D%3Dthis.currentTime%3Blet%20s%3Dt%5B0%5D%2Ci%3Dthis.sampleIndex%2Cr%3Ds%5B0%5D.length%3Bfor%28let%20e%3D0%3Be%3Cr%3B%2B%2Be%29s%5B0%5D%5Be%5D%3Dthis.snd%28i%2B%2B%29%2Cs%5B1%5D%5Be%5D%3Dthis.snd%28i%2B%2B%29%3Bthis.sampleIndex%3D4294967295%26i%2Cthis.currentTime%2B%3Dr%2F44.1%7Dreturn%210%7D%7DregisterProcessor%28%22apu%22%2Cs%29%3B")),i=new t(o);let h,m=0,I=new Promise((e=>h=e)),Q=e=>{m|=e,3==m&&h&&(h(!0),h=null)},p=()=>{"suspended"==o.state?(A.startButton&&(A.startButton.style="",s.style="display:none"),(A.startButton||s).onclick=()=>{o.resume()}):(A.startButton&&(A.startButton.style="display:none",s.style=""),Q(1))};o.onstatechange=p,p(),B=l;let M=window.location.pathname;if(f<=1024&&!d){let e="";for(let t of a(l))e+=String.fromCharCode(t);M+="#"+btoa(e),M!=window.location.pathname+window.location.hash&&history.pushState(null,null,M)}s.width=s.width;try{let t={initial:4};D||(t.maximum=4);let s,r=new WebAssembly.Memory(t),d=a(r.buffer),h={env:{memory:r}},m=e=>{if(s&&(!D||0!=a(e)[0])){d.set(a(e));let t=s.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),a(e).set(d.slice(0,t))}return e},p=async e=>(await WebAssembly.instantiate(e,h)).instance,M=async e=>m(await(await fetch(e)).arrayBuffer());s=await p(await M(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC98DAQBBAAvYA5efz3FZ0f5yFbUvithc%2FqHFfzojM7KVsEv7fSGG57W3091tBMQ3YrNZU2%2FjguFMMLW1a4URR2fHh86SJQlSzejWWM32zngHHWdNsU4kGrhmGgxUZIRAb6JLtW%2BQyuXIBssNN5IEWkb%2BrOGf8rSLasDdCc83RsuuCyL03791uwlwi0T8mJR%2BslH82ckKlC5TK6wnPyoB908kSeLY%2BEhunDhtWHA7EWwwdQvigYMhTQ6Cyi%2BXelkSq6CnCQnZrAqXrvEsSe7%2BYNt3Hg0MFycXedDIoFANBDyfPayKr1EeSiF%2FV%2F15gTYFDzZW11RK%2B8G36tFDe%2F0eS8UvRLzmz1%2BECmaHQy5Frnorhi3MJqKOrte8TbMZuNPBYJ2xxYJYAfb%2Fgv0WEsQcjrHzbYTdl%2FssybvXkXL5kX9wqIbmjfuuuWKQ5%2FKpFH8CVERpjQgbzuManrAJEwr9sqV4%2FshQkQfL84qfsILfEsCx%2FdaZxj1wCtbS9ooFIuU%2FeAVS6vj4%2F84MOrrGpzpn4n%2BPJbyQjmN1MWq8%2Bfa4JXif0gmICDJhvYf7gn4ki%2B5iAeDiO6yRuZ7QVL%2BXDeNX5w3VGjuJICdg%2FM0c6GQo39rUrMsdajtL0uVRQmeH33z5%2B%2Fo%3D")));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])h.env[e]=Math[e];for(let e=9;e<64;++e)h.env["reserved"+e]=()=>{};let y="";h.env.logChar=e=>{10==e?(console.log(y),y=""):y+=String.fromCharCode(e)};for(let e=0;e<16;++e)h.env["g_reserved"+e]=0;l=m(l);let E=await M(e("data:;base64,Ak%2FvqjHb1%2FBdP9Hy4R17LfMH%2F5p3M7pQgOZGtNhfuTp4YISw9xjaxqZ1T9eG7muiL9gBlMcgqxpi0Tcg1%2Baa34nT9%2FmWRLLWRzB49Gp6sk6ph%2FIMo%2F6poDUyzvqJJ5q4RlzAdlzH5h%2FaKeTDBjfFyC5RJynHaZelKy0Z%2BlaXe5GdzAlWPX%2Fw%2BGDkL%2BNTtWOXyNTjpfAD5aQ2xO9b%2BiXQP%2FxCypXhGlVHqMCfr696uqaRwAOD5RsIkvAlEIX3sDVH0GDMQ%2BfHP4nTPliv5oLThmHkM6U6i4hAq%2BSb4srw%2Fq3jD26dPYgzmOau8PwIH50YxbMYaFIQM5eWXggA9aMCA4NcqUdKV0jMGEKfgnnbgcuCg1qzrBr65sAhMJO%2F2Fqq6fnJYzeK73tynvMLhZ9VbEi6FqNo7sxta5nr66x6duttVZJkQTEyv4aBSX1kEag1UUX0TYBs67jYZ2c4K%2Fe70a74C3g2eavio4q5KgIz%2Fqiq8IC3gbVIShRzMeZNVPykCVWaqq6VZg046D3UJJz%2BCc5F8O4hYULKBRgamorO38bCb8VZBlEkIQw925nsnY2uDu8AjlgFXOKafkOfVZ5P0AnLoCvA3cMvvUGb7XU80kGygEQhUUjIILmKJ2GDu2jkLHCTXMI4DRv5lk%2BzMW20aLBxQrFPehh6m8SBuA9M4bhnu3gGIE5h1aa9ByLPkbQjW18mw%2FnCYIFdlikt4CjZMY7nhgK1tORO%2FFKdrYAIgL2hYswMuBPwxpQVsX05hbQHgZ3NdhAfh0OtEUAJvwWNn7oYFgq0oB47Bl1x8T9a%2BCTCHepXJ5%2Bn7S0LgvVY2Ur2WR2eJeOSbWZWIXBBRRnx2%2BwnPUutzCAgFN0OdaBRRMI0VTJeIZoSrbViUHH3UMFw6bzSOyzLHL5xU3yJC6Crv3LJmcHKNiP60vVii8QYaE4GXtcZNxbDjszi%2BDQgQ1VeN6zHlaWOfyqPQH56CjKK3LZGMtaBuGlDfxOT96CHJBjz3yPWEnu3Pq5MHT6li0bQrXCq%2BkavmqPwepDA0g1ENaESS0l%2BOKHILdWMaQbYC37qdbRairHMUCuNrQDnbDNG%2Fje8DKOPVolurfXJBUY1MVQ6n6JIlo69k8C42We5CQ9EV2R8GbaekP3e%2BSbXqt4G73MpjatxEbTArGfBJVektpkYNeORk%2BXV%2Btbwj1SekqYcSAOs5CZ1vyIHClBTem9t8IJiKzsMpegGfleXXTxQD8B7f1syahvMRmvNG%2Bd05Kf8CO5pc1mny68exR97Fevrg9pygc06zRKSXz%2FzgJkyYd%2Fspo%2F40SWxnS05lCHlZcu44whRgBX%2BZBDFgMOnUMXXjH8TplXON27pwUWLLckbnKsXtEwc8PSi87q0u%2FXzuM6Az%2FBwopWTJLHl3VSGwmkitLzcCCea45o0QKwtuC47cDtXCM2%2F%2B%2Bu%2BNSEKHp2PfIdUO56dOERsNU5jiQMMWOzr7dFWi2wqMQUihqeBUcgYaIgEpCC80SLsaa%2BLoBiT06l546U%2BDpvmzA7oknmTdnoxGb8V5vKcSVIycN3TMApDY1aunU8WkiuZPRLAcTeIkkuozX0f1KTx6s%2FlsrznpIFU2xWKMOPO2VT3qrQSVfkib3IUDX2rzKoj9ZfCONFu4WFEPfQwo9RNwQeHsJnBfwVFNlShqpIxfpmmaV9vd0%2B72OP74o2dyDvxKBXst9gmTvyO5GAzl8sPdfrfmfRjPkCklA2s5rdctXK6ipD7fp%2F%2BPQWIE8wLkkFofBuac424w88bDL4MV6NtUyqIuqUvvovqKAojiBgbEQrCIz3ZDHu4uF%2F5KPUeSk7lTIWMlTec4YBeHPpZxjJu3G%2Bgm5tWj3MUIxge29AHqBZlI2Niu7DNifzt8qyuPV8GeOOpcntBqrgtHs1ch%2BU6TgOLmNgbW8oBYw2BBzrOFQYOwK0USwRSx6cqoPfMACzWamO8FIagfssOEmNof2KBx1RHkNIpHnBTkFw4mm83yzrIuZaTVU46K3f6huff2IXZPF3EwDsIYh527NvIt6djMNFXlyzFglrdKKTurcs2GZ7YmHTmjAFV8zl8XgCX0dYDAlnKm5EHL0WBdSN7YV4lCrTpusUiDJq6HqU%2Fzw40%2FFYakNYAI3U%2B2qHCCnFgG3tQTScGqxFkY7w8DIOQQVKF%2FDWrjNR28AJHQA8MbLB51rsThBv%2BRKULMMy%2FX0%2B2qzq6rxlVFhysNB820jvBGDPzCGAhbD0Zn%2B5jk3WiIDX6kplHyDrf9RJiME35N0BpJ%2BSUTMfU7V66FrJAJCdgdui5UAZMVMo2m%2FnUG4lKN8gzO6lekPHkZeStZJi%2Bw7uGyL9JWBIWko%2FF43JZkwsR16p%2BhWBrPZvwKwCD5oZfIzQECzZvHUABBzkaWJC3%2FdzzWpqHPgXfdI9%2F%2FWkKXLtKO2mrezfvwvU9UctaxsXIJcm8nG6vMWcLH4HjQb6DjFCyuh%2Faw%2FtLLdO8qUAfiYTcPqQZ4MIRzKklmdSKyVBqzErYQVfe97Pm%2BNGZRykUuKHAR8kAAtxLXik%2BAyXkd3nWt7xxXuHF7Y%2B0ba4HYYidGhKsjFreFD7uJAWssNcGaDw9swQ657%2BmV3dEfQIJMk%2FZ1PS7uITHij%2F%2FGCQYM3yQQXCt1ee0K7b%2B%2BH3kmcFddehAEzXYMH7%2Bqu2J%2FSuhdl5TfAP6Za1SewNfjQUsdhC%2F2%2BEL9%2BgmA4eq7vNwdA4E0Dw60AWsgpTtYr2nIShlKYE94dQ7VZYY%2FyxF5eAQn2h1pyWEKGDdRt03v2QxgeYbt3hBq7%2FPWj20ng4URfJo1ayNFAkXHZPS9ud%2Bdaa9x7bq5HEwgIwpaOaukHHmNF8iXK%2FpoP7b9IN5KGlbVSwCqMU1EaoLGgsvuKuxPM0IwdMvmmBwi%2FBzN%2FsZXQX8jLS45gwzbefDVrR8hFwhZ85BH%2BTQQnPAjyyTfqj9WP6gcI2J28bwqcQnt05LdUHrLanUqI5q4roFEYRTA1%2FrVteo0tK1Dk%2FeyX%2FgeA23woUCAdILxBBfZ9RteubIEeCFRXlvPUaW3Mwx7dfHuIgPAAI7wwOl0pjXNatUMOQftz3cgla%2BShOp3M1huap1fxOchei%2FwTqSOGLOfAV5ftJeb0N8Il3nJJYgWPnw5sTO8rmB9ErkGxHVNKpdOD3TwLY4GNOZX4%2FbCYk6UiTh%2BRCj%2BIbYstCj4EPZl7Z7hUzeo37jMyGb5q5174xM%2BXi3FztPFwCIoSdbnFfpq206jBeUvFd2nvqIPArmeQ5PHpz8E0D2zTr1VhI8HQOJkhd4c0MlfV%2B%2FCAjdjoviPPAOcnBFyxkbk8KRYBbZAsYZOn3hQarYCqtoYcuj9FukZn8%2FiTHRnhiOg4ga8ah%2Fj2QVa1c%2FcTeUuiYJk40MRZmyqCmUUG7go5t7XyMzP5UVPUURv%2B2FLM1OCfwVLARJzPpBu1drDudnA5C5TQwvQGD1KD2sB5GN7I%2F5E6c5%2BpuoSqX5W2VZSKO6rIb2kTlJSEMhttsVd%2FM28U4Rq6w6l9lzdsgexR%2BpD5Jra%2BgAK%2BTO1mdcRRGlRcatKFZ8Jo2mhlLwl1UpIfCj8HktMpMxys0vsst6N8Gc1zKaqFvfIipq9vgJkf19nTBeajHTvpbje59pFii5t7qtDstMQVXpkZGlzHa2HpPsOQkhO69SE9etnm2NUWP%2B%2F%2Bb9fBEaq712783mbNEXpcUZhAcnzdkFnh0MzBFjonfR5azLzMS00d0hEKitV48VLv1mvtC7pdQQGHqVQnPCkmLSrwxrM4uLB7X3TFnlKhRaJ2Fvg%2BScaIMMR0%2BKGdo%2B%2B36Yl00hu8IPvmj2H6BDfikvKR%2FhOhjI6VjCmUZI%2Bm%2FjPWTqjw4XorT9nj7veSaPoRtuvjBZD%2FaCuhtPTXY4nOjli8Nd1Md1mS3PekM0nLGRNiOzKB5x%2BlX4tVXXBFpGPLllqDMRAGlkb7IKxF2nBwTVKbGvt40fSGSLDy7pwr7SiiW%2FDevZ1qK2EbXuLgDSJ36y1BvWbnWOSkK62UoqCLjenRE74k8FAWu8RVuclmS2BrVbucwkHbt5%2FC6odAXcNHeAtU0TDKsfE%2F4th9HbnInkOc4iU2IxjogYAZIpbtM66NyYp0sPQqcec97gy%2B9%2F4MyzuuJeS%2BfIod%2FB31pSMxr4jyzdT0lRyTwLhwUZgY8itsNJvcmwkOywbND4z2ye00wJ55TS4Y6VUH0zZWvYioSk7WsLRMRhkifDFvgTedqI1rT2YC8yCxWCkzhgPspSLEDDj01gq3mEC%2BVAEbA7HdOoCYsgROTT%2B7NTCGiMECxmCORQB9d1WAvhqvWjGLgYDzaN0DhSCZnfdepKahmBFxzNNDBjw0v4iVVd8j6Y9yt27yxCBFQ9FcmvoepXsnurwkQGlbAYp5wDglaVEveDABb%2FZWp0XqsybI%2FOZacGiG6vgPHNj3f0FLlbVFGKNCYI%2BYx0DNhGVvb20QNiAitaVh8duzbrEiCaDEiboHMDzyChEJZV%2FExq%2B7qNiEkmaqGRGhwWuyjuKRbjkPFSc%2B6nGfMDGXzJjbykjhHhsoLvdZqglHCTBq4xj6MY0%2BX3mEF6UG5fAi9iLzcOSODxk6JXxG8WL8d%2Fy2Mk1dUUV1SA30o%2B09lr12DEdB5pf1id9YRZA0cvvFMJaxYpaNMrASA%2BkvodDhHoPlIgMO6AJsKZJBAmytjWxLvQJ52M38V6iV19yLkx2OzxVLl48wM9j9I9VzMS5oXg73uYw%2B6lRJ6kRQ6ONm13Arj%2F%2FsSaHT5av%2F3nZOd9v%2FH6tvSV6Re4y6%2BNDCTJPyqRUUTzruKxSfFwhUyFRu0Avnmd74lEPBrUwcKgEl304gosRBfmvzIoPjsOekUVia%2FPKbL7DNTbv4K62trZ8zuruD%2FYVSmX2kcPVQSx4qib1FZqWyvteICVATSa6ekWmmLHHp3JvFmRzPJRxKcpytrnif4SU1uWsfMi%2FleGN5FWolk9yNmmujHMOcv9uDdAzbP1X4HNAwaqsoRo8xIvJhrA2vQYp%2FeKIGpshCvawmNyi1VXi%2FLVd6vxSn0fcsZRXrNXdbPF9CifFS%2BPgZZKuC6q0%2BEQ6jvx%2BSsGwKUKkq2CBbEsDuV8MN1%2BNQ84gZq6rjAnE0%2FC1Jw36xid2uDN0S0VxWOJon7NOmWrcgJFqy3z1vJH1BZ2fbGFXv3d2%2FQ3VRHs80ztZMP%2FOPWtlSo%3D"));i.port.onmessage=e=>Q(e.data),i.port.postMessage([E,l]);let b=await p(E);for(let e in b.exports)h.env[e]=b.exports[e];let k=await p(l),v=n(c.data.buffer);await I;let U=Date.now();const S=1e3/60;i.connect(o.destination);let L=!1,R=U,x=e=>{let t=Date.now();e?(L=!1,o.resume(),U+=t-R):(L=!0,o.suspend(),R=t)};window.addEventListener("focus",(()=>x(!0)),{signal:u.signal}),window.addEventListener("blur",(()=>x(!1)),{signal:u.signal}),x(document.hasFocus()),function e(){if(F)try{let t,s=!1;if(L)t=Date.now();else{let e=navigator.getGamepads(),A=0;for(let t=0;t<4;++t){let a=e[t];if(a){for(let e=0;e<8;++e){let n=(e+12)%16;a.buttons.length>n&&a.buttons[n].pressed&&(A|=1<<8*t+e)}if(a.axes.length>1)for(let e=0;e<4;++e){let n=a.axes[1-(e>>1)];(1&e?n:-n)>.5&&(A|=1<<8*t+e)}a.buttons.length>9&&a.buttons[9].pressed&&(s=!0)}}let B=n(r.buffer),o=Date.now()-U;B[16]=o,B[17]=C|A,k.exports.upd&&k.exports.upd(),b.exports.endFrame();let l=new ArrayBuffer(32);a(l).set(a(r.buffer,80,32)),i.port.postMessage({t:o,r:l},[l]);let F=n(r.buffer,77824,1024);for(let e=0;e<76800;++e)v[e]=4278190080|F[d[e+120]];g.putImageData(c,0,0),t=U+o-(6*o%100-50)/6/8}let A=Date.now(),o=Math.max(t+S,A);s?w(B):window.setTimeout(e,o-A)}catch(e){A.setMessage(f,e.toString())}}()}catch(e){A.setMessage(f,e.toString())}}function h(e,t){let a=document.createElement("a");a.href=URL.createObjectURL(e),a.download="microw8_"+(new Date).toISOString()+t,a.click(),URL.revokeObjectURL(a.href)}return{runModule:w,runModuleFromURL:async function(e,t){let a=await fetch(e),n=a.headers.get("Content-Type");return!(n&&n.includes("html")||200!=a.status)&&(w(await a.arrayBuffer(),t||D),!0)},setDevkitMode:e=>D=e}}(document.getElementById("screen"),{setMessage:function(e,t){let a=e?`${e} bytes`:"Insert cart";t&&(a+=` - <span class="error">${t.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=a},keyboardElement:window,timerElement:document.getElementById("timer"),startButton:document.getElementById("start")});function A(){let e=window.location.hash.slice(1);"devkit"!=e?(s.setDevkitMode(!1),e.length>0?e.startsWith("url=")?s.runModuleFromURL(e.slice(4),!0):s.runModuleFromURL("data:;base64,"+e):s.runModule(new ArrayBuffer(0))):s.setDevkitMode(!0)}window.onhashchange=A;let r=()=>{let e=document.getElementById("cartButton");e.style="",e.onclick=()=>{let e=document.createElement("input");e.type="file",e.accept=".wasm,.uw8,application/wasm",e.onchange=()=>{e.files.length>0&&s.runModuleFromURL(URL.createObjectURL(e.files[0]))},e.click()},screen.ondragover=e=>{e.preventDefault()},screen.ondrop=e=>{let t=e.dataTransfer&&e.dataTransfer.files;t&&1==t.length&&(e.preventDefault(),s.runModuleFromURL(URL.createObjectURL(e.dataTransfer.files[0])))},A()},B=window.location;0!=B.hash.length?r():(async()=>{let e=B.href;e.endsWith(".html")?e=e.slice(0,e.length-4)+"uw8":(e.endsWith("/")||(e+="/"),e+="cart.uw8");try{await s.runModuleFromURL(e,!0)||r()}catch(e){r()}})();</script></html>