jacobinathanialpeterson's picture
Upload 1035 files
1e40c2a
raw
history blame
94.2 kB
'use strict';
(window.g_aYk = class {
constructor(e, g) {
(this.g_ars = e), (this.g_aYl = g), (this.g_aYm = !1), (this.g_aYn = () => this.g_KZ());
}
g_aYo() {}
g_aYp(e, g, a, _) {
this.g_ars.g_aYq(this.g_aYl, e, g, a, _);
}
g_aYr(e, g, a, _) {
return this.g_ars.g_aYs(this.g_aYl, e, g, a, _);
}
g_aYt(e, g, a) {
this.g_ars.g_aYu()
? this.g_aYp(e, g, a)
: this.g_ars
.g_aYv()
._OnMessageFromDOM({
type: 'event',
component: this.g_aYl,
handler: e,
dispatchOpts: a || null,
data: g,
responseId: null
});
}
g_aYw(e, g) {
this.g_ars.g_aYx(this.g_aYl, e, g);
}
g_aYy(e) {
for (const [g, a] of e) this.g_aYw(g, a);
}
g_aYz() {
return this.g_ars;
}
g_aYA() {
return this.g_aYl;
}
g_ael() {
this.g_aYm || (this.g_ars.g_aYB(this.g_aYn), (this.g_aYm = !0));
}
g_adY() {
this.g_aYm && (this.g_ars.g_aYC(this.g_aYn), (this.g_aYm = !1));
}
g_KZ() {}
}),
(window.g_mQ = class {
constructor(e, g) {
(this.g_ly = e),
(this.g_mR = g),
(this.g_mT = -1),
(this.g_mU = -Infinity),
(this.g_mV = () => this.g_mW()),
(this.g_mX = !1),
(this.g_mY = !1);
}
g_m_(e) {
this.g_mY = !!e;
}
g_nc() {
if (-1 === this.g_mT) {
const e = Date.now(),
g = e - this.g_mU,
a = this.g_mR;
g >= a && this.g_mY
? ((this.g_mU = e), this.g_nd())
: (this.g_mT = self.setTimeout(this.g_mV, Math.max(a - g, 4)));
}
}
g_nd() {
(this.g_mX = !0), this.g_ly(), (this.g_mX = !1);
}
g_lC() {
this.g_mX || (this.g_ne(), (this.g_mU = Date.now()));
}
g_mW() {
(this.g_mT = -1), (this.g_mU = Date.now()), this.g_nd();
}
g_ne() {
-1 !== this.g_mT && (self.clearTimeout(this.g_mT), (this.g_mT = -1));
}
g_ek() {
this.g_ne(), (this.g_ly = null), (this.g_mV = null);
}
}),
'use strict',
(window.g_aYD = class extends g_aYk {
constructor(e, g) {
super(e, g),
(this.g_aYE = new Map()),
(this.g_aYF = !0),
this.g_aYw('create', (e) => this.g_aYG(e)),
this.g_aYw('destroy', (e) => this.g_aYH(e)),
this.g_aYw('set-visible', (e) => this.g_aYI(e)),
this.g_aYw('update-position', (e) => this.g_aYJ(e)),
this.g_aYw('update-state', (e) => this.g_aAc(e)),
this.g_aYw('focus', (e) => this.g_aYK(e)),
this.g_aYw('set-css-style', (e) => this.g_aYL(e));
}
g_aYM(e) {
this.g_aYF = !!e;
}
g_aYN(e, g) {
this.g_aYw(e, (e) => {
const a = e.elementId,
_ = this.g_aYE.get(a);
return g(_, e);
});
}
g_aYG(e) {
const g = e.elementId,
a = this.g_aeM(g, e);
this.g_aYE.set(g, a),
e.isVisible || (a.style.display = 'none'),
this.g_aYF && document.body.appendChild(a);
}
g_aeM() {
throw new Error('required override');
}
g_aYO() {}
g_aYH(e) {
const g = e.elementId,
a = this.g_aYE.get(g);
this.g_aYO(a), this.g_aYF && a.parentElement.removeChild(a), this.g_aYE.delete(g);
}
g_aYP(e, g, a) {
a || (a = {}), (a.elementId = g), this.g_aYp(e, a);
}
g_aYQ(e, g, a) {
a || (a = {}), (a.elementId = g), this.g_aYt(e, a);
}
g_aYI(e) {
if (this.g_aYF) {
const g = this.g_aYE.get(e.elementId);
g.style.display = e.isVisible ? '' : 'none';
}
}
g_aYJ(e) {
if (this.g_aYF) {
const g = this.g_aYE.get(e.elementId);
(g.style.left = e.left + 'px'),
(g.style.top = e.top + 'px'),
(g.style.width = e.width + 'px'),
(g.style.height = e.height + 'px');
const a = e.fontSize;
null !== a && (g.style.fontSize = a + 'em');
}
}
g_aAc(e) {
const g = this.g_aYE.get(e.elementId);
this.g_aYR(g, e);
}
g_aYR() {
throw new Error('required override');
}
g_aYK(e) {
const g = this.g_aYE.get(e.elementId);
e.focus ? g.focus() : g.blur();
}
g_aYL(e) {
const g = this.g_aYE.get(e.elementId);
g.style[e.prop] = e.val;
}
g_aYS(e) {
return this.g_aYE.get(e);
}
}),
'use strict';
{
function _(e) {
if (e.g_aYT) {
const g = document.createElement('script');
(g.async = !1), (g.textContent = e.g_C), document.head.appendChild(g);
} else
return new Promise((g, a) => {
const _ = document.createElement('script');
(_.onload = g), (_.onerror = a), (_.async = !1), (_.src = e), document.head.appendChild(_);
});
}
async function t(e) {
const g = await r(e),
a = new TextDecoder('utf-8');
return a.decode(g);
}
function r(e) {
return new Promise((g, _) => {
const a = new FileReader();
(a.onload = (e) => g(e.target.result)), (a.onerror = (e) => _(e)), a.readAsArrayBuffer(e);
});
}
function b(e) {
return n.has(e);
}
const a = /(iphone|ipod|ipad)/i.test(navigator.userAgent);
let e = new Audio();
const c = {
'audio/webm; codecs=opus': !!e.canPlayType('audio/webm; codecs=opus'),
'audio/ogg; codecs=opus': !!e.canPlayType('audio/ogg; codecs=opus'),
'audio/webm; codecs=vorbis': !!e.canPlayType('audio/webm; codecs=vorbis'),
'audio/ogg; codecs=vorbis': !!e.canPlayType('audio/ogg; codecs=vorbis'),
'audio/mp4': !!e.canPlayType('audio/mp4'),
'audio/mpeg': !!e.canPlayType('audio/mpeg')
};
e = null;
const g = [];
let s = 0;
window.RealFile = window.File;
const i = [],
u = new Map(),
p = new Map();
let l = 0;
const m = [];
self.g_aYU = function (e) {
if ('function' != typeof e) throw new Error('runOnStartup called without a function');
m.push(e);
};
const n = new Set(['cordova', 'playable-ad', 'instant-games']);
window.g_aYV = class e {
constructor(e) {
(this.g_aYW = e.g_aYX),
(this.g_aYY = null),
(this.g_apn = ''),
(this.g_aYZ = e.g_aY_),
(this.g_aY$ = {}),
(this.g_aZa = null),
(this.g_aZb = null),
(this.g_aZc = []),
(this.g_aZd = null),
(this.g_ano = null),
(this.g_arm = null),
(this.g_anX = -1),
(this.g_aZe = () => this.g_aZf()),
(this.g_aZg = []),
(this.g_aps = e.g_aZh),
b(this.g_aps) &&
this.g_aYW &&
(console.warn(
'[C3 runtime] Worker mode is enabled and supported, but is disabled in WebViews due to crbug.com/923007. Reverting to DOM mode.'
),
(this.g_aYW = !1)),
(this.g_aZi = !1),
(this.g_aZj = null),
(this.g_aZk = null),
('html5' === this.g_aps || 'playable-ad' === this.g_aps) &&
'file' === location.protocol.substr(0, 4) &&
alert(
"Exported games won't work until you upload them. (When running on the file: protocol, browsers block many features from working for security reasons.)"
),
this.g_aYx('runtime', 'cordova-fetch-local-file', (e) => this.g_aZl(e)),
this.g_aYx('runtime', 'create-job-worker', (e) => this.g_aZm(e)),
'cordova' === this.g_aps
? document.addEventListener('deviceready', () => this.g_ac$(e))
: this.g_ac$(e);
}
g_ek() {
this.g_ask(),
this.g_aYY && ((this.g_aYY.onmessage = null), (this.g_aYY = null)),
this.g_aZa && (this.g_aZa.terminate(), (this.g_aZa = null)),
this.g_aZb && (this.g_aZb.g_ek(), (this.g_aZb = null)),
this.g_ano && (this.g_ano.parentElement.removeChild(this.g_ano), (this.g_ano = null));
}
g_aZn() {
return this.g_ano;
}
g_fe() {
return this.g_apn;
}
g_aYu() {
return this.g_aYW;
}
g_asZ() {
return this.g_aps;
}
g_arM() {
return a && 'cordova' === this.g_aps;
}
g_as_() {
return a && b(this.g_aps);
}
async g_ac$(e) {
if ('playable-ad' === this.g_aps) {
(this.g_aZj = self.c3_base64files), (this.g_aZk = {}), await this.g_aZo();
for (let g = 0, a = e.g_aZp.length; g < a; ++g) {
const a = e.g_aZp[g].toLowerCase();
this.g_aZk.hasOwnProperty(a)
? (e.g_aZp[g] = { g_aYT: !0, g_C: this.g_aZk[a] })
: this.g_aZj.hasOwnProperty(a) && (e.g_aZp[g] = URL.createObjectURL(this.g_aZj[a]));
}
}
if (e.g_aZq) this.g_apn = e.g_aZq;
else {
const e = location.origin;
this.g_apn = ('null' === e ? 'file:///' : e) + location.pathname;
const g = this.g_apn.lastIndexOf('/');
-1 !== g && (this.g_apn = this.g_apn.substr(0, g + 1));
}
if (e.g_aZr)
for (const [g, a] of Object.entries(e.g_aZr)) this.g_aY$[g] = URL.createObjectURL(a);
const g = new MessageChannel();
(this.g_aYY = g.port1),
(this.g_aYY.onmessage = (e) => this._OnMessageFromRuntime(e.data)),
window.c3_addPortMessageHandler && window.c3_addPortMessageHandler((e) => this.g_aZs(e)),
(this.g_arm = new self.g_aZt(this)),
await this.g_arm.g_akw(),
this.g_aZu(),
'object' == typeof window.StatusBar && window.StatusBar.hide(),
'object' == typeof window.AndroidFullScreen && window.AndroidFullScreen.immersiveMode(),
await this.g_aZv(),
this.g_aYW ? await this.g_aZw(e, g.port2) : await this.g_aZx(e, g.port2);
}
g_aZy(e) {
return this.g_aY$.hasOwnProperty(e)
? this.g_aY$[e]
: e.endsWith('/workermain.js') && this.g_aY$.hasOwnProperty('workermain.js')
? this.g_aY$['workermain.js']
: 'playable-ad' === this.g_aps && this.g_aZj.hasOwnProperty(e.toLowerCase())
? URL.createObjectURL(this.g_aZj[e.toLowerCase()])
: e;
}
async g_aZz(g, a, _) {
if (g.startsWith('blob:')) return new Worker(g, _);
if (this.g_arM()) {
const e = await this.g_BT(this.g_aYZ + g),
a = new Blob([e], { type: 'application/javascript' });
return new Worker(URL.createObjectURL(a), _);
}
const t = new URL(g, a),
n = location.origin !== t.origin;
if (n) {
const e = await fetch(t);
if (!e.ok) throw new Error('failed to fetch worker script');
const g = await e.blob();
return new Worker(URL.createObjectURL(g), _);
}
return new Worker(t, _);
}
g_aZu() {
if (this.g_as_()) {
const g = document.documentElement.style,
a = document.body.style,
_ = window.innerWidth < window.innerHeight,
t = _ ? window.screen.width : window.screen.height,
n = _ ? window.screen.height : window.screen.width;
(a.height = g.height = n + 'px'), (a.width = g.width = t + 'px');
}
}
g_aZA(g) {
return {
baseUrl: this.g_apn,
windowInnerWidth: window.innerWidth,
windowInnerHeight: window.innerHeight,
devicePixelRatio: window.devicePixelRatio,
isFullscreen: e.g_aoA(),
projectData: g.g_aZB,
previewImageBlobs: window.cr_previewImageBlobs || this.g_aZj,
previewProjectFileBlobs: window.cr_previewProjectFileBlobs,
exportType: g.g_aZh,
isDebug: -1 < self.location.search.indexOf('debug'),
ife: !!self.g_aZC,
jobScheduler: this.g_arm.g_aZD(),
supportedAudioFormats: c,
opusWasmScriptUrl: window.cr_opusWasmScriptUrl || this.g_aYZ + 'opus.wasm.js',
opusWasmBinaryUrl: window.cr_opusWasmBinaryUrl || this.g_aYZ + 'opus.wasm.wasm',
isiOSCordova: this.g_arM(),
isiOSWebView: this.g_as_(),
isFBInstantAvailable: 'undefined' != typeof self.FBInstant
};
}
async g_aZw(e, g) {
const a = this.g_aZy(e.g_aZE);
(this.g_aZa = await this.g_aZz(a, this.g_apn, { name: 'Runtime' })),
(this.g_ano = document.createElement('canvas')),
(this.g_ano.style.display = 'none');
const _ = this.g_ano.transferControlToOffscreen();
document.body.appendChild(this.g_ano),
(window.c3canvas = this.g_ano),
this.g_aZa.postMessage(
Object.assign(this.g_aZA(e), {
type: 'init-runtime',
isInWorker: !0,
messagePort: g,
canvas: _,
workerDependencyScripts: e.g_aZF || [],
engineScripts: e.g_aZp,
projectScripts: window.g_aZG,
projectScriptsStatus: self.C3_ProjectScriptsStatus
}),
[g, _, ...this.g_arm.g_aZH()]
),
(this.g_aZc = i.map((e) => new e(this))),
this.g_aZI(),
(self.c3_callFunction = (e, g) => this.g_aZd.g_Vr(e, g)),
'preview' === this.g_aps &&
(self.goToLastErrorScript = () => this.g_aYq('runtime', 'go-to-last-error-script'));
}
async g_aZx(g, a) {
(this.g_ano = document.createElement('canvas')),
(this.g_ano.style.display = 'none'),
document.body.appendChild(this.g_ano),
(window.c3canvas = this.g_ano),
(this.g_aZc = i.map((e) => new e(this))),
this.g_aZI();
const t = g.g_aZp.map((e) => ('string' == typeof e ? new URL(e, this.g_apn).toString() : e));
if (
(Array.isArray(g.g_aZF) && t.unshift(...g.g_aZF),
await Promise.all(t.map((e) => _(e))),
g.g_aZJ && 0 < g.g_aZJ.length)
) {
const e = self.C3_ProjectScriptsStatus;
try {
if ((await Promise.all(g.g_aZJ.map((e) => _(e[1]))), Object.values(e).some((e) => !e)))
return void self.setTimeout(() => this.g_aZK(e), 100);
} catch (g) {
return (
console.error('[Preview] Error loading project scripts: ', g),
void self.setTimeout(() => this.g_aZK(e), 100)
);
}
}
if ('preview' === this.g_aps && 'object' != typeof self.g_aO.g_aYj)
return (
console.error(
'[C3 runtime] Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax.'
),
void alert(
'Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax.'
)
);
const n = Object.assign(this.g_aZA(g), {
isInWorker: !1,
messagePort: a,
canvas: this.g_ano,
runOnStartupFunctions: m
});
(this.g_aZb = self.C3_CreateRuntime(n)), await self.C3_InitRuntime(this.g_aZb, n);
}
g_aZK(e) {
const g = Object.entries(e)
.filter((e) => !e[1])
.map((e) => e[0]),
a = `Failed to load project script '${g[0]}'. Check all your JavaScript code has valid syntax.`;
console.error('[Preview] ' + a), alert(a);
}
async g_aZm() {
const e = await this.g_arm.g_aZL();
return { outputPort: e, transferables: [e] };
}
g_aYv() {
if (this.g_aYW) throw new Error('not available in worker mode');
return this.g_aZb;
}
g_aYq(g, a, _, t, n) {
this.g_aYY.postMessage(
{
type: 'event',
component: g,
handler: a,
dispatchOpts: t || null,
data: _,
responseId: null
},
this.g_aZi ? void 0 : n
);
}
g_aYs(_, a, t, n, b) {
const e = l++,
i = new Promise((g, a) => {
p.set(e, { resolve: g, reject: a });
});
return (
this.g_aYY.postMessage(
{
type: 'event',
component: _,
handler: a,
dispatchOpts: n || null,
data: t,
responseId: e
},
this.g_aZi ? void 0 : b
),
i
);
}
['_OnMessageFromRuntime'](e) {
const g = e.type;
if ('event' === g) this.g_aZM(e);
else if ('result' === g) this.g_aZN(e);
else if ('runtime-ready' === g) this.g_aZO();
else if ('alert' === g) alert(e.message);
else throw new Error(`unknown message '${g}'`);
}
g_aZM(_) {
const t = _.component,
n = _.handler,
a = _.data,
b = _.responseId,
e = u.get(t);
if (!e) return void console.warn(`[DOM] No event handlers for component '${t}'`);
const i = e.get(n);
if (!i) return void console.warn(`[DOM] No handler '${n}' for component '${t}'`);
let g = null;
try {
g = i(a);
} catch (e) {
return (
console.error(`Exception in '${t}' handler '${n}':`, e),
void (null !== b && this.g_aZP(b, !1, '' + e))
);
}
null !== b &&
(g && g.then
? g
.then((e) => this.g_aZP(b, !0, e))
.catch((e) => {
console.error(`Rejection from '${t}' handler '${n}':`, e),
this.g_aZP(b, !1, '' + e);
})
: this.g_aZP(b, !0, g));
}
g_aZP(e, g, a) {
let _;
a && a.transferables && (_ = a.transferables),
this.g_aYY.postMessage({ type: 'result', responseId: e, isOk: g, result: a }, _);
}
g_aZN(g) {
const a = g.responseId,
_ = g.isOk,
t = g.result,
n = p.get(a);
_ ? n.resolve(t) : n.reject(t), p.delete(a);
}
g_aYx(e, g, a) {
let _ = u.get(e);
if ((_ || ((_ = new Map()), u.set(e, _)), _.has(g)))
throw new Error(`[DOM] Component '${e}' already has handler '${g}'`);
_.set(g, a);
}
static g_aZQ(e) {
if (i.includes(e)) throw new Error('DOM handler already added');
i.push(e);
}
g_aZI() {
for (const e of this.g_aZc) if ('runtime' === e.g_aYA()) return void (this.g_aZd = e);
throw new Error('cannot find runtime DOM handler');
}
g_aZs(e) {
this.g_aYq('debugger', 'message', e);
}
g_aZO() {
for (const e of this.g_aZc) e.g_aYo();
}
static g_aoA() {
return !!(
document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement
);
}
async g_aZR() {
return await this.g_aYs('runtime', 'get-remote-preview-status-info');
}
g_aYB(e) {
this.g_aZg.push(e), this.g_asj();
}
g_aYC(e) {
const g = this.g_aZg.indexOf(e);
if (-1 === g) throw new Error('invalid callback');
this.g_aZg.splice(g, 1), this.g_aZg.length || this.g_ask();
}
g_asj() {
-1 === this.g_anX && this.g_aZg.length && (this.g_anX = requestAnimationFrame(this.g_aZe));
}
g_ask() {
-1 !== this.g_anX && (cancelAnimationFrame(this.g_anX), (this.g_anX = -1));
}
g_aZf() {
this.g_anX = -1;
for (const e of this.g_aZg) e();
this.g_asj();
}
g_aZS(e) {
this.g_aZd.g_aZS(e);
}
g_aZT(e) {
this.g_aZd.g_aZT(e);
}
g_aZU() {
this.g_aZd.g_aZU();
}
g_aAQ(e) {
this.g_aZd.g_aAQ(e);
}
g_Co(e) {
return !!c[e];
}
async g_agl(e) {
const g = await this.g_aYs('runtime', 'opus-decode', { arrayBuffer: e }, null, [e]);
return new Float32Array(g);
}
g_fZ(e) {
return (
/^(?:[a-z]+:)?\/\//.test(e) || 'data:' === e.substr(0, 5) || 'blob:' === e.substr(0, 5)
);
}
g_f_(e) {
return !this.g_fZ(e);
}
async g_aZl(e) {
const g = e.filename;
switch (e.as) {
case 'text':
return await this.g_BU(g);
case 'buffer':
return await this.g_BT(g);
default:
throw new Error('unsupported type');
}
}
g_aZV() {
const e = window.cordova && window.cordova.plugins && window.cordova.plugins.permissions;
if ('object' != typeof e) throw new Error('Permission API is not loaded');
return e;
}
g_aZW(e, g) {
const a = e[g];
if ('string' != typeof a) throw new Error('Invalid permission name');
return a;
}
g_aZX(e) {
const g = this.g_aZV();
return new Promise((_, a) =>
g.checkPermission(this.g_aZW(g, e), (e) => _(!!e.hasPermission), a)
);
}
g_aJJ(e) {
const g = this.g_aZV();
return new Promise((_, a) =>
g.requestPermission(this.g_aZW(g, e), (e) => _(!!e.hasPermission), a)
);
}
async g_aZY(e) {
if ('cordova' !== this.g_asZ()) return !0;
if (this.g_arM()) return !0;
for (const g of e) {
const e = await this.g_aZX(g);
if (e) continue;
const a = await this.g_aJJ(g);
if (!1 === a) return !1;
}
return !0;
}
async g_aZZ(...e) {
if (!1 === (await this.g_aZY(e))) throw new Error('Permission not granted');
}
g_aZ_(e) {
const g = window.cordova.file.applicationDirectory + 'www/' + e.toLowerCase();
return new Promise((e, a) => {
window.resolveLocalFileSystemURL(
g,
(g) => {
g.file(e, a);
},
a
);
});
}
async g_BU(e) {
const g = await this.g_aZ_(e);
return await t(g);
}
g_aZ$() {
if (g.length && !(8 <= s)) {
s++;
const e = g.shift();
this.g_a_a(e.filename, e.g_a_b, e.g_a_c);
}
}
g_BT(e) {
return new Promise((_, t) => {
g.push({
filename: e,
g_a_b: (e) => {
s--, this.g_aZ$(), _(e);
},
g_a_c: (e) => {
s--, this.g_aZ$(), t(e);
}
}),
this.g_aZ$();
});
}
async g_a_a(g, a, e) {
try {
const _ = await this.g_aZ_(g),
t = await r(_);
a(t);
} catch (g) {
e(g);
}
}
async g_aZo() {
const e = [];
for (const [g, a] of Object.entries(this.g_aZj)) e.push(this.g_a_d(g, a));
await Promise.all(e);
}
async g_a_d(e, g) {
if ('object' == typeof g)
(this.g_aZj[e] = new Blob([g.str], { type: g.type })), (this.g_aZk[e] = g.str);
else {
let a = await this.g_a_e(g);
a || (a = this.g_a_f(g)), (this.g_aZj[e] = a);
}
}
async g_a_e(e) {
try {
const g = await fetch(e);
return await g.blob();
} catch (e) {
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.',
e
),
null
);
}
}
g_a_f(e) {
const g = this.g_a_g(e);
return this.g_a_h(g.data, g.g_gq);
}
g_a_g(_) {
const a = _.indexOf(',');
if (0 > a) throw new URIError('expected comma in data: uri');
const t = _.substring(5, a),
n = _.substring(a + 1),
b = t.split(';'),
e = b[0] || '',
c = b[1],
g = b[2];
let o;
return (
(o = 'base64' === c || 'base64' === g ? atob(n) : decodeURIComponent(n)),
{ g_gq: e, data: o }
);
}
g_a_h(_, a) {
let t,
n,
b = _.length,
e = b >> 2,
i = new Uint8Array(b),
g = new Uint32Array(i.buffer, 0, e);
for (t = 0, n = 0; t < e; ++t)
g[t] =
_.charCodeAt(n++) |
(_.charCodeAt(n++) << 8) |
(_.charCodeAt(n++) << 16) |
(_.charCodeAt(n++) << 24);
for (let e = 3 & b; e--; ) (i[n] = _.charCodeAt(n)), ++n;
return new Blob([i], { type: a });
}
g_aZv() {
let e = null;
const g = new Promise((g) => (e = g)),
_ = new ArrayBuffer(1),
t = new MessageChannel();
return (
(t.port2.onmessage = (g) => {
(g.data && g.data.arrayBuffer) ||
((this.g_aZi = !0),
console.warn(
'MessageChannel transfers determined to be broken. Disabling transferables.'
)),
e();
}),
t.port1.postMessage({ arrayBuffer: _ }, [_]),
g
);
}
};
}
{
function _(e) {
return (
(e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) ||
(e.originalEvent &&
e.originalEvent.sourceCapabilities &&
e.originalEvent.sourceCapabilities.firesTouchEvents)
);
}
function t(e) {
return new Promise((g, _) => {
const a = document.createElement('link');
(a.onload = () => g(a)),
(a.onerror = (e) => _(e)),
(a.rel = 'stylesheet'),
(a.href = e),
document.head.appendChild(a);
});
}
function a(e) {
return new Promise((g, _) => {
const a = new Image();
(a.onload = () => g(a)), (a.onerror = (e) => _(e)), (a.src = e);
});
}
async function s(e) {
const g = URL.createObjectURL(e);
try {
return await a(g);
} finally {
URL.revokeObjectURL(g);
}
}
function d(e) {
return new Promise((g, _) => {
let a = new FileReader();
(a.onload = (e) => g(e.target.result)), (a.onerror = (e) => _(e)), a.readAsText(e);
});
}
async function u(e, _, t) {
if (!/firefox/i.test(navigator.userAgent)) return await s(e);
let n = await d(e);
const b = new DOMParser(),
g = b.parseFromString(n, 'image/svg+xml'),
o = g.documentElement;
if (o.hasAttribute('width') && o.hasAttribute('height')) {
const g = o.getAttribute('width'),
a = o.getAttribute('height');
if (!g.includes('%') && !a.includes('%')) return await s(e);
}
o.setAttribute('width', _ + 'px'), o.setAttribute('height', t + 'px');
const i = new XMLSerializer();
return (n = i.serializeToString(g)), (e = new Blob([n], { type: 'image/svg+xml' })), await s(e);
}
function e(e) {
do {
if (e.parentNode && e.hasAttribute('contenteditable')) return !0;
e = e.parentNode;
} while (e);
return !1;
}
function g(e) {
const g = e.target.tagName.toLowerCase();
c.has(g) && e.preventDefault();
}
function f(e) {
(e.metaKey || e.ctrlKey) && e.preventDefault();
}
function b() {
try {
return window.parent && window.parent.document.hasFocus();
} catch (e) {
return !1;
}
}
function i() {
const g = document.activeElement;
if (!g) return !1;
const a = g.tagName.toLowerCase(),
_ = new Set(['email', 'number', 'password', 'search', 'tel', 'text', 'url']);
return 'textarea' === a || ('input' === a ? _.has(g.type.toLowerCase() || 'text') : e(g));
}
const h = new Map([
['OSLeft', 'MetaLeft'],
['OSRight', 'MetaRight']
]),
l = { dispatchRuntimeEvent: !0, dispatchUserScriptEvent: !0 },
m = { dispatchUserScriptEvent: !0 },
n = { dispatchRuntimeEvent: !0 },
c = new Set(['canvas', 'body', 'html']);
(self.C3_GetSvgImageSize = async function (e) {
const g = await s(e);
if (0 < g.width && 0 < g.height) return [g.width, g.height];
else {
(g.style.position = 'absolute'),
(g.style.left = '0px'),
(g.style.top = '0px'),
(g.style.visibility = 'hidden'),
document.body.appendChild(g);
const e = g.getBoundingClientRect();
return document.body.removeChild(g), [e.width, e.height];
}
}),
(self.C3_RasterSvgImageBlob = async function (_, a, t, n, b) {
const e = await u(_, a, t),
g = document.createElement('canvas');
(g.width = n), (g.height = b);
const c = g.getContext('2d');
return c.drawImage(e, 0, 0, a, t), g;
});
let o = !1;
document.addEventListener('pause', () => (o = !0)),
document.addEventListener('resume', () => (o = !1));
const p = class extends g_aYk {
constructor(_) {
super(_, 'runtime'),
(this.g_a_i = !0),
(this.g_a_j = -1),
(this.g_a_k = 'any'),
(this.g_a_l = !1),
(this.g_a_m = !1),
(this.g_a_n = null),
(this.g_a_o = null),
(this.g_a_p = null),
_.g_aYx('canvas', 'update-size', (e) => this.g_a_q(e)),
_.g_aYx('runtime', 'invoke-download', (e) => this.g_a_r(e)),
_.g_aYx('runtime', 'raster-svg-image', (e) => this.g_a_s(e)),
_.g_aYx('runtime', 'get-svg-image-size', (e) => this.g_a_t(e)),
_.g_aYx('runtime', 'set-target-orientation', (e) => this.g_a_u(e)),
_.g_aYx('runtime', 'register-sw', () => this.g_a_v()),
_.g_aYx('runtime', 'post-to-debugger', (e) => this.g_a_w(e)),
_.g_aYx('runtime', 'go-to-script', (e) => this.g_a_w(e)),
_.g_aYx('runtime', 'before-start-ticking', () => this.g_a_x()),
_.g_aYx('runtime', 'debug-highlight', (e) => this.g_a_y(e)),
_.g_aYx('runtime', 'enable-device-orientation', () => this.g_a_z()),
_.g_aYx('runtime', 'enable-device-motion', () => this.g_a_A()),
_.g_aYx('runtime', 'add-stylesheet', (e) => this.g_a_B(e)),
_.g_aYx('runtime', 'alert', (e) => this.g_a_C(e));
const t = new Set(['input', 'textarea', 'datalist']);
window.addEventListener('contextmenu', (g) => {
const a = g.target,
_ = a.tagName.toLowerCase();
t.has(_) || e(a) || g.preventDefault();
});
const a = _.g_aZn();
window.addEventListener('selectstart', g),
window.addEventListener('gesturehold', g),
a.addEventListener('selectstart', g),
a.addEventListener('gesturehold', g),
window.addEventListener('touchstart', g, { passive: !1 }),
'undefined' == typeof PointerEvent
? a.addEventListener('touchstart', g)
: (window.addEventListener('pointerdown', g, { passive: !1 }),
a.addEventListener('pointerdown', g)),
(this.g_a_D = 0),
window.addEventListener('mousedown', (e) => {
1 === e.button && e.preventDefault();
}),
window.addEventListener('mousewheel', f, { passive: !1 }),
window.addEventListener('wheel', f, { passive: !1 }),
window.addEventListener('resize', () => this.g_aom()),
_.g_as_() &&
window.addEventListener('focusout', () => {
i() || (document.scrollingElement.scrollTop = 0);
}),
(this.g_a_E = new Set()),
(this.g_a_F = new WeakSet()),
(this.g_azW = !1);
}
g_a_x() {
return (
'cordova' === this.g_ars.g_asZ()
? (document.addEventListener('pause', () => this.g_aro(!0)),
document.addEventListener('resume', () => this.g_aro(!1)))
: document.addEventListener('visibilitychange', () => this.g_aro(document.hidden)),
{ isSuspended: !!(document.hidden || o) }
);
}
g_aYo() {
window.addEventListener('focus', () => this.g_a_G('window-focus')),
window.addEventListener('blur', () => {
this.g_a_G('window-blur', { parentHasFocus: b() }), (this.g_a_D = 0);
}),
window.addEventListener('fullscreenchange', () => this.g_aon()),
window.addEventListener('webkitfullscreenchange', () => this.g_aon()),
window.addEventListener('mozfullscreenchange', () => this.g_aon()),
window.addEventListener('fullscreenerror', (e) => this.g_aoo(e)),
window.addEventListener('webkitfullscreenerror', (e) => this.g_aoo(e)),
window.addEventListener('mozfullscreenerror', (e) => this.g_aoo(e)),
window.addEventListener('keydown', (e) => this.g_a_H('keydown', e)),
window.addEventListener('keyup', (e) => this.g_a_H('keyup', e)),
window.addEventListener('dblclick', (e) => this.g_a_I('dblclick', e, l)),
window.addEventListener('wheel', (e) => this.g_a_J('wheel', e)),
'undefined' == typeof PointerEvent
? (window.addEventListener('mousedown', (e) => this.g_a_K('pointerdown', e)),
window.addEventListener('mousemove', (e) => this.g_a_K('pointermove', e)),
window.addEventListener('mouseup', (e) => this.g_a_K('pointerup', e)),
window.addEventListener('touchstart', (e) => this.g_a_L('pointerdown', e)),
window.addEventListener('touchmove', (e) => this.g_a_L('pointermove', e)),
window.addEventListener('touchend', (e) => this.g_a_L('pointerup', e)),
window.addEventListener('touchcancel', (e) => this.g_a_L('pointercancel', e)))
: (window.addEventListener('pointerdown', (e) => this.g_a_M('pointerdown', e)),
this.g_ars.g_aYu() &&
'undefined' != typeof window.onpointerrawupdate &&
self === self.top
? ((this.g_a_o = new g_mQ(() => this.g_a_N(), 5)),
this.g_a_o.g_m_(!0),
window.addEventListener('pointerrawupdate', (e) => this.g_a_O(e)))
: window.addEventListener('pointermove', (e) => this.g_a_M('pointermove', e)),
window.addEventListener('pointerup', (e) => this.g_a_M('pointerup', e)),
window.addEventListener('pointercancel', (e) => this.g_a_M('pointercancel', e)));
const e = () => this.g_aZU();
window.addEventListener('pointerup', e, !0),
window.addEventListener('touchend', e, !0),
window.addEventListener('click', e, !0),
window.addEventListener('keydown', e, !0),
window.addEventListener('gamepadconnected', e, !0);
}
g_a_G(e, g) {
this.g_aYp(e, g || null, n);
}
g_a_P() {
return Math.max(window.innerWidth, 1);
}
g_a_Q() {
return Math.max(window.innerHeight, 1);
}
g_aom() {
const e = this.g_a_P(),
g = this.g_a_Q();
this.g_a_G('window-resize', {
innerWidth: e,
innerHeight: g,
devicePixelRatio: window.devicePixelRatio
}),
this.g_ars.g_as_() && (-1 !== this.g_a_j && clearTimeout(this.g_a_j), this.g_a_R(e, g, 0));
}
g_a_S(e, g, a) {
-1 !== this.g_a_j && clearTimeout(this.g_a_j),
(this.g_a_j = setTimeout(() => this.g_a_R(e, g, a), 48));
}
g_a_R(g, a, _) {
const t = this.g_a_P(),
n = this.g_a_Q();
(this.g_a_j = -1),
t != g || n != a
? this.g_a_G('window-resize', {
innerWidth: t,
innerHeight: n,
devicePixelRatio: window.devicePixelRatio
})
: 10 > _ && this.g_a_S(t, n, _ + 1);
}
g_a_u(e) {
this.g_a_k = e.targetOrientation;
}
g_a_T() {
const e = this.g_a_k;
if (screen.orientation && screen.orientation.lock)
screen.orientation
.lock(e)
.catch((e) => console.warn('[Construct 3] Failed to lock orientation: ', e));
else
try {
let g = !1;
screen.lockOrientation
? (g = screen.lockOrientation(e))
: screen.webkitLockOrientation
? (g = screen.webkitLockOrientation(e))
: screen.mozLockOrientation
? (g = screen.mozLockOrientation(e))
: screen.msLockOrientation && (g = screen.msLockOrientation(e)),
g || console.warn('[Construct 3] Failed to lock orientation');
} catch (e) {
console.warn('[Construct 3] Failed to lock orientation: ', e);
}
}
g_aon() {
const e = g_aYV.g_aoA();
e && 'any' !== this.g_a_k && this.g_a_T(),
this.g_aYp('fullscreenchange', {
isFullscreen: e,
innerWidth: this.g_a_P(),
innerHeight: this.g_a_Q()
});
}
g_aoo(e) {
console.warn('[Construct 3] Fullscreen request failed: ', e),
this.g_aYp('fullscreenerror', {
isFullscreen: g_aYV.g_aoA(),
innerWidth: this.g_a_P(),
innerHeight: this.g_a_Q()
});
}
g_aro(e) {
e ? this.g_ars.g_ask() : this.g_ars.g_asj(), this.g_aYp('visibilitychange', { hidden: e });
}
g_a_H(e, a) {
'Backspace' === a.key && g(a);
const _ = h.get(a.code) || a.code;
this.g_aYt(
e,
{
code: _,
key: a.key,
which: a.which,
repeat: a.repeat,
altKey: a.altKey,
ctrlKey: a.ctrlKey,
metaKey: a.metaKey,
shiftKey: a.shiftKey,
timeStamp: a.timeStamp
},
l
);
}
g_a_J(e, g) {
this.g_aYp(
e,
{
clientX: g.clientX,
clientY: g.clientY,
deltaX: g.deltaX,
deltaY: g.deltaY,
deltaZ: g.deltaZ,
deltaMode: g.deltaMode,
timeStamp: g.timeStamp
},
l
);
}
g_a_I(e, g, a) {
_(g) ||
('mousedown' === e && window !== window.top && window.focus(),
this.g_aYt(
e,
{
button: g.button,
buttons: g.buttons,
clientX: g.clientX,
clientY: g.clientY,
timeStamp: g.timeStamp
},
a
));
}
g_a_K(e, g) {
if (!_(g)) {
'pointerdown' === e && window !== window.top && window.focus();
const a = this.g_a_D;
'pointerdown' === e && 0 !== a
? (e = 'pointermove')
: 'pointerup' == e && 0 !== g.buttons && (e = 'pointermove'),
this.g_aYt(
e,
{
pointerId: 1,
pointerType: 'mouse',
button: g.button,
buttons: g.buttons,
lastButtons: a,
clientX: g.clientX,
clientY: g.clientY,
width: 0,
height: 0,
pressure: 0,
tangentialPressure: 0,
tiltX: 0,
tiltY: 0,
twist: 0,
timeStamp: g.timeStamp
},
l
),
(this.g_a_D = g.buttons),
this.g_a_I(g.type, g, m);
}
}
g_a_M(e, g) {
'pointerdown' === e && window !== window.top && window.focus(),
this.g_a_o && 'pointermove' !== e && this.g_a_o.g_lC();
let a = 0;
if (
('mouse' === g.pointerType && (a = this.g_a_D),
this.g_aYt(
e,
{
pointerId: g.pointerId,
pointerType: g.pointerType,
button: g.button,
buttons: g.buttons,
lastButtons: a,
clientX: g.clientX,
clientY: g.clientY,
width: g.width || 0,
height: g.height || 0,
pressure: g.pressure || 0,
tangentialPressure: g.tangentialPressure || 0,
tiltX: g.tiltX || 0,
tiltY: g.tiltY || 0,
twist: g.twist || 0,
timeStamp: g.timeStamp
},
l
),
'mouse' === g.pointerType)
) {
let a = 'mousemove';
'pointerdown' === e ? (a = 'mousedown') : 'pointerup' == e && (a = 'pointerup'),
this.g_a_I(a, g, m),
(this.g_a_D = g.buttons);
}
}
g_a_O(e) {
(this.g_a_p = e), this.g_a_o.g_nc();
}
g_a_N() {
this.g_a_M('pointermove', this.g_a_p), (this.g_a_p = null);
}
g_a_L(e, g) {
'pointerdown' === e && window !== window.top && window.focus();
for (let a = 0, _ = g.changedTouches.length; a < _; ++a) {
const _ = g.changedTouches[a];
this.g_aYt(
e,
{
pointerId: _.identifier,
pointerType: 'touch',
button: 0,
buttons: 0,
lastButtons: 0,
clientX: _.clientX,
clientY: _.clientY,
width: 2 * (_.radiusX || _.webkitRadiusX || 0),
height: 2 * (_.radiusY || _.webkitRadiusY || 0),
pressure: _.force || _.webkitForce || 0,
tangentialPressure: 0,
tiltX: 0,
tiltY: 0,
twist: _.rotationAngle || 0,
timeStamp: g.timeStamp
},
l
);
}
}
g_a_z() {
this.g_a_l ||
((this.g_a_l = !0), window.addEventListener('deviceorientation', (e) => this.g_aKc(e)));
}
g_a_A() {
this.g_a_m ||
((this.g_a_m = !0), window.addEventListener('devicemotion', (e) => this.g_aKd(e)));
}
g_aKc(e) {
this.g_aYp(
'deviceorientation',
{ alpha: e.alpha || 0, beta: e.beta || 0, gamma: e.gamma || 0, timeStamp: e.timeStamp },
l
);
}
g_aKd(_) {
let a = null;
const t = _.acceleration;
t && (a = { x: t.x || 0, y: t.y || 0, z: t.z || 0 });
let n = null;
const i = _.accelerationIncludingGravity;
i && (n = { x: i.x || 0, y: i.y || 0, z: i.z || 0 });
let e = null;
const c = _.rotationRate;
c && (e = { alpha: c.alpha || 0, beta: c.beta || 0, gamma: c.gamma || 0 }),
this.g_aYp(
'devicemotion',
{
acceleration: a,
accelerationIncludingGravity: n,
rotationRate: e,
interval: _.interval,
timeStamp: _.timeStamp
},
l
);
}
g_a_q(e) {
const g = this.g_aYz(),
a = g.g_aZn();
(a.style.width = e.styleWidth + 'px'),
(a.style.height = e.styleHeight + 'px'),
(a.style.marginLeft = e.marginLeft + 'px'),
(a.style.marginTop = e.marginTop + 'px'),
g.g_aZu(),
this.g_a_i && ((a.style.display = ''), (this.g_a_i = !1));
}
g_a_r(g) {
const _ = g.url,
t = g.filename,
n = document.createElement('a'),
e = document.body;
(n.textContent = t),
(n.href = _),
(n.download = t),
e.appendChild(n),
n.click(),
e.removeChild(n);
}
async g_a_s(_) {
const a = _.blob,
t = _.imageWidth,
n = _.imageHeight,
b = _.surfaceWidth,
e = _.surfaceHeight,
c = _.imageBitmapOpts,
g = await self.C3_RasterSvgImageBlob(a, t, n, b, e);
let o;
return (
(o = c ? await createImageBitmap(g, c) : await createImageBitmap(g)),
{ imageBitmap: o, transferables: [o] }
);
}
async g_a_t(e) {
return await self.C3_GetSvgImageSize(e.blob);
}
async g_a_B(e) {
await t(e.url);
}
g_aZU() {
const e = [...this.g_a_E];
if ((this.g_a_E.clear(), !this.g_azW))
for (const g of e) {
const e = g.play();
e &&
e.catch(() => {
this.g_a_F.has(g) || this.g_a_E.add(g);
});
}
}
g_aZS(e) {
if ('function' != typeof e.play) throw new Error('missing play function');
this.g_a_F.delete(e);
let g;
try {
g = e.play();
} catch (g) {
return void this.g_a_E.add(e);
}
g &&
g.catch(() => {
this.g_a_F.has(e) || this.g_a_E.add(e);
});
}
g_aZT(e) {
this.g_a_E.delete(e), this.g_a_F.add(e);
}
g_aAQ(e) {
this.g_azW = !!e;
}
g_a_y(e) {
const g = e.show;
if (!g) return void (this.g_a_n && (this.g_a_n.style.display = 'none'));
this.g_a_n ||
((this.g_a_n = document.createElement('div')),
(this.g_a_n.id = 'inspectOutline'),
document.body.appendChild(this.g_a_n));
const a = this.g_a_n;
(a.style.display = ''),
(a.style.left = e.left - 1 + 'px'),
(a.style.top = e.top - 1 + 'px'),
(a.style.width = e.width + 2 + 'px'),
(a.style.height = e.height + 2 + 'px'),
(a.textContent = e.name);
}
g_a_v() {
window.C3_RegisterSW && window.C3_RegisterSW();
}
g_a_w(e) {
window.c3_postToMessagePort && ((e.from = 'runtime'), window.c3_postToMessagePort(e));
}
g_Vr(e, g) {
return this.g_aYr('js-invoke-function', { name: e, params: g });
}
g_a_C(e) {
alert(e.message + ' [via Web Worker]');
}
};
g_aYV.g_aZQ(p);
}
{
const e = document.currentScript.src;
self.g_aZt = class {
constructor(g) {
(this.g_a_U = g),
(this.g_apn = e ? e.substr(0, e.lastIndexOf('/') + 1) : g.g_fe()),
(this.g_atG = Math.min(navigator.hardwareConcurrency || 2, 16)),
(this.g_a_V = null),
(this.g_a_W = []),
(this.g_atE = null),
(this.g_a_X = null);
}
async g_akw() {
if (this.g_a_Y) throw new Error('already initialised');
this.g_a_Y = !0;
const e = this.g_a_U.g_aZy('dispatchworker.js');
this.g_a_V = await this.g_a_U.g_aZz(e, this.g_apn, { name: 'DispatchWorker' });
const g = new MessageChannel();
(this.g_atE = g.port1),
this.g_a_V.postMessage({ type: '_init', 'in-port': g.port2 }, [g.port2]),
(this.g_a_X = await this.g_aZL());
}
async g_aZL() {
const g = this.g_a_W.length,
a = this.g_a_U.g_aZy('jobworker.js'),
_ = await this.g_a_U.g_aZz(a, this.g_apn, { name: 'JobWorker' + g }),
t = new MessageChannel(),
n = new MessageChannel();
return (
this.g_a_V.postMessage({ type: '_addJobWorker', port: t.port1 }, [t.port1]),
_.postMessage(
{ type: 'init', number: g, 'dispatch-port': t.port2, 'output-port': n.port2 },
[t.port2, n.port2]
),
this.g_a_W.push(_),
n.port1
);
}
g_aZD() {
return { inputPort: this.g_atE, outputPort: this.g_a_X, maxNumWorkers: this.g_atG };
}
g_aZH() {
return [this.g_atE, this.g_a_X];
}
};
}
if (('use strict', window.C3_IsSupported)) {
'undefined' != typeof OffscreenCanvas;
window.c3_runtimeInterface = new g_aYV({
g_aYX: !1,
g_aZE: 'workermain.js',
g_aZp: ['scripts/c3runtime.js'],
g_aY_: 'scripts/',
g_aZF: [],
g_aZh: 'html5'
});
}
{
function e(e, g) {
return e.length === g.length && (e === g || e.toLowerCase() === g.toLowerCase());
}
const g = class extends g_aYk {
constructor(e) {
super(e, 'audio'),
(this.g_a_Z = null),
(this.g_a__ = null),
(this.g_a_$ = !1),
(this.g_a$a = () => this.g_a$b()),
(this.g_a$c = []),
(this.g_a$d = []),
(this.g_a$e = null),
(this.g_a$f = ''),
(this.g_a$g = -1),
(this.g_a$h = new Map()),
(this.g_azV = 1),
(this.g_azW = !1),
(this.g_azI = 0),
(this.g_aks = 1),
(this.g_aqN = 0),
(this.g_azL = 'HRTF'),
(this.g_azM = 'inverse'),
(this.g_a$i = 600),
(this.g_azR = 1e4),
(this.g_azS = 1),
(this.g_a$j = !1),
(this.g_a$k = !1),
(this.g_a$l = this.g_ars.g_Co('audio/webm; codecs=opus')),
(this.g_a$m = new Map()),
(this.g_a$n = new Set()),
(this.g_a$o = !1),
(this.g_a$p = ''),
(this.g_a$q = null),
(self.C3Audio_OnMicrophoneStream = (e, g) => this.g_a$r(e, g)),
(this.g_a$s = null),
(self.C3Audio_GetOutputStream = () => this.g_a$t()),
(self.C3Audio_DOMInterface = this),
this.g_aYy([
['create-audio-context', (e) => this.g_a$u(e)],
['play', (e) => this.g_a$v(e)],
['stop', (e) => this.g_a$w(e)],
['stop-all', () => this.g_a$x()],
['set-paused', (e) => this.g_a$y(e)],
['set-volume', (e) => this.g_a$z(e)],
['fade-volume', (e) => this.g_a$A(e)],
['set-master-volume', (e) => this.g_a$B(e)],
['set-muted', (e) => this.g_a$C(e)],
['set-silent', (e) => this.g_a$D(e)],
['set-looping', (e) => this.g_a$E(e)],
['set-playback-rate', (e) => this.g_a$F(e)],
['seek', (e) => this.g_a$G(e)],
['preload', (e) => this.g_a$H(e)],
['unload', (e) => this.g_HE(e)],
['unload-all', () => this.g_a$I()],
['set-suspended', (e) => this.g_a$J(e)],
['add-effect', (e) => this.g_a$K(e)],
['set-effect-param', (e) => this.g_a$L(e)],
['remove-effects', (e) => this.g_a$M(e)],
['tick', (e) => this.g_JX(e)],
['load-state', (e) => this.g_a$N(e)]
]);
}
async g_a$u(e) {
e.isiOSCordova && (this.g_a$j = !0),
(this.g_azI = e.timeScaleMode),
(this.g_azL = ['equalpower', 'HRTF', 'soundfield'][e.panningModel]),
(this.g_azM = ['linear', 'inverse', 'exponential'][e.distanceModel]),
(this.g_a$i = e.refDistance),
(this.g_azR = e.maxDistance),
(this.g_azS = e.rolloffFactor);
const g = { latencyHint: e.latencyHint };
if ('undefined' != typeof AudioContext) this.g_a_Z = new AudioContext(g);
else if ('undefined' != typeof webkitAudioContext) this.g_a_Z = new webkitAudioContext(g);
else throw new Error('Web Audio API not supported');
(this.g_a__ = this.g_a_Z.createGain()), this.g_a__.connect(this.g_a_Z.destination);
const a = e.listenerPos;
this.g_a_Z.listener.setPosition(a[0], a[1], a[2]),
this.g_a_Z.listener.setOrientation(0, 0, 1, 0, -1, 0),
window.addEventListener('pointerup', this.g_a$a, !0),
window.addEventListener('touchend', this.g_a$a, !0),
window.addEventListener('click', this.g_a$a, !0),
window.addEventListener('keydown', this.g_a$a, !0),
(self.C3_GetAudioContextCurrentTime = () => this.g_a$O());
try {
await Promise.all(e.preloadList.map((e) => this.g_a$P(e.originalUrl, e.url, e.type, !1)));
} catch (e) {
console.error('[Construct 3] Preloading sounds failed: ', e);
}
return { sampleRate: this.g_a_Z.sampleRate };
}
g_a$b() {
if (!this.g_a_$) {
const e = this.g_a_Z;
'suspended' === e.state && e.resume && e.resume();
const g = e.createBuffer(1, 220, 22050),
a = e.createBufferSource();
(a.buffer = g),
a.connect(e.destination),
a.start(0),
'running' === e.state &&
((this.g_a_$ = !0),
window.removeEventListener('pointerup', this.g_a$a, !0),
window.removeEventListener('touchend', this.g_a$a, !0),
window.removeEventListener('click', this.g_a$a, !0),
window.removeEventListener('keydown', this.g_a$a, !0),
(this.g_a$a = null));
}
}
g_azD() {
return this.g_a_Z;
}
g_a$O() {
return this.g_a_Z.currentTime;
}
g_azF() {
return this.g_a__;
}
g_a$Q(e) {
const g = this.g_a$m.get(e.toLowerCase());
return g ? g[0].g_a$R() : this.g_azF();
}
g_a$S(e, g) {
e = e.toLowerCase();
let _ = this.g_a$m.get(e);
_ || ((_ = []), this.g_a$m.set(e, _)),
g.g_al_(_.length),
g.g_a$T(e),
_.push(g),
this.g_a$U(e);
}
g_a$U(e) {
let g = this.g_azF();
const _ = this.g_a$m.get(e);
if (_ && _.length) {
g = _[0].g_a$R();
for (let e = 0, g = _.length; e < g; ++e) {
const a = _[e];
e + 1 === g ? a.g_a$V(this.g_azF()) : a.g_a$V(_[e + 1].g_a$R());
}
}
for (const a of this.g_a$W(e)) a.g_a$X(g);
this.g_a$q && this.g_a$p === e && (this.g_a$q.disconnect(), this.g_a$q.connect(g));
}
g_a$Y() {
return this.g_azV;
}
g_aAz() {
return this.g_azW;
}
g_a$Z() {
return this.g_azI;
}
g_KX() {
return this.g_aks;
}
g_Gk() {
return this.g_aqN;
}
g_a$_() {
return this.g_a$j;
}
g_a$$() {
return this.g_a$l;
}
g_baa() {
this.g_a$k = !0;
}
g_bab() {
return this.g_azL;
}
g_bac() {
return this.g_azM;
}
g_bad() {
return this.g_a$i;
}
g_bae() {
return this.g_azR;
}
g_baf() {
return this.g_azS;
}
g_bag(e, g) {
return g
? this.g_ars.g_agl(e).then((e) => {
const g = this.g_a_Z.createBuffer(1, e.length, 48e3),
a = g.getChannelData(0);
return a.set(e), g;
})
: new Promise((g, a) => {
this.g_a_Z.decodeAudioData(e, g, a);
});
}
g_aZS(e) {
this.g_ars.g_aZS(e);
}
g_aZT(e) {
this.g_ars.g_aZT(e);
}
g_bah(g) {
let a = 0;
for (let _ = 0, e = this.g_a$d.length; _ < e; ++_) {
const t = this.g_a$d[_];
(this.g_a$d[a] = t), t.g_bai() === g ? t.g_ek() : ++a;
}
this.g_a$d.length = a;
}
g_baj() {
let e = 0;
for (let g = 0, a = this.g_a$c.length; g < a; ++g) {
const a = this.g_a$c[g];
(this.g_a$c[e] = a), a.g_bak() ? a.g_ek() : ++e;
}
this.g_a$c.length = e;
}
*g_a$W(g) {
if (g) for (const a of this.g_a$d) e(a.g_bal(), g) && (yield a);
else this.g_a$e && !this.g_a$e.g_bam() && (yield this.g_a$e);
}
async g_a$P(g, a, _, t, n) {
for (const e of this.g_a$c) if (e.g_ban() === a) return await e.g_Cd(), e;
if (n) return null;
t && (this.g_a$j || this.g_a$k) && this.g_baj();
const e = g_bao.g_sf(this, g, a, _, t);
return this.g_a$c.push(e), await e.g_Cd(), e;
}
async g_bap(_, a, t, n, b) {
for (const e of this.g_a$d) if (e.g_ban() === a && (e.g_baq() || b)) return e.g_bar(n), e;
const e = await this.g_a$P(_, a, t, b),
i = e.g_agB(n);
return this.g_a$d.push(i), i;
}
g_bas(e) {
let g = this.g_a$h.get(e);
if (!g) {
let _ = null;
const a = new Promise((e) => (_ = e));
(g = { g_bat: 0, promise: a, resolve: _ }), this.g_a$h.set(e, g);
}
g.g_bat++;
}
g_bau(e) {
const g = this.g_a$h.get(e);
if (!g) throw new Error('expected pending tag');
g.g_bat--, 0 === g.g_bat && (g.resolve(), this.g_a$h.delete(e));
}
g_bav(e) {
e || (e = this.g_a$f);
const g = this.g_a$h.get(e);
return g ? g.promise : Promise.resolve();
}
g_baw() {
if (0 < this.g_a$n.size) return void this.g_ael();
for (const e of this.g_a$d) if (e.g_Yd()) return void this.g_ael();
}
g_KZ() {
for (const e of this.g_a$n) e.g_KZ();
const e = this.g_a$O();
for (const g of this.g_a$d) g.g_KZ(e);
const g = this.g_a$d.filter((e) => e.g_Yd()).map((e) => e.g_bax());
this.g_aYp('state', {
tickCount: this.g_a$g,
audioInstances: g,
analysers: [...this.g_a$n].map((e) => e.g_bay())
}),
0 === g.length && 0 === this.g_a$n.size && this.g_adY();
}
g_baz(e, g, a) {
this.g_aYp('trigger', { type: e, tag: g, aiid: a });
}
async g_a$v(_) {
const a = _.originalUrl,
t = _.url,
n = _.type,
b = _.isMusic,
e = _.tag,
c = _.isLooping,
g = _.vol,
o = _.pos,
i = _.panning;
let r = _.off;
if (0 < r && !_.trueClock)
if (this.g_a_Z.getOutputTimestamp) {
const e = this.g_a_Z.getOutputTimestamp();
r = r - e.performanceTime / 1e3 + e.contextTime;
} else r = r - performance.now() / 1e3 + this.g_a_Z.currentTime;
(this.g_a$f = e), this.g_bas(e);
try {
(this.g_a$e = await this.g_bap(a, t, n, e, b)),
i
? (this.g_a$e.g_baA(!0),
this.g_a$e.g_baB(i.x, i.y, i.angle, i.innerAngle, i.outerAngle, i.outerGain),
i.hasOwnProperty('uid') && this.g_a$e.g_baC(i.uid))
: this.g_a$e.g_baA(!1),
this.g_a$e.g_MW(c, g, o, r);
} catch (e) {
return void console.error('[Construct 3] Audio: error starting playback: ', e);
} finally {
this.g_bau(e);
}
this.g_ael();
}
g_a$w(e) {
const g = e.tag;
for (const a of this.g_a$W(g)) a.g_Kg();
}
g_a$x() {
for (const e of this.g_a$d) e.g_Kg();
}
g_a$y(e) {
const g = e.tag,
a = e.paused;
for (const _ of this.g_a$W(g)) a ? _.g_baD() : _.g_MV();
this.g_baw();
}
g_a$z(e) {
const g = e.tag,
a = e.vol;
for (const _ of this.g_a$W(g)) _.g_aAJ(a);
}
async g_a$A(g) {
const a = g.tag,
_ = g.vol,
t = g.duration,
n = g.stopOnEnd;
await this.g_bav(a);
for (const e of this.g_a$W(a)) e.g_aAK(_, t, n);
this.g_baw();
}
g_a$B(e) {
this.g_azV = e.vol;
for (const g of this.g_a$d) g.g_baE();
}
g_a$C(e) {
const g = e.tag,
a = e.isMuted;
for (const _ of this.g_a$W(g)) _.g_aAI(a);
}
g_a$D(e) {
(this.g_azW = e.isSilent), this.g_ars.g_aAQ(this.g_azW);
for (const g of this.g_a$d) g.g_baF();
}
g_a$E(e) {
const g = e.tag,
a = e.isLooping;
for (const _ of this.g_a$W(g)) _.g_aAH(a);
}
async g_a$F(e) {
const g = e.tag,
a = e.rate;
await this.g_bav(g);
for (const _ of this.g_a$W(g)) _.g_Mj(a);
}
async g_a$G(e) {
const g = e.tag,
a = e.pos;
await this.g_bav(g);
for (const _ of this.g_a$W(g)) _.g_aAP(a);
}
async g_a$H(g) {
const a = g.originalUrl,
_ = g.url,
t = g.type,
n = g.isMusic;
try {
await this.g_bap(a, _, t, '', n);
} catch (e) {
console.error('[Construct 3] Audio: error preloading: ', e);
}
}
async g_HE(g) {
const a = g.url,
_ = g.type,
t = g.isMusic,
n = await this.g_a$P('', a, _, t, !0);
if (n) {
n.g_ek();
const e = this.g_a$c.indexOf(n);
-1 !== e && this.g_a$c.splice(e, 1);
}
}
g_a$I() {
for (const e of this.g_a$c) e.g_ek();
this.g_a$c.length = 0;
}
g_a$J(e) {
const g = e.isSuspended;
!g && this.g_a_Z.resume && this.g_a_Z.resume();
for (const a of this.g_a$d) a.g_asi(g);
g && this.g_a_Z.suspend && this.g_a_Z.suspend();
}
g_JX(e) {
if (
((this.g_aks = e.timeScale),
(this.g_aqN = e.gameTime),
(this.g_a$g = e.tickCount),
0 !== this.g_azI)
)
for (const e of this.g_a$d) e.g_baG();
const g = e.listenerPos;
g && this.g_a_Z.listener.setPosition(g[0], g[1], g[2]);
for (const g of e.instPans) {
const e = g.uid;
for (const a of this.g_a$d) a.g_Ei() === e && a.g_baH(g.x, g.y, g.angle);
}
}
async g_a$K(g) {
const a = g.type,
_ = g.tag,
t = g.params;
let n;
if ('filter' === a) n = new g_baI(this, ...t);
else if ('delay' === a) n = new g_baJ(this, ...t);
else if ('convolution' === a) {
let e = null;
try {
e = await this.g_a$P(g.bufferOriginalUrl, g.bufferUrl, g.bufferType, !1);
} catch (e) {
return void console.log('[Construct 3] Audio: error loading convolution: ', e);
}
(n = new g_baK(this, e.g_baL(), ...t)),
n.g_baM(g.bufferOriginalUrl, g.bufferUrl, g.bufferType);
} else if ('flanger' === a) n = new g_baN(this, ...t);
else if ('phaser' === a) n = new g_baO(this, ...t);
else if ('gain' === a) n = new g_baP(this, ...t);
else if ('tremolo' === a) n = new g_baQ(this, ...t);
else if ('ringmod' === a) n = new g_baR(this, ...t);
else if ('distortion' === a) n = new g_baS(this, ...t);
else if ('compressor' === a) n = new g_baT(this, ...t);
else if ('analyser' === a) n = new g_baU(this, ...t);
else throw new Error('invalid effect type');
this.g_a$S(_, n), this.g_baV();
}
g_a$L(_) {
const a = _.tag,
t = _.index,
n = _.param,
b = _.value,
e = _.ramp,
i = _.time,
g = this.g_a$m.get(a);
!g || 0 > t || t >= g.length || (g[t].g_baW(n, b, e, i), this.g_baV());
}
g_a$M(e) {
const g = e.tag.toLowerCase(),
_ = this.g_a$m.get(g);
if (_ && _.length) {
for (const e of _) e.g_ek();
this.g_a$m.delete(g), this.g_a$U(g);
}
}
g_baX(e) {
this.g_a$n.add(e), this.g_baw();
}
g_baY(e) {
this.g_a$n.delete(e);
}
g_baV() {
this.g_a$o || ((this.g_a$o = !0), Promise.resolve().then(() => this.g_baZ()));
}
g_baZ() {
const e = {};
for (const [g, a] of this.g_a$m) e[g] = a.map((e) => e.g_bax());
this.g_aYp('fxstate', { fxstate: e }), (this.g_a$o = !1);
}
async g_a$N(e) {
const g = e.saveLoadMode;
if (3 !== g)
for (const e of this.g_a$d) (e.g_bak() && 1 === g) || (!e.g_bak() && 2 === g) || e.g_Kg();
for (const g of this.g_a$m.values()) for (const e of g) e.g_ek();
this.g_a$m.clear(), (this.g_aks = e.timeScale), (this.g_aqN = e.gameTime);
const a = e.listenerPos;
this.g_a_Z.listener.setPosition(a[0], a[1], a[2]),
(this.g_azW = e.isSilent),
this.g_ars.g_aAQ(this.g_azW),
(this.g_azV = e.masterVolume);
const _ = [];
for (const g of Object.values(e.effects)) _.push(Promise.all(g.map((e) => this.g_a$K(e))));
await Promise.all(_), await Promise.all(e.playing.map((e) => this.g_ba_(e, g))), this.g_baw();
}
async g_ba_(_, a) {
if (3 === a) return;
const t = _.bufferOriginalUrl,
n = _.bufferUrl,
b = _.bufferType,
e = _.isMusic,
c = _.tag,
g = _.isLooping,
o = _.volume,
i = _.playbackTime;
if (e && 1 === a) return;
if (!e && 2 === a) return;
let r = null;
try {
r = await this.g_bap(t, n, b, c, e);
} catch (e) {
return void console.error('[Construct 3] Audio: error loading audio state: ', e);
}
r.g_ba$(_.pan), r.g_MW(g, o, i, 0), _.isPlaying || r.g_baD(), r.g_bba(_);
}
g_a$r(e, g) {
this.g_a$q && this.g_a$q.disconnect(),
(this.g_a$p = g.toLowerCase()),
(this.g_a$q = this.g_a_Z.createMediaStreamSource(e)),
this.g_a$q.connect(this.g_a$Q(this.g_a$p));
}
g_a$t() {
return (
this.g_a$s ||
((this.g_a$s = this.g_a_Z.createMediaStreamDestination()),
this.g_a__.connect(this.g_a$s)),
this.g_a$s.stream
);
}
};
g_aYV.g_aZQ(g);
}
'use strict',
(self.g_bao = class {
constructor(g, a, _, t, n) {
(this.g_bbb = g),
(this.g_bbc = a),
(this.g_CE = _),
(this.g_kL = t),
(this.g_bbd = n),
(this.g_bbe = ''),
(this.g_bbf = 'not-loaded'),
(this.g_CJ = null);
}
g_ek() {
(this.g_bbf = 'not-loaded'), (this.g_bbb = null), (this.g_CJ = null);
}
static g_sf(g, a, _, t, n) {
const e = 'audio/webm; codecs=opus' === t && !g.g_a$$();
return (
n && e && g.g_baa(),
!n || g.g_a$_() || e ? new g_bbg(g, a, _, t, n, e) : new g_bbh(g, a, _, t, n)
);
}
g_agB(e) {
return 'html5' === this.g_bbe
? new g_bbi(this.g_bbb, this, e)
: new g_bbj(this.g_bbb, this, e);
}
g_Hw() {}
g_Cd() {
return this.g_CJ || (this.g_CJ = this.g_Hw()), this.g_CJ;
}
g_CK() {}
g_bbk() {}
g_bbl() {
return 'failed' === this.g_bbf;
}
g_azD() {
return this.g_bbb.g_azD();
}
g_bbm() {
return this.g_bbe;
}
g_bbn() {
return this.g_bbc;
}
g_ban() {
return this.g_CE;
}
g_bbo() {
return this.g_kL;
}
g_bak() {
return this.g_bbd;
}
g_aio() {}
}),
'use strict',
(self.g_bbh = class extends g_bao {
constructor(g, a, _, t, n) {
super(g, a, _, t, n),
(this.g_bbe = 'html5'),
(this.g_bbp = new Audio()),
(this.g_bbp.crossOrigin = 'anonymous'),
(this.g_bbp.autoplay = !1),
(this.g_bbp.preload = 'auto'),
(this.g_bbq = null),
(this.g_bbr = null),
(this.g_bbs = !1),
this.g_bbp.addEventListener('canplaythrough', () => (this.g_bbs = !0)),
(this.g_bbt = this.g_azD().createGain()),
(this.g_bbu = null),
this.g_bbp.addEventListener('canplay', () => {
this.g_bbq &&
((this.g_bbf = 'loaded'), this.g_bbq(), (this.g_bbq = null), (this.g_bbr = null)),
this.g_bbu ||
!this.g_bbp ||
((this.g_bbu = this.g_azD().createMediaElementSource(this.g_bbp)),
this.g_bbu.connect(this.g_bbt));
}),
(this.onended = null),
this.g_bbp.addEventListener('ended', () => {
this.onended && this.onended();
}),
this.g_bbp.addEventListener('error', (e) => this.g_bbv(e));
}
g_ek() {
this.g_bbb.g_bah(this),
this.g_bbt.disconnect(),
(this.g_bbt = null),
this.g_bbu.disconnect(),
(this.g_bbu = null),
this.g_bbp && !this.g_bbp.paused && this.g_bbp.pause(),
(this.onended = null),
(this.g_bbp = null),
super.g_ek();
}
g_Hw() {
return (
(this.g_bbf = 'loading'),
new Promise((e, g) => {
(this.g_bbq = e), (this.g_bbr = g), (this.g_bbp.src = this.g_CE);
})
);
}
g_bbv(e) {
console.error(`[Construct 3] Audio '${this.g_CE}' error: `, e),
this.g_bbr &&
((this.g_bbf = 'failed'), this.g_bbr(e), (this.g_bbq = null), (this.g_bbr = null));
}
g_CK() {
const e = 4 <= this.g_bbp.readyState;
return e && (this.g_bbs = !0), e || this.g_bbs;
}
g_bbk() {
return this.g_CK();
}
g_bbw() {
return this.g_bbp;
}
g_bbx() {
return this.g_bbt;
}
g_aio() {
return this.g_bbp.duration;
}
}),
'use strict',
(self.g_bbg = class extends g_bao {
constructor(g, a, _, t, n, e) {
super(g, a, _, t, n),
(this.g_bbe = 'webaudio'),
(this.g_bby = null),
(this.g_bbz = null),
(this.g_bbA = !!e);
}
g_ek() {
this.g_bbb.g_bah(this), (this.g_bby = null), (this.g_bbz = null), super.g_ek();
}
async g_bbB() {
if (this.g_bby) return this.g_bby;
const e = this.g_bbb.g_aYz();
if ('cordova' === e.g_asZ() && e.g_f_(this.g_CE)) this.g_bby = await e.g_BT(this.g_CE);
else {
const e = await fetch(this.g_CE);
if (!e.ok) throw new Error(`error fetching audio data: ${e.status} ${e.statusText}`);
this.g_bby = await e.arrayBuffer();
}
}
async g_bbC() {
return this.g_bbz
? this.g_bbz
: void ((this.g_bbz = await this.g_bbb.g_bag(this.g_bby, this.g_bbA)), (this.g_bby = null));
}
async g_Hw() {
try {
(this.g_bbf = 'loading'), await this.g_bbB(), await this.g_bbC(), (this.g_bbf = 'loaded');
} catch (e) {
(this.g_bbf = 'failed'),
console.error(`[Construct 3] Failed to load audio '${this.g_CE}': `, e);
}
}
g_CK() {
return !!(this.g_bby || this.g_bbz);
}
g_bbk() {
return !!this.g_bbz;
}
g_baL() {
return this.g_bbz;
}
g_aio() {
return this.g_bbz ? this.g_bbz.duration : 0;
}
}),
'use strict';
{
function _(g) {
return g * e;
}
const e = 180 / Math.PI;
let g = 0;
self.g_bbD = class {
constructor(_, a, t) {
(this.g_bbb = _),
(this.g_xD = a),
(this.g_bbE = t),
(this.g_bbF = g++),
(this.g_bbG = this.g_azD().createGain()),
this.g_bbG.connect(this.g_azF()),
(this.g_bbH = null),
(this.g_bbI = !1),
(this.g_UO = !0),
(this.g_aRp = !1),
(this.g_bbJ = !1),
(this.g_aad = !1),
(this.g_bbK = 1),
(this.g_bbL = !1),
(this.g_Lz = 1);
const n = this.g_bbb.g_a$Z();
(this.g_bbM = (1 === n && !this.g_bak()) || 2 === n),
(this.g_bbN = -1),
(this.g_bbO = -1),
(this.g_bbP = !1);
}
g_ek() {
(this.g_bbb = null),
(this.g_xD = null),
this.g_bbH && (this.g_bbH.disconnect(), (this.g_bbH = null)),
this.g_bbG.disconnect(),
(this.g_bbG = null);
}
g_azD() {
return this.g_bbb.g_azD();
}
g_azF() {
return this.g_bbb.g_a$Q(this.g_bbE);
}
g_a$Y() {
return this.g_bbb.g_a$Y();
}
g_aRq() {
return this.g_bbM ? this.g_bbb.g_Gk() : performance.now() / 1e3;
}
g_bbn() {
return this.g_xD.g_bbn();
}
g_ban() {
return this.g_xD.g_ban();
}
g_bbo() {
return this.g_xD.g_bbo();
}
g_bai() {
return this.g_xD;
}
g_bak() {
return this.g_xD.g_bak();
}
g_bar(e) {
this.g_bbE = e;
}
g_bal() {
return this.g_bbE;
}
g_bbQ() {
return this.g_bbF;
}
g_bam() {}
g_baq() {}
g_Mm() {
return !this.g_UO && !this.g_aRp && !this.g_bam();
}
g_Yd() {
return !this.g_UO && !this.g_bam();
}
g_bbR() {}
g_aio(e) {
let g = this.g_xD.g_aio();
return e && (g /= this.g_Lz || 0.001), g;
}
g_MW() {}
g_Kg() {}
g_baD() {}
g_aRr() {
return this.g_aRp;
}
g_MV() {}
g_aAJ(e) {
(this.g_bbK = e),
this.g_bbG.gain.cancelScheduledValues(0),
(this.g_bbO = -1),
(this.g_bbG.gain.value = this.g_bbS());
}
g_aAK(g, _, t) {
if (!this.g_bbT()) {
g *= this.g_a$Y();
const a = this.g_bbG.gain;
a.cancelScheduledValues(0);
const n = this.g_bbb.g_a$O(),
e = n + _;
a.setValueAtTime(a.value, n),
a.linearRampToValueAtTime(g, e),
(this.g_bbK = g),
(this.g_bbO = e),
(this.g_bbP = t);
}
}
g_baE() {
this.g_aAJ(this.g_bbK);
}
g_KZ(e) {
-1 !== this.g_bbO &&
e >= this.g_bbO &&
((this.g_bbO = -1),
this.g_bbP && this.g_Kg(),
this.g_bbb.g_baz('fade-ended', this.g_bbE, this.g_bbF));
}
g_bbS() {
const e = this.g_bbK * this.g_a$Y();
return isFinite(e) ? e : 0;
}
g_aAI(e) {
(e = !!e), this.g_bbL === e || ((this.g_bbL = e), this.g_baF());
}
g_bbT() {
return this.g_bbL;
}
g_aAz() {
return this.g_bbb.g_aAz();
}
g_baF() {}
g_aAH() {}
g_ZM() {
return this.g_aad;
}
g_Mj(e) {
this.g_Lz === e || ((this.g_Lz = e), this.g_baG());
}
g_baG() {}
g_Mk() {
return this.g_Lz;
}
g_aAP() {}
g_asi() {}
g_baA(e) {
(e = !!e),
this.g_bbI === e ||
((this.g_bbI = e),
this.g_bbI
? (!this.g_bbH &&
((this.g_bbH = this.g_azD().createPanner()),
(this.g_bbH.panningModel = this.g_bbb.g_bab()),
(this.g_bbH.distanceModel = this.g_bbb.g_bac()),
(this.g_bbH.refDistance = this.g_bbb.g_bad()),
(this.g_bbH.maxDistance = this.g_bbb.g_bae()),
(this.g_bbH.rolloffFactor = this.g_bbb.g_baf())),
this.g_bbG.disconnect(),
this.g_bbG.connect(this.g_bbH),
this.g_bbH.connect(this.g_azF()))
: (this.g_bbH.disconnect(), this.g_bbG.disconnect(), this.g_bbG.connect(this.g_azF())));
}
g_baB(a, t, n, b, e, i) {
this.g_bbI &&
(this.g_baH(a, t, n),
(this.g_bbH.coneInnerAngle = _(b)),
(this.g_bbH.coneOuterAngle = _(e)),
(this.g_bbH.coneOuterGain = i));
}
g_baH(e, g, a) {
this.g_bbI &&
(this.g_bbH.setPosition(e, g, 0), this.g_bbH.setOrientation(Math.cos(a), Math.sin(a), 0));
}
g_baC(e) {
this.g_bbN = e;
}
g_Ei() {
return this.g_bbN;
}
g_bbU() {}
g_a$X(e) {
const g = this.g_bbH || this.g_bbG;
g.disconnect(), g.connect(e);
}
g_bax() {
return {
aiid: this.g_bbQ(),
tag: this.g_bbE,
duration: this.g_aio(),
volume: this.g_bbK,
isPlaying: this.g_Mm(),
playbackTime: this.g_bbR(),
playbackRate: this.g_Mk(),
uid: this.g_bbN,
bufferOriginalUrl: this.g_bbn(),
bufferUrl: '',
bufferType: this.g_bbo(),
isMusic: this.g_bak(),
isLooping: this.g_ZM(),
isMuted: this.g_bbT(),
resumePosition: this.g_bbU(),
pan: this.g_bbV()
};
}
g_bba(e) {
this.g_Mj(e.playbackRate), this.g_aAI(e.isMuted);
}
g_bbV() {
if (!this.g_bbH) return null;
const e = this.g_bbH;
return {
pos: [e.positionX.value, e.positionY.value, e.positionZ.value],
orient: [e.orientationX.value, e.orientationY.value, e.orientationZ.value],
cia: e.coneInnerAngle,
coa: e.coneOuterAngle,
cog: e.coneOuterGain,
uid: this.g_bbN
};
}
g_ba$(e) {
if (!e) return void this.g_baA(!1);
this.g_baA(!0);
const g = this.g_bbH;
g.setPosition(...g.pos),
g.setOrientation(...g.orient),
(g.coneInnerAngle = g.cia),
(g.coneOuterAngle = g.coa),
(g.coneOuterGain = g.cog),
(this.g_bbN = g.uid);
}
};
}
'use strict',
(self.g_bbi = class extends g_bbD {
constructor(e, g, a) {
super(e, g, a),
this.g_xD.g_bbx().connect(this.g_bbG),
(this.g_xD.onended = () => this.g_bbW());
}
g_ek() {
this.g_Kg(), this.g_xD.g_bbx().disconnect(), super.g_ek();
}
g_bbw() {
return this.g_xD.g_bbw();
}
g_bbW() {
(this.g_UO = !0), (this.g_bbN = -1), this.g_bbb.g_baz('ended', this.g_bbE, this.g_bbF);
}
g_bam() {
return this.g_bbw().ended;
}
g_baq() {
return !!this.g_UO || this.g_bam();
}
g_bbR(e) {
let g = this.g_bbw().currentTime;
return e && (g *= this.g_Lz), this.g_aad || (g = Math.min(g, this.g_aio())), g;
}
g_MW(e, g, _) {
const a = this.g_bbw();
if (
(1 !== a.playbackRate && (a.playbackRate = 1),
a.loop !== e && (a.loop = e),
this.g_aAJ(g),
a.muted && (a.muted = !1),
a.currentTime !== _)
)
try {
a.currentTime = _;
} catch (e) {
console.warn(
`[Construct 3] Exception seeking audio '${this.g_xD.g_ban()}' to position '${_}': `,
e
);
}
this.g_bbb.g_aZS(a), (this.g_UO = !1), (this.g_aRp = !1), (this.g_aad = e), (this.g_Lz = 1);
}
g_Kg() {
const e = this.g_bbw();
e.paused || e.pause(),
this.g_bbb.g_aZT(e),
(this.g_UO = !0),
(this.g_aRp = !1),
(this.g_bbN = -1);
}
g_baD() {
if (!(this.g_aRp || this.g_UO || this.g_bam())) {
const e = this.g_bbw();
e.paused || e.pause(), this.g_bbb.g_aZT(e), (this.g_aRp = !0);
}
}
g_MV() {
!this.g_aRp ||
this.g_UO ||
this.g_bam() ||
(this.g_bbb.g_aZS(this.g_bbw()), (this.g_aRp = !1));
}
g_baF() {
this.g_bbw().muted = this.g_bbL || this.g_aAz();
}
g_aAH(e) {
(e = !!e), this.g_aad === e || ((this.g_aad = e), (this.g_bbw().loop = e));
}
g_baG() {
let e = this.g_Lz;
this.g_bbM && (e *= this.g_bbb.g_KX());
try {
this.g_bbw().playbackRate = e;
} catch (g) {
console.warn(`[Construct 3] Unable to set playback rate '${e}':`, g);
}
}
g_aAP(e) {
if (!(this.g_UO || this.g_bam()))
try {
this.g_bbw().currentTime = e;
} catch (g) {
console.warn(`[Construct 3] Error seeking audio to '${e}': `, g);
}
}
g_bbU() {
return this.g_bbR();
}
g_asi(e) {
e
? this.g_Mm()
? (this.g_bbw().pause(), (this.g_bbJ = !0))
: (this.g_bbJ = !1)
: this.g_bbJ && (this.g_bbb.g_aZS(this.g_bbw()), (this.g_bbJ = !1));
}
}),
'use strict',
(self.g_bbj = class extends g_bbD {
constructor(e, g, a) {
super(e, g, a),
(this.g_bbX = null),
(this.g_bbY = (e) => this.g_bbW(e)),
(this.g_bbZ = !0),
(this.g_bb_ = null),
(this.g_aqI = 0),
(this.g_bb$ = 0),
(this.g_bca = 1);
}
g_ek() {
this.g_Kg(), this.g_bcb(), (this.g_bbY = null), super.g_ek();
}
g_bcb() {
this.g_bbX && this.g_bbX.disconnect(), (this.g_bbX = null), (this.g_bb_ = null);
}
g_bbW(e) {
this.g_aRp ||
this.g_bbJ ||
e.target !== this.g_bb_ ||
((this.g_bbZ = !0),
(this.g_UO = !0),
(this.g_bbN = -1),
this.g_bcb(),
this.g_bbb.g_baz('ended', this.g_bbE, this.g_bbF));
}
g_bam() {
return !(!this.g_UO && this.g_bbX && this.g_bbX.loop) && !this.g_aRp && this.g_bbZ;
}
g_baq() {
return !this.g_bbX || this.g_UO || this.g_bam();
}
g_bbR(e) {
let g = 0;
return (
(g = this.g_aRp ? this.g_bb$ : this.g_aRq() - this.g_aqI),
e && (g *= this.g_Lz),
this.g_aad || (g = Math.min(g, this.g_aio())),
g
);
}
g_MW(e, g, a, _) {
(this.g_bca = 1),
this.g_aAJ(g),
this.g_bcb(),
(this.g_bbX = this.g_azD().createBufferSource()),
(this.g_bbX.buffer = this.g_xD.g_baL()),
this.g_bbX.connect(this.g_bbG),
(this.g_bb_ = this.g_bbX),
(this.g_bbX.onended = this.g_bbY),
(this.g_bbX.loop = e),
this.g_bbX.start(_, a),
(this.g_bbZ = !1),
(this.g_UO = !1),
(this.g_aRp = !1),
(this.g_aad = e),
(this.g_Lz = 1),
(this.g_aqI = this.g_aRq() - a);
}
g_Kg() {
this.g_bbX && this.g_bbX.stop(0), (this.g_UO = !0), (this.g_aRp = !1), (this.g_bbN = -1);
}
g_baD() {
this.g_aRp ||
this.g_UO ||
this.g_bam() ||
((this.g_bb$ = this.g_bbR(!0)),
this.g_aad && (this.g_bb$ %= this.g_aio()),
(this.g_aRp = !0),
this.g_bbX.stop(0));
}
g_MV() {
!this.g_aRp ||
this.g_UO ||
this.g_bam() ||
(this.g_bcb(),
(this.g_bbX = this.g_azD().createBufferSource()),
(this.g_bbX.buffer = this.g_xD.g_baL()),
this.g_bbX.connect(this.g_bbG),
(this.g_bb_ = this.g_bbX),
(this.g_bbX.onended = this.g_bbY),
(this.g_bbX.loop = this.g_aad),
this.g_baE(),
this.g_baG(),
(this.g_aqI = this.g_aRq() - this.g_bb$ / (this.g_Lz || 0.001)),
this.g_bbX.start(0, this.g_bb$),
(this.g_aRp = !1));
}
g_bbS() {
return super.g_bbS() * this.g_bca;
}
g_baF() {
(this.g_bca = this.g_bbL || this.g_aAz() ? 0 : 1), this.g_baE();
}
g_aAH(e) {
(e = !!e), this.g_aad === e || ((this.g_aad = e), this.g_bbX && (this.g_bbX.loop = e));
}
g_baG() {
let e = this.g_Lz;
this.g_bbM && (e *= this.g_bbb.g_KX()), this.g_bbX && (this.g_bbX.playbackRate.value = e);
}
g_aAP(e) {
this.g_UO ||
this.g_bam() ||
(this.g_aRp ? (this.g_bb$ = e) : (this.g_baD(), (this.g_bb$ = e), this.g_MV()));
}
g_bbU() {
return this.g_bb$;
}
g_asi(e) {
e
? this.g_Mm()
? ((this.g_bbJ = !0),
(this.g_bb$ = this.g_bbR(!0)),
this.g_aad && (this.g_bb$ %= this.g_aio()),
this.g_bbX.stop(0))
: (this.g_bbJ = !1)
: this.g_bbJ &&
(this.g_bcb(),
(this.g_bbX = this.g_azD().createBufferSource()),
(this.g_bbX.buffer = this.g_xD.g_baL()),
this.g_bbX.connect(this.g_bbG),
(this.g_bb_ = this.g_bbX),
(this.g_bbX.onended = this.g_bbY),
(this.g_bbX.loop = this.g_aad),
this.g_baE(),
this.g_baG(),
(this.g_aqI = this.g_aRq() - this.g_bb$ / (this.g_Lz || 0.001)),
this.g_bbX.start(0, this.g_bb$),
(this.g_bbJ = !1));
}
g_bba(e) {
super.g_bba(e), (this.g_bb$ = e.resumePosition);
}
}),
'use strict';
{
function g(e) {
return Math.pow(10, e / 20);
}
function _(e) {
return Math.max(Math.min(g(e), 1), 0);
}
function t(e) {
return 20 * (Math.log(e) / 2.302585092994046);
}
function n(e) {
return t(Math.max(Math.min(e, 1), 0));
}
function i(e, g) {
return 1 - Math.exp(-g * e);
}
class e {
constructor(e) {
(this.g_bbb = e),
(this.g_a_Z = e.g_azD()),
(this.g_Dr = -1),
(this.g_bbE = ''),
(this.g_kL = ''),
(this.g_bcc = null);
}
g_ek() {
this.g_a_Z = null;
}
g_al_(e) {
this.g_Dr = e;
}
g_EM() {
return this.g_Dr;
}
g_a$T(e) {
this.g_bbE = e;
}
g_bal() {
return this.g_bbE;
}
g_bcd() {
return this.g_a_Z.createGain();
}
g_a$R() {}
g_a$V() {}
g_bce(g, a, _, t) {
if ((g.cancelScheduledValues(0), 0 === t)) return void (g.value = a);
const n = this.g_a_Z.currentTime;
(t += n),
0 === _
? g.setValueAtTime(a, t)
: 1 === _
? (g.setValueAtTime(g.value, n), g.linearRampToValueAtTime(a, t))
: 2 === _
? (g.setValueAtTime(g.value, n), g.exponentialRampToValueAtTime(a, t))
: void 0;
}
g_bax() {
return { type: this.g_kL, tag: this.g_bbE, params: this.g_bcc };
}
}
(self.g_baI = class extends e {
constructor(_, a, t, n, b, e, i) {
super(_),
(this.g_kL = 'filter'),
(this.g_bcc = [a, t, n, b, e, i]),
(this.g_bcf = this.g_bcd()),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = i),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - i),
(this.g_bci = this.g_a_Z.createBiquadFilter()),
(this.g_bci.type = a),
(this.g_bci.frequency.value = t),
(this.g_bci.detune.value = n),
(this.g_bci.Q.value = b),
(this.g_bci.gain.vlaue = e),
this.g_bcf.connect(this.g_bci),
this.g_bcf.connect(this.g_bch),
this.g_bci.connect(this.g_bcg);
}
g_ek() {
this.g_bcf.disconnect(),
this.g_bci.disconnect(),
this.g_bcg.disconnect(),
this.g_bch.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[5] = g),
this.g_bce(this.g_bcg.gain, g, a, _),
this.g_bce(this.g_bch.gain, 1 - g, a, _))
: 1 === e
? ((this.g_bcc[1] = g), this.g_bce(this.g_bci.frequency, g, a, _))
: 2 === e
? ((this.g_bcc[2] = g), this.g_bce(this.g_bci.detune, g, a, _))
: 3 === e
? ((this.g_bcc[3] = g), this.g_bce(this.g_bci.Q, g, a, _))
: 4 === e
? ((this.g_bcc[4] = g), this.g_bce(this.g_bci.gain, g, a, _))
: void 0;
}
}),
(self.g_baJ = class extends e {
constructor(e, g, a, _) {
super(e),
(this.g_kL = 'delay'),
(this.g_bcc = [g, a, _]),
(this.g_bcf = this.g_bcd()),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = _),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - _),
(this.g_bcj = this.g_bcd()),
(this.g_bck = this.g_a_Z.createDelay(g)),
(this.g_bck.delayTime.value = g),
(this.g_bcl = this.g_bcd()),
(this.g_bcl.gain.value = a),
this.g_bcf.connect(this.g_bcj),
this.g_bcf.connect(this.g_bch),
this.g_bcj.connect(this.g_bcg),
this.g_bcj.connect(this.g_bck),
this.g_bck.connect(this.g_bcl),
this.g_bcl.connect(this.g_bcj);
}
g_ek() {
this.g_bcf.disconnect(),
this.g_bcg.disconnect(),
this.g_bch.disconnect(),
this.g_bcj.disconnect(),
this.g_bck.disconnect(),
this.g_bcl.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(g, a, t, n) {
0 === g
? ((a = Math.max(Math.min(a / 100, 1), 0)),
(this.g_bcc[2] = a),
this.g_bce(this.g_bcg.gain, a, t, n),
this.g_bce(this.g_bch.gain, 1 - a, t, n))
: 4 === g
? ((this.g_bcc[1] = _(a)), this.g_bce(this.g_bcl.gain, _(a), t, n))
: 5 === g
? ((this.g_bcc[0] = a), this.g_bce(this.g_bck.delayTime, a, t, n))
: void 0;
}
}),
(self.g_baK = class extends e {
constructor(e, g, a, _) {
super(e),
(this.g_kL = 'convolution'),
(this.g_bcc = [a, _]),
(this.g_bcm = ''),
(this.g_bcn = ''),
(this.g_bco = ''),
(this.g_bcf = this.g_bcd()),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = _),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - _),
(this.g_bcp = this.g_a_Z.createConvolver()),
(this.g_bcp.normalize = a),
(this.g_bcp.buffer = g),
this.g_bcf.connect(this.g_bcp),
this.g_bcf.connect(this.g_bch),
this.g_bcp.connect(this.g_bcg);
}
g_ek() {
this.g_bcf.disconnect(),
this.g_bcp.disconnect(),
this.g_bcg.disconnect(),
this.g_bch.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[1] = g),
this.g_bce(this.g_bcg.gain, g, a, _),
this.g_bce(this.g_bch.gain, 1 - g, a, _))
: void 0;
}
g_baM(e, g, a) {
(this.g_bcm = e), (this.g_bcn = g), (this.g_bco = a);
}
g_bax() {
const e = super.g_bax();
return (
(e.bufferOriginalUrl = this.g_bcm), (e.bufferUrl = ''), (e.bufferType = this.g_bco), e
);
}
}),
(self.g_baN = class extends e {
constructor(g, a, _, t, n, e) {
super(g),
(this.g_kL = 'flanger'),
(this.g_bcc = [a, _, t, n, e]),
(this.g_bcf = this.g_bcd()),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - e / 2),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = e / 2),
(this.g_bcq = this.g_bcd()),
(this.g_bcq.gain.value = n),
(this.g_bck = this.g_a_Z.createDelay(a + _)),
(this.g_bck.delayTime.value = a),
(this.g_bcr = this.g_a_Z.createOscillator()),
(this.g_bcr.frequency.value = t),
(this.g_bcs = this.g_bcd()),
(this.g_bcs.gain.value = _),
this.g_bcf.connect(this.g_bck),
this.g_bcf.connect(this.g_bch),
this.g_bck.connect(this.g_bcg),
this.g_bck.connect(this.g_bcq),
this.g_bcq.connect(this.g_bck),
this.g_bcr.connect(this.g_bcs),
this.g_bcs.connect(this.g_bck.delayTime),
this.g_bcr.start(0);
}
g_ek() {
this.g_bcr.stop(0),
this.g_bcf.disconnect(),
this.g_bck.disconnect(),
this.g_bcr.disconnect(),
this.g_bcs.disconnect(),
this.g_bch.disconnect(),
this.g_bcg.disconnect(),
this.g_bcq.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[4] = g),
this.g_bce(this.g_bcg.gain, g / 2, a, _),
this.g_bce(this.g_bch.gain, 1 - g / 2, a, _))
: 6 === e
? ((this.g_bcc[1] = g / 1e3), this.g_bce(this.g_bcs.gain, g / 1e3, a, _))
: 7 === e
? ((this.g_bcc[2] = g), this.g_bce(this.g_bcr.frequency, g, a, _))
: 8 === e
? ((this.g_bcc[3] = g / 100), this.g_bce(this.g_bcq.gain, g / 100, a, _))
: void 0;
}
}),
(self.g_baO = class extends e {
constructor(_, a, t, n, b, e, i) {
super(_),
(this.g_kL = 'phaser'),
(this.g_bcc = [a, t, n, b, e, i]),
(this.g_bcf = this.g_bcd()),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - i / 2),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = i / 2),
(this.g_bci = this.g_a_Z.createBiquadFilter()),
(this.g_bci.type = 'allpass'),
(this.g_bci.frequency.value = a),
(this.g_bci.detune.value = t),
(this.g_bci.Q.value = n),
(this.g_bcr = this.g_a_Z.createOscillator()),
(this.g_bcr.frequency.value = e),
(this.g_bcs = this.g_bcd()),
(this.g_bcs.gain.value = b),
this.g_bcf.connect(this.g_bci),
this.g_bcf.connect(this.g_bch),
this.g_bci.connect(this.g_bcg),
this.g_bcr.connect(this.g_bcs),
this.g_bcs.connect(this.g_bci.frequency),
this.g_bcr.start(0);
}
g_ek() {
this.g_bcr.stop(0),
this.g_bcf.disconnect(),
this.g_bci.disconnect(),
this.g_bcr.disconnect(),
this.g_bcs.disconnect(),
this.g_bch.disconnect(),
this.g_bcg.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[5] = g),
this.g_bce(this.g_bcg.gain, g / 2, a, _),
this.g_bce(this.g_bch.gain, 1 - g / 2, a, _))
: 1 === e
? ((this.g_bcc[0] = g), this.g_bce(this.g_bci.frequency, g, a, _))
: 2 === e
? ((this.g_bcc[1] = g), this.g_bce(this.g_bci.detune, g, a, _))
: 3 === e
? ((this.g_bcc[2] = g), this.g_bce(this.g_bci.Q, g, a, _))
: 6 === e
? ((this.g_bcc[3] = g), this.g_bce(this.g_bcs.gain, g, a, _))
: 7 === e
? ((this.g_bcc[4] = g), this.g_bce(this.g_bcr.frequency, g, a, _))
: void 0;
}
}),
(self.g_baP = class extends e {
constructor(e, g) {
super(e),
(this.g_kL = 'gain'),
(this.g_bcc = [g]),
(this.g_bct = this.g_bcd()),
(this.g_bct.gain.value = g);
}
g_ek() {
this.g_bct.disconnect(), super.g_ek();
}
g_a$V(e) {
this.g_bct.disconnect(), this.g_bct.connect(e);
}
g_a$R() {
return this.g_bct;
}
g_baW(g, a, t, n) {
4 === g ? ((this.g_bcc[0] = _(a)), this.g_bce(this.g_bct.gain, _(a), t, n)) : void 0;
}
}),
(self.g_baQ = class extends e {
constructor(e, g, a) {
super(e),
(this.g_kL = 'tremolo'),
(this.g_bcc = [g, a]),
(this.g_bct = this.g_bcd()),
(this.g_bct.gain.value = 1 - a / 2),
(this.g_bcr = this.g_a_Z.createOscillator()),
(this.g_bcr.frequency.value = g),
(this.g_bcs = this.g_bcd()),
(this.g_bcs.gain.value = a / 2),
this.g_bcr.connect(this.g_bcs),
this.g_bcs.connect(this.g_bct.gain),
this.g_bcr.start(0);
}
g_ek() {
this.g_bcr.stop(0),
this.g_bcr.disconnect(),
this.g_bcs.disconnect(),
this.g_bct.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bct.disconnect(), this.g_bct.connect(e);
}
g_a$R() {
return this.g_bct;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[1] = g),
this.g_bce(this.g_bct.gain.value, 1 - g / 2, a, _),
this.g_bce(this.g_bcs.gain.value, g / 2, a, _))
: 7 === e
? ((this.g_bcc[0] = g), this.g_bce(this.g_bcr.frequency, g, a, _))
: void 0;
}
}),
(self.g_baR = class extends e {
constructor(e, g, a) {
super(e),
(this.g_kL = 'ringmod'),
(this.g_bcc = [g, a]),
(this.g_bcf = this.g_bcd()),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = a),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - a),
(this.g_bcu = this.g_bcd()),
(this.g_bcu.gain.value = 0),
(this.g_bcr = this.g_a_Z.createOscillator()),
(this.g_bcr.frequency.value = g),
this.g_bcr.connect(this.g_bcu.gain),
this.g_bcr.start(0),
this.g_bcf.connect(this.g_bcu),
this.g_bcf.connect(this.g_bch),
this.g_bcu.connect(this.g_bcg);
}
g_ek() {
this.g_bcr.stop(0),
this.g_bcr.disconnect(),
this.g_bcu.disconnect(),
this.g_bcf.disconnect(),
this.g_bcg.disconnect(),
this.g_bch.disconnect(),
super.g_ek();
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[1] = g),
this.g_bce(this.g_bcg.gain, g, a, _),
this.g_bce(this.g_bch.gain, 1 - g, a, _))
: 7 === e
? ((this.g_bcc[0] = g), this.g_bce(this.g_bcr.frequency, g, a, _))
: void 0;
}
}),
(self.g_baS = class extends e {
constructor(g, a, _, t, n, e) {
super(g),
(this.g_kL = 'distortion'),
(this.g_bcc = [a, _, t, n, e]),
(this.g_bcf = this.g_bcd()),
(this.g_bcv = this.g_bcd()),
(this.g_bcw = this.g_bcd()),
this.g_bcx(t, n),
(this.g_bcg = this.g_bcd()),
(this.g_bcg.gain.value = e),
(this.g_bch = this.g_bcd()),
(this.g_bch.gain.value = 1 - e),
(this.g_bcy = this.g_a_Z.createWaveShaper()),
(this.g_bcz = new Float32Array(65536)),
this.g_bcA(a, _),
(this.g_bcy.curve = this.g_bcz),
this.g_bcf.connect(this.g_bcv),
this.g_bcf.connect(this.g_bch),
this.g_bcv.connect(this.g_bcy),
this.g_bcy.connect(this.g_bcw),
this.g_bcw.connect(this.g_bcg);
}
g_ek() {
this.g_bcf.disconnect(),
this.g_bcv.disconnect(),
this.g_bcy.disconnect(),
this.g_bcw.disconnect(),
this.g_bcg.disconnect(),
this.g_bch.disconnect(),
super.g_ek();
}
g_bcx(e, g) {
0.01 > e && (e = 0.01),
(this.g_bcv.gain.value = e),
(this.g_bcw.gain.value = Math.pow(1 / e, 0.6) * g);
}
g_bcA(e, g) {
for (let a, _ = 0; 32768 > _; ++_)
(a = _ / 32768),
(a = this.g_bcB(a, e, g)),
(this.g_bcz[32768 + _] = a),
(this.g_bcz[32768 - _ - 1] = -a);
}
g_bcB(e, a, _) {
const t = 1.05 * _ * a - a,
n = 0 > e ? -1 : 1,
b = 0 > e ? -e : e;
let g = b < a ? b : a + t * i(b - a, 1 / t);
return (g *= n), g;
}
g_a$V(e) {
this.g_bcg.disconnect(),
this.g_bcg.connect(e),
this.g_bch.disconnect(),
this.g_bch.connect(e);
}
g_a$R() {
return this.g_bcf;
}
g_baW(e, g, a, _) {
0 === e
? ((g = Math.max(Math.min(g / 100, 1), 0)),
(this.g_bcc[4] = g),
this.g_bce(this.g_bcg.gain, g, a, _),
this.g_bce(this.g_bch.gain, 1 - g, a, _))
: void 0;
}
}),
(self.g_baT = class extends e {
constructor(g, a, _, t, n, e) {
super(g),
(this.g_kL = 'compressor'),
(this.g_bcc = [a, _, t, n, e]),
(this.g_bct = this.g_a_Z.createDynamicsCompressor()),
(this.g_bct.threshold.value = a),
(this.g_bct.knee.value = _),
(this.g_bct.ratio.value = t),
(this.g_bct.attack.value = n),
(this.g_bct.release.value = e);
}
g_ek() {
this.g_bct.disconnect(), super.g_ek();
}
g_a$V(e) {
this.g_bct.disconnect(), this.g_bct.connect(e);
}
g_a$R() {
return this.g_bct;
}
g_baW() {}
}),
(self.g_baU = class extends e {
constructor(e, g, a) {
super(e),
(this.g_kL = 'analyser'),
(this.g_bcc = [g, a]),
(this.g_bct = this.g_a_Z.createAnalyser()),
(this.g_bct.fftSize = g),
(this.g_bct.smoothingTimeConstant = a),
(this.g_bcC = new Float32Array(this.g_bct.frequencyBinCount)),
(this.g_bcD = new Uint8Array(g)),
(this.g_bcE = 0),
(this.g_bcF = 0),
this.g_bbb.g_baX(this);
}
g_ek() {
this.g_bbb.g_baY(this), this.g_bct.disconnect(), super.g_ek();
}
g_KZ() {
this.g_bct.getFloatFrequencyData(this.g_bcC), this.g_bct.getByteTimeDomainData(this.g_bcD);
const e = this.g_bct.fftSize;
this.g_bcE = 0;
let g = 0;
for (let a, _ = 0; _ < e; ++_)
(a = (this.g_bcD[_] - 128) / 128),
0 > a && (a = -a),
this.g_bcE < a && (this.g_bcE = a),
(g += a * a);
(this.g_bcE = n(this.g_bcE)), (this.g_bcF = n(Math.sqrt(g / e)));
}
g_a$V(e) {
this.g_bct.disconnect(), this.g_bct.connect(e);
}
g_a$R() {
return this.g_bct;
}
g_baW() {}
g_bay() {
return {
tag: this.g_bal(),
index: this.g_EM(),
peak: this.g_bcE,
rms: this.g_bcF,
binCount: this.g_bct.frequencyBinCount,
freqBins: this.g_bcC
};
}
});
}
{
const e = class extends g_aYk {
constructor(e) {
super(e, 'mouse'), this.g_aYw('cursor', (e) => this.g_bcG(e));
}
g_bcG(e) {
document.documentElement.style.cursor = e;
}
};
g_aYV.g_aZQ(e);
}
{
const e = class extends g_aYk {
constructor(e) {
super(e, 'touch'), this.g_aYw('request-permission', (e) => this.g_bcH(e));
}
async g_bcH(e) {
const g = e.type;
let a = !0;
0 === g ? (a = await this.g_bcI()) : 1 === g && (a = await this.g_bcJ()),
this.g_aYp('permission-result', { type: g, result: a });
}
async g_bcI() {
if (!self.DeviceOrientationEvent || !self.DeviceOrientationEvent.requestPermission) return !0;
try {
const e = await self.DeviceOrientationEvent.requestPermission();
return 'granted' === e;
} catch (e) {
return console.warn('[Touch] Failed to request orientation permission: ', e), !1;
}
}
async g_bcJ() {
if (!self.DeviceMotionEvent || !self.DeviceMotionEvent.requestPermission) return !0;
try {
const e = await self.DeviceMotionEvent.requestPermission();
return 'granted' === e;
} catch (e) {
return console.warn('[Touch] Failed to request motion permission: ', e), !1;
}
}
};
g_aYV.g_aZQ(e);
}
{
const e = class extends g_aYk {
constructor(e) {
super(e, 'browser'),
(this.g_aps = ''),
this.g_aYw('get-initial-state', (e) => this.g_bcK(e)),
this.g_aYw('ready-for-sw-messages', () => this.g_bcL()),
this.g_aYw('alert', (e) => this.g_a_C(e)),
this.g_aYw('close', () => this.g_bcM()),
this.g_aYw('set-focus', (e) => this.g_aYK(e)),
this.g_aYw('vibrate', (e) => this.g_bcN(e)),
this.g_aYw('lock-orientation', (e) => this.g_bcO(e)),
this.g_aYw('unlock-orientation', () => this.g_bcP()),
this.g_aYw('navigate', (e) => this.g_bcQ(e)),
this.g_aYw('request-fullscreen', (e) => this.g_bcR(e)),
this.g_aYw('exit-fullscreen', () => this.g_bcS()),
window.addEventListener('online', () => this.g_aLB(!0)),
window.addEventListener('offline', () => this.g_aLB(!1)),
document.addEventListener('backbutton', () => this.g_bcT()),
'undefined' != typeof Windows &&
Windows.UI.Core.SystemNavigationManager.getForCurrentView().addEventListener(
'backrequested',
(e) => this.g_bcU(e)
);
}
g_bcK(e) {
return (
(this.g_aps = e.exportType),
{
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,
isScirraArcade: 'undefined' != typeof window.is_scirra_arcade
}
);
}
g_bcL() {
window.C3_RegisterSW &&
window.OfflineClientInfo &&
window.OfflineClientInfo.SetMessageCallback((e) => this.g_aYp('sw-message', e.data));
}
g_aLB(e) {
this.g_aYp('online-state', { isOnline: e });
}
g_bcT() {
this.g_aYp('backbutton');
}
g_bcU(e) {
(e.handled = !0), this.g_aYp('backbutton');
}
g_bcV() {
return 'nwjs' === this.g_aps ? nw.Window.get() : null;
}
g_a_C(e) {
alert(e.message);
}
g_bcM() {
navigator.app && navigator.app.exitApp
? navigator.app.exitApp()
: navigator.device && navigator.device.exitApp
? navigator.device.exitApp()
: window.close();
}
g_aYK(e) {
const g = e.isFocus;
if ('nwjs' === this.g_aps) {
const e = this.g_bcV();
g ? e.focus() : e.blur();
} else g ? window.focus() : window.blur();
}
g_bcN(e) {
navigator.vibrate && navigator.vibrate(e.pattern);
}
g_bcO(e) {
const g = e.orientation;
if (screen.orientation && screen.orientation.lock)
screen.orientation
.lock(g)
.catch((e) => console.warn('[Construct 3] Failed to lock orientation: ', e));
else
try {
let e = !1;
screen.lockOrientation
? (e = screen.lockOrientation(g))
: screen.webkitLockOrientation
? (e = screen.webkitLockOrientation(g))
: screen.mozLockOrientation
? (e = screen.mozLockOrientation(g))
: screen.msLockOrientation && (e = screen.msLockOrientation(g)),
e || console.warn('[Construct 3] Failed to lock orientation');
} catch (e) {
console.warn('[Construct 3] Failed to lock orientation: ', e);
}
}
g_bcP() {
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 (e) {}
}
g_bcQ(e) {
const g = e.type;
if ('back' === g)
navigator.app && navigator.app.backHistory ? navigator.app.backHistory() : window.back();
else if ('forward' === g) window.forward();
else if ('home' === g) window.g_bcW();
else if ('reload' === g) location.reload();
else if ('url' === g) {
const g = e.url,
a = e.target,
_ = e.exportType;
'windows-uwp' === _ && 'undefined' != typeof Windows
? Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(g))
: 'cordova' === _
? window.open(g, '_system')
: 'preview' === _
? window.open(g, '_blank')
: !this.g_aLA &&
(2 === a
? (window.top.location = g)
: 1 === a
? (window.parent.location = g)
: (window.location = g));
} else if ('new-window' === g) {
const g = e.url,
a = e.tag,
_ = e.exportType;
'windows-uwp' === _ && 'undefined' != typeof Windows
? Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(g))
: 'cordova' === _
? window.open(g, '_system')
: window.open(g, a);
}
}
g_bcR(e) {
const g = { navigationUI: 'auto' },
a = e.navUI;
1 === a ? (g.navigationUI = 'hide') : 2 === a && (g.navigationUI = 'show');
const _ = document.documentElement;
_.requestFullscreen
? _.requestFullscreen(g)
: _.mozRequestFullScreen
? _.mozRequestFullScreen(g)
: _.msRequestFullscreen
? _.msRequestFullscreen(g)
: _.webkitRequestFullScreen &&
('undefined' == typeof Element.ALLOW_KEYBOARD_INPUT
? _.webkitRequestFullScreen()
: _.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT));
}
g_bcS() {
document.exitFullscreen
? document.exitFullscreen()
: document.mozCancelFullScreen
? document.mozCancelFullScreen()
: document.msExitFullscreen
? document.msExitFullscreen()
: document.webkitCancelFullScreen && document.webkitCancelFullScreen();
}
};
g_aYV.g_aZQ(e);
}