function k(b,a,c,d){b.i.pa(b.T,a,c,d,void 0)}function p(b,a,c,d){b.i.v?k(b,a,c,d):b.i.ub()._OnMessageFromDOM({type:"event",component:b.T,handler:a,dispatchOpts:d||null,data:c,responseId:null})}function q(b,a,c){b.i.h(b.T,a,c)}function r(b,a){for(const [c,d]of a)q(b,c,d)}window.P=class{constructor(b,a){this.i=b;this.T=a}Ja(){}};window.lb=class{constructor(b){this.Ua=b;this.Gb=5;this.M=-1;this.ha=-Infinity;this.Lb=()=>{this.M=-1;this.ha=Date.now();this.U=!0;this.Ua();this.U=!1};this.Va=this.U=!1}};
"use strict";function aa(b,a){q(b,"get-element",c=>{const d=b.u.get(c.elementId);return a(d,c)})}
window.$b=class extends self.P{constructor(b,a){super(b,a);this.u=new Map;this.xa=!0;r(this,[["create",()=>{throw Error("required override");}],["destroy",c=>{c=c.elementId;const d=this.u.get(c);this.xa&&d.parentElement.removeChild(d);this.u.delete(c)}],["set-visible",c=>{this.xa&&(this.u.get(c.elementId).style.display=c.isVisible?"":"none")}],["update-position",c=>{if(this.xa){var d=this.u.get(c.elementId);d.style.left=c.left+"px";d.style.top=c.top+"px";d.style.width=c.width+"px";d.style.height=
c.height+"px";c=c.fontSize;null!==c&&(d.style.fontSize=c+"em")}}],["update-state",c=>{this.u.get(c.elementId);throw Error("required override");}],["focus",c=>this.ua(c)],["set-css-style",c=>{const d=this.u.get(c.elementId),e=c.prop;c=c.val;e.startsWith("--")?d.style.setProperty(e,c):d.style[e]=c}],["set-attribute",c=>{this.u.get(c.elementId).setAttribute(c.name,c.val)}],["remove-attribute",c=>{this.u.get(c.elementId).removeAttribute(c.name)}]]);aa(this,c=>c)}ua(b){var a=this.u.get(b.elementId);b.focus?
a.focus():a.blur()}};"use strict";const t=/(iphone|ipod|ipad|macos|macintosh|mac os x)/i.test(navigator.userAgent),u=/android/i.test(navigator.userAgent);let v=0;function w(b){const a=document.createElement("script");a.async=!1;a.type="module";return b.Qb?new Promise(c=>{const d="c3_resolve_"+v;++v;self[d]=c;a.textContent=b.Ub+`\n\nself["${d}"]();`;document.head.appendChild(a)}):new Promise((c,d)=>{a.onload=c;a.onerror=d;a.src=b;document.head.appendChild(a)})}let x=!1,y=!1;
function ba(){if(!x){try{new Worker("blob://",{get type(){y=!0}})}catch(b){}x=!0}return y}let z=new Audio;const ca={"audio/webm; codecs=opus":!!z.canPlayType("audio/webm; codecs=opus"),"audio/ogg; codecs=opus":!!z.canPlayType("audio/ogg; codecs=opus"),"audio/webm; codecs=vorbis":!!z.canPlayType("audio/webm; codecs=vorbis"),"audio/ogg; codecs=vorbis":!!z.canPlayType("audio/ogg; codecs=vorbis"),"audio/mp4":!!z.canPlayType("audio/mp4"),"audio/mpeg":!!z.canPlayType("audio/mpeg")};z=null;
async function da(b){b=await A(b);return(new TextDecoder("utf-8")).decode(b)}function A(b){return new Promise((a,c)=>{const d=new FileReader;d.onload=e=>a(e.target.result);d.onerror=e=>c(e);d.readAsArrayBuffer(b)})}const B=[];let C=0;window.RealFile=window.File;const E=[],F=new Map,G=new Map;let ea=0;const H=[];self.runOnStartup=function(b){if("function"!==typeof b)throw Error("runOnStartup called without a function");H.push(b)};const fa=new Set(["cordova","playable-ad","instant-games"]);let ha=!1;
window.D=class b{constructor(a){this.v=a.Wb;this.X=null;this.m="";this.K=a.Tb;this.ba={};this.Da=this.N=null;this.ga=[];this.j=this.$=null;this.Za=!1;this.V=null;this.J=-1;this.Kb=()=>this.Bb();this.bb=[];this.g=a.cb;this.Ba="file"===location.protocol.substr(0,4);!this.v||"undefined"!==typeof OffscreenCanvas&&navigator.userActivation&&ba()||(this.v=!1);if("playable-ad"===this.g||"instant-games"===this.g)this.v=!1;if("cordova"===this.g&&this.v)if(u){const c=/Chrome\/(\d+)/i.exec(navigator.userAgent);
c&&90<=parseInt(c[1],10)||(this.v=!1)}else this.v=!1;this.ia=this.B=null;"html5"!==this.g||window.isSecureContext||console.warn("[Construct] Warning: the browser indicates this is not a secure context. Some features may be unavailable. Use secure (HTTPS) hosting to ensure all features are available.");this.h("runtime","cordova-fetch-local-file",c=>this.xb(c));this.h("runtime","create-job-worker",()=>this.yb());"cordova"===this.g?document.addEventListener("deviceready",()=>this.Oa(a)):this.Oa(a)}ib(){return t&&
"cordova"===this.g}oa(){const a=navigator.userAgent;return t&&fa.has(this.g)||navigator.standalone||/crios\/|fxios\/|edgios\//i.test(a)}gb(){return u}La(){return u&&fa.has(this.g)}async Oa(a){"macos-wkwebview"===this.g&&this.wa({type:"ready"});if("playable-ad"===this.g){this.B=self.c3_base64files;this.ia={};await this.qb();for(let d=0,e=a.O.length;d<e;++d){var c=a.O[d];this.ia.hasOwnProperty(c)?a.O[d]={Qb:!0,Ub:this.ia[c]}:this.B.hasOwnProperty(c)&&(a.O[d]=URL.createObjectURL(this.B[c]))}}a.Sb?this.m=
a.Sb:(c=location.origin,this.m=("null"===c?"file:///":c)+location.pathname,c=this.m.lastIndexOf("/"),-1!==c&&(this.m=this.m.substr(0,c+1)));a.Yb&&(this.ba=a.Yb);c=new MessageChannel;this.X=c.port1;this.X.onmessage=d=>this._OnMessageFromRuntime(d.data);window.c3_addPortMessageHandler&&window.c3_addPortMessageHandler(d=>this.Ab(d));this.V=new self.jb(this);await ia(this.V);"object"===typeof window.StatusBar&&window.StatusBar.hide();if("object"===typeof window.AndroidFullScreen)try{await new Promise((d,
e)=>{window.AndroidFullScreen.immersiveMode(d,e)})}catch(d){console.error("Failed to enter Android immersive mode: ",d)}this.v?await this.wb(a,c.port2):await this.vb(a,c.port2)}ra(a){a=this.ba.hasOwnProperty(a)?this.ba[a]:a.endsWith("/workermain.js")&&this.ba.hasOwnProperty("workermain.js")?this.ba["workermain.js"]:"playable-ad"===this.g&&this.B.hasOwnProperty(a)?this.B[a]:a;a instanceof Blob&&(a=URL.createObjectURL(a));return a}async na(a,c,d){if(a.startsWith("blob:"))return new Worker(a,d);if("cordova"===
this.g&&this.Ba)return a=await this.ma(d.Pb?a:this.K+a),new Worker(URL.createObjectURL(new Blob([a],{type:"application/javascript"})),d);a=new URL(a,c);if(location.origin!==a.origin){a=await fetch(a);if(!a.ok)throw Error("failed to fetch worker script");a=await a.blob();return new Worker(URL.createObjectURL(a),d)}return new Worker(a,d)}A(){return Math.max(window.innerWidth,1)}s(){return Math.max(window.innerHeight,1)}Na(a){var c=this.m,d=location.href,e=this.A(),f=this.s(),g=window.devicePixelRatio,
h=b.R(),l=a.ec,m=window.cr_previewImageBlobs||this.B,n=window.cr_previewProjectFileBlobs,ua=window.cr_previewProjectFiles,va=window.cc||"";a=a.cb;var wa=(new URLSearchParams(self.location.search)).has("debug"),J=this.V;return{runtimeBaseUrl:c,previewUrl:d,windowInnerWidth:e,windowInnerHeight:f,devicePixelRatio:g,isFullscreen:h,projectData:l,previewImageBlobs:m,previewProjectFileBlobs:n,previewProjectFileSWUrls:ua,swClientId:va,exportType:a,isDebug:wa,ife:!!self.dc,jobScheduler:{inputPort:J.Aa,outputPort:J.Fa,
maxNumWorkers:J.Ib},supportedAudioFormats:ca,opusWasmScriptUrl:window.cr_opusWasmScriptUrl||this.K+"opus.wasm.js",opusWasmBinaryUrl:window.cr_opusWasmBinaryUrl||this.K+"opus.wasm.wasm",isFileProtocol:this.Ba,isiOSCordova:this.ib(),isiOSWebView:this.oa(),isFBInstantAvailable:"undefined"!==typeof self.FBInstant}}async wb(a,c){const d=this.ra(a.Xb);"preview"===this.g?(this.N=new Worker("previewworker.js",{type:"module",name:"Runtime"}),await new Promise((h,l)=>{const m=n=>{this.N.removeEventListener("message",
m);n.data&&"ok"===n.data.type?h():l()};this.N.addEventListener("message",m);this.N.postMessage({type:"construct-worker-init","import":(new URL(d,this.m)).toString()})})):this.N=await this.na(d,this.m,{type:"module",name:"Runtime",Pb:!0});this.j=document.createElement("canvas");this.j.style.display="none";const e=this.j.transferControlToOffscreen();document.body.appendChild(this.j);window.c3canvas=this.j;self.C3_InsertHTMLPlaceholders&&self.C3_InsertHTMLPlaceholders();let f=a.Ia||[],g=a.O;f=await Promise.all(f.map(h=>
this.H(h)));g=await Promise.all(g.map(h=>this.H(h)));if("cordova"===this.g)for(let h=0,l=a.la.length;h<l;++h){const m=a.la[h],n=m[0];if(n===a.Ha||"scriptsInEvents.js"===n||n.endsWith("/scriptsInEvents.js"))m[1]=await this.H(n)}this.N.postMessage(Object.assign(this.Na(a),{type:"init-runtime",isInWorker:!0,messagePort:c,canvas:e,workerDependencyScripts:f,engineScripts:g,projectScripts:a.la,mainProjectScript:a.Ha,projectScriptsStatus:self.C3_ProjectScriptsStatus}),[c,e,...ja(this.V)]);this.ga=E.map(h=>
new h(this));this.Ma();ka(this.$);self.c3_callFunction=(h,l)=>{var m=this.$;return m.i.kb(m.T,{name:h,params:l})};"preview"===this.g&&(self.goToLastErrorScript=()=>this.pa("runtime","go-to-last-error-script"))}async vb(a,c){this.j=document.createElement("canvas");this.j.style.display="none";document.body.appendChild(this.j);window.c3canvas=this.j;self.C3_InsertHTMLPlaceholders&&self.C3_InsertHTMLPlaceholders();this.ga=E.map(g=>new g(this));this.Ma();var d=a.O.map(g=>"string"===typeof g?(new URL(g,
this.m)).toString():g);Array.isArray(a.Ia)&&d.unshift(...a.Ia);d=await Promise.all(d.map(g=>this.H(g)));await Promise.all(d.map(g=>w(g)));d=self.C3_ProjectScriptsStatus;const e=a.Ha,f=a.la;for(let [g,h]of f)if(h||(h=g),g===e)try{h=await this.H(h),await w(h),"preview"!==this.g||d[g]||this.Qa(g,"main script did not run to completion")}catch(l){this.Qa(g,l)}else if("scriptsInEvents.js"===g||g.endsWith("/scriptsInEvents.js"))h=await this.H(h),await w(h);"preview"===this.g&&"object"!==typeof self.Zb.ac?
(this.ea(),console.error("[C3 runtime] Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax."),alert("Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax.")):(a=Object.assign(this.Na(a),{isInWorker:!1,messagePort:c,canvas:this.j,runOnStartupFunctions:H}),ka(this.$),this.Pa(),this.Da=self.C3_CreateRuntime(a),await self.C3_InitRuntime(this.Da,a))}Qa(a,c){this.ea();console.error(`[Preview] Failed to load project main script (${a}): `,
c);alert(`Failed to load project main script (${a}). Check all your JavaScript code has valid syntax. Press F12 and check the console for error details.`)}Pa(){this.ea()}ea(){const a=window.Nb;a&&(a.parentElement.removeChild(a),window.Nb=null)}async yb(){const a=await la(this.V);return{outputPort:a,transferables:[a]}}ub(){if(this.v)throw Error("not available in worker mode");return this.Da}pa(a,c,d,e,f){this.X.postMessage({type:"event",component:a,handler:c,dispatchOpts:e||null,data:d,responseId:null},
f)}kb(a,c){const d=ea++,e=new Promise((f,g)=>{G.set(d,{resolve:f,reject:g})});this.X.postMessage({type:"event",component:a,handler:"js-invoke-function",dispatchOpts:null,data:c,responseId:d},void 0);return e}_OnMessageFromRuntime(a){const c=a.type;if("event"===c)return this.zb(a);if("result"===c)this.Cb(a);else if("runtime-ready"===c)this.Db();else if("alert-error"===c)this.ea(),alert(a.message);else if("creating-runtime"===c)this.Pa();else throw Error(`unknown message '${c}'`);}zb(a){const c=a.component,
d=a.handler,e=a.data,f=a.responseId;if(a=F.get(c))if(a=a.get(d)){var g=null;try{g=a(e)}catch(h){console.error(`Exception in '${c}' handler '${d}':`,h);null!==f&&this.da(f,!1,""+h);return}if(null===f)return g;g&&g.then?g.then(h=>this.da(f,!0,h)).catch(h=>{console.error(`Rejection from '${c}' handler '${d}':`,h);this.da(f,!1,""+h)}):this.da(f,!0,g)}else console.warn(`[DOM] No handler '${d}' for component '${c}'`);else console.warn(`[DOM] No event handlers for component '${c}'`)}da(a,c,d){let e;d&&d.transferables&&
(e=d.transferables);this.X.postMessage({type:"result",responseId:a,isOk:c,result:d},e)}Cb(a){const c=a.responseId,d=a.isOk;a=a.result;const e=G.get(c);d?e.resolve(a):e.reject(a);G.delete(c)}h(a,c,d){let e=F.get(a);e||(e=new Map,F.set(a,e));if(e.has(c))throw Error(`[DOM] Component '${a}' already has handler '${c}'`);e.set(c,d)}static ca(a){if(E.includes(a))throw Error("DOM handler already added");E.push(a)}Ma(){for(const a of this.ga)if("runtime"===a.T){this.$=a;return}throw Error("cannot find runtime DOM handler");
}Ab(a){this.pa("debugger","message",a)}Db(){for(const a of this.ga)a.Ja()}static R(){return!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||ha)}static fa(a){ha=!!a}Ra(){-1===this.J&&this.bb.length&&(this.J=requestAnimationFrame(this.Kb))}ob(){-1!==this.J&&(cancelAnimationFrame(this.J),this.J=-1)}Bb(){this.J=-1;for(const a of this.bb)a();this.Ra()}va(){this.$.va()}mb(){this.Za=!0}fb(a){return/^(?:[a-z\-]+:)?\/\//.test(a)||"data:"===a.substr(0,5)||"blob:"===
a.substr(0,5)}hb(a){return!this.fb(a)}async H(a){return"cordova"===this.g&&(a.startsWith("file:")||this.Ba&&this.hb(a))?(a.startsWith(this.m)&&(a=a.substr(this.m.length)),a=await this.ma(a),URL.createObjectURL(new Blob([a],{type:"application/javascript"}))):a}async xb(a){const c=a.filename;switch(a.as){case "text":return await this.eb(c);case "buffer":return await this.ma(c);default:throw Error("unsupported type");}}Ka(a){const c=window.cordova.file.applicationDirectory+"www/"+a;return new Promise((d,
e)=>{window.resolveLocalFileSystemURL(c,f=>{f.file(d,e)},e)})}async eb(a){a=await this.Ka(a);return await da(a)}qa(){if(B.length&&!(8<=C)){C++;var a=B.shift();this.rb(a.filename,a.Vb,a.Ob)}}ma(a){return new Promise((c,d)=>{B.push({filename:a,Vb:e=>{C--;this.qa();c(e)},Ob:e=>{C--;this.qa();d(e)}});this.qa()})}async rb(a,c,d){try{const e=await this.Ka(a),f=await A(e);c(f)}catch(e){d(e)}}wa(a){if("windows-webview2"===this.g)window.chrome.webview.postMessage(JSON.stringify(a));else if("macos-wkwebview"===
this.g)window.webkit.messageHandlers.C3Wrapper.postMessage(JSON.stringify(a));else throw Error("cannot send wrapper message");}async qb(){const a=[];for(const [c,d]of Object.entries(this.B))a.push(this.pb(c,d));await Promise.all(a)}async pb(a,c){if("object"===typeof c)this.B[a]=new Blob([c.str],{type:c.type}),this.ia[a]=c.str;else{let d=await this.tb(c);d||(d=this.sb(c));this.B[a]=d}}async tb(a){try{return await (await fetch(a)).blob()}catch(c){return console.warn("Failed to fetch a data: URI. Falling back to a slower workaround. This is probably because the Content Security Policy unnecessarily blocked it. Allow data: URIs in your CSP to avoid this.",
c),null}}sb(a){a=this.Eb(a);return this.nb(a.data,a.Rb)}Eb(a){var c=a.indexOf(",");if(0>c)throw new URIError("expected comma in data: uri");var d=a.substring(c+1);c=a.substring(5,c).split(";");a=c[0]||"";const e=c[2];d="base64"===c[1]||"base64"===e?atob(d):decodeURIComponent(d);return{Rb:a,data:d}}nb(a,c){var d=a.length;let e=d>>2,f=new Uint8Array(d),g=new Uint32Array(f.buffer,0,e),h,l;for(l=h=0;h<e;++h)g[h]=a.charCodeAt(l++)|a.charCodeAt(l++)<<8|a.charCodeAt(l++)<<16|a.charCodeAt(l++)<<24;for(d&=
3;d--;)f[l]=a.charCodeAt(l),++l;return new Blob([f],{type:c})}};"use strict";const I=self.D;function ma(b){return b.sourceCapabilities&&b.sourceCapabilities.firesTouchEvents||b.originalEvent&&b.originalEvent.sourceCapabilities&&b.originalEvent.sourceCapabilities.firesTouchEvents}const na=new Map([["OSLeft","MetaLeft"],["OSRight","MetaRight"]]),K={dispatchRuntimeEvent:!0,dispatchUserScriptEvent:!0},oa={dispatchUserScriptEvent:!0},L={dispatchRuntimeEvent:!0};
function pa(b){return new Promise((a,c)=>{const d=document.createElement("link");d.onload=()=>a(d);d.onerror=e=>c(e);d.rel="stylesheet";d.href=b;document.head.appendChild(d)})}function qa(b){return new Promise((a,c)=>{const d=new Image;d.onload=()=>a(d);d.onerror=e=>c(e);d.src=b})}async function M(b){b=URL.createObjectURL(b);try{return await qa(b)}finally{URL.revokeObjectURL(b)}}
function ra(b){return new Promise((a,c)=>{let d=new FileReader;d.onload=e=>a(e.target.result);d.onerror=e=>c(e);d.readAsText(b)})}
async function sa(b,a,c){if(!/firefox/i.test(navigator.userAgent))return await M(b);var d=await ra(b);d=(new DOMParser).parseFromString(d,"image/svg+xml");const e=d.documentElement;if(e.hasAttribute("width")&&e.hasAttribute("height")){const f=e.getAttribute("width"),g=e.getAttribute("height");if(!f.includes("%")&&!g.includes("%"))return await M(b)}e.setAttribute("width",a+"px");e.setAttribute("height",c+"px");d=(new XMLSerializer).serializeToString(d);b=new Blob([d],{type:"image/svg+xml"});return await M(b)}
function N(b){do{if(b.parentNode&&b.hasAttribute("contenteditable"))return!0;b=b.parentNode}while(b);return!1}const ta=new Set(["input","textarea","datalist","select"]),xa=new Set(["canvas","body","html"]);function O(b){xa.has(b.target.tagName.toLowerCase())&&b.preventDefault()}function ya(b){(b.metaKey||b.ctrlKey)&&b.preventDefault()}
self.C3_GetSvgImageSize=async function(b){b=await M(b);if(0<b.width&&0<b.height)return[b.width,b.height];b.style.position="absolute";b.style.left="0px";b.style.top="0px";b.style.visibility="hidden";document.body.appendChild(b);const a=b.getBoundingClientRect();document.body.removeChild(b);return[a.width,a.height]};self.C3_RasterSvgImageBlob=async function(b,a,c,d,e){b=await sa(b,a,c);const f=document.createElement("canvas");f.width=d;f.height=e;f.getContext("2d").drawImage(b,0,0,a,c);return f};
let Q=!1;document.addEventListener("pause",()=>Q=!0);document.addEventListener("resume",()=>Q=!1);function ka(b){b.Xa=!0;b.Ca=b.i.A();b.W=b.i.s()}async function za(b){var a=b.imageBitmapOpts;b=await self.C3_RasterSvgImageBlob(b.blob,b.imageWidth,b.imageHeight,b.surfaceWidth,b.surfaceHeight);a=a?await createImageBitmap(b,a):await createImageBitmap(b);return{imageBitmap:a,transferables:[a]}}async function Aa(b){return await self.C3_GetSvgImageSize(b.blob)}
function Ba(b){window.c3_postToMessagePort&&(b.from="runtime",window.c3_postToMessagePort(b))}function Ca(b){self.setTimeout(()=>{b.Wa=!0},1E3);"cordova"===b.i.g?(document.addEventListener("pause",()=>R(b,!0)),document.addEventListener("resume",()=>R(b,!1))):document.addEventListener("visibilitychange",()=>R(b,document.hidden));return{isSuspended:!(!document.hidden&&!Q)}}
function Da(b){b.Ta||(b.Ta=!0,window.addEventListener("deviceorientation",a=>{b.l||k(b,"deviceorientation",{absolute:!!a.absolute,alpha:a.alpha||0,beta:a.beta||0,gamma:a.gamma||0,timeStamp:a.timeStamp,webkitCompassHeading:a.webkitCompassHeading,webkitCompassAccuracy:a.webkitCompassAccuracy},K)}),window.addEventListener("deviceorientationabsolute",a=>{b.l||k(b,"deviceorientationabsolute",{absolute:!!a.absolute,alpha:a.alpha||0,beta:a.beta||0,gamma:a.gamma||0,timeStamp:a.timeStamp},K)}))}
function Ea(b){b.Sa||(b.Sa=!0,window.addEventListener("devicemotion",a=>{if(!b.l){var c=null,d=a.acceleration;d&&(c={x:d.x||0,y:d.y||0,z:d.z||0});d=null;var e=a.accelerationIncludingGravity;e&&(d={x:e.x||0,y:e.y||0,z:e.z||0});e=null;var f=a.rotationRate;f&&(e={alpha:f.alpha||0,beta:f.beta||0,gamma:f.gamma||0});k(b,"devicemotion",{acceleration:c,accelerationIncludingGravity:d,rotationRate:e,interval:a.interval,timeStamp:a.timeStamp},K)}}))}async function Fa(b){await pa(b.url)}
function Ga(b,a){b.Ya=a.message;-1===b.za&&(b.za=setTimeout(()=>{b.za=-1;const c=document.getElementById("exportToVideoMessage");c&&(c.textContent=b.Ya)},250))}function S(b){if(!b.l){var a=I.R();a&&"any"!==b.Ga&&Ha(b);k(b,"fullscreenchange",{isFullscreen:a,innerWidth:b.A(),innerHeight:b.s()})}}function T(b,a){console.warn("[Construct] Fullscreen request failed: ",a);k(b,"fullscreenerror",{isFullscreen:I.R(),innerWidth:b.A(),innerHeight:b.s()})}
function R(b,a){a?b.i.ob():b.i.Ra();k(b,"visibilitychange",{hidden:a})}function Ia(b,a,c){"Backspace"===c.key&&O(c);if(!b.l){var d=na.get(c.code)||c.code;p(b,a,{code:d,key:c.key,which:c.which,repeat:c.repeat,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey,timeStamp:c.timeStamp},K)}}
function U(b,a,c,d){b.l||ma(c)||p(b,a,{button:c.button,buttons:c.buttons,clientX:c.clientX,clientY:c.clientY+b.o,pageX:c.pageX,pageY:c.pageY+b.o,movementX:c.movementX||0,movementY:c.movementY||0,timeStamp:c.timeStamp},d)}function V(b){window!==window.top&&window.focus();Ja(b.target)&&document.activeElement&&!Ja(document.activeElement)&&document.activeElement.blur()}
function W(b,a,c){if(!b.l){if(b.Z&&"pointermove"!==a){var d=b.Z;d.U||(-1!==d.M&&(self.clearTimeout(d.M),d.M=-1),d.ha=Date.now())}d=0;"mouse"===c.pointerType&&(d=b.Y);p(b,a,{pointerId:c.pointerId,pointerType:c.pointerType,button:c.button,buttons:c.buttons,lastButtons:d,clientX:c.clientX,clientY:c.clientY+b.o,pageX:c.pageX,pageY:c.pageY+b.o,movementX:(c.movementX||0)+b.ja,movementY:(c.movementY||0)+b.ka,width:c.width||0,height:c.height||0,pressure:c.pressure||0,tangentialPressure:c.tangentialPressure||
0,tiltX:c.tiltX||0,tiltY:c.tiltY||0,twist:c.twist||0,timeStamp:c.timeStamp},K);b.ja=0;b.ka=0;"mouse"===c.pointerType&&(d="mousemove","pointerdown"===a?d="mousedown":"pointerup"===a&&(d="mouseup"),U(b,d,c,oa),b.Y=c.buttons)}}
function X(b,a,c){if(!b.l&&!ma(c)){var d=b.Y;"pointerdown"===a&&0!==d?a="pointermove":"pointerup"===a&&0!==c.buttons&&(a="pointermove");p(b,a,{pointerId:1,pointerType:"mouse",button:c.button,buttons:c.buttons,lastButtons:d,clientX:c.clientX,clientY:c.clientY+b.o,pageX:c.pageX,pageY:c.pageY+b.o,movementX:c.movementX||0,movementY:c.movementY||0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,timeStamp:c.timeStamp},K);b.Y=c.buttons;U(b,c.type,c,oa)}}
function Y(b,a,c){if(!b.l)for(let d=0,e=c.changedTouches.length;d<e;++d){const f=c.changedTouches[d];p(b,a,{pointerId:f.identifier,pointerType:"touch",button:0,buttons:0,lastButtons:0,clientX:f.clientX,clientY:f.clientY+b.o,pageX:f.pageX,pageY:f.pageY+b.o,movementX:c.movementX||0,movementY:c.movementY||0,width:2*(f.radiusX||f.webkitRadiusX||0),height:2*(f.radiusY||f.webkitRadiusY||0),pressure:f.force||f.webkitForce||0,tangentialPressure:0,tiltX:0,tiltY:0,twist:f.rotationAngle||0,timeStamp:c.timeStamp},
K)}}function Z(b,a,c){document.body.style.transform="";b.o=0;if(0<c){var d=document.activeElement;d&&(d=d.getBoundingClientRect(),a=(d.top+d.bottom)/2-(a-c)/2,a>c&&(a=c),0>a&&(a=0),0<a&&(document.body.style.transform=`translateY(${-a}px)`,b.o=a))}}function Ka(b,a,c,d){const e=b.A(),f=b.s();b.L=-1;e!=a||f!=c?k(b,"window-resize",{innerWidth:e,innerHeight:f,devicePixelRatio:window.devicePixelRatio,isFullscreen:I.R()}):10>d&&La(b,e,f,d+1)}
function La(b,a,c,d){-1!==b.L&&clearTimeout(b.L);b.L=setTimeout(()=>Ka(b,a,c,d),48)}
function Ha(b){b=b.Ga;if(screen.orientation&&screen.orientation.lock)screen.orientation.lock(b).catch(a=>console.warn("[Construct] Failed to lock orientation: ",a));else try{let a=!1;screen.lockOrientation?a=screen.lockOrientation(b):screen.webkitLockOrientation?a=screen.webkitLockOrientation(b):screen.mozLockOrientation?a=screen.mozLockOrientation(b):screen.msLockOrientation&&(a=screen.msLockOrientation(b));a||console.warn("[Construct] Failed to lock orientation")}catch(a){console.warn("[Construct] Failed to lock orientation: ",a)}}
function Ja(b){return!b||b===document||b===window||b===document.body||"canvas"===b.tagName.toLowerCase()}
I.ca(class extends self.P{constructor(b){super(b,"runtime");this.$a=!0;this.Xa=!1;this.L=-1;this.Ga="any";this.Sa=this.Ta=!1;this.F=null;this.l=!1;this.Ya="";this.za=-1;this.I=this.Z=null;this.ka=this.ja=0;this.Wa=!1;this.Ca=b.A();this.W=b.s();this.o=this.aa=0;b.h("canvas","update-size",d=>{var e=this.i;e.Za||(e=e.j,e.style.width=d.styleWidth+"px",e.style.height=d.styleHeight+"px",e.style.marginLeft=d.marginLeft+"px",e.style.marginTop=d.marginTop+"px",document.documentElement.style.setProperty("--construct-scale",
d.displayScale),this.$a&&(e.style.display="",this.$a=!1))});b.h("runtime","invoke-download",d=>{const e=d.url;d=d.filename;const f=document.createElement("a"),g=document.body;f.textContent=d;f.href=e;f.download=d;g.appendChild(f);f.click();g.removeChild(f)});b.h("runtime","raster-svg-image",d=>za(d));b.h("runtime","get-svg-image-size",d=>Aa(d));b.h("runtime","set-target-orientation",d=>{this.Ga=d.targetOrientation});b.h("runtime","register-sw",()=>{window.C3_RegisterSW&&window.C3_RegisterSW()});b.h("runtime",
"post-to-debugger",d=>Ba(d));b.h("runtime","go-to-script",d=>Ba(d));b.h("runtime","before-start-ticking",()=>Ca(this));b.h("runtime","debug-highlight",d=>{if(d.show){this.F||(this.F=document.createElement("div"),this.F.id="inspectOutline",document.body.appendChild(this.F));var e=this.F;e.style.display="";e.style.left=d.left-1+"px";e.style.top=d.top-1+"px";e.style.width=d.width+2+"px";e.style.height=d.height+2+"px";e.textContent=d.name}else this.F&&(this.F.style.display="none")});b.h("runtime","enable-device-orientation",
()=>Da(this));b.h("runtime","enable-device-motion",()=>Ea(this));b.h("runtime","add-stylesheet",d=>Fa(d));b.h("runtime","script-create-worker",d=>{const e=d.port2;(new Worker(d.url,d.opts)).postMessage({type:"construct-worker-init",port2:e},[e])});b.h("runtime","alert",d=>this.sa(d));b.h("runtime","hide-cordova-splash",()=>{navigator.splashscreen&&navigator.splashscreen.hide&&navigator.splashscreen.hide()});b.h("runtime","set-exporting-to-video",d=>{this.l=!0;const e=document.createElement("h1");
e.id="exportToVideoMessage";e.textContent=d.message;document.body.prepend(e);document.body.classList.add("exportingToVideo");this.i.j.style.display="";this.i.mb()});b.h("runtime","export-to-video-progress",d=>Ga(this,d));b.h("runtime","exported-to-video",d=>{window.Mb({type:"exported-video",blob:d.blob,time:d.time})});b.h("runtime","exported-to-image-sequence",d=>{window.Mb({type:"exported-image-sequence",blobArr:d.blobArr,time:d.time,gif:d.gif})});const a=new Set(["input","textarea","datalist"]);
window.addEventListener("contextmenu",d=>{const e=d.target;a.has(e.tagName.toLowerCase())||N(e)||d.preventDefault()});const c=b.j;window.addEventListener("selectstart",O);window.addEventListener("gesturehold",O);c.addEventListener("selectstart",O);c.addEventListener("gesturehold",O);window.addEventListener("touchstart",O,{passive:!1});"undefined"!==typeof PointerEvent?(window.addEventListener("pointerdown",O,{passive:!1}),c.addEventListener("pointerdown",O)):c.addEventListener("touchstart",O);this.Y=
0;window.addEventListener("mousedown",d=>{1===d.button&&d.preventDefault()});window.addEventListener("mousewheel",ya,{passive:!1});window.addEventListener("wheel",ya,{passive:!1});window.addEventListener("resize",()=>{a:{if(!this.l&&this.Xa){var d=this.A();var e=this.s();if(this.i.La()){if(this.Wa){if(this.Ca===d&&e<this.W){this.aa=this.W-e;Z(this,this.W,this.aa);d=void 0;break a}0<this.aa&&(this.aa=0,Z(this,e,this.aa))}this.Ca=d;this.W=e}k(this,"window-resize",{innerWidth:d,innerHeight:e,devicePixelRatio:window.devicePixelRatio,
isFullscreen:I.R()});this.i.oa()&&(-1!==this.L&&clearTimeout(this.L),Ka(this,d,e,0))}d=void 0}return d});window.addEventListener("fullscreenchange",()=>S(this));window.addEventListener("webkitfullscreenchange",()=>S(this));window.addEventListener("mozfullscreenchange",()=>S(this));window.addEventListener("fullscreenerror",d=>T(this,d));window.addEventListener("webkitfullscreenerror",d=>T(this,d));window.addEventListener("mozfullscreenerror",d=>T(this,d));if(b.oa())if(window.visualViewport){let d=
Infinity;window.visualViewport.addEventListener("resize",()=>{const e=window.visualViewport.height;e>d&&(document.scrollingElement.scrollTop=0);d=e})}else window.addEventListener("focusout",()=>{{const f=document.activeElement;if(f){var d=f.tagName.toLowerCase();var e=new Set("email number password search tel text url".split(" "));d="textarea"===d?!0:"input"===d?e.has(f.type.toLowerCase()||"text"):N(f)}else d=!1}d||(document.scrollingElement.scrollTop=0)});self.C3WrapperOnMessage=d=>{"entered-fullscreen"===
d?(I.fa(!0),S(this)):"exited-fullscreen"===d?(I.fa(!1),S(this)):console.warn("Unknown wrapper message: ",d)};this.Ea=new Set;this.Jb=new WeakSet;this.Hb=!1}Ja(){window.addEventListener("focus",()=>{k(this,"window-focus",null,L)});window.addEventListener("blur",()=>{try{var a=window.parent&&window.parent.document.hasFocus()}catch(c){a=!1}k(this,"window-blur",{parentHasFocus:a},L);this.Y=0});window.addEventListener("focusin",a=>{a=a.target;(ta.has(a.tagName.toLowerCase())||N(a))&&k(this,"keyboard-blur",
null,L)});window.addEventListener("keydown",a=>Ia(this,"keydown",a));window.addEventListener("keyup",a=>Ia(this,"keyup",a));window.addEventListener("dblclick",a=>U(this,"dblclick",a,K));window.addEventListener("wheel",a=>{this.l||k(this,"wheel",{clientX:a.clientX,clientY:a.clientY+this.o,pageX:a.pageX,pageY:a.pageY+this.o,deltaX:a.deltaX,deltaY:a.deltaY,deltaZ:a.deltaZ,deltaMode:a.deltaMode,timeStamp:a.timeStamp},K)});"undefined"!==typeof PointerEvent?(window.addEventListener("pointerdown",a=>{V(a);
W(this,"pointerdown",a)}),this.i.v&&"undefined"!==typeof window.onpointerrawupdate&&self===self.top?(this.Z=new self.lb(()=>{W(this,"pointermove",this.I);this.I=null}),this.Z.Va=!0,window.addEventListener("pointerrawupdate",a=>{this.I&&(this.ja+=this.I.movementX||0,this.ka+=this.I.movementY||0);this.I=a;a=this.Z;if(-1===a.M){var c=Date.now(),d=c-a.ha,e=a.Gb;d>=e&&a.Va?(a.ha=c,a.U=!0,a.Ua(),a.U=!1):a.M=self.setTimeout(a.Lb,Math.max(e-d,4))}})):window.addEventListener("pointermove",a=>W(this,"pointermove",
a)),window.addEventListener("pointerup",a=>W(this,"pointerup",a)),window.addEventListener("pointercancel",a=>W(this,"pointercancel",a))):(window.addEventListener("mousedown",a=>{V(a);X(this,"pointerdown",a)}),window.addEventListener("mousemove",a=>X(this,"pointermove",a)),window.addEventListener("mouseup",a=>X(this,"pointerup",a)),window.addEventListener("touchstart",a=>{V(a);Y(this,"pointerdown",a)}),window.addEventListener("touchmove",a=>Y(this,"pointermove",a)),window.addEventListener("touchend",
a=>Y(this,"pointerup",a)),window.addEventListener("touchcancel",a=>Y(this,"pointercancel",a)));const b=()=>this.va();window.addEventListener("pointerup",b,!0);window.addEventListener("touchend",b,!0);window.addEventListener("click",b,!0);window.addEventListener("keydown",b,!0);window.addEventListener("gamepadconnected",b,!0);this.i.gb()&&!this.i.La()&&navigator.virtualKeyboard&&(navigator.virtualKeyboard.overlaysContent=!0,navigator.virtualKeyboard.addEventListener("geometrychange",()=>{Z(this,this.s(),
navigator.virtualKeyboard.boundingRect.height)}))}A(){return this.i.A()}s(){return this.i.s()}va(){var b=[...this.Ea];this.Ea.clear();if(!this.Hb)for(const a of b)(b=a.play())&&b.catch(()=>{this.Jb.has(a)||this.Ea.add(a)})}sa(b){alert(b.message)}});"use strict";
async function ia(b){if(b.Fb)throw Error("already initialised");b.Fb=!0;var a=b.C.ra(("playable-ad"===b.C.g?b.C.K:"")+"dispatchworker.js");b.ya=await b.C.na(a,b.S,{name:"DispatchWorker"});a=new MessageChannel;b.Aa=a.port1;b.ya.postMessage({type:"_init","in-port":a.port2},[a.port2]);b.Fa=await la(b)}function ja(b){return[b.Aa,b.Fa]}
async function la(b){const a=b.ab.length;var c=b.C.ra(("playable-ad"===b.C.g?b.C.K:"")+"jobworker.js");c=await b.C.na(c,b.S,{name:"JobWorker"+a});const d=new MessageChannel,e=new MessageChannel;b.ya.postMessage({type:"_addJobWorker",port:d.port1},[d.port1]);c.postMessage({type:"init",number:a,"dispatch-port":d.port2,"output-port":e.port2},[d.port2,e.port2]);b.ab.push(c);return e.port1}
self.jb=class{constructor(b){this.C=b;this.S=b.m;this.S="preview"===b.g?this.S+"workers/":this.S+b.K;this.Ib=Math.min(navigator.hardwareConcurrency||2,16);this.ya=null;this.ab=[];this.Fa=this.Aa=null}};"use strict";window.C3_IsSupported&&(window.c3_runtimeInterface=new self.D({Wb:!1,Xb:"workermain.js",O:["scripts/c3runtime.js"],la:[],Ha:"",Tb:"scripts/",Ia:[],cb:"html5"}));"use strict";
async function Ma(b,a){a=a.type;let c=!0;0===a?c=await Na():1===a&&(c=await Oa());k(b,"permission-result",{type:a,result:c})}async function Na(){if(!self.DeviceOrientationEvent||!self.DeviceOrientationEvent.requestPermission)return!0;try{return"granted"===await self.DeviceOrientationEvent.requestPermission()}catch(b){return console.warn("[Touch] Failed to request orientation permission: ",b),!1}}
async function Oa(){if(!self.DeviceMotionEvent||!self.DeviceMotionEvent.requestPermission)return!0;try{return"granted"===await self.DeviceMotionEvent.requestPermission()}catch(b){return console.warn("[Touch] Failed to request motion permission: ",b),!1}}self.D.ca(class extends self.P{constructor(b){super(b,"touch");q(this,"request-permission",a=>Ma(this,a))}});"use strict";function Pa(){}
function Qa(b){window.C3_RegisterSW&&window.OfflineClientInfo&&window.OfflineClientInfo.SetMessageCallback(a=>k(b,"sw-message",a.data))}
function Ra(b){b=b.orientation;if(screen.orientation&&screen.orientation.lock)screen.orientation.lock(b).catch(a=>console.warn("[Construct] Failed to lock orientation: ",a));else try{let a=!1;screen.lockOrientation?a=screen.lockOrientation(b):screen.webkitLockOrientation?a=screen.webkitLockOrientation(b):screen.mozLockOrientation?a=screen.mozLockOrientation(b):screen.msLockOrientation&&(a=screen.msLockOrientation(b));a||console.warn("[Construct] Failed to lock orientation")}catch(a){console.warn("[Construct] Failed to lock orientation: ",
a)}}
self.D.ca(class extends self.P{constructor(b){super(b,"browser");this.g="";r(this,[["get-initial-state",a=>this.ta(a)],["ready-for-sw-messages",()=>Qa(this)],["alert",a=>this.sa(a)],["close",()=>{navigator.app&&navigator.app.exitApp?navigator.app.exitApp():navigator.device&&navigator.device.exitApp?navigator.device.exitApp():window.close()}],["set-focus",a=>this.ua(a)],["vibrate",a=>{navigator.vibrate&&navigator.vibrate(a.pattern)}],["lock-orientation",a=>Ra(a)],["unlock-orientation",()=>{try{screen.orientation&&screen.orientation.unlock?
screen.orientation.unlock():screen.unlockOrientation?screen.unlockOrientation():screen.webkitUnlockOrientation?screen.webkitUnlockOrientation():screen.mozUnlockOrientation?screen.mozUnlockOrientation():screen.msUnlockOrientation&&screen.msUnlockOrientation()}catch(a){}}],["navigate",a=>{var c=a.type;if("back"===c)navigator.app&&navigator.app.backHistory?navigator.app.backHistory():window.history.back();else if("forward"===c)window.history.forward();else if("reload"===c)location.reload();else if("url"===
c){c=a.url;const d=a.target;a=a.exportType;self.cordova&&self.cordova.InAppBrowser?self.cordova.InAppBrowser.open(c,"_system"):"preview"===a||"windows-webview2"===a?window.open(c,"_blank"):this.bc||(2===d?window.top.location=c:1===d?window.parent.location=c:window.location=c)}else"new-window"===c&&(c=a.url,a=a.tag,self.cordova&&self.cordova.InAppBrowser?self.cordova.InAppBrowser.open(c,"_system"):window.open(c,a))}],["request-fullscreen",a=>{if("windows-webview2"===this.g||"macos-wkwebview"===this.g)self.D.fa(!0),
this.i.wa({type:"set-fullscreen",fullscreen:!0});else{const c={navigationUI:"auto"};a=a.navUI;1===a?c.navigationUI="hide":2===a&&(c.navigationUI="show");a=document.documentElement;let d;a.requestFullscreen?d=a.requestFullscreen(c):a.mozRequestFullScreen?d=a.mozRequestFullScreen(c):a.msRequestFullscreen?d=a.msRequestFullscreen(c):a.webkitRequestFullScreen&&(d="undefined"!==typeof Element.ALLOW_KEYBOARD_INPUT?a.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):a.webkitRequestFullScreen());d instanceof
Promise&&d.catch(Pa)}}],["exit-fullscreen",()=>{if("windows-webview2"===this.g||"macos-wkwebview"===this.g)self.D.fa(!1),this.i.wa({type:"set-fullscreen",fullscreen:!1});else{let a;document.exitFullscreen?a=document.exitFullscreen():document.mozCancelFullScreen?a=document.mozCancelFullScreen():document.msExitFullscreen?a=document.msExitFullscreen():document.webkitCancelFullScreen&&(a=document.webkitCancelFullScreen());a instanceof Promise&&a.catch(Pa)}}],["set-hash",a=>{location.hash=a.hash}],["set-document-css-style",
a=>{const c=a.prop,d=a.value;var e=a.selector;a=a["is-all"];try{if(e)if(a)var f=Array.from(document.querySelectorAll(e));else{var g=document.querySelector(e);f=g?[g]:[]}else f=[document.documentElement];e=f;for(const h of e)c.startsWith("--")?h.style.setProperty(c,d):h.style[c]=d}catch(h){console.warn("[Browser] Failed to set style: ",h)}}],["get-document-css-style",a=>{{const d=a.prop;a=a.selector;try{const e=document.querySelector(a);var c=e?{isOk:!0,result:window.getComputedStyle(e).getPropertyValue(d)}:
{isOk:!1}}catch(e){console.warn("[Browser] Failed to get style: ",e),c={isOk:!1}}}return c}]]);window.addEventListener("online",()=>{k(this,"online-state",{isOnline:!0})});window.addEventListener("offline",()=>{k(this,"online-state",{isOnline:!1})});window.addEventListener("hashchange",()=>{k(this,"hashchange",{location:location.toString()})});document.addEventListener("backbutton",()=>{k(this,"backbutton")})}ta(b){this.g=b.exportType;return{location:location.toString(),isOnline:!!navigator.onLine,
referrer:document.referrer,title:document.title,isCookieEnabled:!!navigator.cookieEnabled,screenWidth:screen.width,screenHeight:screen.height,windowOuterWidth:window.outerWidth,windowOuterHeight:window.outerHeight,isConstructArcade:"undefined"!==typeof window.is_scirra_arcade}}sa(b){alert(b.message)}ua(b){b=b.isFocus;if("nwjs"===this.g){const a="nwjs"===this.g?nw.Window.get():null;b?a.focus():a.blur()}else b?window.focus():window.blur()}});"use strict";
async function Sa(b){if(!b.G)try{b.G=await navigator.wakeLock.request("screen"),b.G.addEventListener("release",()=>{console.log("[Construct] Screen wake lock released");b.G=null;k(b,"wake-lock-released")}),console.log("[Construct] Screen wake lock acquired"),k(b,"wake-lock-acquired")}catch(a){console.warn("[Construct] Failed to acquire screen wake lock: ",a),k(b,"wake-lock-error")}}
function Ta(){var b=document.body;const a=b.style;a.setProperty("--temp-sai-top","env(safe-area-inset-top)");a.setProperty("--temp-sai-right","env(safe-area-inset-right)");a.setProperty("--temp-sai-bottom","env(safe-area-inset-bottom)");a.setProperty("--temp-sai-left","env(safe-area-inset-left)");b=getComputedStyle(b);b=[b.getPropertyValue("--temp-sai-top"),b.getPropertyValue("--temp-sai-right"),b.getPropertyValue("--temp-sai-bottom"),b.getPropertyValue("--temp-sai-left")].map(c=>{c=parseInt(c,10);
return isFinite(c)?c:0});a.removeProperty("--temp-sai-top");a.removeProperty("--temp-sai-right");a.removeProperty("--temp-sai-bottom");a.removeProperty("--temp-sai-left");return b}
self.D.ca(class extends self.P{constructor(b){super(b,"platform-info");r(this,[["get-initial-state",()=>this.ta()],["request-wake-lock",()=>Sa(this)],["release-wake-lock",()=>{this.G&&(this.G.release(),this.G=null)}]]);window.addEventListener("resize",()=>{k(this,"window-resize",{windowOuterWidth:window.outerWidth,windowOuterHeight:window.outerHeight,safeAreaInset:Ta()})});this.G=null}ta(){return{screenWidth:screen.width,screenHeight:screen.height,windowOuterWidth:window.outerWidth,windowOuterHeight:window.outerHeight,
safeAreaInset:Ta(),supportsWakeLock:!!navigator.wakeLock}}});
