diff --git a/data/emu-main.js b/data/emu-main.js
index 7dcd887..d974018 100644
--- a/data/emu-main.js
+++ b/data/emu-main.js
@@ -1,11 +1,11 @@
window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'use strict';
window.EJS_RESET_VARS = [];
- for (var k in window) {
+ for (let k in window) {
window.EJS_RESET_VARS.push(k);
}
_0x2c1832.r(_0x17edbf);
- var _0x39ca5e = {
+ let _0x39ca5e = {
'volume': 0.5,
'muted': false,
'i18n': {
@@ -163,7 +163,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
'url': function(_0xd61cf4) {
if (_0x1b0c2c(_0xd61cf4, window.URL)) return true;
- var _0x17edbf = _0xd61cf4;
+ let _0x17edbf = _0xd61cf4;
_0xd61cf4.startsWith('http://') && _0xd61cf4.startsWith('https://') || (_0x17edbf = 'http://' .concat(_0xd61cf4));
try {
return !_0x555ee8(new URL(_0x17edbf).hostname);
@@ -174,9 +174,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'empty': _0x555ee8
},
_0x168698 = function() {
- var _0xa88a13 = !0x1;
+ let _0xa88a13 = !0x1;
try {
- var _0x17edbf = Object.defineProperty({}, 'passive', {
+ let _0x17edbf = Object.defineProperty({}, 'passive', {
'get': function() {
return _0xa88a13 = true, null;
}
@@ -187,12 +187,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}();
function _0x1ef215(_0xa482e6, _0x474854, _0xc30d6e) {
- var _0x57056f = this,
+ let _0x57056f = this,
_0x3f468e = arguments.length > 0x3 && void 0x0 !== arguments[0x3] && arguments[0x3],
_0x79ce58 = !(arguments.length > 0x4 && void 0x0 !== arguments[0x4]) || arguments[0x4],
_0x23848b = arguments.length > 0x5 && void 0x0 !== arguments[0x5] && arguments[0x5];
if (_0xa482e6 && 'addEventListener' in _0xa482e6 && !_0x1e2c68.empty(_0x474854) && _0x1e2c68.function(_0xc30d6e)) {
- var _0x4a2da0 = _0x474854.split(' '),
+ let _0x4a2da0 = _0x474854.split(' '),
_0x40de8d = _0x23848b;
_0x168698 && (_0x40de8d = {
'passive': _0x79ce58,
@@ -209,7 +209,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x1093f4(_0x4d8d94) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
_0x2c1832 = arguments.length > 0x2 ? arguments[0x2] : void 0x0,
_0x4adcdf = !(arguments.length > 0x3 && void 0x0 !== arguments[0x3]) || arguments[0x3],
_0x2f85bc = arguments.length > 0x4 && void 0x0 !== arguments[0x4] && arguments[0x4];
@@ -217,7 +217,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x20109b(_0x550b1a) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
_0x2c1832 = arguments.length > 0x2 ? arguments[0x2] : void 0x0,
_0x5e10a2 = !(arguments.length > 0x3 && void 0x0 !== arguments[0x3]) || arguments[0x3],
_0x5c9512 = arguments.length > 0x4 && void 0x0 !== arguments[0x4] && arguments[0x4];
@@ -225,24 +225,26 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x455c85(_0x4e4b15) {
- var _0x17edbf = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : '',
+ let _0x17edbf = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : '',
_0x2c1832 = arguments.length > 2 ? arguments[2] : void 0,
_0x2b8c91 = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3],
_0x23e991 = arguments.length > 4 && void 0 !== arguments[4] && arguments[4];
_0x1ef215.call(this, _0x4e4b15, _0x17edbf, function _0x5127f4() {
_0x20109b(_0x4e4b15, _0x17edbf, _0x5127f4, _0x2b8c91, _0x23e991);
- for (var _0x1fe440 = arguments.length, _0x1d3219 = new Array(_0x1fe440), _0x54457c = 0x0; _0x54457c < _0x1fe440; _0x54457c++) _0x1d3219[_0x54457c] = arguments[_0x54457c];
+ let _0x1fe440 = arguments.length,
+ _0x1d3219 = new Array(_0x1fe440);
+ for (let _0x54457c = 0x0; _0x54457c < _0x1fe440; _0x54457c++) _0x1d3219[_0x54457c] = arguments[_0x54457c];
_0x2c1832.apply(this, _0x1d3219);
}, true, _0x2b8c91, _0x23e991);
}
function _0xbae705(_0x975ccc) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
_0x2c1832 = arguments.length > 0x2 && void 0x0 !== arguments[0x2] && arguments[0x2],
_0x57297b = arguments.length > 0x3 && void 0x0 !== arguments[0x3] ? arguments[0x3] : {};
if (_0x1e2c68.element(_0x975ccc) && !_0x1e2c68.empty(_0x17edbf)) {
- var _0x4f631e = new CustomEvent(_0x17edbf, {
+ let _0x4f631e = new CustomEvent(_0x17edbf, {
'bubbles': _0x2c1832,
'detail': Object.assign({}, _0x57297b, {
'emulator': this
@@ -251,19 +253,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x975ccc.dispatchEvent(_0x4f631e);
}
}
- var _0x55349e = _0x2c1832(0x9e),
+ let _0x55349e = _0x2c1832(0x9e),
_0x42870c = _0x2c1832.n(_0x55349e);
function _0x30f85e(_0x3ed035, _0xd96db3) {
return function(_0x18bbf3) {
if (Array.isArray(_0x18bbf3)) return _0x18bbf3;
}(_0x3ed035) || function(_0x2bb2ab, _0x4993ee) {
- var _0x2c1832 = [],
+ let _0x2c1832 = [],
_0x629f39 = true,
_0xde5653 = !0x1,
_0x346a0d = void 0x0;
try {
- for (var _0x57d79d, _0x557ef0 = _0x2bb2ab[Symbol.iterator](); !(_0x629f39 = (_0x57d79d = _0x557ef0.next()).done) && (_0x2c1832.push(_0x57d79d.value), !_0x4993ee || _0x2c1832.length !== _0x4993ee); _0x629f39 = true);
+ for (let _0x57d79d, _0x557ef0 = _0x2bb2ab[Symbol.iterator](); !(_0x629f39 = (_0x57d79d = _0x557ef0.next()).done) && (_0x2c1832.push(_0x57d79d.value), !_0x4993ee || _0x2c1832.length !== _0x4993ee); _0x629f39 = true);
} catch (_0x54a546) {
_0xde5653 = true, _0x346a0d = _0x54a546;
} finally {
@@ -280,9 +282,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x580edd(_0x39eb34, _0x86c3db) {
- var _0x2c1832 = _0x39eb34.length ? _0x39eb34 : [_0x39eb34];
+ let _0x2c1832 = _0x39eb34.length ? _0x39eb34 : [_0x39eb34];
Array.from(_0x2c1832).reverse().forEach(function(_0x35fc48, _0x79e6bf) {
- var _0x1510e4 = _0x79e6bf > 0x0 ? _0x86c3db.cloneNode(true) : _0x86c3db,
+ let _0x1510e4 = _0x79e6bf > 0x0 ? _0x86c3db.cloneNode(true) : _0x86c3db,
_0x247f26 = _0x35fc48.parentNode,
_0x3a5422 = _0x35fc48.nextSibling;
_0x1510e4.appendChild(_0x35fc48), _0x3a5422 ? _0x247f26.insertBefore(_0x1510e4, _0x3a5422) : _0x247f26.appendChild(_0x1510e4);
@@ -291,10 +293,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x154f99(_0x5e4eb3, _0x1acdad) {
_0x1e2c68.element(_0x5e4eb3) && !_0x1e2c68.empty(_0x1acdad) && Object.entries(_0x1acdad).filter(function(_0x37e04b) {
- var _0x1acdad = _0x30f85e(_0x37e04b, 0x2)[0x1];
+ let _0x1acdad = _0x30f85e(_0x37e04b, 0x2)[0x1];
return !_0x1e2c68.nullOrUndefined(_0x1acdad);
}).forEach(function(_0x4993dd) {
- var _0x2c1832 = _0x30f85e(_0x4993dd, 0x2),
+ let _0x2c1832 = _0x30f85e(_0x4993dd, 0x2),
_0x24704f = _0x2c1832[0x0],
_0x52ac21 = _0x2c1832[0x1];
return _0x5e4eb3.setAttribute(_0x24704f, _0x52ac21);
@@ -302,7 +304,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x428003(_0x1397c4, _0x1ec8c9, _0x1a02af) {
- var _0xca6ad9 = document.createElement(_0x1397c4);
+ let _0xca6ad9 = document.createElement(_0x1397c4);
return _0x1e2c68.object(_0x1ec8c9) && _0x154f99(_0xca6ad9, _0x1ec8c9), _0x1e2c68.string(_0x1a02af) && (_0xca6ad9.innerText = _0x1a02af), _0xca6ad9;
}
@@ -312,10 +314,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0xa949a8(_0x3bc809, _0x215e7f) {
if (!_0x1e2c68.string(_0x3bc809) || _0x1e2c68.empty(_0x3bc809)) return {};
- var _0x2c1832 = {},
+ let _0x2c1832 = {},
_0x3ab896 = _0x215e7f;
return _0x3bc809.split(',').forEach(function(_0x2b6c5b) {
- var _0x215e7f = _0x2b6c5b.trim(),
+ let _0x215e7f = _0x2b6c5b.trim(),
_0x2b2f76 = _0x215e7f.replace('.', ''),
_0x499377 = _0x215e7f.replace(/[[\]]/g, '').split('='),
_0x1db3b8 = _0x499377[0x0],
@@ -335,7 +337,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x132da7(_0x275729, _0x511d6f) {
if (_0x1e2c68.element(_0x275729)) {
- var _0x2c1832 = _0x511d6f;
+ let _0x2c1832 = _0x511d6f;
_0x1e2c68.boolean(_0x2c1832) || (_0x2c1832 = !_0x275729.hidden), _0x2c1832 ? _0x275729.setAttribute('hidden', '') : _0x275729.removeAttribute('hidden');
}
}
@@ -345,7 +347,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0x3a8e2f(_0x543362, _0x46e2bb, _0x3b6b0b);
});
if (_0x1e2c68.element(_0x2bf197)) {
- var _0x34f25e = 'toggle';
+ let _0x34f25e = 'toggle';
return void 0x0 !== _0x3b6b0b && (_0x34f25e = _0x3b6b0b ? 'add' : 'remove'), _0x2bf197.classList[_0x34f25e](_0x46e2bb), _0x2bf197.classList.contains(_0x46e2bb);
}
return !0x1;
@@ -356,7 +358,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x13f491(_0x11bf98, _0x674fa2) {
- var _0x2c1832 = {
+ let _0x2c1832 = {
'Element': Element
};
return (_0x2c1832.matches || _0x2c1832.webkitMatchesSelector || _0x2c1832.mozMatchesSelector || _0x2c1832.msMatchesSelector || function() {
@@ -373,15 +375,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x5e0c7d() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : null,
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : null,
_0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] && arguments[0x1];
if (_0x1e2c68.element(_0xa88a13)) {
- var _0x2c1832 = _0x23ffa1.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]'),
+ let _0x2c1832 = _0x23ffa1.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]'),
_0x1c6631 = _0x2c1832[0x0],
_0x52c9df = _0x2c1832[_0x2c1832.length - 0x1];
_0x1ef215.call(this, this.elements.container, 'keydown', function(_0x1bba02) {
if ('Tab' === _0x1bba02.key && 0x9 === _0x1bba02.keyCode) {
- var _0x17edbf = document.activeElement;
+ let _0x17edbf = document.activeElement;
_0x17edbf !== _0x52c9df || _0x1bba02.shiftKey ? _0x17edbf === _0x1c6631 && _0x1bba02.shiftKey && (_0x52c9df.focus(), _0x1bba02.preventDefault()) : (_0x1c6631.focus(), _0x1bba02.preventDefault());
}
}, _0x17edbf, !0x1);
@@ -389,7 +391,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x31cc23() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : null,
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : null,
_0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] && arguments[0x1];
_0x1e2c68.element(_0xa88a13) && (_0xa88a13.focus(), _0x17edbf && _0x3a8e2f(_0xa88a13, this.config.classNames.tabFocus));
}
@@ -397,7 +399,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x449eac(_0x589e98) {
return _0x48e5ff.a.bind(_0x42870c.a)(_0x589e98);
}
- var _0x32d193, _0x5f365a, _0x820caf, _0x5a2767 = (_0x32d193 = document.createElement('span'), _0x5f365a = {
+ let _0x32d193, _0x5f365a, _0x820caf, _0x5a2767 = (_0x32d193 = document.createElement('span'), _0x5f365a = {
'WebkitTransition': 'webkitTransitionEnd',
'MozTransition': 'transitionend',
'OTransition': 'oTransitionEnd otransitionend',
@@ -413,14 +415,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
} catch (_0x517747) {}
}, 0x0);
}
- var _0x296fa9, _0x59aa33 = {
+ let _0x296fa9, _0x59aa33 = {
'isEdge': 'Netscape' === navigator.appName && navigator.appVersion.indexOf('Edge') > -0x1,
'isIE': !!document.documentMode,
'isWebkit': 'WebkitAppearance' in document.documentElement.style && !/Edge/ .test(navigator.userAgent),
'isIPhone': /(iPhone|iPod)/gi .test(navigator.platform),
'isIos': /(iPad|iPhone|iPod)/gi .test(navigator.platform),
'info': function() {
- var _0xa88a13 = /(MSIE|(?!Gecko.+)Firefox|(?!AppleWebKit.+Chrome.+)Safari|(?!AppleWebKit.+)Chrome|AppleWebKit(?!.+Chrome|.+Safari)|Gecko(?!.+Firefox))(?: |\/)([\d\.apre]+)/ .exec(navigator.userAgent);
+ let _0xa88a13 = /(MSIE|(?!Gecko.+)Firefox|(?!AppleWebKit.+Chrome.+)Safari|(?!AppleWebKit.+)Chrome|AppleWebKit(?!.+Chrome|.+Safari)|Gecko(?!.+Firefox))(?: |\/)([\d\.apre]+)/ .exec(navigator.userAgent);
return {
'name': _0xa88a13[0x1].toLowerCase(),
'version': _0xa88a13[0x2]
@@ -433,18 +435,18 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'transitions': !0x1 !== _0x5a2767,
'reducedMotion': 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,
'webgl': function() {
- var _0xa88a13 = {
+ let _0xa88a13 = {
'DETECTED': !0x1
};
if (!_0xa88a13.DETECTED) {
- var _0x17edbf = document.createElement('canvas');
+ let _0x17edbf = document.createElement('canvas');
if (_0x17edbf && _0x17edbf.getContext)
- for (var _0x2c1832 = ['webgl2', 'experimental-webgl2', 'webgl', 'experimental-webgl'], _0x44cd27 = 0x0, _0x12b7b8 = _0x2c1832.length; _0x44cd27 < _0x12b7b8; ++_0x44cd27) {
- var _0x11cb40 = _0x2c1832[_0x44cd27],
+ for (let _0x2c1832 = ['webgl2', 'experimental-webgl2', 'webgl', 'experimental-webgl'], _0x44cd27 = 0x0, _0x12b7b8 = _0x2c1832.length; _0x44cd27 < _0x12b7b8; ++_0x44cd27) {
+ let _0x11cb40 = _0x2c1832[_0x44cd27],
_0x26b3b2 = _0x17edbf.getContext(_0x11cb40);
if (_0x26b3b2) {
_0xa88a13.WEBGL_CONTEXT = _0x11cb40, _0xa88a13.WEBGL_VERSION = _0x26b3b2.getParameter(_0x26b3b2.VERSION), _0xa88a13.WEBGL_VENDOR = _0x26b3b2.getParameter(_0x26b3b2.VENDOR), _0xa88a13.WEBGL_SL_VERSION = _0x26b3b2.getParameter(_0x26b3b2.SHADING_LANGUAGE_VERSION), _0xa88a13.MAX_TEXTURE_SIZE = _0x26b3b2.getParameter(_0x26b3b2.MAX_TEXTURE_SIZE);
- var _0x40c8fc = _0x26b3b2.getExtension('WEBGL_debug_renderer_info');
+ let _0x40c8fc = _0x26b3b2.getExtension('WEBGL_debug_renderer_info');
_0x40c8fc && (_0xa88a13.WEBGL_VENDOR = _0x26b3b2.getParameter(_0x40c8fc.UNMASKED_VENDOR_WEBGL), _0xa88a13.WEBGL_RENDERER = _0x26b3b2.getParameter(_0x40c8fc.UNMASKED_RENDERER_WEBGL)), _0xa88a13.DETECTED = true;
break;
}
@@ -472,25 +474,27 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x5dc0c0() {
- for (var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : {}, _0x17edbf = arguments.length, _0x2c1832 = new Array(_0x17edbf > 0x1 ? _0x17edbf - 0x1 : 0x0), _0x189546 = 0x1; _0x189546 < _0x17edbf; _0x189546++) _0x2c1832[_0x189546 - 0x1] = arguments[_0x189546];
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : {},
+ _0x2c1832 = new Array(_0x17edbf > 0x1 ? _0x17edbf - 0x1 : 0x0);
+ for (let _0x17edbf = arguments.length, _0x189546 = 0x1; _0x189546 < _0x17edbf; _0x189546++) _0x2c1832[_0x189546 - 0x1] = arguments[_0x189546];
if (!_0x2c1832.length) return _0xa88a13;
- var _0x279e54 = _0x2c1832.shift();
+ let _0x279e54 = _0x2c1832.shift();
return _0x1e2c68.object(_0x279e54) ? (Object.keys(_0x279e54).forEach(function(_0x53b45a) {
_0x1e2c68.object(_0x279e54[_0x53b45a]) ? (Object.keys(_0xa88a13).includes(_0x53b45a) || Object.assign(_0xa88a13, _0x55cbbe({}, _0x53b45a, {})), _0x5dc0c0(_0xa88a13[_0x53b45a], _0x279e54[_0x53b45a])) : Object.assign(_0xa88a13, _0x55cbbe({}, _0x53b45a, _0x279e54[_0x53b45a]));
}), _0x5dc0c0.apply(void 0x0, [_0xa88a13].concat(_0x2c1832))) : _0xa88a13;
}
function _0x1a0e98() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '',
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '',
_0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : '',
_0x2c1832 = arguments.length > 0x2 && void 0x0 !== arguments[0x2] ? arguments[0x2] : '';
return _0xa88a13.replace(new RegExp(_0x17edbf.toString().replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\x5c$1'), 'g'), _0x2c1832.toString());
}
function _0x9fdcea() {
- var _0xa88a13 = (arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '').toString();
+ let _0xa88a13 = (arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '').toString();
return (_0xa88a13 = function() {
- var _0xa88a13 = (arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '').toString();
+ let _0xa88a13 = (arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '').toString();
return _0xa88a13 = _0x1a0e98(_0xa88a13, '-', ' '), _0xa88a13 = _0x1a0e98(_0xa88a13, '_', ' '), _0x1a0e98(_0xa88a13 = function() {
return (arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '').toString().replace(/\w\S*/g, function(_0x5b5cba) {
return _0x5b5cba.charAt(0x0).toUpperCase() + _0x5b5cba.substr(0x1).toLowerCase();
@@ -503,12 +507,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return function(_0x38f65b) {
if (Array.isArray(_0x38f65b)) return _0x38f65b;
}(_0x3614ce) || function(_0x20a132, _0x481bd0) {
- var _0x2c1832 = [],
+ let _0x2c1832 = [],
_0x930e75 = true,
_0x40863e = !0x1,
_0xf7a5cf = void 0x0;
try {
- for (var _0x9d4c5a, _0x2f59ed = _0x20a132[Symbol.iterator](); !(_0x930e75 = (_0x9d4c5a = _0x2f59ed.next()).done) && (_0x2c1832.push(_0x9d4c5a.value), !_0x481bd0 || _0x2c1832.length !== _0x481bd0); _0x930e75 = true);
+ for (let _0x9d4c5a, _0x2f59ed = _0x20a132[Symbol.iterator](); !(_0x930e75 = (_0x9d4c5a = _0x2f59ed.next()).done) && (_0x2c1832.push(_0x9d4c5a.value), !_0x481bd0 || _0x2c1832.length !== _0x481bd0); _0x930e75 = true);
} catch (_0x383181) {
_0x40863e = true, _0xf7a5cf = _0x383181;
} finally {
@@ -523,19 +527,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
throw new TypeError('Invalid attempt to destructure non-iterable instance');
}();
}
- var _0xb9b2ff = {
+ let _0xb9b2ff = {
'get': function() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '',
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '',
_0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : {};
if (_0x1e2c68.empty(_0xa88a13) || _0x1e2c68.empty(_0x17edbf)) return '';
- var _0x2c1832 = _0x344e81(_0x17edbf.i18n, _0xa88a13);
+ let _0x2c1832 = _0x344e81(_0x17edbf.i18n, _0xa88a13);
if (_0x1e2c68.empty(_0x2c1832)) return '';
- var _0x54bf45 = {
+ let _0x54bf45 = {
'{seektime}': _0x17edbf.seekTime,
'{title}': _0x17edbf.title
};
return Object.entries(_0x54bf45).forEach(function(_0x34ee43) {
- var _0x17edbf = _0x419e30(_0x34ee43, 0x2),
+ let _0x17edbf = _0x419e30(_0x34ee43, 0x2),
_0x473ebb = _0x17edbf[0x0],
_0x56ec0 = _0x17edbf[0x1];
_0x2c1832 = _0x1a0e98(_0x2c1832, _0x473ebb, _0x56ec0);
@@ -544,18 +548,18 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
};
function _0x4c97b0(_0xb3d5fd, _0x2cda5d) {
- for (var _0x2c1832 = 0x0; _0x2c1832 < _0x2cda5d.length; _0x2c1832++) {
- var _0x3f3944 = _0x2cda5d[_0x2c1832];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x2cda5d.length; _0x2c1832++) {
+ let _0x3f3944 = _0x2cda5d[_0x2c1832];
_0x3f3944.enumerable = _0x3f3944.enumerable || !0x1, _0x3f3944.configurable = true, 'value' in _0x3f3944 && (_0x3f3944.writable = true), Object.defineProperty(_0xb3d5fd, _0x3f3944.key, _0x3f3944);
}
}
- var _0x2f61ba = function() {
+ let _0x2f61ba = function() {
function _0x566dbe(_0x3a7165, _0x3d2e3a) {
! function(_0x48c5c0, _0x2b027d) {
if (!(_0x48c5c0 instanceof _0x2b027d)) throw new TypeError('Cannot call a class as a function');
}(this, _0x566dbe), this.enabled = true, this.key = _0x3d2e3a;
}
- var _0x17edbf, _0x2c1832, _0x4496fc;
+ let _0x17edbf, _0x2c1832, _0x4496fc;
return _0x17edbf = _0x566dbe, _0x4496fc = [{
'key': 'supported',
'get': function() {
@@ -569,22 +573,22 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'key': 'get',
'value': function(_0x4ed865) {
if (!_0x566dbe.supported || !this.enabled) return null;
- var _0x2c1832 = window.localStorage.getItem(this.key);
+ let _0x2c1832 = window.localStorage.getItem(this.key);
if (_0x1e2c68.empty(_0x2c1832)) return null;
- var _0x57ebf7 = JSON.parse(_0x2c1832);
+ let _0x57ebf7 = JSON.parse(_0x2c1832);
return _0x1e2c68.string(_0x4ed865) && _0x4ed865.length ? _0x57ebf7[_0x4ed865] : _0x57ebf7;
}
}, {
'key': 'set',
'value': function(_0x443e7a) {
if (_0x566dbe.supported && this.enabled && _0x1e2c68.object(_0x443e7a)) {
- var _0x2c1832 = this.get();
+ let _0x2c1832 = this.get();
_0x1e2c68.empty(_0x2c1832) && (_0x2c1832 = {}), _0x5dc0c0(_0x2c1832, _0x443e7a), window.localStorage.setItem(this.key, JSON.stringify(_0x2c1832));
}
}
}]) && _0x4c97b0(_0x17edbf.prototype, _0x2c1832), _0x4496fc && _0x4c97b0(_0x17edbf, _0x4496fc), _0x566dbe;
}();
- var _0x13fb79, _0x4ad1c6 = _0x2c1832(6),
+ let _0x13fb79, _0x4ad1c6 = _0x2c1832(6),
_0x4704b1 = _0x2c1832(159),
_0x3a58c8 = _0x2c1832.n(_0x4704b1),
_0x5032e6 = {
@@ -609,9 +613,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.listeners.media(), _0x1e2c68.element(this.elements.controls) || (_0x2593da.inject.call(this), this.listeners.controls()), this.volume = null, this.muted = null, _0x2593da.updateVolume.call(this), _0x3a8e2f(this.elements.container, this.config.classNames.isTouch, this.touch), this.ready = true;
},
'toggleControls': function(_0x4dbb7a) {
- var _0x17edbf = this.elements.controls;
+ let _0x17edbf = this.elements.controls;
if (_0x17edbf) {
- var _0x2c1832 = 0x0,
+ let _0x2c1832 = 0x0,
_0x4b4cd5 = _0x23ffa1.call(this, '.' .concat(_0x449eac({
'ejs__dialogs': true
}), ' > .').concat(_0x449eac({
@@ -640,7 +644,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, !0x1), this._fileReader.readAsArrayBuffer(_0x4380c5);
} else if ('object' === _0x5272a8(_0x4380c5) && 'string' == typeof _0x4380c5.fileName && 'boolean' == typeof _0x4380c5.littleEndian) {
this.fileName = _0x4380c5.fileName, this.fileType = _0x4380c5.fileType, this.fileSize = _0x4380c5.fileSize;
- var _0x2c1832 = new ArrayBuffer(_0x4380c5);
+ let _0x2c1832 = new ArrayBuffer(_0x4380c5);
this._u8array = new Uint8Array(this.fileType), this._dataView = new DataView(this.fileType), _0x4380c5.copyToFile(this, 0x0), _0x3c0d58 && _0x3c0d58.call();
} else if ('object' === _0x5272a8(_0x4380c5) && 'number' == typeof _0x4380c5.byteLength) this.fileName = 'file.bin', this.fileType = 'application/octet-stream', this.fileSize = _0x4380c5.byteLength, void 0x0 !== _0x4380c5.buffer && (_0x4380c5 = _0x4380c5.buffer), this._u8array = new Uint8Array(_0x4380c5), this._dataView = new DataView(_0x4380c5), _0x3c0d58 && _0x3c0d58.call();
else {
@@ -657,20 +661,20 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, _0x3189ba.prototype.isEOF = function() {
return !(this.offset < this.fileSize);
}, _0x3189ba.prototype.slice = function(_0x2bfcbb, _0x8026e) {
- var _0x2c1832;
+ let _0x2c1832;
return _0x8026e = _0x8026e || this.fileSize - _0x2bfcbb, void 0x0 !== this._u8array.buffer.slice ? ((_0x2c1832 = new _0x3189ba(0x0)).fileSize = _0x8026e, _0x2c1832._u8array = new Uint8Array(this._u8array.buffer.slice(_0x2bfcbb, _0x2bfcbb + _0x8026e))) : (_0x2c1832 = new _0x3189ba(_0x8026e), this.copyToFile(_0x2c1832, _0x2bfcbb, _0x8026e, 0x0)), _0x2c1832.fileName = this.fileName, _0x2c1832.fileType = this.fileType, _0x2c1832.littleEndian = this.littleEndian, _0x2c1832;
}, _0x3189ba.prototype.copyToFile = function(_0x51f9b5, _0x1ada3e, _0x3997cd, _0x38ae1a) {
void 0x0 === _0x38ae1a && (_0x38ae1a = _0x1ada3e), _0x3997cd = _0x3997cd || this.fileSize - _0x1ada3e;
- for (var _0x3bc3d8 = 0x0; _0x3bc3d8 < _0x3997cd; _0x3bc3d8++) _0x51f9b5._u8array[_0x38ae1a + _0x3bc3d8] = this._u8array[_0x1ada3e + _0x3bc3d8];
+ for (let _0x3bc3d8 = 0x0; _0x3bc3d8 < _0x3997cd; _0x3bc3d8++) _0x51f9b5._u8array[_0x38ae1a + _0x3bc3d8] = this._u8array[_0x1ada3e + _0x3bc3d8];
}, _0x3189ba.prototype.save = function() {
- var _0xa88a13;
+ let _0xa88a13;
try {
_0xa88a13 = new Blob([this._u8array], {
'type': this.fileType
});
} catch (_0x1dfb06) {
if (window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder, 'InvalidStateError' !== _0x1dfb06.name || !window.BlobBuilder) throw new Error('Incompatible Browser');
- var _0x17edbf = new BlobBuilder();
+ let _0x17edbf = new BlobBuilder();
_0x17edbf.append(this._u8array.buffer), _0xa88a13 = _0x17edbf.getBlob(this.fileType);
}
saveAs(_0xa88a13, this.fileName);
@@ -684,11 +688,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return this.littleEndian ? this._lastRead = this._u8array[this.offset] + (this._u8array[this.offset + 0x1] << 0x8) + (this._u8array[this.offset + 0x2] << 0x10) + (this._u8array[this.offset + 0x3] << 0x18) : this._lastRead = (this._u8array[this.offset] << 0x18) + (this._u8array[this.offset + 0x1] << 0x10) + (this._u8array[this.offset + 0x2] << 0x8) + this._u8array[this.offset + 0x3], this.offset += 0x4, this._lastRead >>> 0x0;
}, _0x3189ba.prototype.readBytes = function(_0x455cfd) {
this._lastRead = new Array(_0x455cfd);
- for (var _0x17edbf = 0x0; _0x17edbf < _0x455cfd; _0x17edbf++) this._lastRead[_0x17edbf] = this._u8array[this.offset + _0x17edbf];
+ for (let _0x17edbf = 0x0; _0x17edbf < _0x455cfd; _0x17edbf++) this._lastRead[_0x17edbf] = this._u8array[this.offset + _0x17edbf];
return this.offset += _0x455cfd, this._lastRead;
}, _0x3189ba.prototype.readString = function(_0x4fe914) {
this._lastRead = '';
- for (var _0x17edbf = 0x0; _0x17edbf < _0x4fe914 && this.offset + _0x17edbf < this.fileSize && this._u8array[this.offset + _0x17edbf] > 0x0; _0x17edbf++) this._lastRead = this._lastRead + String.fromCharCode(this._u8array[this.offset + _0x17edbf]);
+ for (let _0x17edbf = 0x0; _0x17edbf < _0x4fe914 && this.offset + _0x17edbf < this.fileSize && this._u8array[this.offset + _0x17edbf] > 0x0; _0x17edbf++) this._lastRead = this._lastRead + String.fromCharCode(this._u8array[this.offset + _0x17edbf]);
return this.offset += _0x4fe914, this._lastRead;
}, _0x3189ba.prototype.writeU8 = function(_0x276206) {
this._u8array[this.offset] = _0x276206, this.offset++;
@@ -699,15 +703,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, _0x3189ba.prototype.writeU32 = function(_0xa4dd26) {
this.littleEndian ? (this._u8array[this.offset] = 0xff & _0xa4dd26, this._u8array[this.offset + 0x1] = (0xff00 & _0xa4dd26) >> 0x8, this._u8array[this.offset + 0x2] = (0xff0000 & _0xa4dd26) >> 0x10, this._u8array[this.offset + 0x3] = (0xff000000 & _0xa4dd26) >> 0x18) : (this._u8array[this.offset] = (0xff000000 & _0xa4dd26) >> 0x18, this._u8array[this.offset + 0x1] = (0xff0000 & _0xa4dd26) >> 0x10, this._u8array[this.offset + 0x2] = (0xff00 & _0xa4dd26) >> 0x8, this._u8array[this.offset + 0x3] = 0xff & _0xa4dd26), this.offset += 0x4;
}, _0x3189ba.prototype.writeBytes = function(_0x5ad6b9) {
- for (var _0x17edbf = 0x0; _0x17edbf < _0x5ad6b9.length; _0x17edbf++) this._u8array[this.offset + _0x17edbf] = _0x5ad6b9[_0x17edbf];
+ for (let _0x17edbf = 0x0; _0x17edbf < _0x5ad6b9.length; _0x17edbf++) this._u8array[this.offset + _0x17edbf] = _0x5ad6b9[_0x17edbf];
this.offset += _0x5ad6b9.length;
}, _0x3189ba.prototype.writeString = function(_0x58c146, _0x23e582) {
_0x23e582 = _0x23e582 || _0x58c146.length;
- for (var _0x2c1832 = 0x0; _0x2c1832 < _0x58c146.length && _0x2c1832 < _0x23e582; _0x2c1832++) this._u8array[this.offset + _0x2c1832] = _0x58c146.charCodeAt(_0x2c1832);
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x58c146.length && _0x2c1832 < _0x23e582; _0x2c1832++) this._u8array[this.offset + _0x2c1832] = _0x58c146.charCodeAt(_0x2c1832);
for (; _0x2c1832 < _0x23e582; _0x2c1832++) this._u8array[this.offset + _0x2c1832] = 0x0;
this.offset += _0x23e582;
};
- var _0x863031 = _0x3189ba,
+ let _0x863031 = _0x3189ba,
_0x34e7cf = 0x0;
function _0x454881() {
@@ -715,9 +719,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x288092(_0x1ab789) {
- var _0x17edbf = new _0x454881();
+ let _0x17edbf = new _0x454881();
_0x1ab789.seek(0x5);
- for (var _0x2c1832 = 0x0, _0x195f00 = 0x0; !_0x1ab789.isEOF();) {
+ for (let _0x2c1832 = 0x0, _0x195f00 = 0x0; !_0x1ab789.isEOF();) {
if (0x454f46 === (_0x2c1832 = _0x1ab789.readU24())) {
if (_0x1ab789.isEOF()) break;
if (_0x1ab789.offset + 0x3 === _0x1ab789.fileSize) {
@@ -744,23 +748,23 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
}, _0x454881.prototype.toString = function() {
nSimpleRecords = 0x0, nRLERecords = 0x0;
- for (var _0xa88a13 = 0x0; _0xa88a13 < this.records.length; _0xa88a13++) this.records[_0xa88a13].type === _0x34e7cf ? nRLERecords++ : nSimpleRecords++;
- var _0x17edbf = 'Simple records: ' + nSimpleRecords;
+ for (let _0xa88a13 = 0x0; _0xa88a13 < this.records.length; _0xa88a13++) this.records[_0xa88a13].type === _0x34e7cf ? nRLERecords++ : nSimpleRecords++;
+ let _0x17edbf = 'Simple records: ' + nSimpleRecords;
return _0x17edbf += '\nRLE records: ' + nRLERecords, _0x17edbf += '\nTotal records: ' + this.records.length, this.truncate && (_0x17edbf += '\nTruncate at: 0x' + this.truncate.toString(0x10)), _0x17edbf;
}, _0x454881.prototype.export = function(_0x4d18dc) {
- for (var _0x17edbf = 0x5, _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) this.records[_0x2c1832].type === _0x34e7cf ? _0x17edbf += 0x8 : _0x17edbf += 0x5 + this.records[_0x2c1832].data.length;
+ for (let _0x17edbf = 0x5, _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) this.records[_0x2c1832].type === _0x34e7cf ? _0x17edbf += 0x8 : _0x17edbf += 0x5 + this.records[_0x2c1832].data.length;
_0x17edbf += 0x3, this.truncate && (_0x17edbf += 0x3), tempFile = new _0x863031(_0x17edbf), tempFile.fileName = _0x4d18dc + '.ips', tempFile.writeString('PATCH');
for (_0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) {
- var _0x512785 = this.records[_0x2c1832];
+ let _0x512785 = this.records[_0x2c1832];
tempFile.writeU24(_0x512785.offset), _0x512785.type === _0x34e7cf ? (tempFile.writeU16(0x0), tempFile.writeU16(_0x512785.length), tempFile.writeU8(_0x512785.byte)) : (tempFile.writeU16(_0x512785.data.length), tempFile.writeBytes(_0x512785.data));
}
return tempFile.writeString('EOF'), _0x512785.truncate && tempFile.writeU24(_0x512785.truncate), tempFile;
}, _0x454881.prototype.apply = function(_0xefa71d) {
- var _0x17edbf;
+ let _0x17edbf;
if (this.truncate) _0x17edbf = _0xefa71d.slice(0x0, this.truncate);
else {
- for (var _0x2c1832 = _0xefa71d.fileSize, _0x5a0a71 = 0x0; _0x5a0a71 < this.records.length; _0x5a0a71++) {
- var _0x105576 = this.records[_0x5a0a71];
+ for (let _0x2c1832 = _0xefa71d.fileSize, _0x5a0a71 = 0x0; _0x5a0a71 < this.records.length; _0x5a0a71++) {
+ let _0x105576 = this.records[_0x5a0a71];
_0x105576.type === _0x34e7cf ? _0x105576.offset + _0x105576.length > _0x2c1832 && (_0x2c1832 = _0x105576.offset + _0x105576.length) : _0x105576.offset + _0x105576.data.length > _0x2c1832 && (_0x2c1832 = _0x105576.offset + _0x105576.data.length);
}
_0x2c1832 === _0xefa71d.fileSize ? _0x17edbf = _0xefa71d.slice(0x0, _0xefa71d.fileSize) : (_0x17edbf = new _0x863031(_0x2c1832), _0xefa71d.copyToFile(_0x17edbf, 0x0));
@@ -768,25 +772,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0xefa71d.seek(0x0);
for (_0x5a0a71 = 0x0; _0x5a0a71 < this.records.length; _0x5a0a71++)
if (_0x17edbf.seek(this.records[_0x5a0a71].offset), this.records[_0x5a0a71].type === _0x34e7cf)
- for (var _0x729105 = 0x0; _0x729105 < this.records[_0x5a0a71].length; _0x729105++) _0x17edbf.writeU8(this.records[_0x5a0a71].byte);
+ for (let _0x729105 = 0x0; _0x729105 < this.records[_0x5a0a71].length; _0x729105++) _0x17edbf.writeU8(this.records[_0x5a0a71].byte);
else _0x17edbf.writeBytes(this.records[_0x5a0a71].data);
return _0x17edbf;
};
'0123456789abcdef' .split('');
- var _0x1aa7ba = function() {
- for (var _0xa88a13, _0x17edbf = [], _0x2c1832 = 0x0; _0x2c1832 < 0x100; _0x2c1832++) {
+ let _0x1aa7ba = function() {
+ for (let _0xa88a13, _0x17edbf = [], _0x2c1832 = 0x0; _0x2c1832 < 0x100; _0x2c1832++) {
_0xa88a13 = _0x2c1832;
- for (var _0x32bcf1 = 0x0; _0x32bcf1 < 0x8; _0x32bcf1++) _0xa88a13 = 0x1 & _0xa88a13 ? 0xedb88320 ^ _0xa88a13 >>> 0x1 : _0xa88a13 >>> 0x1;
+ for (let _0x32bcf1 = 0x0; _0x32bcf1 < 0x8; _0x32bcf1++) _0xa88a13 = 0x1 & _0xa88a13 ? 0xedb88320 ^ _0xa88a13 >>> 0x1 : _0xa88a13 >>> 0x1;
_0x17edbf[_0x2c1832] = _0xa88a13;
}
return _0x17edbf;
}();
function _0x2d78e9(_0x509ecf, _0x4219e1, _0xd66d2b) {
- for (var _0x185f93 = _0x4219e1 ? new Uint8Array(_0x509ecf._u8array.buffer, _0x4219e1) : _0x509ecf._u8array, _0x20e2c1 = -0x1, _0x3d100a = _0xd66d2b ? _0x185f93.length - 0x4 : _0x185f93.length, _0x56a6e6 = 0x0; _0x56a6e6 < _0x3d100a; _0x56a6e6++) _0x20e2c1 = _0x20e2c1 >>> 0x8 ^ _0x1aa7ba[0xff & (_0x20e2c1 ^ _0x185f93[_0x56a6e6])];
+ for (let _0x185f93 = _0x4219e1 ? new Uint8Array(_0x509ecf._u8array.buffer, _0x4219e1) : _0x509ecf._u8array, _0x20e2c1 = -0x1, _0x3d100a = _0xd66d2b ? _0x185f93.length - 0x4 : _0x185f93.length, _0x56a6e6 = 0x0; _0x56a6e6 < _0x3d100a; _0x56a6e6++) _0x20e2c1 = _0x20e2c1 >>> 0x8 ^ _0x1aa7ba[0xff & (_0x20e2c1 ^ _0x185f93[_0x56a6e6])];
return (-0x1 ^ _0x20e2c1) >>> 0x0;
}
- var _0x37eff4 = 0x0,
+ let _0x37eff4 = 0x0,
_0x34d681 = 0x1,
_0x4c50e7 = 0x2,
_0xf9eeea = 0x3;
@@ -797,19 +801,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x356089(_0x1bf770) {
_0x1bf770.readVLV = _0x45da2c, _0x1bf770.littleEndian = true;
- var _0x17edbf = new _0x5b02d3();
+ let _0x17edbf = new _0x5b02d3();
_0x1bf770.seek(0x4), _0x17edbf.sourceSize = _0x1bf770.readVLV(), _0x17edbf.targetSize = _0x1bf770.readVLV();
- var _0x2c1832 = _0x1bf770.readVLV();
+ let _0x2c1832 = _0x1bf770.readVLV();
_0x2c1832 && (_0x17edbf.metaData = _0x1bf770.readString(_0x2c1832));
- for (var _0x157bba = _0x1bf770.fileSize - 0xc; _0x1bf770.offset < _0x157bba;) {
- var _0x31dcc2 = _0x1bf770.readVLV(),
+ for (let _0x157bba = _0x1bf770.fileSize - 0xc; _0x1bf770.offset < _0x157bba;) {
+ let _0x31dcc2 = _0x1bf770.readVLV(),
_0x21bafe = {
'type': 0x3 & _0x31dcc2,
'length': 0x1 + (_0x31dcc2 >> 0x2)
};
if (_0x21bafe.type === _0x34d681) _0x21bafe.bytes = _0x1bf770.readBytes(_0x21bafe.length);
else if (_0x21bafe.type === _0x4c50e7 || _0x21bafe.type === _0xf9eeea) {
- var _0x4c6327 = _0x1bf770.readVLV();
+ let _0x4c6327 = _0x1bf770.readVLV();
_0x21bafe.relativeOffset = (0x1 & _0x4c6327 ? -0x1 : 0x1) * (_0x4c6327 >> 0x1);
}
_0x17edbf.actions.push(_0x21bafe);
@@ -819,8 +823,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x45da2c() {
- for (var _0xa88a13 = 0x0, _0x17edbf = 0x1;;) {
- var _0x2c1832 = this.readU8();
+ for (let _0xa88a13 = 0x0, _0x17edbf = 0x1;;) {
+ let _0x2c1832 = this.readU8();
if (_0xa88a13 += (0x7f & _0x2c1832) * _0x17edbf, 0x80 & _0x2c1832) break;
_0xa88a13 += _0x17edbf <<= 0x7;
}
@@ -829,7 +833,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x152a53(_0x33f58d) {
for (;;) {
- var _0x17edbf = 0x7f & _0x33f58d;
+ let _0x17edbf = 0x7f & _0x33f58d;
if (0x0 === (_0x33f58d >>= 0x7)) {
this.writeU8(0x80 | _0x17edbf);
break;
@@ -839,7 +843,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x5a4975(_0x221175) {
- for (var _0x17edbf = 0x0;;) {
+ for (let _0x17edbf = 0x0;;) {
if (0x0 === (_0x221175 >>= 0x7)) {
_0x17edbf++;
break;
@@ -853,19 +857,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.offset = 0x0, this.next = null;
}
_0x5b02d3.prototype.toString = function() {
- var _0xa88a13 = 'Source size: ' + this.sourceSize;
+ let _0xa88a13 = 'Source size: ' + this.sourceSize;
return _0xa88a13 += '\nTarget size: ' + this.targetSize, _0xa88a13 += '\nMetadata: ' + this.metaData, _0xa88a13 += '\n#Actions: ' + this.actions.length;
}, _0x5b02d3.prototype.validateSource = function(_0x48d2df, _0x3c15dd) {
return this.sourceChecksum === _0x2d78e9(_0x48d2df, _0x3c15dd);
}, _0x5b02d3.prototype.apply = function(_0x393f39, _0x76e509) {
if (_0x76e509 && !this.validateSource(_0x393f39)) throw new Error('error_crc_input');
- for (var _0x2c1832 = new _0x863031(this.targetSize), _0x4df6ae = 0x0, _0xad0fa9 = 0x0, _0x38240a = 0x0; _0x38240a < this.actions.length; _0x38240a++) {
- var _0x4b1026 = this.actions[_0x38240a];
+ for (let _0x2c1832 = new _0x863031(this.targetSize), _0x4df6ae = 0x0, _0xad0fa9 = 0x0, _0x38240a = 0x0; _0x38240a < this.actions.length; _0x38240a++) {
+ let _0x4b1026 = this.actions[_0x38240a];
if (_0x4b1026.type === _0x37eff4) _0x393f39.copyToFile(_0x2c1832, _0x2c1832.offset, _0x4b1026.length), _0x2c1832.skip(_0x4b1026.length);
else if (_0x4b1026.type === _0x34d681) _0x2c1832.writeBytes(_0x4b1026.bytes);
else if (_0x4b1026.type === _0x4c50e7) {
_0x4df6ae += _0x4b1026.relativeOffset;
- for (var _0x5c2263 = _0x4b1026.length; _0x5c2263--;) _0x2c1832.writeU8(_0x393f39._u8array[_0x4df6ae]), _0x4df6ae++;
+ for (let _0x5c2263 = _0x4b1026.length; _0x5c2263--;) _0x2c1832.writeU8(_0x393f39._u8array[_0x4df6ae]), _0x4df6ae++;
} else if (_0x4b1026.type === _0xf9eeea) {
_0xad0fa9 += _0x4b1026.relativeOffset;
for (_0x5c2263 = _0x4b1026.length; _0x5c2263--;) _0x2c1832.writeU8(_0x2c1832._u8array[_0xad0fa9]), _0xad0fa9++;
@@ -874,22 +878,22 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0x76e509 && this.targetChecksum !== _0x2d78e9(_0x2c1832)) throw new Error('error_crc_output');
return _0x2c1832;
}, _0x5b02d3.prototype.export = function(_0x3e1e58) {
- var _0x17edbf = 'BPS1' .length;
+ let _0x17edbf = 'BPS1' .length;
_0x17edbf += _0x5a4975(this.sourceSize), _0x17edbf += _0x5a4975(this.targetSize), _0x17edbf += _0x5a4975(this.metaData.length), _0x17edbf += this.metaData.length;
- for (var _0x2c1832 = 0x0; _0x2c1832 < this.actions.length; _0x2c1832++) {
+ for (let _0x2c1832 = 0x0; _0x2c1832 < this.actions.length; _0x2c1832++) {
_0x17edbf += _0x5a4975(((_0x38dad6 = this.actions[_0x2c1832]).length - 0x1 << 0x2) + _0x38dad6.type), _0x38dad6.type === _0x34d681 ? _0x17edbf += _0x38dad6.length : _0x38dad6.type !== _0x4c50e7 && _0x38dad6.type !== _0xf9eeea || (_0x17edbf += _0x5a4975((Math.abs(_0x38dad6.relativeOffset) << 0x1) + (_0x38dad6.relativeOffset < 0x0 ? 0x1 : 0x0)));
}
- var _0x2d1555 = new _0x863031(_0x17edbf += 0xc);
+ let _0x2d1555 = new _0x863031(_0x17edbf += 0xc);
_0x2d1555.fileName = _0x3e1e58 + '.bps', _0x2d1555.littleEndian = true, _0x2d1555.writeVLV = _0x152a53, _0x2d1555.writeString('BPS1'), _0x2d1555.writeVLV(this.sourceSize), _0x2d1555.writeVLV(this.targetSize), _0x2d1555.writeVLV(this.metaData.length), _0x2d1555.writeString(this.metaData, this.metaData.length);
for (_0x2c1832 = 0x0; _0x2c1832 < this.actions.length; _0x2c1832++) {
- var _0x38dad6 = this.actions[_0x2c1832];
+ let _0x38dad6 = this.actions[_0x2c1832];
_0x2d1555.writeVLV((_0x38dad6.length - 0x1 << 0x2) + _0x38dad6.type), _0x38dad6.type === _0x34d681 ? _0x2d1555.writeBytes(_0x38dad6.bytes) : _0x38dad6.type !== _0x4c50e7 && _0x38dad6.type !== _0xf9eeea || _0x2d1555.writeVLV((Math.abs(_0x38dad6.relativeOffset) << 0x1) + (_0x38dad6.relativeOffset < 0x0 ? 0x1 : 0x0));
}
return _0x2d1555.writeU32(this.sourceChecksum), _0x2d1555.writeU32(this.targetChecksum), _0x2d1555.writeU32(this.patchChecksum), _0x2d1555;
}, _0x562e68.prototype.delete = function() {
this.next && delete this.next;
};
- var _0x7a6485 = 'UPS1';
+ let _0x7a6485 = 'UPS1';
function _0x42cd9e() {
this.records = [], this.sizeInput = 0x0, this.sizeOutput = 0x0, this.checksumInput = 0x0, this.checksumOutput = 0x0;
@@ -897,7 +901,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x10dc1d(_0x5d0c48) {
for (;;) {
- var _0x17edbf = 0x7f & _0x5d0c48;
+ let _0x17edbf = 0x7f & _0x5d0c48;
if (0x0 === (_0x5d0c48 >>= 0x7)) {
this.writeU8(0x80 | _0x17edbf);
break;
@@ -907,8 +911,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0x454043() {
- for (var _0xa88a13 = 0x0, _0x17edbf = 0x1;;) {
- var _0x2c1832 = this.readU8();
+ for (let _0xa88a13 = 0x0, _0x17edbf = 0x1;;) {
+ let _0x2c1832 = this.readU8();
if (-0x1 == _0x2c1832) throw new Error('Can\'t read UPS VLV at 0x' + (this.offset - 0x1).toString(0x10));
if (_0xa88a13 += (0x7f & _0x2c1832) * _0x17edbf, 0x0 != (0x80 & _0x2c1832)) break;
_0xa88a13 += _0x17edbf <<= 0x7;
@@ -917,7 +921,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0xca245c(_0x459173) {
- for (var _0x17edbf = 0x0;;) {
+ for (let _0x17edbf = 0x0;;) {
if (_0x17edbf++, 0x0 === (_0x459173 >>= 0x7)) break;
_0x459173 -= 0x1;
}
@@ -925,10 +929,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0xd2202f(_0x5abb5e) {
- var _0x17edbf = new _0x42cd9e();
+ let _0x17edbf = new _0x42cd9e();
_0x5abb5e.readVLV = _0x454043, _0x5abb5e.seek(_0x7a6485.length), _0x17edbf.sizeInput = _0x5abb5e.readVLV(), _0x17edbf.sizeOutput = _0x5abb5e.readVLV();
for (; _0x5abb5e.offset < _0x5abb5e.fileSize - 0xc;) {
- for (var _0x2c1832 = _0x5abb5e.readVLV(), _0x3bca86 = []; _0x5abb5e.readU8();) _0x3bca86.push(_0x5abb5e._lastRead);
+ for (let _0x2c1832 = _0x5abb5e.readVLV(), _0x3bca86 = []; _0x5abb5e.readU8();) _0x3bca86.push(_0x5abb5e._lastRead);
_0x17edbf.addRecord(_0x2c1832, _0x3bca86);
}
return _0x5abb5e.littleEndian = true, _0x17edbf.checksumInput = _0x5abb5e.readU32(), _0x17edbf.checksumOutput = _0x5abb5e.readU32(), _0x5abb5e.littleEndian = !0x1, _0x17edbf;
@@ -939,12 +943,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'XORdata': _0x39594d
});
}, _0x42cd9e.prototype.toString = function() {
- var _0xa88a13 = 'Records: ' + (void 0x0).records.length;
+ let _0xa88a13 = 'Records: ' + (void 0x0).records.length;
return _0xa88a13 += '\nInput file size: ' + (void 0x0).sizeInput, _0xa88a13 += '\nOutput file size: ' + (void 0x0).sizeOutput, _0xa88a13 += '\nInput file checksum: ' + padZeroes((void 0x0).checksumInput, 0x4), _0xa88a13 += '\nOutput file checksum: ' + padZeroes((void 0x0).checksumOutput, 0x4);
}, _0x42cd9e.prototype.export = function(_0x1a3e8b) {
- var _0x17edbf = _0x7a6485.length;
+ let _0x17edbf = _0x7a6485.length;
_0x17edbf += _0xca245c(this.sizeInput), _0x17edbf += _0xca245c(this.sizeOutput);
- for (var _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) _0x17edbf += _0xca245c(this.records[_0x2c1832].offset), _0x17edbf += this.records[_0x2c1832].XORdata.length + 0x1;
+ for (let _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) _0x17edbf += _0xca245c(this.records[_0x2c1832].offset), _0x17edbf += this.records[_0x2c1832].XORdata.length + 0x1;
_0x17edbf += 0xc, tempFile = new _0x863031(_0x17edbf), tempFile.writeVLV = _0x10dc1d, tempFile.fileName = _0x1a3e8b + '.ups', tempFile.writeString(_0x7a6485), tempFile.writeVLV(this.sizeInput), tempFile.writeVLV(this.sizeOutput);
for (_0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) tempFile.writeVLV(this.records[_0x2c1832].offset), tempFile.writeBytes(this.records[_0x2c1832].XORdata), tempFile.writeU8(0x0);
return tempFile.littleEndian = true, tempFile.writeU32(this.checksumInput), tempFile.writeU32(this.checksumOutput), tempFile.writeU32(_0x2d78e9(tempFile, 0x0, true)), tempFile;
@@ -952,23 +956,21 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0x2d78e9(_0x25cb26, _0xd0163c) === this.checksumInput;
}, _0x42cd9e.prototype.apply = function(_0x21d682, _0x41bbac) {
_0x41bbac && this.validateSource(_0x21d682), tempFile = new _0x863031(this.sizeOutput), _0x21d682.copyToFile(tempFile, 0x0, this.sizeInput), _0x21d682.seek(0x0);
- for (var _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) {
- var _0x5ed6c9 = this.records[_0x2c1832];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < this.records.length; _0x2c1832++) {
+ let _0x5ed6c9 = this.records[_0x2c1832];
tempFile.skip(_0x5ed6c9.offset), _0x21d682.skip(_0x5ed6c9.offset);
- for (var _0x3faf05 = 0x0; _0x3faf05 < _0x5ed6c9.XORdata.length; _0x3faf05++) tempFile.writeU8((_0x21d682.isEOF() ? 0x0 : _0x21d682.readU8()) ^ _0x5ed6c9.XORdata[_0x3faf05]);
+ for (let _0x3faf05 = 0x0; _0x3faf05 < _0x5ed6c9.XORdata.length; _0x3faf05++) tempFile.writeU8((_0x21d682.isEOF() ? 0x0 : _0x21d682.readU8()) ^ _0x5ed6c9.XORdata[_0x3faf05]);
tempFile.skip(0x1), _0x21d682.skip(0x1);
}
return _0x41bbac && (_0x2d78e9(tempFile), this.checksumOutput), tempFile;
};
- var _0xc778fa = _0x2c1832(0xa0),
- _0x5a641d = _0x2c1832.n(_0xc778fa),
- _0x4d7024 = {
+ var _0x4d7024 = {
'_FS': {
'createFolder': function(parent, name, canRead, canWrite) {
if (! _0x4d7024.FS) return;
if (typeof _0x4d7024.FS.mkdir == 'function' && window.PATH) {
- var path = PATH.join2(typeof parent === 'string' ? parent : _0x4d7024.FS.getPath(parent), name);
- var mode = _0x4d7024.FS.getMode(canRead, canWrite);
+ let path = PATH.join2(typeof parent === 'string' ? parent : _0x4d7024.FS.getPath(parent), name);
+ let mode = _0x4d7024.FS.getMode(canRead, canWrite);
_0x4d7024.FS.mkdir(path, mode);
} else {
_0x4d7024.FS.createFolder(parent, name, canRead, canWrite);
@@ -993,9 +995,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'coreFileVersion': '',
'isMobileDevice': !!/Android|webOS|iPhone|iPad|iPod|BB10|BlackBerry|IEMobile|Opera Mini|Mobile|mobile/i .test(navigator.userAgent || ''),
'create': function() {
- var _0xa88a13 = this;
+ let _this = this;
window.URL = window.URL || window.webkitURL;
- var _0x17edbf, _0x2c1832, _0x4ce206, _0x528f2b = !0x1,
+ let _0x17edbf, _0x2c1832, _0x4ce206, _0x528f2b = !0x1,
_0x547484 = !0x1,
_0x5e24fa = !0x1,
_0x468801 = 0x0,
@@ -1072,11 +1074,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x17edbf = (_0xc6823.customPaths && typeof _0xc6823.customPaths['extract7z.js'] == 'string') ? _0xc6823.customPaths['extract7z.js'] : (_0xc6823.dataPath + 'extract7z.js');;
_0x2c1832 = (_0xc6823.customPaths && typeof _0xc6823.customPaths['extractzip.js'] == 'string') ? _0xc6823.customPaths['extractzip.js'] : (_0xc6823.dataPath + 'extractzip.js?v=1');
_0x4ce206 = (_0xc6823.customPaths && typeof _0xc6823.customPaths['libunrar.js'] == 'string') ? _0xc6823.customPaths['libunrar.js'] : (_0xc6823.dataPath + 'libunrar.js');
- var _0xb2be2a = _0x428003('canvas', {});
+ let _0xb2be2a = _0x428003('canvas', {});
this.game.appendChild(_0xb2be2a), _0x4d7024.loading = _0x428003('div', {
'class': this.config.classNames.loading
}), this.elements.container.appendChild(_0x4d7024.loading);
- var _0x4fce24 = {
+ let _0x4fce24 = {
'loading-info': _0x449eac({
'loading-info': true
}),
@@ -1108,7 +1110,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4e198f = '';
if (typeof _0xc6823.adUrl === 'string') {
_0x4d7024.loading.innerHTML = '\n
';
- var _0x2e2264 = _0x428003('iframe', {
+ let _0x2e2264 = _0x428003('iframe', {
'src': _0xc6823.adUrl,
'scrolling': 'no',
'frameborder': 'no',
@@ -1122,8 +1124,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x132da7(_0x4d7024.loading.querySelector('.' .concat(_0x4fce24['start-game'])), true), _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)).innerHTML = 'Failed to initialize WebGL. ';
}
}
- var _0x18a437 = window.URL || window.webkitURL;
- var isCompressed = function(data) { //https://www.garykessler.net/library/file_sigs.html
+ let _0x18a437 = window.URL || window.webkitURL;
+ let isCompressed = function(data) { //https://www.garykessler.net/library/file_sigs.html
if ((data[0] === 80 && data[1] === 75) && ((data[2] === 3 && data[3] === 4) || (data[2] === 5 && data[3] === 6) || (data[2] === 7 && data[3] === 8))) {
return 'zip';
} else if (data[0] === 55 && data[1] === 122 && data[2] === 188 && data[3] === 175 && data[4] === 39 && data[5] === 28) {
@@ -1133,7 +1135,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},
extractFile = async function(url) {
- var fileData = await (await fetch(url)).text(),
+ let fileData = await (await fetch(url)).text(),
_0x2c1832 = new Blob([fileData], {
'type': 'application/javascript'
}),
@@ -1141,9 +1143,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return new Worker(_0x501a8e);
},
extractRar = async function(url) {
- var fileData = await (await fetch(url)).text();
- var _0x2c1832 = '\nvar dataToPass = [];\nModule = {\n monitorRunDependencies: function(left) {\n if (left == 0) {\n setTimeout(function() {\n unrar(dataToPass, null);\n }, 100);\n }\n },\n onRuntimeInitialized: function() {\n },\n locateFile: function(file) {\n return \''+url+'.mem\';\n }\n};\n'+fileData+'\nvar unrar = function(data, password) {\n var cb = function(fileName, fileSize, progress) {\n postMessage({"t":4,"current":progress,"total":fileSize, "name": fileName});\n };\n\n var rarContent = readRARContent(data.map(function(d) {\n return {\n name: d.name,\n content: new Uint8Array(d.content)\n }\n }), password, cb)\n var rec = function(entry) {\n if (entry.type === \'file\') {\n postMessage({"t":2,"file":entry.fullFileName,"size":entry.fileSize,"data":entry.fileContent});\n } else if (entry.type === \'dir\') {\n Object.keys(entry.ls).forEach(function(k) {\n rec(entry.ls[k]);\n })\n } else {\n throw "Unknown type";\n }\n }\n rec(rarContent);\n postMessage({"t":1});\n return rarContent;\n};\nonmessage = function(data) {\n dataToPass.push({name: \'test.rar\', content: data.data});\n};\n ';
- var _0x22326b = new Blob([_0x2c1832], {
+ let fileData = await (await fetch(url)).text();
+ let _0x2c1832 = '\nlet dataToPass = [];\nModule = {\n monitorRunDependencies: function(left) {\n if (left == 0) {\n setTimeout(function() {\n unrar(dataToPass, null);\n }, 100);\n }\n },\n onRuntimeInitialized: function() {\n },\n locateFile: function(file) {\n return \''+url+'.mem\';\n }\n};\n'+fileData+'\nlet unrar = function(data, password) {\n let cb = function(fileName, fileSize, progress) {\n postMessage({"t":4,"current":progress,"total":fileSize, "name": fileName});\n };\n\n let rarContent = readRARContent(data.map(function(d) {\n return {\n name: d.name,\n content: new Uint8Array(d.content)\n }\n }), password, cb)\n let rec = function(entry) {\n if (entry.type === \'file\') {\n postMessage({"t":2,"file":entry.fullFileName,"size":entry.fileSize,"data":entry.fileContent});\n } else if (entry.type === \'dir\') {\n Object.keys(entry.ls).forEach(function(k) {\n rec(entry.ls[k]);\n })\n } else {\n throw "Unknown type";\n }\n }\n rec(rarContent);\n postMessage({"t":1});\n return rarContent;\n};\nonmessage = function(data) {\n dataToPass.push({name: \'test.rar\', content: data.data});\n};\n ';
+ let _0x22326b = new Blob([_0x2c1832], {
'type': 'application/javascript'
}),
_0x3635b1 = window.URL.createObjectURL(_0x22326b);
@@ -1213,7 +1215,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0xdcec2a && (_0xdcec2a.virtualGamepadContainer == 'undefined' || _0xdcec2a.virtualGamepadContainer === null)) {
_0x5ab74d.toggleControls.call(_0xc6823, true);
}
- var _0x2c1832 = _0x449eac({
+ let _0x2c1832 = _0x449eac({
'ejs__tooltip--visible': true
}),
_0x10efa5 = _0xc6823.elements.buttons.gamepad.querySelector('.' .concat(_0x449eac({
@@ -1231,138 +1233,118 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}
_0x132da7(_0x4d7024.loading.querySelector('.' .concat(_0x4fce24['start-game'])), true);
- var _0x30fd44 = _0x5dc0c0(_0x2593da.defaultCoreOptionsValues.call(_0xa88a13), _0x2593da.storage.get('core-options') || {});
+ let _0x30fd44 = _0x5dc0c0(_0x2593da.defaultCoreOptionsValues.call(_this), _0x2593da.storage.get('core-options') || {});
'n64' === _0xc6823.system && _0x30fd44 && Object.keys(_0x30fd44).forEach(function(_0x3015d2) {
- 'glupen64-aspect' === _0x3015d2 && '16:9' === _0x30fd44[_0x3015d2] && (_0xb2be2a.height = _0xb2be2a.width / 0x10 * 0x9, _0x4d7024.aspectRatio = 0x10 / 0x9);
- }), 'arcade' !== _0xa88a13.system && 'fba0.2.97.29' !== _0xa88a13.system || _0x30fd44 && Object.keys(_0x30fd44).forEach(function(_0x490c06) {
- 'fba-aspect' === _0x490c06 && 'PAR' === _0x30fd44[_0x490c06] && (_0xb2be2a.height = _0xb2be2a.width / 0x10 * 0x9, _0x4d7024.aspectRatio = 0x10 / 0x9);
- }), 'gba' === _0xc6823.system && (_0xb2be2a.height = _0xb2be2a.width / 1.5, _0x4d7024.aspectRatio = 1.5), window.setTimeout(function() {}, 0x96),
- function() {
- var _0x3d9f57 = _0xa88a13;
- if ('undefined' != typeof RI) {
- document.removeEventListener('mousemove', RI.eventHandler, !0x1), _0xb2be2a.removeEventListener('mousedown', RI.canvasEventHandler, !0x1), _0xb2be2a.removeEventListener('mouseup', RI.canvasEventHandler, !0x1);
- _0x3d9f57.elements.container.addEventListener('mousemove', function(_0x44f409) {
- var _0x3d9f57 = 0x0,
- _0x2c1832 = 0x0,
- _0x2cc8a1 = _0x44f409.offsetX - _0x4d7024.Module.canvas.offsetLeft,
- _0x5744ed = _0x44f409.offsetY - _0x4d7024.Module.canvas.offsetTop;
- switch (_0x44f409.type) {
- case 'mousemove':
- _0x2cc8a1 < 0x0 ? (_0x2cc8a1 = 0x0, _0x3d9f57 = -_0x4d7024.Module.canvas.offsetWidth) : _0x2cc8a1 > _0x4d7024.Module.canvas.offsetWidth ? (_0x2cc8a1 = _0x4d7024.Module.canvas.offsetWidth, _0x3d9f57 = _0x4d7024.Module.canvas.offsetWidth) : _0x3d9f57 = _0x2cc8a1 - RI.currentX, _0x5744ed < 0x0 ? (_0x5744ed = 0x0, _0x2c1832 = -_0x4d7024.Module.canvas.offsetHeight) : _0x5744ed > _0x4d7024.Module.canvas.offsetHeight ? (_0x5744ed = _0x4d7024.Module.canvas.offsetHeight, _0x2c1832 = _0x4d7024.Module.canvas.offsetHeight) : _0x2c1832 = _0x5744ed - RI.currentY, RI.currentX = _0x2cc8a1, RI.currentY = _0x5744ed;
- for (var _0x3e03cb = 0x0; _0x3e03cb < RI.contexts.length; _0x3e03cb += 0x1) HEAP32[RI.contexts[_0x3e03cb].state + 0x20 >> 0x2] = _0x3d9f57, HEAP32[RI.contexts[_0x3e03cb].state + 0x24 >> 0x2] = _0x2c1832;
- }
- }, !0x1), _0x3d9f57.elements.container.addEventListener('mousedown', RI.canvasEventHandler, !0x1), _0x3d9f57.elements.container.addEventListener('mouseup', RI.canvasEventHandler, !0x1);
- var _0x2c1832 = function(_0x5d0cbb) {
- if (_0x5d0cbb.targetTouches[0x0]) {
- var _0x3d9f57, _0x2c1832, _0x19a4e0 = 0x0,
- _0x2b7b61 = 0x0,
- _0x1e0f64 = _0x5d0cbb.target.getBoundingClientRect(),
- _0x2c55b8 = _0x5d0cbb.targetTouches[0x0].clientX - _0x1e0f64.left,
- _0x3a7025 = _0x5d0cbb.targetTouches[0x0].clientY - _0x1e0f64.top;
- _0x2c55b8 < 0x0 ? (_0x2c55b8 = 0x0, _0x19a4e0 = -_0x4d7024.Module.canvas.offsetWidth) : _0x2c55b8 > _0x4d7024.Module.canvas.offsetWidth ? (_0x2c55b8 = _0x4d7024.Module.canvas.offsetWidth, _0x19a4e0 = _0x4d7024.Module.canvas.offsetWidth) : _0x19a4e0 = _0x2c55b8 - RI.currentX, _0x3a7025 < 0x0 ? (_0x3a7025 = 0x0, _0x2b7b61 = -_0x4d7024.Module.canvas.offsetHeight) : _0x3a7025 > _0x4d7024.Module.canvas.offsetHeight ? (_0x3a7025 = _0x4d7024.Module.canvas.offsetHeight, _0x2b7b61 = _0x4d7024.Module.canvas.offsetHeight) : _0x2b7b61 = _0x3a7025 - RI.currentY, RI.currentX = _0x2c55b8, RI.currentY = _0x3a7025;
- for (var _0x43b670 = 0x0; _0x43b670 < RI.contexts.length; _0x43b670 += 0x1) HEAP32[RI.contexts[_0x43b670].state + 0x20 >> 0x2] = _0x19a4e0, HEAP32[RI.contexts[_0x43b670].state + 0x24 >> 0x2] = _0x2b7b61;
- switch (_0x5d0cbb.type) {
- case 'touchend':
- case 'touchstart':
- if (0x0 === _0x5d0cbb.button) _0x2c1832 = 0x28;
- else {
- if (0x2 !== _0x5d0cbb.button) break;
- _0x2c1832 = 0x29;
- }
- _0x3d9f57 = 'touchend' === _0x5d0cbb.type ? 0x0 : 0x1;
- for (var _0x443e8b = 0x0; _0x443e8b < RI.contexts.length; _0x443e8b += 0x1) HEAP8[RI.contexts[_0x443e8b].state + _0x2c1832 >> 0x0] = _0x3d9f57;
- }
- }
- };
- _0x3d9f57.elements.container.addEventListener('touchstart', _0x2c1832, !0x1), _0x3d9f57.elements.container.addEventListener('touchend', _0x2c1832, !0x1);
- } else {
- var _0x518e5a = function(_0x45d640) {
- var _0x3d9f57 = new MouseEvent(_0x45d640.type, _0x45d640);
- _0x4d7024.Module.canvas.dispatchEvent(_0x3d9f57);
- };
- _0x530042.call(_0xa88a13, '.' .concat(_0x449eac({
- 'ejs__dialogs': true
- }))).addEventListener('mousemove', _0x518e5a, !0x1), _0x530042.call(_0xa88a13, '.' .concat(_0x449eac({
- 'ejs__dialogs': true
- }))).addEventListener('mousedown', _0x518e5a, !0x1), _0x530042.call(_0xa88a13, '.' .concat(_0x449eac({
- 'ejs__dialogs': true
- }))).addEventListener('mouseup', _0x518e5a, !0x1);
- }
- }(), 'msx' === _0xc6823.system && function(_0x3c016a) {
- if ('undefined' != typeof RI) {
- document.removeEventListener('keydown', RI.eventHandler, !0x1), document.removeEventListener('keyup', RI.eventHandler, !0x1);
- var _0x3d9f57 = function(_0x97e67b) {
- var _0x3d9f57 = _0x97e67b.keyCode,
- _0x2c1832 = _0x3d9f57 >> 0x3,
- _0x3340c0 = 0x1 << (0x7 & _0x3d9f57);
- switch (_0x97e67b.type) {
- case 'keyup':
- case 'keydown':
- if (_0x2c1832 >= 0x20) throw 'key code error! bad code: ' + _0x3d9f57;
- for (var _0x126f58 = 0x0; _0x126f58 < RI.contexts.length; _0x126f58++) {
- var _0x4ca77a = HEAP8[RI.contexts[_0x126f58].state + _0x2c1832 >> 0x0];
- 'keyup' === _0x97e67b.type ? _0x4ca77a &= ~_0x3340c0 : _0x4ca77a |= _0x3340c0, HEAP8[RI.contexts[_0x126f58].state + _0x2c1832 >> 0x0] = _0x4ca77a;
+ 'glupen64-aspect' === _0x3015d2 && '16:9' === _0x30fd44[_0x3015d2] && (_0xb2be2a.height = _0xb2be2a.width / 0x10 * 0x9, _0x4d7024.aspectRatio = 0x10 / 0x9);
+ });
+ 'arcade' !== _this.system && 'fba0.2.97.29' !== _this.system || _0x30fd44 && Object.keys(_0x30fd44).forEach(function(_0x490c06) {
+ 'fba-aspect' === _0x490c06 && 'PAR' === _0x30fd44[_0x490c06] && (_0xb2be2a.height = _0xb2be2a.width / 0x10 * 0x9, _0x4d7024.aspectRatio = 0x10 / 0x9);
+ });
+ 'gba' === _0xc6823.system && (_0xb2be2a.height = _0xb2be2a.width / 1.5, _0x4d7024.aspectRatio = 1.5);
+ (function() {
+ let _0x3d9f57 = _this;
+ if ('undefined' != typeof RI) {
+ document.removeEventListener('mousemove', RI.eventHandler, !0x1), _0xb2be2a.removeEventListener('mousedown', RI.canvasEventHandler, !0x1), _0xb2be2a.removeEventListener('mouseup', RI.canvasEventHandler, !0x1);
+ _0x3d9f57.elements.container.addEventListener('mousemove', function(_0x44f409) {
+ let _0x3d9f57 = 0x0,
+ _0x2c1832 = 0x0,
+ _0x2cc8a1 = _0x44f409.offsetX - _0x4d7024.Module.canvas.offsetLeft,
+ _0x5744ed = _0x44f409.offsetY - _0x4d7024.Module.canvas.offsetTop;
+ switch (_0x44f409.type) {
+ case 'mousemove':
+ _0x2cc8a1 < 0x0 ? (_0x2cc8a1 = 0x0, _0x3d9f57 = -_0x4d7024.Module.canvas.offsetWidth) : _0x2cc8a1 > _0x4d7024.Module.canvas.offsetWidth ? (_0x2cc8a1 = _0x4d7024.Module.canvas.offsetWidth, _0x3d9f57 = _0x4d7024.Module.canvas.offsetWidth) : _0x3d9f57 = _0x2cc8a1 - RI.currentX, _0x5744ed < 0x0 ? (_0x5744ed = 0x0, _0x2c1832 = -_0x4d7024.Module.canvas.offsetHeight) : _0x5744ed > _0x4d7024.Module.canvas.offsetHeight ? (_0x5744ed = _0x4d7024.Module.canvas.offsetHeight, _0x2c1832 = _0x4d7024.Module.canvas.offsetHeight) : _0x2c1832 = _0x5744ed - RI.currentY, RI.currentX = _0x2cc8a1, RI.currentY = _0x5744ed;
+ for (let _0x3e03cb = 0x0; _0x3e03cb < RI.contexts.length; _0x3e03cb += 0x1) HEAP32[RI.contexts[_0x3e03cb].state + 0x20 >> 0x2] = _0x3d9f57, HEAP32[RI.contexts[_0x3e03cb].state + 0x24 >> 0x2] = _0x2c1832;
+ }
+ }, !0x1), _0x3d9f57.elements.container.addEventListener('mousedown', RI.canvasEventHandler, !0x1), _0x3d9f57.elements.container.addEventListener('mouseup', RI.canvasEventHandler, !0x1);
+ let _0x2c1832 = function(_0x5d0cbb) {
+ if (_0x5d0cbb.targetTouches[0x0]) {
+ let _0x3d9f57, _0x2c1832, _0x19a4e0 = 0x0,
+ _0x2b7b61 = 0x0,
+ _0x1e0f64 = _0x5d0cbb.target.getBoundingClientRect(),
+ _0x2c55b8 = _0x5d0cbb.targetTouches[0x0].clientX - _0x1e0f64.left,
+ _0x3a7025 = _0x5d0cbb.targetTouches[0x0].clientY - _0x1e0f64.top;
+ _0x2c55b8 < 0x0 ? (_0x2c55b8 = 0x0, _0x19a4e0 = -_0x4d7024.Module.canvas.offsetWidth) : _0x2c55b8 > _0x4d7024.Module.canvas.offsetWidth ? (_0x2c55b8 = _0x4d7024.Module.canvas.offsetWidth, _0x19a4e0 = _0x4d7024.Module.canvas.offsetWidth) : _0x19a4e0 = _0x2c55b8 - RI.currentX, _0x3a7025 < 0x0 ? (_0x3a7025 = 0x0, _0x2b7b61 = -_0x4d7024.Module.canvas.offsetHeight) : _0x3a7025 > _0x4d7024.Module.canvas.offsetHeight ? (_0x3a7025 = _0x4d7024.Module.canvas.offsetHeight, _0x2b7b61 = _0x4d7024.Module.canvas.offsetHeight) : _0x2b7b61 = _0x3a7025 - RI.currentY, RI.currentX = _0x2c55b8, RI.currentY = _0x3a7025;
+ for (let _0x43b670 = 0x0; _0x43b670 < RI.contexts.length; _0x43b670 += 0x1) HEAP32[RI.contexts[_0x43b670].state + 0x20 >> 0x2] = _0x19a4e0, HEAP32[RI.contexts[_0x43b670].state + 0x24 >> 0x2] = _0x2b7b61;
+ switch (_0x5d0cbb.type) {
+ case 'touchend':
+ case 'touchstart':
+ if (0x0 === _0x5d0cbb.button) _0x2c1832 = 0x28;
+ else {
+ if (0x2 !== _0x5d0cbb.button) break;
+ _0x2c1832 = 0x29;
}
+ _0x3d9f57 = 'touchend' === _0x5d0cbb.type ? 0x0 : 0x1;
+ for (let _0x443e8b = 0x0; _0x443e8b < RI.contexts.length; _0x443e8b += 0x1) HEAP8[RI.contexts[_0x443e8b].state + _0x2c1832 >> 0x0] = _0x3d9f57;
}
- };
- document.addEventListener('keydown', _0x3d9f57, !0x1), document.addEventListener('keyup', _0x3d9f57, !0x1);
- }
- }(), setTimeout(function() {
- var _0xa88a13;
- _0xa88a13 = _0x59aa33.info(), null === _0xdcec2a.setVolume && 'undefined' != typeof RA ? (RA.queueAudio = function() {
- var _0x3d9f57, _0x2c1832 = _0xc6823.volume,
- _0x2cbc4 = RA.bufIndex;
- _0x3d9f57 = RA.bufIndex ? RA.buffers[RA.bufIndex - 0x1].endTime : RA.context.currentTime, RA.buffers[_0x2cbc4].endTime = _0x3d9f57 + RA.buffers[_0x2cbc4].duration;
- var _0x4e7320 = RA.context.createBufferSource();
- if (_0x4e7320.buffer = RA.buffers[_0x2cbc4], _0xc6823.muted && (_0x2c1832 = 0x0), 0x1 === _0x2c1832) _0x4e7320.connect(RA.context.destination);
- else {
- var _0x3da8fc = RA.context.createGain();
- _0x4e7320.connect(_0x3da8fc), _0x3da8fc.connect(RA.context.destination), _0x59aa33.isEdge || 'chrome' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x3c || 'firefox' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x38 || 'opera' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x2c ? _0x3da8fc.gain.value = _0x2c1832 : 'firefox' === _0xa88a13.name ? _0x3da8fc.gain.setValueAtTime(_0x2c1832, RA.context.currentTime) : _0x3da8fc.gain.setValueAtTime(_0x2c1832, RA.context.currentTime, 0x0);
}
- _0x4e7320.start(_0x3d9f57), RA.bufIndex += 0x1, RA.bufOffset = 0x0;
- }, _0x59aa33.isIos && window.addEventListener('touchstart', function() {
- if (RA.context) {
- RA.context.resume();
- var _0xa88a13 = RA.context.createBufferSource();
- _0xa88a13.connect(RA.context.destination), _0xa88a13.start();
- }
- }, !0x1)) : _0xdcec2a.setVolume();
- }, 0x1f4), setTimeout(function() {
- _0xc6823.elements.container.focus();
- }, 0x1e), void 0x0 === window.addRunDependency && (window.Module = void 0x0);
- var _0x36b9cc = _0x4d7024.FS.readFile(_0xc6823.startName);
- if (_0x36b9cc.length <= 0x2000000 && '.cue' != _0xc6823.startName.substr(-0x4)) {
- var _0x4fa964;
- if ('snes' === _0xc6823.system || ['snes2002', 'snes2005', 'snes2010'].includes(_0xc6823.system)) {
- var _0x4b2f70 = _0x36b9cc.length % 0x400;
- _0x4fa964 = new _0x863031(_0x4b2f70 ? _0x36b9cc.slice ? _0x36b9cc.slice(_0x4b2f70) : _0x36b9cc.subarray(_0x4b2f70) : _0x36b9cc);
- } else _0x4fa964 = new _0x863031(_0x36b9cc);
- var _0x21e040 = _0x5a641d.a.create(),
- _0x2b8478 = new FileReader(),
- _0x15068c = 0x0,
- _0x1646ca = _0x4fa964._u8array.length,
- _0x4c84da = function() {
- if (_0x15068c < _0x1646ca) {
- var _0xa88a13 = Math.min(_0x15068c + 0x200000, _0x1646ca);
- _0x2b8478.readAsArrayBuffer(new Blob([_0x4fa964._u8array.slice(_0x15068c, _0xa88a13)])), _0x15068c = _0xa88a13;
- } else console.log(_0x21e040.hex()), _0xc6823.hash = _0x21e040.hex(), 'function' == typeof window.ejsromshash && window.ejsromshash(_0xc6823.hash);
};
- _0x2b8478.onload = function(_0x26a751) {
- try {
- _0x21e040.update(_0x26a751.target.result), _0x4c84da();
- } catch (_0x5c9e53) {
- console.log(_0x5c9e53);
+ _0x3d9f57.elements.container.addEventListener('touchstart', _0x2c1832, !0x1), _0x3d9f57.elements.container.addEventListener('touchend', _0x2c1832, !0x1);
+ } else {
+ let _0x518e5a = function(_0x45d640) {
+ let _0x3d9f57 = new MouseEvent(_0x45d640.type, _0x45d640);
+ _0x4d7024.Module.canvas.dispatchEvent(_0x3d9f57);
+ };
+ _0x530042.call(_this, '.' .concat(_0x449eac({
+ 'ejs__dialogs': true
+ }))).addEventListener('mousemove', _0x518e5a, !0x1), _0x530042.call(_this, '.' .concat(_0x449eac({
+ 'ejs__dialogs': true
+ }))).addEventListener('mousedown', _0x518e5a, !0x1), _0x530042.call(_this, '.' .concat(_0x449eac({
+ 'ejs__dialogs': true
+ }))).addEventListener('mouseup', _0x518e5a, !0x1);
+ }
+ })();
+ 'msx' === _0xc6823.system && function(_0x3c016a) {
+ if ('undefined' != typeof RI) {
+ document.removeEventListener('keydown', RI.eventHandler, !0x1), document.removeEventListener('keyup', RI.eventHandler, !0x1);
+ let _0x3d9f57 = function(_0x97e67b) {
+ let _0x3d9f57 = _0x97e67b.keyCode,
+ _0x2c1832 = _0x3d9f57 >> 0x3,
+ _0x3340c0 = 0x1 << (0x7 & _0x3d9f57);
+ switch (_0x97e67b.type) {
+ case 'keyup':
+ case 'keydown':
+ if (_0x2c1832 >= 0x20) throw 'key code error! bad code: ' + _0x3d9f57;
+ for (let _0x126f58 = 0x0; _0x126f58 < RI.contexts.length; _0x126f58++) {
+ let _0x4ca77a = HEAP8[RI.contexts[_0x126f58].state + _0x2c1832 >> 0x0];
+ 'keyup' === _0x97e67b.type ? _0x4ca77a &= ~_0x3340c0 : _0x4ca77a |= _0x3340c0, HEAP8[RI.contexts[_0x126f58].state + _0x2c1832 >> 0x0] = _0x4ca77a;
+ }
+ }
+ };
+ document.addEventListener('keydown', _0x3d9f57, !0x1), document.addEventListener('keyup', _0x3d9f57, !0x1);
+ }
+ }();
+ setTimeout(function() {
+ let _0xa88a13;
+ _0xa88a13 = _0x59aa33.info(), null === _0xdcec2a.setVolume && 'undefined' != typeof RA ? (RA.queueAudio = function() {
+ let _0x3d9f57, _0x2c1832 = _0xc6823.volume,
+ _0x2cbc4 = RA.bufIndex;
+ _0x3d9f57 = RA.bufIndex ? RA.buffers[RA.bufIndex - 0x1].endTime : RA.context.currentTime, RA.buffers[_0x2cbc4].endTime = _0x3d9f57 + RA.buffers[_0x2cbc4].duration;
+ let _0x4e7320 = RA.context.createBufferSource();
+ if (_0x4e7320.buffer = RA.buffers[_0x2cbc4], _0xc6823.muted && (_0x2c1832 = 0x0), 0x1 === _0x2c1832) _0x4e7320.connect(RA.context.destination);
+ else {
+ let _0x3da8fc = RA.context.createGain();
+ _0x4e7320.connect(_0x3da8fc), _0x3da8fc.connect(RA.context.destination), _0x59aa33.isEdge || 'chrome' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x3c || 'firefox' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x38 || 'opera' === _0xa88a13.name && parseInt(_0xa88a13.version, 0xa) <= 0x2c ? _0x3da8fc.gain.value = _0x2c1832 : 'firefox' === _0xa88a13.name ? _0x3da8fc.gain.setValueAtTime(_0x2c1832, RA.context.currentTime) : _0x3da8fc.gain.setValueAtTime(_0x2c1832, RA.context.currentTime, 0x0);
}
- }, _0x4c84da();
- }
+ _0x4e7320.start(_0x3d9f57), RA.bufIndex += 0x1, RA.bufOffset = 0x0;
+ }, _0x59aa33.isIos && window.addEventListener('touchstart', function() {
+ if (RA.context) {
+ RA.context.resume();
+ let _0xa88a13 = RA.context.createBufferSource();
+ _0xa88a13.connect(RA.context.destination), _0xa88a13.start();
+ }
+ }, !0x1)) : _0xdcec2a.setVolume();
+ }, 0x1f4);
+ setTimeout(function() {
+ _0xc6823.elements.container.focus();
+ }, 0x1e);
+ void 0x0 === window.addRunDependency && (window.Module = void 0x0);
})
if (typeof _0xc6823.adUrl === 'string') {
_0x1093f4.call(_0xc6823, _0x4d7024.loading.querySelector('.' .concat(_0x4fce24['close-ad'])), 'click', function(_0x96b13f) {
_0x96b13f instanceof MouseEvent && _0xc6823.started && _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.ad)) && _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.ad)).parentNode.removeChild(_0x4d7024.loading.querySelector('.' .concat(_0x4fce24.ad))), _0xc6823.elements.container.focus();
});
}
- var _0xa88a13 = this;
- var _0x16cf3e = function() {
+ let _0x16cf3e = function() {
_0x4e171c.db && _0x4e171c.getAll(function(_0x1a4eaf) {
Array.isArray(_0x1a4eaf) && _0x1a4eaf.length > 0xa && _0x1a4eaf.sort(function(_0x155e15, _0x4a9e7f) {
return (_0x4a9e7f.lastaccess ? _0x4a9e7f.lastaccess : 0x0) - (_0x155e15.lastaccess ? _0x155e15.lastaccess : 0x0);
@@ -1375,14 +1357,21 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
_0x5f3757 = function(_0x2bd107) {
if (_0x4d7024.gamePatch) {
- var _0x17edbf = _0x2bd107.startName.split('/'),
+ let startName = _0x4d7024.getStartName(true);
+ let _0x17edbf = startName.split('/'),
_0x2c1832 = _0x17edbf.pop().split('.').pop(),
_0x11dc72 = (_0x4d7024.gamePatch.split('.').pop(), _0x4d7024.gamePatch.split('/').pop().split('.').shift()),
_0x453ec0 = '' .concat(_0x17edbf.join('/'), '/').concat(_0x11dc72, '.').concat(_0x2c1832);
_0x453ec0 = _0x453ec0.replace(/\#/g, '');
- var _0x5438db = _0x4d7024.gamePatch;
- if (_0x4d7024.FS.rename(_0x2bd107.startName, _0x453ec0), _0x2bd107.startName = _0x453ec0, 'snes' === _0x2bd107.system || ['snes2002', 'snes2005', 'snes2010'].includes(_0x2bd107.system)) {
- var _0x4758bc, _0x4b4000, _0x4aa31e, _0x2d9175 = new _0x863031(_0x4d7024.FS.readFile(_0x2bd107.startName)),
+ if (_0x4d7024.gamePatch.startsWith('blob:')) {
+ _0x453ec0 = startName;
+ }
+ let _0x5438db = _0x4d7024.gamePatch;
+ _0x4d7024.FS.rename(startName, _0x453ec0);
+ _0x2bd107.startName = _0x453ec0;
+ startName = _0x4d7024.getStartName(true);
+ if ('snes' === _0x2bd107.system || ['snes2002', 'snes2005', 'snes2010'].includes(_0x2bd107.system)) {
+ let _0x4758bc, _0x4b4000, _0x4aa31e, _0x2d9175 = new _0x863031(_0x4d7024.FS.readFile(startName)),
_0x567355 = _0x2d78e9(_0x2d9175),
_0x3d2ad0 = new _0x863031(_0x4d7024.FS.readFile(_0x5438db)),
_0x4a229b = _0x3d2ad0.readString(0x6),
@@ -1390,27 +1379,27 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4a229b.startsWith('PATCH') ? (_0x4758bc = _0x288092(_0x3d2ad0), 0x0 === _0x20786d && 'B19ED489' === _0x567355.toString(0x10).toUpperCase() && ((_0x4b4000 = new Uint8Array(_0x2d9175._u8array.length + 0x200)).set(new Uint8Array(0x200), 0x0), _0x4b4000.set(_0x2d9175._u8array, 0x200), _0x2d9175 = new _0x863031(_0x4b4000))) : _0x4a229b.startsWith(_0x7a6485) ? _0x4758bc = _0xd2202f(_0x3d2ad0) : _0x4a229b.startsWith('BPS1') && (_0x4758bc = _0x356089(_0x3d2ad0), _0x20786d > 0x0 && 'A31BEAD4' === _0x567355.toString(0x10).toUpperCase() && (_0x4b4000 = _0x2d9175._u8array.slice ? _0x2d9175._u8array.slice(_0x20786d) : _0x2d9175._u8array.subarray(_0x20786d), _0x2d9175 = new _0x863031(_0x4b4000)));
try {
if (_0x4aa31e = _0x4758bc.apply(_0x2d9175, !0x1)) {
- var _0x1ffde3 = _0x4aa31e._u8array.length % 0x400;
- _0x1ffde3 > 0x0 && (_0x4b4000 = _0x4aa31e._u8array.slice ? _0x4aa31e._u8array.slice(_0x1ffde3) : _0x4aa31e._u8array.subarray(_0x1ffde3), _0x4aa31e = new _0x863031(_0x4b4000)), _0x4d7024.FS.unlink(_0x5438db), _0x4d7024.FS.unlink(_0x2bd107.startName), _0x4d7024.FS.writeFile(_0x2bd107.startName, _0x4aa31e._u8array);
+ let _0x1ffde3 = _0x4aa31e._u8array.length % 0x400;
+ _0x1ffde3 > 0x0 && (_0x4b4000 = _0x4aa31e._u8array.slice ? _0x4aa31e._u8array.slice(_0x1ffde3) : _0x4aa31e._u8array.subarray(_0x1ffde3), _0x4aa31e = new _0x863031(_0x4b4000)), _0x4d7024.FS.unlink(_0x5438db), _0x4d7024.FS.unlink(startName), _0x4d7024.FS.writeFile(startName, _0x4aa31e._u8array);
}
} catch (_0x2ef20f) {}
} else {
- var _0x4108d8, _0x5e086b, _0x454a20 = new _0x863031(_0x4d7024.FS.readFile(_0x2bd107.startName)),
+ let _0x4108d8, _0x5e086b, _0x454a20 = new _0x863031(_0x4d7024.FS.readFile(startName)),
_0x4991ea = new _0x863031(_0x4d7024.FS.readFile(_0x5438db)),
_0x130f1f = _0x4991ea.readString(0x6);
_0x130f1f.startsWith('PATCH') ? _0x4108d8 = _0x288092(_0x4991ea) : _0x130f1f.startsWith(_0x7a6485) ? _0x4108d8 = _0xd2202f(_0x4991ea) : _0x130f1f.startsWith('BPS1') && (_0x4108d8 = _0x356089(_0x4991ea));
try {
- (_0x5e086b = _0x4108d8.apply(_0x454a20, !0x1)) && (_0x4d7024.FS.unlink(_0x5438db), _0x4d7024.FS.unlink(_0x2bd107.startName), _0x4d7024.FS.writeFile(_0x2bd107.startName, _0x5e086b._u8array));
+ (_0x5e086b = _0x4108d8.apply(_0x454a20, !0x1)) && (_0x4d7024.FS.unlink(_0x5438db), _0x4d7024.FS.unlink(startName), _0x4d7024.FS.writeFile(startName, _0x5e086b._u8array));
} catch (_0x3ed519) {}
}
}
},
_0x4bd781 = function() {
- var key = (_0xa88a13.coreVer===2)?"INITIAL_MEMORY":"TOTAL_MEMORY"
- _0x31a5b3 ? (window.Module[key] = 0x10000000, ['jaguar'].includes(_0xa88a13.system) && (window.Module[key] = 0x10000000), ['nds', 'nes', 'snes', 'arcade', 'mame'].includes(_0xa88a13.system) && (window.Module[key] = 0x0), ['snes2002', 'snes2005', 'snes2010'].includes(_0xa88a13.system) && (window.Module[key] = 0x0), 'gba' == _0xa88a13.system && (window.Module[key] = 0x0), '3do' == _0xa88a13.system && (window.Module[key] = 0x0), 'n64' == _0xa88a13.system && (window.Module[key] = 0x0)) : ('nes' === _0xa88a13.system && (window.Module[key] = 0x8000000), window.Module[key] = _0x468801 + 0x4000000, ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0xa88a13.system) && (window.Module[key] = _0x468801 + 0x10000000, _0x4d7024.isMobileDevice && (window.Module[key] = 0x12c00000)), ['n64', 'nds', 'jaguar'].includes(_0xa88a13.system) && (window.Module[key] = _0x468801 + 0x10000000, _0x4d7024.isMobileDevice && (window.Module[key] = 0x12c00000)), 'gba' == _0xa88a13.system && (window.Module[key] = 0x10000000)), 'undefined' != typeof EJS_MEMORY && (window.Module[key] = EJS_MEMORY);
+ let key = (_this.coreVer===2)?"INITIAL_MEMORY":"TOTAL_MEMORY"
+ _0x31a5b3 ? (window.Module[key] = 0x10000000, ['jaguar'].includes(_this.system) && (window.Module[key] = 0x10000000), ['nds', 'nes', 'snes', 'arcade', 'mame'].includes(_this.system) && (window.Module[key] = 0x0), ['snes2002', 'snes2005', 'snes2010'].includes(_this.system) && (window.Module[key] = 0x0), 'gba' == _this.system && (window.Module[key] = 0x0), '3do' == _this.system && (window.Module[key] = 0x0), 'n64' == _this.system && (window.Module[key] = 0x0)) : ('nes' === _this.system && (window.Module[key] = 0x8000000), window.Module[key] = _0x468801 + 0x4000000, ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_this.system) && (window.Module[key] = _0x468801 + 0x10000000, _0x4d7024.isMobileDevice && (window.Module[key] = 0x12c00000)), ['n64', 'nds', 'jaguar'].includes(_this.system) && (window.Module[key] = _0x468801 + 0x10000000, _0x4d7024.isMobileDevice && (window.Module[key] = 0x12c00000)), 'gba' == _this.system && (window.Module[key] = 0x10000000)), 'undefined' != typeof EJS_MEMORY && (window.Module[key] = EJS_MEMORY);
},
_0x3512e9 = function(_0x1bc287, _0x1844e3) {
- var _0x55627a = _0xa88a13,
+ let _0x55627a = _this,
_0x1cfda7 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
_0x429d6b = (_0x1bc287.split('.').pop(), _0x29078e[_0x1143c5]),
_0xb0c5d8 = -1,
@@ -1420,7 +1409,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x55627a.elements.settings.panels.home.querySelector('[role="menu"]').innerHTML = "";
_0x7f9f36.setNormalOptionsMenu.call(_0x55627a);
_0x7f9f36.setCoreOptionsMenu.call(_0x55627a);
- var mainLoop = _0x4d7024.Module.cwrap('toggleMainLoop', 'null', ['number']);
+ let mainLoop = _0x4d7024.Module.cwrap('toggleMainLoop', 'null', ['number']);
_0x4d7024.Module.resumeMainLoop = function() {
mainLoop(1);
}
@@ -1431,7 +1420,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (typeof _0x55627a.loadStateOnStart == 'string') {
fetch(_0x55627a.loadStateOnStart).then(function(response) {
response.arrayBuffer().then(function(ab) {
- var a = new Uint8Array(ab);
+ let a = new Uint8Array(ab);
EJS_loadState(a);
})
})
@@ -1440,32 +1429,32 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
window.EJS_terminate = function() {
_0x4d7024.Module.pauseMainLoop();
if (_0x55627a && _0x55627a.eventListeners) {
- for (var k in _0x55627a) {
- for (var i=0; i<_0x55627a.eventListeners.length; i++) {
- var a = _0x55627a.eventListeners[i];
+ for (let k in _0x55627a) {
+ for (let i=0; i<_0x55627a.eventListeners.length; i++) {
+ let a = _0x55627a.eventListeners[i];
a.element.removeEventListener(a.type, a.callback, a.capture);
}
}
}
if (window.EJS_RESET_VARS) {
- var a = [];
- var b = [];
- for (var k in window) {
+ let a = [];
+ let b = [];
+ for (let k in window) {
a.push(k);
}
- for (var i=0; i20) clearInterval(j);
i++;
_0x4d7024.Module.setCanvasSize(800, 600);
@@ -1497,7 +1486,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x1cfda7.innerHTML = 'Doesn\'t look like your browser is supported ';
}
}
- var _0x99321 = function(_0x52e6f3) {
+ let _0x99321 = function(_0x52e6f3) {
if (_0x52e6f3.data) {
if (1 === _0x52e6f3.data.t) {
!_0x55627a.startName && _0x567713 && (_0x55627a.startName = _0x567713);
@@ -1505,25 +1494,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
start(_0x55627a.startName);
}
if (2 === _0x52e6f3.data.t) {
- var _0x25aae3 = _0x52e6f3.data.file.split('/'),
+ let _0x25aae3 = _0x52e6f3.data.file.split('/'),
_0x1bc287 = _0x25aae3.pop(),
_0x1844e3 = _0x1bc287.split('.').pop();
_0x1bc287 = _0x1bc287.replace(/\#/g, ''), _0x4d7024.FS.createPath('/', _0x25aae3.join('/'), true, true);
- for (var _0x36bace = _0x1e0766[_0x429d6b].length - 0x1; _0x36bace >= 0x0; _0x36bace -= 0x1) _0x1e0766[_0x429d6b][_0x36bace] === _0x1844e3.toLowerCase() && _0x36bace > _0xb0c5d8 && (_0xb0c5d8 = _0x36bace, _0x55627a.startName = ['', _0x25aae3.join('/'), _0x1bc287].join('/'), _0x55627a.startName = _0x55627a.startName.replace(/\/+/, '/'));
+ for (let _0x36bace = _0x1e0766[_0x429d6b].length - 0x1; _0x36bace >= 0x0; _0x36bace -= 0x1) _0x1e0766[_0x429d6b][_0x36bace] === _0x1844e3.toLowerCase() && _0x36bace > _0xb0c5d8 && (_0xb0c5d8 = _0x36bace, _0x55627a.startName = ['', _0x25aae3.join('/'), _0x1bc287].join('/'), _0x55627a.startName = _0x55627a.startName.replace(/\/+/, '/'));
_0x1bc287 && (_0x4d7024.FS.createDataFile('/' .concat(_0x25aae3.join('/')), _0x1bc287, _0x52e6f3.data.data, true, !0x1), _0x468801 += _0x52e6f3.data.data.length), _0x567713 = '/' .concat(_0x25aae3.join('/'), '/').concat(_0x1bc287);
}
if (4 === _0x52e6f3.data.t && _0x52e6f3.data.total > 0) {
- var _0x163fc4 = Math.floor(_0x52e6f3.data.current / _0x52e6f3.data.total * 100),
+ let _0x163fc4 = Math.floor(_0x52e6f3.data.current / _0x52e6f3.data.total * 100),
_0x5448a3 = _0x52e6f3.data.name || '';
if (_0x163fc4 <= 100 && _0x163fc4 > 0) {
- _0x1cfda7.innerHTML = _0xa88a13.localization('Decompress Game Data')+_0x5448a3+' '+_0x163fc4+'%';
+ _0x1cfda7.innerHTML = _this.localization('Decompress Game Data')+_0x5448a3+' '+_0x163fc4+'%';
}
}
}
},
_0x1e67c4 = false;
if (!['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x55627a.system)) {
- var _0x20a78c = _0x1844e3.slice ? _0x1844e3.slice(0, 10) : _0x1844e3.subarray(0, 10),
+ let _0x20a78c = _0x1844e3.slice ? _0x1844e3.slice(0, 10) : _0x1844e3.subarray(0, 10),
_0x1761cf = isCompressed(_0x20a78c);
if (_0x1761cf === "7z") {
extractFile(_0x17edbf).then(function(_0xea623e) {
@@ -1546,29 +1535,31 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}
if (!_0x1e67c4) {
- var _0x1c661d = _0x1bc287.replace(/\#/g, '');
+ _0x55627a.startName = _0x55627a.getStartName();
+ if (!_0x55627a.startName) {
+ _0x55627a.startName = 'rom';
+ }
try {
_0x468801 += _0x1844e3.length;
- _0x4d7024.FS.createDataFile('/', _0x1c661d, _0x1844e3, true, false);
+ _0x4d7024.FS.createDataFile('/', _0x55627a.startName, _0x1844e3, true, false);
} catch (_0x210043) {
console.log(_0x210043);
}
- _0x55627a.startName = _0x1c661d;
start(_0x55627a.startName);
}
},
_0x5048db = function() {
- var _0x17edbf = _0xa88a13,
+ let _0x17edbf = _this,
_0x2c1832 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
- _0x50eb85 = _0xa88a13.config,
+ _0x50eb85 = _this.config,
_0x3cf3cf = _0x50eb85.gameUrl,
_0x594488 = _0x50eb85.system;
'vbanext' == _0x594488 && (_0x594488 = 'gba');
- var _0x154dc5 = (typeof _0x3cf3cf == 'string') ? _0x3cf3cf.split('/') : "ga.me",
+ let _0x154dc5 = (typeof _0x3cf3cf == 'string') ? _0x3cf3cf.split('/') : "ga.me",
_0x139f1c = _0x154dc5[_0x154dc5.length - 0x1];
_0x139f1c.indexOf('?') > -0x1 && (_0x139f1c = _0x139f1c.substr(0x0, _0x139f1c.indexOf('?')));
_0x139f1c.split('.').pop();
- _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data');
+ _0x2c1832.innerHTML = _this.localization('Download Game Data');
if (['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl) {
_0x2c1832.innerHTML += ' (2/2)';
}
@@ -1588,26 +1579,26 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return;
}
_0x550f17.a.head(_0x3cf3cf, {}).then(function(_0x3d703e) {
- var _0x21b526 = _0x3d703e.headers['content-length'],
+ let _0x21b526 = _0x3d703e.headers['content-length'],
_0x7e8d4c = _0x3d703e.headers['content-type'],
_0x107e8a = (_0x3d703e.headers['last-modified'], '' .concat(_0x594488, '-').concat(_0x139f1c)),
_0x43a689 = function() {
_0x550f17.a.get(_0x3cf3cf, {
'onDownloadProgress': function(_0x4e7133) {
- var _0x13b999 = _0x4e7133.total ? '' .concat(Math.floor(_0x4e7133.loaded / _0x4e7133.total * 0x64), '%') : '';
- ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' ' .concat(_0x13b999);
+ let _0x13b999 = _0x4e7133.total ? '' .concat(Math.floor(_0x4e7133.loaded / _0x4e7133.total * 0x64), '%') : '';
+ ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system) && _0x17edbf.config.gameParentUrl ? _0x2c1832.innerHTML = _this.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x17edbf.config.gamePatchUrl ? _0x2c1832.innerHTML = _this.localization('Download Game Data')+' (2/2) ' .concat(_0x13b999) : _0x2c1832.innerHTML = _this.localization('Download Game Data')+' ' .concat(_0x13b999);
},
'responseType': 'arraybuffer'
}).then(function(_0x22a1f4) {
- var _0x17edbf = new Uint8Array(_0x22a1f4.data);
- if (typeof _0xa88a13.config.gameUrl != 'string' || (typeof _0xa88a13.config.gameUrl == 'string' && (_0xa88a13.config.gameUrl.startsWith('blob:') || _0xa88a13.config.gameUrl.startsWith('file:') || _0xa88a13.config.gameUrl.startsWith('chrome-extension:') || ((window.location.protocol == 'file:' || window.location.protocol == 'chrome-extension:') && _0xa88a13.config.gameUrl.split(':').length === 1)))) {
+ let _0x17edbf = new Uint8Array(_0x22a1f4.data);
+ if (typeof _this.config.gameUrl != 'string' || (typeof _this.config.gameUrl == 'string' && (_this.config.gameUrl.startsWith('blob:') || _this.config.gameUrl.startsWith('file:') || _this.config.gameUrl.startsWith('chrome-extension:') || ((window.location.protocol == 'file:' || window.location.protocol == 'chrome-extension:') && _this.config.gameUrl.split(':').length === 1)))) {
_0x3512e9(_0x139f1c, _0x17edbf);
return;
};
if (_0x107e8a && _0x4e171c.db)
if (_0x17edbf.length > 0x6400000)
- for (var _0x2c1832 = Math.ceil(_0x17edbf.length / 0x6400000), _0x257c4d = 0x0; _0x257c4d < _0x2c1832; _0x257c4d += 0x1) {
- var _0x47d2ae = _0x17edbf.slice ? _0x17edbf.slice(0x6400000 * _0x257c4d, 0x6400000 * (_0x257c4d + 0x1)) : _0x17edbf.subarray(0x6400000 * _0x257c4d, 0x6400000 * (_0x257c4d + 0x1)),
+ for (let _0x2c1832 = Math.ceil(_0x17edbf.length / 0x6400000), _0x257c4d = 0x0; _0x257c4d < _0x2c1832; _0x257c4d += 0x1) {
+ let _0x47d2ae = _0x17edbf.slice ? _0x17edbf.slice(0x6400000 * _0x257c4d, 0x6400000 * (_0x257c4d + 0x1)) : _0x17edbf.subarray(0x6400000 * _0x257c4d, 0x6400000 * (_0x257c4d + 0x1)),
_0x6ce9f3 = '' .concat(_0x107e8a);
_0x257c4d > 0x0 && (_0x6ce9f3 = '' .concat(_0x107e8a, '-part-').concat(_0x257c4d)), _0x4d7024.saveFilenames.push(_0x6ce9f3), _0x4e171c.put(_0x6ce9f3, {
'filename': _0x139f1c,
@@ -1638,7 +1629,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
_0x3512e9(_0x139f1c, _0x17edbf);
}).catch(function(_0x2e4d62) {
- renderErrorPage(_0x2e4d62, _0x2c1832, _0xa88a13);
+ renderErrorPage(_0x2e4d62, _0x2c1832, _this);
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x107e8a, function(_0x5afc4a) {
@@ -1646,9 +1637,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0x4e171c.get(_0x107e8a, function(_0x2585bd) {
_0x2585bd.lastaccess = new Date().valueOf(), _0x4e171c.put(_0x2585bd.key, _0x2585bd);
}), _0x5afc4a.filesize > 0x6400000) {
- var _0x17edbf = new Uint8Array(_0x5afc4a.filesize);
+ let _0x17edbf = new Uint8Array(_0x5afc4a.filesize);
_0x17edbf.set(_0x5afc4a.data);
- for (var _0x2c1832 = Math.ceil(_0x5afc4a.filesize / 0x6400000), _0x36180f = [], _0x3c1e3a = 0x1; _0x3c1e3a < _0x2c1832; _0x3c1e3a += 0x1) _0x36180f.push('' .concat(_0x107e8a, '-part-').concat(_0x3c1e3a)), _0x4e171c.get('' .concat(_0x107e8a, '-part-').concat(_0x3c1e3a), function(_0x4f1393) {
+ for (let _0x2c1832 = Math.ceil(_0x5afc4a.filesize / 0x6400000), _0x36180f = [], _0x3c1e3a = 0x1; _0x3c1e3a < _0x2c1832; _0x3c1e3a += 0x1) _0x36180f.push('' .concat(_0x107e8a, '-part-').concat(_0x3c1e3a)), _0x4e171c.get('' .concat(_0x107e8a, '-part-').concat(_0x3c1e3a), function(_0x4f1393) {
_0x4f1393.lastaccess = new Date().valueOf(), _0x4e171c.put(_0x4f1393.key, _0x4f1393);
});
_0x1ffb98.getBatch(_0x36180f, function(_0x47ffae) {
@@ -1662,41 +1653,41 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x43a689();
}) : _0x43a689();
}).catch(function(_0x5ec6be) {
- renderErrorPage(_0x5ec6be, _0x2c1832, _0xa88a13);
+ renderErrorPage(_0x5ec6be, _0x2c1832, _this);
});
},
_0x139f68 = function() {
- var _0x2591d9 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
- _0x5c896f = _0xa88a13.config.gamePatchUrl;
+ let _0x2591d9 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
+ _0x5c896f = _this.config.gamePatchUrl;
if (_0x5c896f) {
- var _0x227b23 = _0x5c896f.split('/'),
+ let _0x227b23 = _0x5c896f.split('/'),
_0x179b43 = _0x227b23[_0x227b23.length - 0x1];
_0x179b43.indexOf('?') > -0x1 && (_0x179b43 = _0x179b43.substr(0x0, _0x179b43.indexOf('?')));
_0x179b43.split('.').pop();
- _0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)';
+ _0x2591d9.innerHTML = _this.localization('Download Game Data')+' (1/2)';
_0x550f17.a.get(_0x5c896f, {
'onDownloadProgress': function(_0x3da9ab) {
- _0x2591d9.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2) ';
- var _0x17edbf = _0x3da9ab.total ? '' .concat(Math.floor(_0x3da9ab.loaded / _0x3da9ab.total * 0x64), '%') : '';
+ _0x2591d9.innerHTML = _this.localization('Download Game Data')+' (1/2) ';
+ let _0x17edbf = _0x3da9ab.total ? '' .concat(Math.floor(_0x3da9ab.loaded / _0x3da9ab.total * 0x64), '%') : '';
_0x2591d9.innerHTML += _0x17edbf;
},
'responseType': 'arraybuffer'
}).then(function(_0x159ae9) {
- var _0x1097ca = new Uint8Array(_0x159ae9.data),
+ let _0x1097ca = new Uint8Array(_0x159ae9.data),
_0xe531f0 = _0x179b43.split('.').pop(),
_0xf6806b = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
_0x59c7c1 = function(_0x36004e) {
if (_0x36004e.data) {
if (0x1 === _0x36004e.data.t && (_0x36004e.target.terminate(), _0x5048db()), 0x2 === _0x36004e.data.t) {
- var _0x17edbf = _0x36004e.data.file.split('/'),
+ let _0x17edbf = _0x36004e.data.file.split('/'),
_0x2c1832 = _0x17edbf.pop(),
_0x2b320e = _0x2c1832.split('.').pop();
_0x4d7024.FS.createPath('/', _0x17edbf.join('/'), true, true), _0x4d7024.FS.createDataFile('/' + _0x17edbf.join('/'), _0x2c1832, _0x36004e.data.data, true, !0x1), _0x468801 += _0x36004e.data.data.length, ['ips', 'bps', 'ups'].includes(_0x2b320e) && !_0x4d7024.gamePatch && (_0x4d7024.gamePatch = '/' + _0x17edbf.join('/') + '/' + _0x2c1832);
}
if (0x4 === _0x36004e.data.t && _0x36004e.data.total > 0x0) {
- var _0x1097ca = Math.floor(_0x36004e.data.current / _0x36004e.data.total * 0x64),
+ let _0x1097ca = Math.floor(_0x36004e.data.current / _0x36004e.data.total * 0x64),
_0x95ac83 = _0x36004e.data.name || '';
- _0x1097ca <= 0x64 && _0x1097ca > 0x0 && (_0xf6806b.innerHTML = _0xa88a13.localization('Decompress Game Patch')+' ' .concat(_0x95ac83, ' ').concat(_0x1097ca, '%'));
+ _0x1097ca <= 0x64 && _0x1097ca > 0x0 && (_0xf6806b.innerHTML = _this.localization('Decompress Game Patch')+' ' .concat(_0x95ac83, ' ').concat(_0x1097ca, '%'));
}
}
},
@@ -1724,36 +1715,36 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x5048db();
}
}).catch(function(_0x314293) {
- renderErrorPage(_0x314293, _0x2c1832, _0xa88a13);
+ renderErrorPage(_0x314293, _0x2c1832, _this);
});
} else _0x5048db();
},
_0x452592 = function() {
- var _0x17edbf = _0xa88a13,
+ let _0x17edbf = _this,
_0x2c1832 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p3)),
- _0x5a21f7 = _0xa88a13.config.gameParentUrl;
+ _0x5a21f7 = _this.config.gameParentUrl;
if (_0x5a21f7 && ['arcade', 'mame', 'mame2003', 'fba0.2.97.29'].includes(_0x17edbf.system)) {
- var _0x71bb4d = _0x5a21f7.split('/'),
+ let _0x71bb4d = _0x5a21f7.split('/'),
_0xa1889f = _0x71bb4d[_0x71bb4d.length - 0x1];
_0xa1889f.indexOf('?') > -0x1 && (_0xa1889f = _0xa1889f.substr(0x0, _0xa1889f.indexOf('?')));
_0xa1889f.split('.').pop();
- _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2)', _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/3)'), _0x550f17.a.head(_0x5a21f7, {}).then(function(_0x35c23a) {
- var _0x17edbf = _0x35c23a.headers['content-length'],
+ _0x2c1832.innerHTML = _this.localization('Download Game Data')+' (1/2)', _0x17edbf.config.gamePatchUrl && (_0x2c1832.innerHTML = _this.localization('Download Game Data')+' (1/3)'), _0x550f17.a.head(_0x5a21f7, {}).then(function(_0x35c23a) {
+ let _0x17edbf = _0x35c23a.headers['content-length'],
_0x500ba1 = _0x35c23a.headers['content-type'],
_0x316472 = (_0x35c23a.headers['last-modified'], '' .concat(_0x1143c5, '-').concat(_0xa1889f)),
_0x31f098 = function() {
_0x550f17.a.get(_0x5a21f7, {
'onDownloadProgress': function(_0x5e449f) {
- var _0x17edbf = _0x5e449f.total ? '' .concat(Math.floor(_0x5e449f.loaded / _0x5e449f.total * 0x64), '%') : '';
- _0x2c1832.innerHTML = _0xa88a13.localization('Download Game Data')+' (1/2) ' .concat(_0x17edbf);
+ let _0x17edbf = _0x5e449f.total ? '' .concat(Math.floor(_0x5e449f.loaded / _0x5e449f.total * 0x64), '%') : '';
+ _0x2c1832.innerHTML = _this.localization('Download Game Data')+' (1/2) ' .concat(_0x17edbf);
},
'responseType': 'arraybuffer'
}).then(function(_0x191007) {
- var _0x17edbf = new Uint8Array(_0x191007.data);
+ let _0x17edbf = new Uint8Array(_0x191007.data);
if (_0x316472 && _0x4e171c.db)
if (_0x17edbf.length > 0x6400000)
- for (var _0x2c1832 = Math.ceil(_0x17edbf.length / 0x6400000), _0x3f44d7 = 0x0; _0x3f44d7 < _0x2c1832; _0x3f44d7 += 0x1) {
- var _0x15a529 = _0x17edbf.slice ? _0x17edbf.slice(0x6400000 * _0x3f44d7, 0x6400000 * (_0x3f44d7 + 0x1)) : _0x17edbf.subarray(0x6400000 * _0x3f44d7, 0x6400000 * (_0x3f44d7 + 0x1)),
+ for (let _0x2c1832 = Math.ceil(_0x17edbf.length / 0x6400000), _0x3f44d7 = 0x0; _0x3f44d7 < _0x2c1832; _0x3f44d7 += 0x1) {
+ let _0x15a529 = _0x17edbf.slice ? _0x17edbf.slice(0x6400000 * _0x3f44d7, 0x6400000 * (_0x3f44d7 + 0x1)) : _0x17edbf.subarray(0x6400000 * _0x3f44d7, 0x6400000 * (_0x3f44d7 + 0x1)),
_0x4a61f1 = '' .concat(_0x316472);
_0x3f44d7 > 0x0 && (_0x4a61f1 = '' .concat(_0x316472, '-part-').concat(_0x3f44d7)), _0x4d7024.saveFilenames.push(_0x4a61f1), _0x4e171c.put(_0x4a61f1, {
'filename': _0xa1889f,
@@ -1782,22 +1773,22 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'key': _0x316472,
'data': _0x17edbf
});
- var _0x54d79 = _0xa1889f.replace(/\#/g, '');
+ let _0x54d79 = _0xa1889f.replace(/\#/g, '');
try {
_0x468801 += _0x17edbf.length, _0x4d7024.FS.createDataFile('/', _0x54d79, _0x17edbf, true, !0x1), _0x139f68();
} catch (_0x125736) {
console.log(_0x125736);
}
}).catch(function(_0x516cc3) {
- renderErrorPage(_0x516cc3, _0x2c1832, _0xa88a13);
+ renderErrorPage(_0x516cc3, _0x2c1832, _this);
});
};
_0x1ffb98.db ? _0x1ffb98.get(_0x316472, function(_0x3e612b) {
if (_0x3e612b && _0x3e612b.filename === _0xa1889f && _0x3e612b.filesize - _0x17edbf == 0x0 && _0x3e612b.filetype === _0x500ba1 && _0x3e612b.key)
if (_0x3e612b.filesize > 0x6400000) {
- var _0x2c1832 = new Uint8Array(_0x3e612b.filesize);
+ let _0x2c1832 = new Uint8Array(_0x3e612b.filesize);
_0x2c1832.set(_0x3e612b.data);
- for (var _0xa2197 = Math.ceil(_0x3e612b.filesize / 0x6400000), _0x6f30ae = [], _0x32aa3c = 0x1; _0x32aa3c < _0xa2197; _0x32aa3c += 0x1) _0x6f30ae.push('' .concat(_0x316472, '-part-').concat(_0x32aa3c));
+ for (let _0xa2197 = Math.ceil(_0x3e612b.filesize / 0x6400000), _0x6f30ae = [], _0x32aa3c = 0x1; _0x32aa3c < _0xa2197; _0x32aa3c += 0x1) _0x6f30ae.push('' .concat(_0x316472, '-part-').concat(_0x32aa3c));
_0x1ffb98.getBatch(_0x6f30ae, function(_0x198a02) {
_0x198a02.filter(function(_0x1c8a88) {
return _0x1c8a88;
@@ -1809,12 +1800,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
else _0x31f098();
}) : _0x31f098();
}).catch(function(_0x20f2e3) {
- renderErrorPage(_0x20f2e3, _0x2c1832, _0xa88a13);
+ renderErrorPage(_0x20f2e3, _0x2c1832, _this);
});
} else _0x139f68();
},
_0x57d85d = function(_0x5e7c8b, _0x3cff36) {
- var _0x3ea97 = _0xa88a13,
+ let _0x3ea97 = _this,
_0x50119 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p2)),
_0x19a43e = (_0x5e7c8b.split('.').pop(), function(_0x1e8643) {
if (_0x1e8643.data) {
@@ -1824,7 +1815,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x452592();
}
if (2 === _0x1e8643.data.t) {
- var _0x17edbf = _0x1e8643.data.file.split('/'),
+ let _0x17edbf = _0x1e8643.data.file.split('/'),
_0x2c1832 = _0x17edbf.pop();
_0x2c1832.split('.').pop();
_0x4d7024.FS.createPath('/', _0x17edbf.join('/'), true, true);
@@ -1832,7 +1823,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x468801 += _0x1e8643.data.data.length;
}
if (4 === _0x1e8643.data.t && _0x1e8643.data.total > 0) {
- var _0x149f09 = Math.floor(_0x1e8643.data.current / _0x1e8643.data.total * 0x64),
+ let _0x149f09 = Math.floor(_0x1e8643.data.current / _0x1e8643.data.total * 0x64),
_0x5e7c8b = _0x1e8643.data.name || '';
_0x149f09 <= 0x64 && _0x149f09 > 0x0 && (_0x50119.innerHTML = 'Decompress BIOS ' .concat(_0x5e7c8b, ' ').concat(_0x149f09, '%'));
}
@@ -1864,17 +1855,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
_0x10b71a = function() {
_0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1)).innerHTML = 'Game Core ready';
- var _0x17edbf = _0xa88a13.config.biosUrl,
- _0x2c1832 = _0xa88a13;
- _0xdcec2a.bindFunction.call(_0xa88a13);
- _0xdcec2a.setGamepadDialog.call(_0xa88a13);
- _0xdcec2a.setCacheDialog.call(_0xa88a13);
- _0xdcec2a.setLoadingDialog.call(_0xa88a13);
- //_0xdcec2a.setNetplayDialog.call(_0xa88a13);
- _0xdcec2a.setCheatDialog.call(_0xa88a13);
- _0xdcec2a.initGamepad.call(_0xa88a13);
- _0xdcec2a.initKeyboard.call(_0xa88a13);
- _0xdcec2a.listeners.call(_0xa88a13);
+ let _0x17edbf = _this.config.biosUrl;
+ _0xdcec2a.bindFunction.call(_this);
+ _0xdcec2a.setGamepadDialog.call(_this);
+ _0xdcec2a.setCacheDialog.call(_this);
+ _0xdcec2a.setLoadingDialog.call(_this);
+ //_0xdcec2a.setNetplayDialog.call(_this);
+ _0xdcec2a.setCheatDialog.call(_this);
+ _0xdcec2a.initGamepad.call(_this);
+ _0xdcec2a.initKeyboard.call(_this);
+ _0xdcec2a.listeners.call(_this);
_0x4d7024._FS.createFolder('/', 'etc', true, true);
_0x4d7024.FS.mkdir('/data');
_0x4d7024.FS.mkdir('/data/saves');
@@ -1882,7 +1872,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4d7024.FS.mkdir('/shader');
_0x4d7024.FS.syncfs(true, function(_0x1a8f12) {});
_0xdcec2a.initShaders();
- var _0x14d39f = '';
+ let _0x14d39f = '';
_0x14d39f += 'savefile_directory = /data/saves\n';
_0x14d39f += 'video_vsync = true\n';
_0x14d39f += 'screenshot_directory = /\n';
@@ -1892,16 +1882,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x14d39f += 'video_scale = 1.0\n';
_0x14d39f += 'video_gpu_screenshot = false\n';
_0x14d39f += 'audio_latency = 96\n';
- var _0x36edb7 = _0x2593da.defaultCoreOptionsValues.call(_0xa88a13);
- _0x2c1832.lightgun && ('nes' === _0xa88a13.system && (_0x14d39f += 'input_libretro_device_p2 = "258"\n'), 'segaMS' !== _0xa88a13.system && 'segaMD' !== _0xa88a13.system && 'segaCD' !== _0xa88a13.system || (_0x36edb7.genesis_plus_gx_gun_cursor = 'yes', _0x36edb7.genesis_plus_gx_invert_mouse = 'yes', _0x36edb7.genesis_plus_gx_bram = 'per game', _0x14d39f += 'input_libretro_device_p2 = "260"\n'), 'snes' === _0xa88a13.system && (_0x14d39f += 'input_libretro_device_p2 = "260"\n'), ['snes2002', 'snes2005', 'snes2010', 'snesnext'].includes(_0xa88a13.system) && (_0x14d39f += 'input_libretro_device_p2 = "260"\n'));
- _0x2c1832.mouse && ('snes' === _0xa88a13.system && (_0x14d39f += 'input_libretro_device_p1 = 2\n'), ['snes2002', 'snes2005', 'snes2010', 'snesnext'].includes(_0xa88a13.system) && (_0x14d39f += 'input_libretro_device_p1 = 2\n'));
- _0x2c1832.multitap && (['snes2002', 'snes2005', 'snes2010', 'snesnext', 'snes'].includes(_0xa88a13.system) && (_0x14d39f += 'input_libretro_device_p2 = 257\n'));
- 'n64' === _0xa88a13.system && (_0x14d39f += 'input_libretro_device_p1 = 5\n');
+ let _0x36edb7 = _0x2593da.defaultCoreOptionsValues.call(_this);
+ _this.lightgun && ('nes' === _this.system && (_0x14d39f += 'input_libretro_device_p2 = "258"\n'), 'segaMS' !== _this.system && 'segaMD' !== _this.system && 'segaCD' !== _this.system || (_0x36edb7.genesis_plus_gx_gun_cursor = 'yes', _0x36edb7.genesis_plus_gx_invert_mouse = 'yes', _0x36edb7.genesis_plus_gx_bram = 'per game', _0x14d39f += 'input_libretro_device_p2 = "260"\n'), 'snes' === _this.system && (_0x14d39f += 'input_libretro_device_p2 = "260"\n'), ['snes2002', 'snes2005', 'snes2010', 'snesnext'].includes(_this.system) && (_0x14d39f += 'input_libretro_device_p2 = "260"\n'));
+ _this.mouse && ('snes' === _this.system && (_0x14d39f += 'input_libretro_device_p1 = 2\n'), ['snes2002', 'snes2005', 'snes2010', 'snesnext'].includes(_this.system) && (_0x14d39f += 'input_libretro_device_p1 = 2\n'));
+ _this.multitap && (['snes2002', 'snes2005', 'snes2010', 'snesnext', 'snes'].includes(_this.system) && (_0x14d39f += 'input_libretro_device_p2 = 257\n'));
+ 'n64' === _this.system && (_0x14d39f += 'input_libretro_device_p1 = 5\n');
_0x14d39f += 'fastforward_ratio = 1.0\n';
_0x14d39f += 'video_smooth = false\n';
- var _0x55117c = _0x5dc0c0(_0x36edb7, _0x2593da.storage.get('core-options') || {}),
+ let _0x55117c = _0x5dc0c0(_0x36edb7, _0x2593da.storage.get('core-options') || {}),
_0x32dd27 = '';
- if (_0x2c1832.coreVer === 2) {
+ if (_this.coreVer === 2) {
_0x4d7024.FS.createDataFile('/etc', 'retroarch.cfg', _0x14d39f, true, true);
_0x4d7024._FS.createFolder('/home/web_user', 'retroarch', true, true);
_0x4d7024._FS.createFolder('/home/web_user/retroarch', 'userdata', true, true);
@@ -1913,29 +1903,29 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4d7024.FS.createDataFile('/home/web_user/.config/retroarch', 'retroarch-core-options.cfg', _0x32dd27, true, true);
}
if (_0x55117c && Object.keys(_0x55117c).forEach(function(_0x2950d3) {
- if (_0x2c1832.lightgun && 'nes' === _0x2c1832.system && 'system_type' === _0x2950d3) return !0x1;
- _0x32dd27 += '' .concat(_0x2950d3, ' = "').concat(_0x55117c[_0x2950d3], '"\n'), _0x1093f4.call(_0x2c1832, _0x2c1832.elements.container, 'start-game', function(_0x362c5c) {
+ if (_this.lightgun && 'nes' === _this.system && 'system_type' === _0x2950d3) return !0x1;
+ _0x32dd27 += '' .concat(_0x2950d3, ' = "').concat(_0x55117c[_0x2950d3], '"\n'), _0x1093f4.call(_this, _this.elements.container, 'start-game', function(_0x362c5c) {
_0xdcec2a.setVariable(_0x2950d3, _0x55117c[_0x2950d3]);
});
}), _0x17edbf) {
- var _0x12e137 = _0x17edbf.split('/'),
+ let _0x12e137 = _0x17edbf.split('/'),
_0x103241 = _0x12e137[_0x12e137.length - 0x1];
_0x103241.indexOf('?') > -0x1 && (_0x103241 = _0x103241.substr(0x0, _0x103241.indexOf('?')));
_0x103241.split('.').pop();
- var _0x1f8424 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p2));
+ let _0x1f8424 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p2));
_0x550f17.a.head(_0x17edbf, {}).then(function(_0x4bd3bd) {
- var _0x8e30bf = _0x4bd3bd.headers['content-length'],
+ let _0x8e30bf = _0x4bd3bd.headers['content-length'],
_0x14309b = _0x4bd3bd.headers['content-type'],
- _0x51bfef = (_0x4bd3bd.headers['last-modified'], _0x2c1832.system),
+ _0x51bfef = (_0x4bd3bd.headers['last-modified'], _this.system),
_0x574747 = function() {
_0x550f17.a.get(_0x17edbf, {
'onDownloadProgress': function(_0x107517) {
- var _0x17edbf = _0x107517.total ? '' .concat(Math.floor(_0x107517.loaded / _0x107517.total * 0x64), '%') : '';
+ let _0x17edbf = _0x107517.total ? '' .concat(Math.floor(_0x107517.loaded / _0x107517.total * 0x64), '%') : '';
_0x1f8424.innerHTML = 'Download BIOS ' .concat(_0x17edbf);
},
'responseType': 'arraybuffer'
}).then(function(_0x4b0c1d) {
- var _0x17edbf = new Uint8Array(_0x4b0c1d.data);
+ let _0x17edbf = new Uint8Array(_0x4b0c1d.data);
_0xa884ea.db && _0xa884ea.put(_0x1143c5, {
'filename': _0x103241,
'filesize': _0x17edbf.length,
@@ -1943,23 +1933,23 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'data': _0x17edbf
}), _0x57d85d(_0x103241, _0x17edbf);
}).catch(function(_0x58e374) {
- renderErrorPage(_0x58e374, _0x1f8424, _0xa88a13);
+ renderErrorPage(_0x58e374, _0x1f8424, _this);
});
};
_0xa884ea.db ? _0xa884ea.get(_0x51bfef, function(_0x5cac21) {
_0x5cac21 && _0x5cac21.filename === _0x103241 && _0x5cac21.filesize - _0x8e30bf == 0x0 && _0x5cac21.filetype === _0x14309b ? _0x57d85d(_0x5cac21.filename, _0x5cac21.data) : _0x574747();
}) : _0x574747();
}).catch(function(_0x4f39c1) {
- renderErrorPage(_0x4f39c1, _0x1f8424, _0xa88a13);
+ renderErrorPage(_0x4f39c1, _0x1f8424, _this);
});
} else _0x452592();
},
_0x29b999 = function(_0x172278) {
- var _0x17edbf;
+ let _0x17edbf;
_0x17edbf = _0x172278.byteLength ? new Uint8Array(_0x172278) : _0x172278, 'undefined' != typeof GLOBAL_BASE ? _0x4d7024.Module.HEAPU8.set(_0x17edbf, GLOBAL_BASE) : 'undefined' != typeof Runtime && Runtime.GLOBAL_BASE ? _0x4d7024.Module.HEAPU8.set(_0x17edbf, Runtime.GLOBAL_BASE) : _0x4d7024.Module.HEAPU8.set(_0x17edbf, 0x8);
},
_0x4f0fcc = function(_0x18cb26) {
- var _0x2c1832 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1)),
+ let _0x2c1832 = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1)),
_0x247459 = '',
_0x54d695 = function() {
null !== _0x4d7024.wasmData ? (window.Module.wasmBinary = _0x4d7024.wasmData, _0x4bd781(), window.Module.monitorRunDependencies = function(_0x59580a) {
@@ -1969,9 +1959,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, window.Module.onRuntimeInitialized = function() {
_0x4d7024.Module || (_0x4d7024.Module = window.Module), _0x4d7024.Module && _0x4d7024.Module.FS ? _0x4d7024.FS = _0x4d7024.Module.FS : _0x4d7024.FS = window.FS, console.log('onRuntimeInitialized'), _0x10b71a();
});
- var _0x18cb26 = window.Module;
+ let _0x18cb26 = window.Module;
if (null !== _0x4d7024.wasmData && (_0x18cb26.wasmBinary = _0x4d7024.wasmData), _0x59aa33.isIos && null !== _0x4d7024.wasmData) {
- var _0x17edbf = new Blob([_0x247459], {
+ let _0x17edbf = new Blob([_0x247459], {
'type': 'text/javascript'
}),
_0x2c1832 = _0x428003('script', {
@@ -1985,8 +1975,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
};
} else {
_0x247459 = function(_0x3df03e) {
- for (var _0x17edbf = [], _0x2c1832 = 0x0; _0x2c1832 < _0x3df03e.length; _0x2c1832 += 0x1) {
- var _0xcf0289 = _0x3df03e[_0x2c1832];
+ let _0x17edbf = [];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x3df03e.length; _0x2c1832 += 0x1) {
+ let _0xcf0289 = _0x3df03e[_0x2c1832];
_0xcf0289 > 0xff && (_0xcf0289 &= 0xff), _0x17edbf.push(String.fromCharCode(_0xcf0289));
}
return _0x17edbf.join('');
@@ -2005,14 +1996,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x1093f4.call(_0xc6823, _0xc6823.elements.container, 'script-loaded', function(_0x467eee) {
_0x54d695();
});
- var _0x21d6a1 = function(_0x3f49ec) {
+ let _0x21d6a1 = function(_0x3f49ec) {
if (_0x3f49ec.data) {
if (0x1 === _0x3f49ec.data.t && (_0xbae705.call(_0xc6823, _0xc6823.elements.container, 'script-loaded'), _0x3f49ec.target.terminate()), 0x2 === _0x3f49ec.data.t) {
- var _0x17edbf = _0x3f49ec.data.file.split('/').pop(),
+ let _0x17edbf = _0x3f49ec.data.file.split('/').pop(),
_0x58b5a7 = _0x17edbf.split('.').pop();
_0x4d7024.coreFileData[_0x17edbf] = _0x3f49ec.data.data, 'js' !== _0x58b5a7 || _0x17edbf.includes('.worker.js') || (_0x247459 = _0x3f49ec.data.data), 'mem' === _0x58b5a7 && (_0x4d7024.memData = _0x3f49ec.data.data), 'wasm' === _0x58b5a7 && (_0x4d7024.wasmData = _0x3f49ec.data.data);
}
- 0x4 === _0x3f49ec.data.t && _0x3f49ec.data.total > 0x0 && (_0x2c1832.innerHTML = _0xa88a13.localization('Decompress Game Core')+' ' .concat(Math.floor(_0x3f49ec.data.current / _0x3f49ec.data.total * 0x64), '%'));
+ 0x4 === _0x3f49ec.data.t && _0x3f49ec.data.total > 0x0 && (_0x2c1832.innerHTML = _this.localization('Decompress Game Core')+' ' .concat(Math.floor(_0x3f49ec.data.current / _0x3f49ec.data.total * 0x64), '%'));
}
};
extractFile(_0x17edbf).then(function(_0x48c633) {
@@ -2020,11 +2011,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x48c633.postMessage(_0x18cb26);
});
},
- _this = this,
_0x26d6a1 = function(_0x3787ba) {
_0x132da7(_0x4d7024.loading.querySelector('.' .concat(_0x4fce24['start-game'])), true);
- var _0x3787ba = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1));
- _0x3787ba.innerHTML = _this.localization('Loading')+'...';
+ let status = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1));
+ status.innerHTML = _this.localization('Loading')+'...';
if (!(true === _0x528f2b && true === _0x547484 && true === _0x5e24fa)) {
setTimeout(_0x26d6a1, 50);
@@ -2050,10 +2040,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'totalDependencies': 0,
'monitorRunDependencies': function(_0x5d4b07) {},
'locateFile': function(_0x3fe7ca) {
- var _0x3787ba = null;
+ let _0x3787ba = null;
if (_0x3fe7ca.includes('.worker.js')) {
Object.keys(_0x4d7024.coreFileData).includes(_0x3fe7ca) && (_0x3787ba = _0x4d7024.coreFileData[_0x3fe7ca]);
- var _0x2c1832 = new Blob([''], {
+ let _0x2c1832 = new Blob([''], {
'type': 'application/javascript'
});
return window.URL.createObjectURL(_0x2c1832);
@@ -2069,7 +2059,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x9d2de4(_0x20d016);
}, 500);
else {
- var _0x164012 = new XMLHttpRequest();
+ let _0x164012 = new XMLHttpRequest();
_0x164012.open('GET', _0x20d016, true);
_0x164012.responseType = 'arraybuffer';
_0x164012.onload = function() {
@@ -2084,16 +2074,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}
};
- var _0x3641d6 = function(_0x16049b, _0x55a075) {
- var path = (_this.customPaths && typeof _this.customPaths[_0x16049b] == 'string') ? _this.customPaths[_0x16049b] : ((_this.coreVer === 2) ? (_this.dataPath+'cores/'+_0x16049b+'?v='+_0x55a075) : (_this.dataPath+'old/'+_0x16049b+'?v='+_0x55a075));
+ let _0x3641d6 = function(_0x16049b, _0x55a075) {
+ let path = (_this.customPaths && typeof _this.customPaths[_0x16049b] == 'string') ? _this.customPaths[_0x16049b] : ((_this.coreVer === 2) ? (_this.dataPath+'cores/'+_0x16049b+'?v='+_0x55a075) : (_this.dataPath+'old/'+_0x16049b+'?v='+_0x55a075));
_0x550f17.a.get(path, {
'onDownloadProgress': function(e) {
- var progress = e.total ? Math.floor(e.loaded / e.total * 100).toString()+'%' : '';
- _0x3787ba.innerHTML = _this.localization('Download Game Core')+_0x55a075;
+ let progress = e.total ? Math.floor(e.loaded / e.total * 100).toString()+'%' : '';
+ status.innerHTML = _this.localization('Download Game Core')+_0x55a075;
},
'responseType': 'arraybuffer'
}).then(function(e) {
- var data = new Uint8Array(e.data);
+ let data = new Uint8Array(e.data);
_0x24de8d.db && _0x24de8d.put(_0x16049b, {
'version': _0x55a075,
'data': data
@@ -2101,30 +2091,30 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_this.coreVer === 2) {
_0x4f0fcc(data);
} else {
- var data1 = data.slice ? data.slice(12) : data.subarray(12);
+ let data1 = data.slice ? data.slice(12) : data.subarray(12);
data1.set([55, 122, 188, 175, 39, 28, 0, 3], 0);
data = null;
_0x4f0fcc(data1);
}
}).catch(function(e) {
- renderErrorPage(e, _0x3787ba, _this);
+ renderErrorPage(e, status, _this);
});
};
- var _0xa88a13 = (_this.customPaths && typeof _this.customPaths['v.json'] == 'string') ? _this.customPaths['v.json'] : (_this.dataPath + 'v.json');
- _0x550f17.a.get(_0xa88a13, {}).then(function(e) {
- var _0x2458d5, _0x5d075f = _0x29078e[_this.system],
+ let vJson = (_this.customPaths && typeof _this.customPaths['v.json'] == 'string') ? _this.customPaths['v.json'] : (_this.dataPath + 'v.json');
+ _0x550f17.a.get(vJson, {}).then(function(e) {
+ let _0x2458d5, _0x5d075f = _0x29078e[_this.system],
_0x28ee7f = e.data[_this.system];
+ let status = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1));
if (!_0x28ee7f) {
status.innerHTML = ''+_this.localization('Invalid System')+' ';
return;
}
- var _0x124167 = _0x28ee7f.version ? _0x28ee7f.version : 1,
+ let _0x124167 = _0x28ee7f.version ? _0x28ee7f.version : 1,
//_0x254bc2 = Boolean(_0x28ee7f.netplay),
_0x5b1dcd = Boolean(_0x28ee7f.state),
_0x9a1f1 = Boolean(_0x28ee7f.asmjs),
_0x3e4345 = Boolean(_0x28ee7f.wasm);
- var status = _0x4d7024.loading.querySelector('.' .concat(_0x4fce24.p1));
if (!(_this.config.oldCores === true && _0x28ee7f.oldCores === 1) && _0x28ee7f.newCores === 1 && (_0x2d904a.wasm || _0x9a1f1) && !(_0x4d7024.isMobileDevice && _0x28ee7f.oldCores === 1)) {
_this.coreVer = 2;
delete Module.readAsync;
@@ -2146,16 +2136,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
};
_0x4d7024.coreFileVersion = _0x124167;
_0x4d7024.coreFileName = _0x5d075f;
- var _0x2eb141 = false;
+ let _0x2eb141 = false;
['webgl2', 'experimental-webgl2'].includes(_0x2d904a.webgl.WEBGL_CONTEXT) && (_0x2eb141 = true);
'undefined' != typeof EJS_N64_LEGACY && 0x1 == EJS_N64_LEGACY && (_0x2eb141 = !0x1);
if ('mame' == _this.system) {
- var data = _this.mameCore;
+ let data = _this.mameCore;
if (! data || data === null || data.split('|').length !== 2) {
status.innerHTML = ''+_this.localization('Missing mame config')+' ';
return;
}
- var _0x3787ba = data.split('|');
+ let _0x3787ba = data.split('|');
_0x4d7024.coreFileName = ''.concat(_this.system, '-').concat(_0x3787ba[0x0]);
_0x5b1dcd = '1' === _0x3787ba[1];
_0x1e2c68.element(_this.elements.buttons.saveState) && _0x132da7(_this.elements.buttons.saveState, !_0x5b1dcd);
@@ -2172,7 +2162,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0xc6823.coreVer === 2) {
_0x4f0fcc(_0x655c87.data);
} else {
- var _0x3787ba = _0x655c87.data.slice ? _0x655c87.data.slice(0xc) : _0x655c87.data.subarray(0xc);
+ let _0x3787ba = _0x655c87.data.slice ? _0x655c87.data.slice(0xc) : _0x655c87.data.subarray(0xc);
_0x3787ba.set([55, 122, 188, 175, 39, 28, 0, 3], 0);
_0x4f0fcc(_0x3787ba);
}
@@ -2180,7 +2170,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}) : _0x3641d6(_0x2458d5, _0x124167))) : status.innerHTML = ''+_this.localization('Unsupported Game')+' ';
} else {
_0x2458d5 = false;
- var type;
+ let type;
if (_0x2d904a.wasm && _0x3e4345) {
type = 'wasm';
_0x2458d5 = true;
@@ -2211,7 +2201,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0xc6823.coreVer === 2) {
_0x4f0fcc(_0x47a6fd.data);
} else {
- var _0x3787ba = _0x47a6fd.data.slice ? _0x47a6fd.data.slice(12) : _0x47a6fd.data.subarray(12);
+ let _0x3787ba = _0x47a6fd.data.slice ? _0x47a6fd.data.slice(12) : _0x47a6fd.data.subarray(12);
_0x3787ba.set([55, 122, 188, 175, 39, 28, 0, 3], 0);
_0x4f0fcc(_0x3787ba);
}
@@ -2223,7 +2213,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x1e2c68.element(_this.elements.buttons.loadState) && _0x132da7(_this.elements.buttons.loadState, !_0x5b1dcd);
_0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(2), !_0x5b1dcd);
_0x132da7(_0x2593da.contextMenu.querySelectorAll('ul li').item(3), !_0x5b1dcd);
- _0xc6823.setStatesSupported(_0x5b1dcd);
+ _this.statesSupported = _0x5b1dcd;
if (_this.config.buttons) {
if (_this.config.buttons.playPause === false) {
@@ -2278,20 +2268,18 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x4d7024.romdb = _0x4e171c;
return false;
};
-
-
_0x455c85(_0x4d7024.loading.querySelector('.' .concat(_0x4fce24['start-game'])), 'click touchstart', _0x26d6a1);
if (_0xc6823.startOnLoad === true) {
_0x4d7024.loading.querySelector('.' .concat(_0x4fce24['start-game'])).click();
}
}
- },
- _0x27f4c4 = _0x4d7024;
+ }
+ let _0x27f4c4 = _0x4d7024;
function _0x3c0613(_0x3eef01) {
return function(_0x3d9b1e) {
if (Array.isArray(_0x3d9b1e)) {
- for (var _0x17edbf = 0x0, _0x2c1832 = new Array(_0x3d9b1e.length); _0x17edbf < _0x3d9b1e.length; _0x17edbf++) _0x2c1832[_0x17edbf] = _0x3d9b1e[_0x17edbf];
+ for (let _0x17edbf = 0x0, _0x2c1832 = new Array(_0x3d9b1e.length); _0x17edbf < _0x3d9b1e.length; _0x17edbf++) _0x2c1832[_0x17edbf] = _0x3d9b1e[_0x17edbf];
return _0x2c1832;
}
}(_0x3eef01) || function(_0x425c1a) {
@@ -2302,14 +2290,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
function _0xa08ac0(_0x514af5, _0x4089be) {
- for (var _0x2c1832 = 0x0; _0x2c1832 < _0x4089be.length; _0x2c1832++) {
- var _0x3347c8 = _0x4089be[_0x2c1832];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x4089be.length; _0x2c1832++) {
+ let _0x3347c8 = _0x4089be[_0x2c1832];
_0x3347c8.enumerable = _0x3347c8.enumerable || !0x1, _0x3347c8.configurable = true, 'value' in _0x3347c8 && (_0x3347c8.writable = true), Object.defineProperty(_0x514af5, _0x3347c8.key, _0x3347c8);
}
}
- var _0x1eda08, _0x4fc27f, _0xf43a92, _0x214f42, _0x3a9bfc, _0x4d8495 = (_0x1eda08 = ['a[href]', 'area[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'], _0x4fc27f = function() {
+ let _0x1eda08, _0x4fc27f, _0xf43a92, _0x214f42, _0x3a9bfc, _0x4d8495 = (_0x1eda08 = ['a[href]', 'area[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'], _0x4fc27f = function() {
function _0x5566a2(_0x1fcb21) {
- var _0x2c1832 = _0x1fcb21.targetModal,
+ let _0x2c1832 = _0x1fcb21.targetModal,
_0x29e6ab = _0x1fcb21.triggers,
_0x114128 = void 0x0 === _0x29e6ab ? [] : _0x29e6ab,
_0x5211ae = _0x1fcb21.onShow,
@@ -2344,11 +2332,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'closeByEsckey': _0x54de6a
}, _0x114128.length > 0x0 && this.registerTriggers.apply(this, _0x3c0613(_0x114128)), this.onClick = this.onClick.bind(this), this.onKeydown = this.onKeydown.bind(this);
}
- var _0x17edbf, _0x2c1832, _0x5021cc;
+ let _0x17edbf, _0x2c1832, _0x5021cc;
return _0x17edbf = _0x5566a2, (_0x2c1832 = [{
'key': 'registerTriggers',
'value': function() {
- for (var _0x5566a2 = this, _0x17edbf = arguments.length, _0x2c1832 = new Array(_0x17edbf), _0x4e24fa = 0x0; _0x4e24fa < _0x17edbf; _0x4e24fa++) _0x2c1832[_0x4e24fa] = arguments[_0x4e24fa];
+ for (let _0x5566a2 = this, _0x17edbf = arguments.length, _0x2c1832 = new Array(_0x17edbf), _0x4e24fa = 0x0; _0x4e24fa < _0x17edbf; _0x4e24fa++) _0x2c1832[_0x4e24fa] = arguments[_0x4e24fa];
_0x2c1832.forEach(function(_0x511ded) {
_0x511ded.addEventListener('click', function() {
return _0x5566a2.showModal();
@@ -2365,7 +2353,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'closeModal',
'value': function() {
- var _0x5566a2 = this.modal;
+ let _0x5566a2 = this.modal;
this.modal.setAttribute('aria-hidden', 'true'), this.removeEventListeners(), this.config.onClose(this.modal), this.config.awaitCloseAnimation ? this.modal.addEventListener('animationend', function _0x17edbf() {
_0x5566a2.classList.remove(_0x449eac({
'is-open': true
@@ -2397,7 +2385,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'getFocusableNodes',
'value': function() {
- var _0x5566a2 = this.modal.querySelectorAll(_0x1eda08);
+ let _0x5566a2 = this.modal.querySelectorAll(_0x1eda08);
return Object.keys(_0x5566a2).map(function(_0x1bd160) {
return _0x5566a2[_0x1bd160];
});
@@ -2406,16 +2394,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'key': 'setFocusToFirstNode',
'value': function() {
if (!this.config.disableFocus) {
- var _0x5566a2 = this.getFocusableNodes();
+ let _0x5566a2 = this.getFocusableNodes();
_0x5566a2.length && _0x5566a2[0x0].focus();
}
}
}, {
'key': 'maintainFocus',
'value': function(_0x15092b) {
- var _0x17edbf = this.getFocusableNodes();
+ let _0x17edbf = this.getFocusableNodes();
if (this.modal.contains(document.activeElement)) {
- var _0x2c1832 = _0x17edbf.indexOf(document.activeElement);
+ let _0x2c1832 = _0x17edbf.indexOf(document.activeElement);
_0x15092b.shiftKey && 0x0 === _0x2c1832 && (_0x17edbf[_0x17edbf.length - 0x1].focus(), _0x15092b.preventDefault()), _0x15092b.shiftKey || _0x2c1832 !== _0x17edbf.length - 0x1 || (_0x17edbf[0x0].focus(), _0x15092b.preventDefault());
} else _0x17edbf[0x0].focus();
}
@@ -2426,36 +2414,36 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (function(_0x28b4fb) {
_0x28b4fb.length <= 0x0 && (console.warn('MicroModal v' .concat(version, ': ❗Please specify at least one %c\'micromodal-trigger\''), 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', 'data attribute.'), console.warn('%cExample:', 'background-color: #f8f9fa;color: #50596c;font-weight: bold;', ' '));
}(_0x48c135), !_0x61240d) return true;
- for (var _0x2c1832 in _0x61240d) _0x214f42(_0x2c1832);
+ for (let _0x2c1832 in _0x61240d) _0x214f42(_0x2c1832);
return true;
}, {
'init': function(_0x3f1b32) {
- var _0x17edbf = Object.assign({}, {
+ let _0x17edbf = Object.assign({}, {
'openTrigger': 'data-micromodal-trigger'
}, _0x3f1b32),
_0x2c1832 = _0x3c0613(document.querySelectorAll('[' .concat(_0x17edbf.openTrigger, ']'))),
_0x537e55 = function(_0x5e363a, _0x9390ce) {
- var _0x2c1832 = [];
+ let _0x2c1832 = [];
return _0x5e363a.forEach(function(_0x305145) {
- var _0x13d441 = _0x305145.attributes[_0x9390ce].value;
+ let _0x13d441 = _0x305145.attributes[_0x9390ce].value;
void 0x0 === _0x2c1832[_0x13d441] && (_0x2c1832[_0x13d441] = []), _0x2c1832[_0x13d441].push(_0x305145);
}), _0x2c1832;
}(_0x2c1832, _0x17edbf.openTrigger);
if (true !== _0x17edbf.debugMode || !0x1 !== _0x3a9bfc(_0x2c1832, _0x537e55))
- for (var _0x383dff in _0x537e55) {
- var _0x34a8e0 = _0x537e55[_0x383dff];
+ for (let _0x383dff in _0x537e55) {
+ let _0x34a8e0 = _0x537e55[_0x383dff];
_0x17edbf.targetModal = _0x383dff, _0x17edbf.triggers = _0x3c0613(_0x34a8e0), new _0x4fc27f(_0x17edbf);
}
},
'show': function(_0x2a3fcf, _0x472cd6) {
- var _0x2c1832 = _0x472cd6 || {};
+ let _0x2c1832 = _0x472cd6 || {};
return _0x2c1832.targetModal = _0x2a3fcf, true === _0x2c1832.debugMode && !0x1 === _0x214f42(_0x2a3fcf) ? _0xf43a92 = null : (_0xf43a92 = new _0x4fc27f(_0x2c1832)).showModal(), _0xf43a92;
},
'close': function() {
_0xf43a92.closeModal();
}
- }),
- _0x378b5c = {
+ });
+ var _0x378b5c = {
'defaultControllers': {
0: {
0: {
@@ -2643,79 +2631,42 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
221: 'close braket',
222: 'single quote'
},
- 'saveLoaddbDB': {
- put: function(key, data) {
- var openRequest = indexedDB.open("ejs-states", 1);
- openRequest.onerror = function() {};
- openRequest.onsuccess = function() {
- var db = openRequest.result;
- var transaction = db.transaction(["states"], "readwrite");
- var objectStore = transaction.objectStore("states");
- var request = objectStore.put(data, key);
- request.onerror = function() {};
- request.onsuccess = function() {};
- };
- openRequest.onupgradeneeded = function() {
- var db = openRequest.result;
- if (! db.objectStoreNames.contains('states')) {
- db.createObjectStore('states');
- };
- };
- },
- get: function(key) {
- return new Promise(function(resolve, reject) {
- var openRequest = indexedDB.open("ejs-states", 1);
- openRequest.onerror = function() {};
- openRequest.onsuccess = function() {
- var db = openRequest.result;
- var transaction = db.transaction(["states"], "readwrite");
- var objectStore = transaction.objectStore("states");
- var request = objectStore.get(key);
- request.onsuccess = async function(e) {
- var file = e.target.result;
- if (file) {
- resolve(file)
- };
- };
- request.onerror = function() {};
- };
- openRequest.onupgradeneeded = function() {
- var db = openRequest.result;
- if (! db.objectStoreNames.contains('states')) {
- db.createObjectStore('states');
- };
- };
+ 'saveLoaddbDB': function() {
+ try {
+ return new IDBStore({
+ 'dbVersion': 1,
+ 'storePrefix': 'ejs-',
+ 'storeName': 'states',
+ 'keyPath': null,
+ 'autoIncrement': false,
+ 'onStoreReady': function() {},
+ 'onError': function() {}
});
- },
- },
+ } catch(e) {
+ console.log(e);
+ }
+ }(),
'saveLoadDB': function(type) {
try {
+ if (!_0x378b5c.saveLoaddbDB.db) return false;
if (_0x2593da && typeof _0x2593da.getCoreOptionsValues == 'function') {
- if ((!this.gameName && typeof this.config.gameUrl == 'string' && this.config.gameUrl.startsWith('blob:')) || !window.indexedDB) {
- return false;
- }
- var location = _0x2593da.getCoreOptionsValues()['save-state-location'];
+ let location = _0x2593da.getCoreOptionsValues()['save-state-location'];
if (!location || location === 'download') {
return false;
}
- var slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
- var game;
- if (typeof this.config.gameUrl == 'string') {
- game = this.config.gameUrl.split('/').pop();
- }
- if (this.gameName) {
- game = this.gameName;
- };
- if (!game) return false;
- var key = game + '-' + slot;
+ if (!this.getStartName()) return false;
+ let slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
+ let game = this.getStartName();
+ if (!slot) return false;
+ let key = game + '-' + slot;
(async function() {
if (type === 'save') {
try {
- var data = await _0x378b5c.saveState();
+ let data = await _0x378b5c.saveState();
_0x378b5c.saveLoaddbDB.put(key, data);
} catch(e) {return false;};
} else {
- _0x378b5c.saveLoaddbDB.get(key).then(function(data) {
+ _0x378b5c.saveLoaddbDB.get(key, function(data) {
EJS_loadState(data);
});
}
@@ -2744,13 +2695,6 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'icons': {
'lock': ' '
},
- 'disableInput': !0x1,
- 'disableControl': function(_0x5459be) {
- if (_0x5459be) {
- for (var _0x17edbf = 0x0; _0x17edbf < 0x18; _0x17edbf += 0x1) _0x378b5c.simulateInputFn(0x0, _0x17edbf, 0x0), _0x378b5c.simulateInputFn(0x1, _0x17edbf, 0x0), _0x378b5c.simulateInputFn(0x2, _0x17edbf, 0x0), _0x378b5c.simulateInputFn(0x3, _0x17edbf, 0x0);
- _0x378b5c.disableInput = true;
- } else _0x378b5c.disableInput = !0x1;
- },
'isPaused': null,
'setVolume': null,
'setVariable': null,
@@ -2905,16 +2849,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
})
},
'initShaders': function() {
- for (var _0xa88a13 = _0x5032e6, _0x17edbf = Object.keys(_0xa88a13), _0x2c1832 = '', _0x26fb6a = 0x0; _0x26fb6a < _0x17edbf.length; _0x26fb6a += 0x1) _0x2c1832 = _0xa88a13[_0x17edbf[_0x26fb6a]], _0x27f4c4.FS.writeFile('/shader/' .concat(_0x17edbf[_0x26fb6a]), _0x2c1832), _0x2593da.storage.get('shader') === _0x17edbf[_0x26fb6a] && _0x27f4c4.FS.writeFile('/shader/shader.glslp', _0x2c1832);
+ for (let _0xa88a13 = _0x5032e6, _0x17edbf = Object.keys(_0xa88a13), _0x2c1832 = '', _0x26fb6a = 0x0; _0x26fb6a < _0x17edbf.length; _0x26fb6a += 0x1) _0x2c1832 = _0xa88a13[_0x17edbf[_0x26fb6a]], _0x27f4c4.FS.writeFile('/shader/' .concat(_0x17edbf[_0x26fb6a]), _0x2c1832), _0x2593da.storage.get('shader') === _0x17edbf[_0x26fb6a] && _0x27f4c4.FS.writeFile('/shader/shader.glslp', _0x2c1832);
},
'setGamepadDialog': function() {
- var _0xa88a13 = this;
- _0xa88a13.elements.dialogs.gamepad.innerHTML = '\n \n
\n
'+_0xa88a13.localization('Control Settings')+' \n \n \n
\n
\n
\n
\n \n
\n
\n ';
+ let _this = this;
+ _this.elements.dialogs.gamepad.innerHTML = '\n \n
\n
'+_this.localization('Control Settings')+' \n \n \n
\n
\n
\n
\n \n
\n
\n ';
- var _0x17edbf = '\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
'+_0xa88a13.localization('Gamepad')+'
\n
'+_0xa88a13.localization('Keyboard')+'
\n
\n
\n
\n
\n
'),
- _0x2c1832 = '\n ')
- var _0x48ee51;
- if ('nes' === _0xa88a13.system) {
+ let _0x17edbf = '\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
'+_this.localization('Gamepad')+'
\n
'+_this.localization('Keyboard')+'
\n
\n
\n
\n
\n
'),
+ _0x2c1832 = '\n ')
+ let _0x48ee51;
+ if ('nes' === _this.system) {
_0x48ee51 = {
0: 'B',
2: 'SELECT',
@@ -2924,11 +2868,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
6: 'LEFT',
7: 'RIGHT',
8: 'A',
- 24: _0xa88a13.localization('QUICK SAVE STATE'),
- 25: _0xa88a13.localization('QUICK LOAD STATE'),
- 26: _0xa88a13.localization('CHANGE STATE SLOT')
+ 24: _this.localization('QUICK SAVE STATE'),
+ 25: _this.localization('QUICK LOAD STATE'),
+ 26: _this.localization('CHANGE STATE SLOT')
}
- } else if ('snes' === _0xa88a13.system) {
+ } else if ('snes' === _this.system) {
_0x48ee51 = {
0: 'B',
1: 'Y',
@@ -2942,11 +2886,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
9: 'X',
10: 'L',
11: 'R',
- 24: _0xa88a13.localization('QUICK SAVE STATE'),
- 25: _0xa88a13.localization('QUICK LOAD STATE'),
- 26: _0xa88a13.localization('CHANGE STATE SLOT')
+ 24: _this.localization('QUICK SAVE STATE'),
+ 25: _this.localization('QUICK LOAD STATE'),
+ 26: _this.localization('CHANGE STATE SLOT')
};
- } else if ('n64' === _0xa88a13.system) {
+ } else if ('n64' === _this.system) {
_0x48ee51 = {
0: 'B',
3: 'START',
@@ -2966,16 +2910,17 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
22: 'R STICK DOWN',
21: 'R STICK LEFT',
20: 'R STICK RIGHT',
- 24: _0xa88a13.localization('QUICK SAVE STATE'),
- 25: _0xa88a13.localization('QUICK LOAD STATE'),
- 26: _0xa88a13.localization('CHANGE STATE SLOT')
+ 24: _this.localization('QUICK SAVE STATE'),
+ 25: _this.localization('QUICK LOAD STATE'),
+ 26: _this.localization('CHANGE STATE SLOT')
};
- if (_0xa88a13.coreVer === 2) {
+ // The new nintendo 64 core has new default buttons
+ if (_this.coreVer === 2) {
_0x48ee51[0] = 'A';
_0x48ee51[1] = 'B';
delete _0x48ee51[8];
}
- } else if ('nds' === _0xa88a13.system) {
+ } else if ('nds' === _this.system) {
_0x48ee51 = {
0: 'B',
1: 'Y',
@@ -2990,9 +2935,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
10: 'L',
11: 'R',
14: 'Microphone',
- 24: _0xa88a13.localization('QUICK SAVE STATE'),
- 25: _0xa88a13.localization('QUICK LOAD STATE'),
- 26: _0xa88a13.localization('CHANGE STATE SLOT')
+ 24: _this.localization('QUICK SAVE STATE'),
+ 25: _this.localization('QUICK LOAD STATE'),
+ 26: _this.localization('CHANGE STATE SLOT')
};
} else {
_0x48ee51 = {
@@ -3020,54 +2965,54 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
22: 'R STICK DOWN',
21: 'R STICK LEFT',
20: 'R STICK RIGHT',
- 24: _0xa88a13.localization('QUICK SAVE STATE'),
- 25: _0xa88a13.localization('QUICK LOAD STATE'),
- 26: _0xa88a13.localization('CHANGE STATE SLOT')
+ 24: _this.localization('QUICK SAVE STATE'),
+ 25: _this.localization('QUICK LOAD STATE'),
+ 26: _this.localization('CHANGE STATE SLOT')
};
}
- if (['arcade', 'mame'].includes(_0xa88a13.system)) {
- _0x48ee51[2] = _0xa88a13.localization('INSERT COIN');
+ if (['arcade', 'mame'].includes(_this.system)) {
+ _0x48ee51[2] = _this.localization('INSERT COIN');
}
- if (_0xa88a13.statesSupported === false) {
+ if (_this.statesSupported === false) {
delete _0x48ee51[24];
delete _0x48ee51[25];
delete _0x48ee51[26];
}
- for (var _0x501790 = [2, 3, 4, 5, 6, 7, 8, 0, 9, 1, 10, 11, 12, 13, 14, 15, 19, 18, 17, 16, 23, 22, 21, 20, 24, 25, 26], _0x50fd12 = function(_0x88827f) {
- _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['tabs-content'])).innerHTML += _0x17edbf.replace(/{index}/g, _0x88827f), _0x501790.forEach(function(_0x1bf162) {
- _0x48ee51[_0x1bf162] && (_0xa88a13.elements.dialogs.gamepad.querySelector('#controls-' .concat(_0x88827f)).innerHTML += _0x2c1832.replace(/{index}/g, _0x88827f).replace(/{id}/g, _0x1bf162).replace(/{label}/g, _0x48ee51[_0x1bf162]));
- }), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc');
+ for (let _0x501790 = [2, 3, 4, 5, 6, 7, 8, 0, 9, 1, 10, 11, 12, 13, 14, 15, 19, 18, 17, 16, 23, 22, 21, 20, 24, 25, 26], _0x50fd12 = function(_0x88827f) {
+ _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['tabs-content'])).innerHTML += _0x17edbf.replace(/{index}/g, _0x88827f), _0x501790.forEach(function(_0x1bf162) {
+ _0x48ee51[_0x1bf162] && (_this.elements.dialogs.gamepad.querySelector('#controls-' .concat(_0x88827f)).innerHTML += _0x2c1832.replace(/{index}/g, _0x88827f).replace(/{id}/g, _0x1bf162).replace(/{label}/g, _0x48ee51[_0x1bf162]));
+ }), _this.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc'), _this.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="' .concat(_0x88827f, '"][data-type="2"]')) && (_this.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="' .concat(_0x88827f, '"][data-type="2"]')).style.backgroundColor = '#ccc');
}, _0x3f0824 = 0x0; _0x3f0824 <= 0x3; _0x3f0824 += 0x1) _0x50fd12(_0x3f0824);
Object.keys(_0x378b5c.controllers).forEach(function(_0x23d419) {
_0x378b5c.controllers[_0x23d419] && Object.keys(_0x378b5c.controllers[_0x23d419]).forEach(function(_0x21e62d) {
- var _0x294e35 = _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x21e62d, '"][data-index="').concat(_0x23d419, '"][data-type="1"]')),
- _0x1849bc = _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x21e62d, '"][data-index="').concat(_0x23d419, '"][data-type="2"]'));
+ let _0x294e35 = _this.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x21e62d, '"][data-index="').concat(_0x23d419, '"][data-type="1"]')),
+ _0x1849bc = _this.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x21e62d, '"][data-index="').concat(_0x23d419, '"][data-type="2"]'));
if (!_0x294e35 || !_0x1849bc) return !0x1;
- var _0x19d43b = _0x378b5c.controllers[_0x23d419][_0x21e62d];
+ let _0x19d43b = _0x378b5c.controllers[_0x23d419][_0x21e62d];
_0x19d43b && (_0x19d43b.type && 0x1 !== parseInt(_0x19d43b.type, 0xa) ? _0x1849bc.value = '' : _0x19d43b.value && (_0x294e35.value = _0x378b5c.keyMap[_0x19d43b.value] || '', _0x294e35.setAttribute('data-value', _0x19d43b.value)), _0x19d43b.value2 && (_0x1849bc.value = isNaN(_0x19d43b.value2) ? (_0x19d43b.value2) : ('button ' .concat(parseInt(_0x19d43b.value2, 0xa) + 0x1)), _0x1849bc.setAttribute('data-value', _0x19d43b.value2)));
});
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-submit'])), 'click', function(_0x5f19bd) {
- var _0x2c1832 = _0xa88a13.elements.dialogs.gamepad.querySelectorAll('input'),
+ }), _0x1093f4.call(this, _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-submit'])), 'click', function(_0x5f19bd) {
+ let _0x2c1832 = _this.elements.dialogs.gamepad.querySelectorAll('input'),
_0x2844f7 = {};
return Array.from(_0x2c1832).forEach(function(_0x33c024) {
- var _0x5f19bd, _0x2c1832 = _0x33c024.getAttribute('data-index'),
+ let _0x5f19bd, _0x2c1832 = _0x33c024.getAttribute('data-index'),
_0x124d0a = _0x33c024.getAttribute('data-value');
0x2 === parseInt(_0x33c024.getAttribute('data-type'), 0xa) && (_0x5f19bd = _0x33c024.getAttribute('data-value'));
- var _0x54b9af = _0x33c024.getAttribute('data-id');
+ let _0x54b9af = _0x33c024.getAttribute('data-id');
_0x2844f7[_0x2c1832] || (_0x2844f7[_0x2c1832] = {}), _0x2844f7[_0x2c1832][_0x54b9af] || (_0x2844f7[_0x2c1832][_0x54b9af] = {}), _0x124d0a && (_0x2844f7[_0x2c1832][_0x54b9af].value = _0x124d0a), _0x5f19bd && (_0x2844f7[_0x2c1832][_0x54b9af].value2 = _0x5f19bd);
}), _0x2593da.storage.set({
'controllers': _0x2844f7
- }), _0x378b5c.controllers = _0x2844f7, _0x132da7(_0xa88a13.elements.dialogs.gamepad, true), _0xa88a13.elements.container.focus(), _0x5f19bd.stopPropagation(), !0x1;
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-reset'])), 'click', function(_0x5f19bd) {
+ }), _0x378b5c.controllers = _0x2844f7, _0x132da7(_this.elements.dialogs.gamepad, true), _this.elements.container.focus(), _0x5f19bd.stopPropagation(), !0x1;
+ }), _0x1093f4.call(this, _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-reset'])), 'click', function(_0x5f19bd) {
_0x378b5c.controllers = JSON.parse(JSON.stringify(_0x378b5c.defaultControllers))
localStorage.removeItem(_0x2593da.storage.key)
- var _0x2c1832 = _0xa88a13.elements.dialogs.gamepad.querySelectorAll('input')
- for (var i=0; i<_0x2c1832.length; i++) {
- var player = _0x2c1832[i].getAttribute('data-index')
- var controlOrGamepad = _0x2c1832[i].getAttribute('data-type')
- var buttonId = _0x2c1832[i].getAttribute('data-id')
- var a = (controlOrGamepad == 1) ? 'value' : 'value2'
+ let _0x2c1832 = _this.elements.dialogs.gamepad.querySelectorAll('input')
+ for (let i=0; i<_0x2c1832.length; i++) {
+ let player = _0x2c1832[i].getAttribute('data-index')
+ let controlOrGamepad = _0x2c1832[i].getAttribute('data-type')
+ let buttonId = _0x2c1832[i].getAttribute('data-id')
+ let a = (controlOrGamepad == 1) ? 'value' : 'value2'
if (_0x378b5c.defaultControllers[player] && _0x378b5c.defaultControllers[player][buttonId] && _0x378b5c.defaultControllers[player][buttonId][a]) {
if (controlOrGamepad == 1) {
_0x2c1832[i].value = _0x378b5c.keyMap[_0x378b5c.defaultControllers[player][buttonId][a]]
@@ -3080,9 +3025,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x2c1832[i].setAttribute('data-value', '')
}
}
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-clear'])), 'click', function(_0x5f19bd) {
- var c = {0:{}, 1:{}, 2:{}, 3:{}};
- for (var k in _0x48ee51) {
+ }), _0x1093f4.call(this, _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-clear'])), 'click', function(_0x5f19bd) {
+ let c = {0:{}, 1:{}, 2:{}, 3:{}};
+ for (let k in _0x48ee51) {
c[0][k] = {};
c[1][k] = {};
c[2][k] = {};
@@ -3090,52 +3035,52 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
_0x378b5c.controllers = c
localStorage.setItem(_0x2593da.storage.key, JSON.stringify({controllers: _0x378b5c.controllers}))
- var _0x2c1832 = _0xa88a13.elements.dialogs.gamepad.querySelectorAll('input')
- for (var i=0; i<_0x2c1832.length; i++) {
+ let _0x2c1832 = _this.elements.dialogs.gamepad.querySelectorAll('input')
+ for (let i=0; i<_0x2c1832.length; i++) {
_0x2c1832[i].value = '';
_0x2c1832[i].setAttribute('data-value', '');
}
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x16d598) {
- return _0x132da7(_0xa88a13.elements.dialogs.gamepad, true), _0xa88a13.elements.container.focus(), _0x16d598.stopPropagation(), !0x1;
- }), Array.from(_0xa88a13.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames.tabs, ' li'))).forEach(function(_0x523f7b) {
- _0x1093f4.call(_0xa88a13, _0x523f7b, 'mousedown', function(_0xa99a78) {
- _0x3a8e2f(_0xa88a13.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames.tabs, ' li')), _0x378b5c.classNames.active, false);
+ }), _0x1093f4.call(this, _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x16d598) {
+ return _0x132da7(_this.elements.dialogs.gamepad, true), _this.elements.container.focus(), _0x16d598.stopPropagation(), !0x1;
+ }), Array.from(_this.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames.tabs, ' li'))).forEach(function(_0x523f7b) {
+ _0x1093f4.call(_this, _0x523f7b, 'mousedown', function(_0xa99a78) {
+ _0x3a8e2f(_this.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames.tabs, ' li')), _0x378b5c.classNames.active, false);
_0x3a8e2f(_0x523f7b, _0x378b5c.classNames.active, true);
- var _0xb8a227 = _0x523f7b.querySelector('a').getAttribute('aria-controls');
- Array.from(_0xa88a13.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['tabs-content'], ' .').concat(_0x378b5c.classNames['tabs-panel']))).forEach(function(_0x1c29a4) {
+ let _0xb8a227 = _0x523f7b.querySelector('a').getAttribute('aria-controls');
+ Array.from(_this.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['tabs-content'], ' .').concat(_0x378b5c.classNames['tabs-panel']))).forEach(function(_0x1c29a4) {
_0x132da7(_0x1c29a4, true);
});
- _0x132da7(_0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['tabs-content'], ' #').concat(_0xb8a227)), false);
+ _0x132da7(_this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames['tabs-content'], ' #').concat(_0xb8a227)), false);
_0xa99a78.stopPropagation();
return false;
});
- }), _0xbae705.call(_0xa88a13, _0xa88a13.elements.dialogs.gamepad.querySelector('[aria-controls="controls-0"]').parentNode, 'mousedown');
- var _0x11b11a = _0xa88a13.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames.overlay));
- _0x1093f4.call(_0xa88a13, _0x11b11a, 'mousedown', function(_0x15c7de) {
+ }), _0xbae705.call(_this, _this.elements.dialogs.gamepad.querySelector('[aria-controls="controls-0"]').parentNode, 'mousedown');
+ let _0x11b11a = _this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames.overlay));
+ _0x1093f4.call(_this, _0x11b11a, 'mousedown', function(_0x15c7de) {
_0x132da7(_0x11b11a, true), _0x15c7de.stopPropagation();
- }), Array.from(_0xa88a13.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['button-container']))).forEach(function(_0x16f092) {
- _0x1093f4.call(_0xa88a13, _0x16f092, 'mousedown', function(_0xdb1c93) {
- _0xbae705.call(_0xa88a13, _0x16f092.querySelector('a.' .concat(_0x378b5c.classNames.set)), _0xdb1c93.type, true, {});
+ }), Array.from(_this.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['button-container']))).forEach(function(_0x16f092) {
+ _0x1093f4.call(_this, _0x16f092, 'mousedown', function(_0xdb1c93) {
+ _0xbae705.call(_this, _0x16f092.querySelector('a.' .concat(_0x378b5c.classNames.set)), _0xdb1c93.type, true, {});
});
- }), Array.from(_0xa88a13.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['tabs-panel'], ' a.').concat(_0x378b5c.classNames.set))).forEach(function(_0x397818) {
- _0x1093f4.call(_0xa88a13, _0x397818, 'mousedown', function(_0x1e1d79) {
- var _0x2c1832 = _0x397818.parentNode.parentNode,
+ }), Array.from(_this.elements.dialogs.gamepad.querySelectorAll('.' .concat(_0x378b5c.classNames['tabs-panel'], ' a.').concat(_0x378b5c.classNames.set))).forEach(function(_0x397818) {
+ _0x1093f4.call(_this, _0x397818, 'mousedown', function(_0x1e1d79) {
+ let _0x2c1832 = _0x397818.parentNode.parentNode,
_0x4e649c = _0x2c1832.getAttribute('data-id'),
_0x431719 = _0x2c1832.getAttribute('data-index'),
_0x4a6f6f = _0x2c1832.getAttribute('data-label');
_0x132da7(_0x11b11a, !0x1), _0x11b11a.setAttribute('data-id', _0x4e649c);
_0x11b11a.setAttribute('data-index', _0x431719);
- var _0x179623 = '[ ' .concat(_0x4a6f6f, ' ]');
- _0x378b5c.gamepad.gamepads[_0x431719] && _0x4e649c < 16 ? _0x179623 += 'Gamepad:' .concat(_0x378b5c.gamepad.gamepads[_0x431719].id, ' '+_0xa88a13.localization('Press keyboard or gamepad')+' '+_0xa88a13.localization('Press escape (esc) to clear')) : _0x179623 += ' Press keyboard '+_0xa88a13.localization('Press escape (esc) to clear'), _0x11b11a.querySelector('.' .concat(_0x378b5c.classNames['key-setting-popup'])).innerHTML = _0x179623, _0x1e1d79.stopPropagation();
+ let _0x179623 = '[ ' .concat(_0x4a6f6f, ' ]');
+ _0x378b5c.gamepad.gamepads[_0x431719] && _0x4e649c < 16 ? _0x179623 += 'Gamepad:' .concat(_0x378b5c.gamepad.gamepads[_0x431719].id, ' '+_this.localization('Press keyboard or gamepad')+' '+_this.localization('Press escape (esc) to clear')) : _0x179623 += ' Press keyboard '+_this.localization('Press escape (esc) to clear'), _0x11b11a.querySelector('.' .concat(_0x378b5c.classNames['key-setting-popup'])).innerHTML = _0x179623, _0x1e1d79.stopPropagation();
});
});
},
'setCacheDialog': function() {
- var _0xa88a13 = this;
- _0xa88a13.elements.dialogs.cache.innerHTML = '\n \n
\n
'+_0xa88a13.localization('Cache Manager')+' \n \n
\n\n
\n
\n
\n '), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x5d6721) {
- return _0x132da7(_0xa88a13.elements.dialogs.cache, true), _0xa88a13.elements.container.focus(), _0x5d6721.stopPropagation(), !0x1;
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-title'], ' a')), 'click', function(_0x46992d) {
- return _0x27f4c4.romdb && (_0x27f4c4.romdb.clear(), _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content'])).innerHTML = ''+_0xa88a13.localization('Empty')+'
'), _0x46992d.stopPropagation(), !0x1;
+ let _this = this;
+ _this.elements.dialogs.cache.innerHTML = '\n \n
\n
'+_this.localization('Cache Manager')+' \n \n
\n\n
\n
\n
\n '), _0x1093f4.call(this, _this.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x5d6721) {
+ return _0x132da7(_this.elements.dialogs.cache, true), _this.elements.container.focus(), _0x5d6721.stopPropagation(), !0x1;
+ }), _0x1093f4.call(this, _this.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-title'], ' a')), 'click', function(_0x46992d) {
+ return _0x27f4c4.romdb && (_0x27f4c4.romdb.clear(), _this.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content'])).innerHTML = ''+_this.localization('Empty')+'
'), _0x46992d.stopPropagation(), !0x1;
});
},
'showLoading': function(_0x108b55) {
@@ -3150,51 +3095,58 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.elements.dialogs.loading && (this.elements.dialogs.loading.innerHTML = '\n \n
\n
\n '+this.localization('Loading')+'...\n
\n
\n
'));
},
'setCheatDialog': function() {
- var _0xa88a13 = this;
- if (_0xa88a13.elements.dialogs.cheat) {
- _0xa88a13.elements.dialogs.cheat.innerHTML = '\n \n\n \n\n \n
\n
\n \n
\n\n
\n '+_0xa88a13.localization('Code')+' \n \n '+_0xa88a13.localization('Description')+' \n \n\n \n \n
\n
\n
\n ');
- var _0x17edbf = _0xa88a13.elements.dialogs.cheat.querySelector('#modal-85cd7a1c543a484b');
- _0x1093f4.call(this, _0xa88a13.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['cheats-add'])), 'click', function(_0x2a74b5) {
+ let _this = this;
+ if (_this.elements.dialogs.cheat) {
+ _this.elements.dialogs.cheat.innerHTML = '\n \n\n \n\n \n
\n
\n \n
\n\n
\n '+_this.localization('Code')+' \n \n '+_this.localization('Description')+' \n \n\n \n \n
\n
\n
\n ');
+ let _0x17edbf = _this.elements.dialogs.cheat.querySelector('#modal-85cd7a1c543a484b');
+ _0x1093f4.call(this, _this.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['cheats-add'])), 'click', function(_0x2a74b5) {
return _0x4d8495.show('modal-85cd7a1c543a484b', {
'closeTrigger': 'data-modal-close'
}), !0x1;
});
- var _0x2c1832 = _0xa88a13.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['cheats-list']));
+ let _0x2c1832 = _this.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['cheats-list']));
_0x1093f4.call(this, _0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['modal__btn-primary'])), 'click', function(_0x1c01ce) {
- var _0x184e2c = _0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['cheat-name-input'])).value,
+ let _0x184e2c = _0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['cheat-name-input'])).value,
_0x15ccbb = _0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['cheat-code-input'])).value;
if (_0x184e2c && _0x15ccbb) {
- var _0x2c3108 = _0x2c1832.querySelectorAll('input:checked');
+ let _0x2c3108 = _0x2c1832.querySelectorAll('input:checked');
_0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['cheat-name-input'])).value = '', _0x17edbf.querySelector('.' .concat(_0x378b5c.classNames['cheat-code-input'])).value = '', _0x4d8495.close();
- var _0x5b2cff = _0xa88a13.cheats.length;
- _0xa88a13.cheats.push([_0x184e2c, _0x15ccbb]), _0x2c1832.innerHTML += '\n
\n
').concat(_0x184e2c, ' \n
× \n
'), _0x2c3108.forEach(function(_0x1fb248, _0x7bb84b) {
+ let _0x5b2cff = _this.cheats.length;
+ _this.cheats.push([_0x184e2c, _0x15ccbb]), _0x2c1832.innerHTML += '\n
\n
').concat(_0x184e2c, ' \n
× \n
'), _0x2c3108.forEach(function(_0x1fb248, _0x7bb84b) {
_0x2c1832.querySelector('#ejs-cheat-switch-' .concat(_0x7bb84b)).setAttribute('checked', 'checked');
});
}
- return 'localStorage' in window && localStorage.setItem('' .concat(_0xa88a13.system, '-').concat(_0xa88a13.startName, '-cheats'), JSON.stringify(_0xa88a13.cheats)), _0x1c01ce.stopPropagation(), !0x1;
+ if ('localStorage' in window && _this.getStartName()) {
+ localStorage.setItem('' .concat(_this.system, '-').concat(_this.getStartName(), '-cheats'), JSON.stringify(_this.cheats));
+ _0x1c01ce.stopPropagation();
+ }
+ return false;
});
- var _0x257001 = function() {
- if ('localStorage' in window) {
- var _0x17edbf = localStorage.getItem('' .concat(_0xa88a13.system, '-').concat(_0xa88a13.startName, '-cheats'));
+ let _0x257001 = function() {
+ if ('localStorage' in window && _this.getStartName()) {
+ let _0x17edbf = localStorage.getItem('' .concat(_this.system, '-').concat(_this.getStartName(), '-cheats'));
try {
_0x17edbf = JSON.parse(_0x17edbf);
} catch (_0x101b3e) {}
- _0x17edbf && (_0xa88a13.cheats = _0x17edbf);
+ _0x17edbf && (_this.cheats = _0x17edbf);
}
_0x2c1832.innerHTML = '';
- if (_0xa88a13.cheats && Array.isArray(_0xa88a13.cheats)) {
- _0xa88a13.cheats.forEach(function(_0x245035, _0x116996) {
- var _0x4ac35a = _0x245035[0x0];
+ if (_this.cheats && Array.isArray(_this.cheats)) {
+ _this.cheats.forEach(function(_0x245035, _0x116996) {
+ let _0x4ac35a = _0x245035[0x0];
_0x245035[0x1];
_0x2c1832.innerHTML += '\n
\n
').concat(_0x4ac35a, ' \n
× \n
');
});
}
};
- _0x1093f4.call(_0xa88a13, _0x2c1832, 'click', function(_0x576733) {
+ _0x1093f4.call(_this, _0x2c1832, 'click', function(_0x576733) {
if (_0x576733.target && _0x576733.target.classList.contains(_0x378b5c.classNames['ejs-delete-cheat']) && _0x576733.target.getAttribute('data-idx')) {
- var _0x5b10b7 = _0x576733.target.getAttribute('data-idx');
- _0xa88a13.cheats.splice(_0x5b10b7, 0x1), 'localStorage' in window && localStorage.setItem('' .concat(_0xa88a13.system, '-').concat(_0xa88a13.startName, '-cheats'), JSON.stringify(_0xa88a13.cheats));
- var _0x557895 = [];
+ let _0x5b10b7 = _0x576733.target.getAttribute('data-idx');
+ _this.cheats.splice(_0x5b10b7, 0x1);
+ if ('localStorage' in window && _this.getStartName()) {
+ localStorage.setItem('' .concat(_this.system, '-').concat(_this.getStartName(), '-cheats'), JSON.stringify(_this.cheats));
+ }
+ let _0x557895 = [];
_0x2c1832.querySelectorAll('input').forEach(function(_0xab0ba8, _0x1f3597) {
_0x557895[_0x1f3597] = !!_0x2c1832.querySelector('#ejs-cheat-switch-' .concat(_0x1f3597, ':checked'));
}), _0x557895.splice(_0x5b10b7, 0x1), _0x257001(), _0x557895.forEach(function(_0x2e22be, _0x2247c4) {
@@ -3202,25 +3154,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
}
return _0x576733.stopPropagation(), !0x1;
- }), _0x1093f4.call(_0xa88a13, _0xa88a13.elements.container, 'start-game', function(_0x4c266e) {
+ }), _0x1093f4.call(_this, _this.elements.container, 'start-game', function(_0x4c266e) {
_0x257001();
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x4adb2c) {
- return _0x132da7(_0xa88a13.elements.dialogs.cheat, true), _0x4adb2c.stopPropagation(), _0xa88a13.elements.container.focus(), !0x1;
- }), _0x1093f4.call(this, _0xa88a13.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['btn-submit'])), 'click', function(_0x5785f6) {
+ }), _0x1093f4.call(this, _this.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['btn-cancel'])), 'click', function(_0x4adb2c) {
+ return _0x132da7(_this.elements.dialogs.cheat, true), _0x4adb2c.stopPropagation(), _this.elements.container.focus(), !0x1;
+ }), _0x1093f4.call(this, _this.elements.dialogs.cheat.querySelector('.' .concat(_0x378b5c.classNames['btn-submit'])), 'click', function(_0x5785f6) {
_0x378b5c.resetCheat();
_0x2c1832.querySelectorAll('input:checked').forEach(function(_0xeb7426, _0x45b02d) {
- var _0x27e2c1 = _0xa88a13.cheats[_0xeb7426.value];
+ let _0x27e2c1 = _this.cheats[_0xeb7426.value];
_0x27e2c1 && _0x378b5c.setCheat(_0x45b02d, 1, _0x27e2c1[1]);
});
- _0x132da7(_0xa88a13.elements.dialogs.cheat, true);
- _0xa88a13.elements.container.focus();
+ _0x132da7(_this.elements.dialogs.cheat, true);
+ _this.elements.container.focus();
return false;
- }), 'arcade' !== _0xa88a13.system && 'mame' !== _0xa88a13.system && 'mame2003' !== _0xa88a13.system && 'mame2010' !== _0xa88a13.system || (_0x1e2c68.element(_0xa88a13.elements.buttons.cheat) && _0x132da7(_0xa88a13.elements.buttons.cheat, true), _0x378b5c.allowCheat = !0x1), _0x378b5c.setCheat || (_0x132da7(_0xa88a13.elements.buttons.cheat, true), _0x378b5c.allowCheat = !0x1);
+ }), 'arcade' !== _this.system && 'mame' !== _this.system && 'mame2003' !== _this.system && 'mame2010' !== _this.system || (_0x1e2c68.element(_this.elements.buttons.cheat) && _0x132da7(_this.elements.buttons.cheat, true), _0x378b5c.allowCheat = !0x1), _0x378b5c.setCheat || (_0x132da7(_this.elements.buttons.cheat, true), _0x378b5c.allowCheat = !0x1);
}
},
/*
'setNetplayDialog': function() {
- var _0xa88a13 = this,
+ let _this = this,
_0x17edbf = this;
if (_0x17edbf.elements.dialogs.netplay) {
_0x17edbf.elements.dialogs.netplay.innerHTML = '\n \n
\n
'+_0x17edbf.localization('Netplay')+' \n \n
\n
\n
'+_0x17edbf.localization('Rooms')+' \n
\n \n \n '+_0x17edbf.localization('Room Name')+' \n '+_0x17edbf.localization('Players')+' \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n
'+_0x17edbf.localization('Room Name')+' \n
'+_0x17edbf.localization('Password')+':
\n
\n \n \n '+_0x17edbf.localization('Player')+' \n '+_0x17edbf.localization('Name')+' \n \n \n \n \n \n 1 \n '+_0x17edbf.localization('Name')+' 1 \n \n \n \n 2 \n '+_0x17edbf.localization('Name')+' 2 \n \n \n \n 3 \n '+_0x17edbf.localization('Name')+' 3 \n \n \n \n 4 \n '+_0x17edbf.localization('Name')+' 4 \n \n \n \n
\n
\n
\n
\n
\n\n \n \n
\n
\n \n
\n\n
\n '+_0x17edbf.localization('Player Name')+' \n \n\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n ');
@@ -3231,16 +3183,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},*/
'initKeyboard': function() {
- var _0xa88a13 = this,
+ let _this = this,
_0x17edbf = this,
_0x2c1832 = this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames.overlay));
_0x1093f4.call(this, document.body, 'keydown keyup', function(_0x459b32) {
if (_0x459b32.which >= 0x70 && _0x459b32.which <= 0x7b);
else {
- var _0x335c01 = !_0xa88a13.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden,
+ let _0x335c01 = !_this.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden,
_0x2eb03e = 'keydown' === _0x459b32.type;
if (_0x2eb03e && _0x335c01) {
- var _0x1a3a47 = _0x2c1832.getAttribute('data-index'),
+ let _0x1a3a47 = _0x2c1832.getAttribute('data-index'),
_0x1394cb = _0x2c1832.getAttribute('data-id'),
_0x2c8fd1 = null;
if (_0x459b32.key && _0x378b5c.keyMap[_0x459b32.keyCode] === 'escape') {
@@ -3251,9 +3203,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x132da7(_0x2c1832, true);
return;
};
- var _0x1a3a47 = _0x2c1832.getAttribute('data-index'),
- _0x1394cb = _0x2c1832.getAttribute('data-id'),
- _0x2c8fd1 = null;
+ _0x1a3a47 = _0x2c1832.getAttribute('data-index');
+ _0x1394cb = _0x2c1832.getAttribute('data-id');
+ _0x2c8fd1 = null;
_0x459b32.key && ((_0x2c8fd1 = _0x17edbf.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x1394cb, '"][data-index="').concat(_0x1a3a47, '"][data-type="1"]'))).setAttribute('data-value', _0x459b32.keyCode), _0x2c8fd1.value = _0x378b5c.keyMap[_0x459b32.keyCode]), _0x132da7(_0x2c1832, true);
} else Object.keys(_0x378b5c.controllers).forEach(function(_0x3863d2) {
Object.keys(_0x378b5c.controllers[_0x3863d2]).forEach(function(_0x509939) {
@@ -3272,15 +3224,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
}
}), document.body.addEventListener('keydown', function(_0x14d612) {
- var _0x2c1832 = _0x14d612.keyCode ? _0x14d612.keyCode : _0x14d612.which;
+ let _0x2c1832 = _0x14d612.keyCode ? _0x14d612.keyCode : _0x14d612.which;
[0x20, 0x25, 0x26, 0x27, 0x28, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b].includes(_0x2c1832) && _0x14d612.srcElement === _0x17edbf.elements.container && _0x14d612.preventDefault(), _0x14d612.srcElement.className.split(/ +/).includes(_0x378b5c.classNames.set) && _0x14d612.preventDefault();
});
},
'initGamepad': function() {
- var _0xa88a13 = this,
+ let _this = this,
_0x17edbf = this,
_0x2c1832 = this.elements.dialogs.gamepad.querySelector('.' .concat(_0x378b5c.classNames.overlay));
- var gamepad;
+ let gamepad;
try {
gamepad = new _0x4ad1c6();
} catch(e) {
@@ -3289,15 +3241,15 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
_0x378b5c.gamepad = gamepad;
gamepad.on('buttondown', function(event) {
- if (!_0xa88a13.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden) {
- var _0x387018, _0xdd4205 = parseInt(_0x2c1832.getAttribute('data-index'), 0xa),
+ if (!_this.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden) {
+ let _0x387018, _0xdd4205 = parseInt(_0x2c1832.getAttribute('data-index'), 0xa),
_0x1f4ee2 = _0x2c1832.getAttribute('data-id');
if (event.gamepadIndex === parseInt(_0xdd4205, 0xa)) {
- var _0x126d2d = null;
+ let _0x126d2d = null;
(_0x126d2d = _0x17edbf.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x1f4ee2, '"][data-index="').concat(_0xdd4205, '"][data-type="2"]'))).setAttribute('data-value', event.index), _0x126d2d.value = 'button ' .concat(event.index + 0x1), _0x132da7(_0x2c1832, true);
}
} else Object.keys(_0x378b5c.controllers[event.gamepadIndex.toString()]).forEach(function(_0x3cf4d3) {
- var _0x5cf388 = event.gamepadIndex.toString();
+ let _0x5cf388 = event.gamepadIndex.toString();
if (parseInt(_0x378b5c.controllers[_0x5cf388][_0x3cf4d3].value2, 0xa) === parseInt(event.index, 0xa) && ['24', '25', '26'].includes(_0x3cf4d3)) {
if (_0x3cf4d3 == '24') {//save
_0x378b5c.quickSaveState()
@@ -3318,18 +3270,18 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
});
gamepad.on('axischanged', function(event) {
- var value = function(value) {
+ let value = function(value) {
if (value > 0.5 || value < -0.5) {
return (value > 0) ? 1 : -1;
} else {
return 0;
}
}(event.value);
- if (!_0xa88a13.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden) {
+ if (!_this.elements.dialogs.gamepad.hidden && !_0x2c1832.hidden) {
if (value !== 0) {
- var _0x1f4ee2 = _0x2c1832.getAttribute('data-id'),
+ let _0x1f4ee2 = _0x2c1832.getAttribute('data-id'),
_0xdd4205 = parseInt(_0x2c1832.getAttribute('data-index'), 0xa);
- var _0x126d2d = _0xa88a13.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x1f4ee2, '"][data-index="').concat(_0xdd4205, '"][data-type="2"]'))
+ let _0x126d2d = _this.elements.dialogs.gamepad.querySelector('[data-id="' .concat(_0x1f4ee2, '"][data-index="').concat(_0xdd4205, '"][data-type="2"]'))
_0x126d2d.setAttribute('data-value', event.axis + ':' + value)
_0x126d2d.value = event.axis + ':' + value
_0x132da7(_0x2c1832, true)
@@ -3338,8 +3290,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (! _0x378b5c.prevButtons) {
_0x378b5c.prevButtons = {}
}
- var quit = false
- var _0x5cf388 = event.gamepadIndex.toString();
+ let quit = false
+ let _0x5cf388 = event.gamepadIndex.toString();
if (! _0x378b5c.prevButtons[_0x5cf388]) {
_0x378b5c.prevButtons[_0x5cf388] = {}
}
@@ -3349,8 +3301,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (! _0x378b5c.prevButtons[_0x5cf388].buttonID) {
_0x378b5c.prevButtons[_0x5cf388].buttonID = 0
}
- for (var w=0; w 0) {
_0x378b5c.simulateInput(_0x17edbf, 16, 0x7fff * event.value);
@@ -3432,13 +3384,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
gamepad.on('disconnected', function(event) {
[0, 1, 2, 3].forEach(function(_0x429f30) {
- var _0x2c1832 = gamepad.gamepads[_0x429f30];
+ let _0x2c1832 = gamepad.gamepads[_0x429f30];
_0x17edbf.elements.dialogs.gamepad.querySelector('#controls-' .concat(_0x429f30, ' .gamepad-name')).innerHTML = _0x2c1832 ? _0x2c1832.id : 'n/a';
});
});
gamepad.on('connected', function(event) {
Object.keys(gamepad.gamepads).forEach(function(_0x327c74) {
- var _0x2c1832 = gamepad.gamepads[_0x327c74];
+ let _0x2c1832 = gamepad.gamepads[_0x327c74];
_0x17edbf.elements.dialogs.gamepad.querySelector('#controls-' .concat(_0x327c74, ' .gamepad-name')).innerHTML = _0x2c1832 ? _0x2c1832.id : 'n/a';
});
});
@@ -3446,21 +3398,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'setShader': function(_0x4cbec3) {
if ('disabled' === _0x4cbec3) _0x27f4c4.FS.unlink('/shader/shader.glslp', ''), _0x378b5c.toggleShader && _0x378b5c.toggleShader(0x0);
else {
- _0x378b5c.toggleShader && _0x378b5c.toggleShader(0x0);
- var _0x17edbf = '/shader/' .concat(_0x4cbec3);
- _0x27f4c4.FS.writeFile('/shader/shader.glslp', function(_0x52407e) {
- if (!(_0x52407e instanceof Int32Array)) throw new Error('uintArrayToString: Only accepts Int32Array parameter');
- for (var _0x17edbf = '', _0x2c1832 = 0x0, _0x4d451e = _0x52407e.length; _0x2c1832 < _0x4d451e; _0x2c1832 += 0x1) {
- var _0x37c7b6 = _0x52407e[_0x2c1832];
- if (_0x37c7b6 > 0xffff) throw new Error('Invalid value attempted to be serialised');
- _0x17edbf += String.fromCharCode(_0x37c7b6);
- }
- return _0x17edbf;
- }(new Int32Array(_0x27f4c4.FS.readFile(_0x17edbf)))), _0x378b5c.toggleShader && _0x378b5c.toggleShader(0x1);
+ _0x378b5c.toggleShader && _0x378b5c.toggleShader(0);
+ let _0x17edbf = '/shader/' .concat(_0x4cbec3);
+ _0x27f4c4.FS.writeFile('/shader/shader.glslp', _0x27f4c4.FS.readFile(_0x17edbf));
+ _0x378b5c.toggleShader && _0x378b5c.toggleShader(1);
}
},
'toggleVirtualGamepad': function(_0x1ed80b) {
- var _this = this;
+ let _this = this;
if (null !== _0x378b5c.virtualGamepadContainer) {
_0x132da7(_0x378b5c.virtualGamepadContainer, !_0x1ed80b);
return
@@ -3472,9 +3417,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'hidden': ''
});
this.elements.container.appendChild(_0x378b5c.virtualGamepadContainer);
- var blockCSS = 'height:31px;text-align:center;border:1px solid #ccc;border-radius:5px;line-height:31px;';
- var html = '';
- var info;
+ let blockCSS = 'height:31px;text-align:center;border:1px solid #ccc;border-radius:5px;line-height:31px;';
+ let html = '';
+ let info;
if (_this.config.VirtualGamepadSettings && function(set) {
if (!Array.isArray(set)) {
@@ -3485,7 +3430,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
console.warn("Vritual gamepad settings is empty! Using default gamepad settings");
return false;
}
- for (var i=0; i';
html += '';
- for (var i=0; i
';
html += '';
- for (var i=0; i
';
html += '';
- for (var i=0; i
';
html += '';
- for (var i=0; i
= 0x1e && _0x2c1832 < 0x96 ? _0x378b5c.syncInput(0, inputs()[4], inputs().downVal) : window.setTimeout(function() {
_0x378b5c.syncInput(0, inputs()[4], 0);
}, 0x1e);
@@ -3954,12 +3899,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
}
- var keys = [];
- for (var i=0; i {
- var element = _0x530042.call(_this, '.'.concat(_0x2c1832, ' .').concat(_0x449eac(a.id)));
+ let element = _0x530042.call(_this, '.'.concat(_0x2c1832, ' .').concat(_0x449eac(a.id)));
if (!element) return;
_0x1093f4.call(_this, element, 'touchstart touchend', function(e) {
if (e.type === 'touchend') {
@@ -3984,7 +3929,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
})
});
- var menuButton = _0x428003('div', {
+ let menuButton = _0x428003('div', {
'class': _0x449eac({
'ejs__widget': true,
'ejs__widget_controls_toggle': true
@@ -3992,7 +3937,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, '');
menuButton.innerHTML = ' ';
_0x530042.call(this, ".".concat(_0x449eac({ejs__widgets: true}))).appendChild(menuButton);
- var hideTimeout;
+ let hideTimeout;
_0x1093f4.call(this, menuButton, 'mousedown touchstart', function(e) {
_0x3a8e2f(e.target, _0x2ec721, true);
clearTimeout(hideTimeout);
@@ -4003,23 +3948,23 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
},
'setup': function() {
- var _0xa88a13 = this;
+ let _this = this;
if (!this.game) {
console.warn('No game element found!');
return;
}
- _0x378b5c.playerName = _0xa88a13.config.playerName;
+ _0x378b5c.playerName = _this.config.playerName;
_0x3a8e2f(this.elements.container, this.config.classNames.type, true);
this.elements.container.setAttribute('tabindex', '0');
if (this.color) {
- var _0x17edbf = function(_0x175d8e) {
- var _0x17edbf = _0x175d8e.toLowerCase();
+ let _0x17edbf = function(_0x175d8e) {
+ let _0x17edbf = _0x175d8e.toLowerCase();
if (_0x17edbf && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/ .test(_0x17edbf)) {
if (0x4 === _0x17edbf.length) {
- for (var _0x2c1832 = '#', _0x4c881f = 0x1; _0x4c881f < 0x4; _0x4c881f += 0x1) _0x2c1832 += _0x17edbf.slice(_0x4c881f, _0x4c881f + 0x1).concat(_0x17edbf.slice(_0x4c881f, _0x4c881f + 0x1));
+ for (let _0x2c1832 = '#', _0x4c881f = 0x1; _0x4c881f < 0x4; _0x4c881f += 0x1) _0x2c1832 += _0x17edbf.slice(_0x4c881f, _0x4c881f + 0x1).concat(_0x17edbf.slice(_0x4c881f, _0x4c881f + 0x1));
_0x17edbf = _0x2c1832;
}
- for (var _0x5ac4ff = [], _0x324169 = 0x1; _0x324169 < 0x7; _0x324169 += 0x2) _0x5ac4ff.push(parseInt('0x' .concat(_0x17edbf.slice(_0x324169, _0x324169 + 0x2)), 0x10));
+ for (let _0x5ac4ff = [], _0x324169 = 0x1; _0x324169 < 0x7; _0x324169 += 0x2) _0x5ac4ff.push(parseInt('0x' .concat(_0x17edbf.slice(_0x324169, _0x324169 + 0x2)), 0x10));
return _0x5ac4ff;
}
return null;
@@ -4030,104 +3975,112 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'class': this.config.classNames.video
});
_0x580edd(this.game, this.elements.wrapper);
- if ('video' !== _0xa88a13.game.tagName.toLocaleLowerCase()) {
- var _0x2c1832 = this.config.volume;
- Object.defineProperty(_0xa88a13.game, 'volume', {
+ if ('video' !== _this.game.tagName.toLocaleLowerCase()) {
+ let _0x2c1832 = this.config.volume;
+ Object.defineProperty(_this.game, 'volume', {
'get': function() {
return _0x2c1832;
},
'set': function(_0x4cca18) {
- _0x2c1832 = _0x4cca18, _0xbae705.call(_0xa88a13, _0xa88a13.game, 'volumechange');
+ _0x2c1832 = _0x4cca18, _0xbae705.call(_this, _this.game, 'volumechange');
}
});
- var _0x541fe1 = _0xa88a13.storage.get('muted');
- Object.defineProperty(_0xa88a13.game, 'muted', {
+ let _0x541fe1 = _this.storage.get('muted');
+ Object.defineProperty(_this.game, 'muted', {
'get': function() {
return _0x541fe1;
},
'set': function(_0x54b6e0) {
- var _0x2c1832 = !!_0x1e2c68.boolean(_0x54b6e0) && _0x54b6e0;
- _0x541fe1 = _0x2c1832, _0xbae705.call(_0xa88a13, _0xa88a13.game, 'volumechange');
+ let _0x2c1832 = !!_0x1e2c68.boolean(_0x54b6e0) && _0x54b6e0;
+ _0x541fe1 = _0x2c1832, _0xbae705.call(_this, _this.game, 'volumechange');
}
});
}
window.addEventListener('beforeunload', function(_0x34b11a) {
- if (_0xa88a13.started) {
+ if (_this.started && _this.getStartName()) {
_0x27f4c4.FS.syncfs(function() {});
_0x378b5c.saveSavFiles();
_0x27f4c4.FS.syncfs(function() {});
}
}, true);
+ //Wille save savefiles to indexeddb
+ window.saveSaveFiles = function() {
+ if (!_this.getStartName()) return;
+ console.log('saving save files');
+ _0x378b5c.saveSavFiles();
+ _0x27f4c4.FS.syncfs(false, function() {});
+ }
setInterval(function() {
- if (_0xa88a13.started) {
- console.log('saving save files');
- _0x378b5c.saveSavFiles();
- _0x27f4c4.FS.syncfs(false, function() {});
+ if (_this.started) {
+ saveSaveFiles();
}
}, 300000)
},
'listeners': function() {
- var _0xa88a13 = this;
- _0xa88a13.elements.buttons.restart && _0x1093f4.call(_0xa88a13, _0xa88a13.elements.buttons.restart, 'click', function(_0x5cfc51) {
+ let _this = this;
+ _this.elements.buttons.restart && _0x1093f4.call(_this, _this.elements.buttons.restart, 'click', function(_0x5cfc51) {
_0x378b5c.restartGame();
_0x378b5c.inputsData = {};
- }), _0xa88a13.elements.buttons.screenRecord && _0x1093f4.call(_0xa88a13, _0xa88a13.elements.buttons.screenRecord, 'click', function(_0x5cfc51) {
-
- if (! _0xa88a13.recordData) {
- _0xa88a13.recordData = {started:false, data:[], stopped: false}
+ saveSaveFiles();
+ });
+ _this.elements.buttons.screenRecord && _0x1093f4.call(_this, _this.elements.buttons.screenRecord, 'click', function(_0x5cfc51) {
+ if (! _this.recordData) {
+ _this.recordData = {started:false, data:[], stopped: false};
}
- if (! _0xa88a13.recordData.started) { //start recording
+ if (! _this.recordData.started) { //start recording
+ let options;
if (MediaRecorder.isTypeSupported('video/webm; codecs=h264')) {
- var options = {mimeType: 'video/webm; codecs=h264'};
+ options = {mimeType: 'video/webm; codecs=h264'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=H264')) {
- var options = {mimeType: 'video/webm; codecs=H264'};
+ options = {mimeType: 'video/webm; codecs=H264'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=vp9')) {
- var options = {mimeType: 'video/webm; codecs=vp9'};
+ options = {mimeType: 'video/webm; codecs=vp9'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=vp8')) {
- var options = {mimeType: 'video/webm; codecs=vp8'};
+ options = {mimeType: 'video/webm; codecs=vp8'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=avc1')) {
- var options = {mimeType: 'video/webm; codecs=avc1'};
+ options = {mimeType: 'video/webm; codecs=avc1'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=vp9.0')) {
- var options = {mimeType: 'video/webm; codecs=vp9.0'};
+ options = {mimeType: 'video/webm; codecs=vp9.0'};
} else if (MediaRecorder.isTypeSupported('video/webm; codecs=vp8.0')) {
- var options = {mimeType: 'video/webm; codecs=vp8.0'};
+ options = {mimeType: 'video/webm; codecs=vp8.0'};
} else {
- var options = {};
+ options = {};
}
function gotStreams(stream) {
- _0xa88a13.elements.buttons.screenRecord.querySelector('.'.concat(_0x449eac({
+ _this.elements.buttons.screenRecord.querySelector('.'.concat(_0x449eac({
'ejs__tooltip': true
- }))).innerHTML = _0xa88a13.localization('Stop Screen Recording');
- _0xa88a13.recordData.stream = stream;
- _0xa88a13.recordData.recorder = new MediaRecorder(_0xa88a13.recordData.stream, options);
- _0xa88a13.recordData.recorder.ondataavailable = function(e) {
+ }))).innerHTML = _this.localization('Stop Screen Recording');
+ _this.recordData.stream = stream;
+ _this.recordData.recorder = new MediaRecorder(_this.recordData.stream, options);
+ _this.recordData.recorder.ondataavailable = function(e) {
if (e.data.size > 0) {
- _0xa88a13.recordData.data.push(e.data)
+ _this.recordData.data.push(e.data)
}
- if (_0xa88a13.recordData.stopped) {
- var a = document.createElement("a")
- a.href = window.URL.createObjectURL(new Blob(_0xa88a13.recordData.data, {type: "video/webm"}))
- if (typeof _0xa88a13.gameName == 'string') {
- var aname = _0xa88a13.gameName
+ if (_this.recordData.stopped) {
+ let a = document.createElement("a")
+ a.href = window.URL.createObjectURL(new Blob(_this.recordData.data, {type: "video/webm"}))
+ let aname;
+ if (typeof _this.gameName == 'string') {
+ aname = _this.gameName
}
a.download = aname ? '' .concat(aname, '-recording.webm') : 'record.webm';
a.click()
window.URL.revokeObjectURL(a.href)
- delete _0xa88a13.recordData
- _0xa88a13.elements.buttons.screenRecord.querySelector('.'.concat(_0x449eac({
+ delete _this.recordData
+ _this.elements.buttons.screenRecord.querySelector('.'.concat(_0x449eac({
'ejs__tooltip': true
- }))).innerHTML = _0xa88a13.localization('Start Screen Recording');
+ }))).innerHTML = _this.localization('Start Screen Recording');
}
}
- _0xa88a13.recordData.recorder.start()
- _0xa88a13.recordData.started = true
+ _this.recordData.recorder.start()
+ _this.recordData.started = true
}
_0x27f4c4.Module.pauseMainLoop();
- _0xa88a13.playing = false;
+ _this.playing = false;
alert('please check "share system audio" to have audio in the recording. We only need the audio stream so your entire screen will not be recorded');
- var canvasStream = _0x27f4c4.Module.canvas.captureStream(30);
- var time = setTimeout(function() {
- _0xa88a13.playing = true;
+ let canvasStream = _0x27f4c4.Module.canvas.captureStream(30);
+ let time = setTimeout(function() {
+ _this.playing = true;
_0x27f4c4.Module.resumeMainLoop();
}, 20000);
navigator.mediaDevices.getDisplayMedia({
@@ -4137,69 +4090,73 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
try {
clearTimeout(time);
}catch(e){}
- var audio = stream.getAudioTracks();
- for (var i=0; i 0x0 && ((_0xfd246e = new FileReader()).file_name = _0x3fdd71[0x0].name, _0xfd246e.onload = function() {
- var _0xa88a13 = new Uint8Array(_0xfd246e.result);
- EJS_loadState(_0xa88a13);
- }, _0xfd246e.readAsArrayBuffer(_0x3fdd71[0x0])), _0xa88a13.game.stateloadField = _0x428003('input'), _0xa88a13.game.stateloadField.type = 'file', _0xa88a13.game.stateloadField.onchange = _0x17edbf;
- }, _0x1093f4.call(_0xa88a13, _0xa88a13.elements.container, 'loadstate', function(_0x13504c) {
- if (_0x378b5c.saveLoadDB.call(_0xa88a13, 'load')) {
+ EJS_loadState(new Uint8Array(_0xfd246e.result));
+ }, _0xfd246e.readAsArrayBuffer(_0x3fdd71[0x0])), _this.game.stateloadField = _0x428003('input'), _this.game.stateloadField.type = 'file', _this.game.stateloadField.onchange = _0x17edbf;
+ };
+ _0x1093f4.call(_this, _this.elements.container, 'loadstate', function(_0x13504c) {
+ if (_0x378b5c.saveLoadDB.call(_this, 'load')) {
return;
}
- _0x1e2c68.function(_0xa88a13.config.onloadstate) ? _0xa88a13.config.onloadstate.call(null, _0xa88a13.loadState) : _0xa88a13.game.stateloadField.click(), _0xa88a13.elements.container.focus();
- }), document.addEventListener('visibilitychange', function() {
+ _0x1e2c68.function(_this.config.onloadstate) ? _this.config.onloadstate.call(null, _this.loadState) : _this.game.stateloadField.click(), _this.elements.container.focus();
+ });
+ document.addEventListener('visibilitychange', function() {
'hidden' === document.visibilityState ? console.log('hidden') : console.log('active');
});
},
'bindFunction': function() {
- var _0xa88a13 = this,
- _0x17edbf = _0xa88a13.system;
+ let _this = this,
+ _0x17edbf = _this.system;
if (_0x27f4c4.Module && _0x27f4c4.Module._set_volume) {
- var _0x2c1832 = _0x27f4c4.Module.cwrap('set_volume', 'null', ['number']);
+ let _0x2c1832 = _0x27f4c4.Module.cwrap('set_volume', 'null', ['number']);
_0x378b5c.setVolume = function() {
- var _0x17edbf = 0x0;
- _0xa88a13.volume < 0x1 && (_0x17edbf = 0x0 === _0xa88a13.volume ? -0x50 : 0x1e * _0xa88a13.volume - 0x1e, _0x2c1832(_0x17edbf)), _0xa88a13.muted && (_0x17edbf = -0x50), _0x2c1832(_0x17edbf);
+ let _0x17edbf = 0x0;
+ _this.volume < 0x1 && (_0x17edbf = 0x0 === _this.volume ? -0x50 : 0x1e * _this.volume - 0x1e, _0x2c1832(_0x17edbf)), _this.muted && (_0x17edbf = -0x50), _0x2c1832(_0x17edbf);
};
}
_0x378b5c.setVariable = _0x27f4c4.Module.cwrap('set_variable', 'null', ['string', 'string']);
_0x378b5c.simulateInputFn = _0x27f4c4.Module.cwrap('simulate_input', 'null', ['number', 'number', 'number']);
_0x378b5c.simulateInput = function(_0x249751, _0x480d05, _0x50f784) {
- _0x378b5c.disableInput || _0x378b5c.simulateInputFn(_0x249751, _0x480d05, _0x50f784);
+ _0x378b5c.simulateInputFn(_0x249751, _0x480d05, _0x50f784);
};
_0x378b5c.syncInput = _0x378b5c.simulateInput;
window.simulateInput = _0x378b5c.simulateInput;
- var _0x762355 = _0x27f4c4.Module.cwrap('shader_enable', 'null', ['number']);
+ let _0x762355 = _0x27f4c4.Module.cwrap('shader_enable', 'null', ['number']);
_0x378b5c.toggleShader = function(_0x433182) {
return _0x762355(_0x433182);
}
- if (_0xa88a13.coreVer !== 2) {
+ if (_this.coreVer !== 2) {
_0x378b5c.getStateInfo = _0x27f4c4.Module.cwrap('get_state_info', 'string', []);
} else {
_0x378b5c.getInfoOfState = _0x27f4c4.Module.cwrap('get_state_info', 'string', []);
@@ -4207,12 +4164,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x378b5c.getStateInfo = function() {
_0x378b5c.getStateInfo1();
return new Promise(function(resolve, reject) {
- var a = _0x378b5c.getInfoOfState();
+ let a = _0x378b5c.getInfoOfState();
if (a) {
resolve(a);
return;
}
- var b = setInterval(function() {
+ let b = setInterval(function() {
a = _0x378b5c.getInfoOfState();
if (a) {
clearInterval(b);
@@ -4223,23 +4180,23 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}
_0x378b5c.saveState = async function() {
- var _0xa88a14;
- var _0x17edbf;
- if (_0xa88a13.coreVer !== 2) {
+ let _0xa88a14;
+ let _0x17edbf;
+ if (_this.coreVer !== 2) {
_0x17edbf = _0x378b5c.getStateInfo().split('|');
} else {
_0x17edbf = (await _0x378b5c.getStateInfo()).split('|');
}
- var _0x2c1832 = _0x17edbf[0x0] >> 0x0;
+ let _0x2c1832 = _0x17edbf[0x0] >> 0x0;
if (_0x2c1832 > 0x0) {
_0xa88a14 = new Uint8Array(_0x2c1832);
- for (var _0x2ef6be = _0x17edbf[0x1] >> 0x0, _0x3cc34b = 0x0; _0x3cc34b < _0x2c1832; _0x3cc34b++) _0xa88a14[_0x3cc34b] = _0x27f4c4.Module.getValue(_0x2ef6be + _0x3cc34b);
+ for (let _0x2ef6be = _0x17edbf[0x1] >> 0x0, _0x3cc34b = 0x0; _0x3cc34b < _0x2c1832; _0x3cc34b++) _0xa88a14[_0x3cc34b] = _0x27f4c4.Module.getValue(_0x2ef6be + _0x3cc34b);
}
return _0xa88a14;
};
- var _0x25a7a2 = _0x27f4c4.Module.cwrap('load_state', 'number', ['string', 'number']);
+ let _0x25a7a2 = _0x27f4c4.Module.cwrap('load_state', 'number', ['string', 'number']);
_0x378b5c.loadState = function(_0x4389ae, _0x1d4918) {
- var _0x91cd69;
+ let _0x91cd69;
_0x91cd69 = _0x4389ae;
try {
_0x27f4c4.FS.unlink('game.state');
@@ -4258,71 +4215,74 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x27f4c4.FS.unlink('game.state');
}, 100)
}
- _0xa88a13.elements.container.focus();
+ _this.elements.container.focus();
};
_0x27f4c4.Module._set_cheat && (_0x378b5c.setCheat = _0x27f4c4.Module.cwrap('set_cheat', 'number', ['number', 'number', 'string']));
_0x27f4c4.Module._reset_cheat && (_0x378b5c.resetCheat = _0x27f4c4.Module._reset_cheat);
_0x378b5c.quickSaveState = async function() {
- if (_0xa88a13.started) {
- if (_0xa88a13.statesSupported === false) {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'CANNOT CURRENTLY SAVE STATE';
+ if (_this.started) {
+ if (_this.statesSupported === false) {
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'CANNOT CURRENTLY SAVE STATE';
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
return;
}
+ let slot;
if (_0x2593da && typeof _0x2593da.getCoreOptionsValues == 'function') {
- var slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
+ slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
if (! slot) {
slot = 1;
}
} else {
- var slot = 1;
+ slot = 1;
}
- var name = slot + '-quick.state';
+ let name = slot + '-quick.state';
try {
_0x27f4c4.FS.unlink(name);
} catch (_0x4b4d4c) {}
try {
- var _0x17edbf = await _0x378b5c.saveState();
+ let _0x17edbf = await _0x378b5c.saveState();
_0x27f4c4.FS.createDataFile('/', name, _0x17edbf, true, true);
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'STATE SAVED TO SLOT ' + slot;
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'STATE SAVED TO SLOT ' + slot;
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
} catch(e) {
console.warn(e);
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO SAVE STATE TO SLOT ' + slot;
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO SAVE STATE TO SLOT ' + slot;
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
}
+ saveSaveFiles();
}
};
_0x378b5c.saveMsgTransitions = null;
_0x378b5c.quickLoadState = function() {
- if (_0xa88a13.started) {
- if (_0xa88a13.statesSupported === false) {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'CANNOT CURRENTLY LOAD STATE';
+ if (_this.started) {
+ if (_this.statesSupported === false) {
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'CANNOT CURRENTLY LOAD STATE';
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
return;
}
+ let slot;
if (_0x2593da && typeof _0x2593da.getCoreOptionsValues == 'function') {
- var slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
+ slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
if (! slot) {
slot = 1;
}
} else {
- var slot = 1;
+ slot = 1;
}
- var name = slot + '-quick.state';
- var success = true;
+ let name = slot + '-quick.state';
+ let success = true;
try {
_0x25a7a2(name, 0);
if ('arcade' === _0x17edbf) {
@@ -4335,26 +4295,27 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
success = false;
}
if (! success) {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO LOAD STATE FROM SLOT ' + slot;
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'FAILED TO LOAD STATE FROM SLOT ' + slot;
} else {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'LOADED STATE FROM SLOT ' + slot;
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'LOADED STATE FROM SLOT ' + slot;
}
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
+ saveSaveFiles();
}
};
_0x378b5c.changeStateSlot = function(e) {
if (_0x2593da && typeof _0x2593da.getCoreOptionsValues == 'function') {
- var slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
+ let slot = _0x2593da.getCoreOptionsValues()['save-state-slot'];
if (! slot) {
slot = 1;
}
} else {
- var slot = 1;
+ let slot = 1;
}
- var newSlot;
+ let newSlot;
if (typeof e != 'number') {
newSlot = slot + 1;
} else {
@@ -4363,21 +4324,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (newSlot > 9) {
newSlot = 1;
}
- _0x7f9f36.updateCoreOptions.call(_0xa88a13, 'save-state-slot', newSlot)
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = 'SET SAVE STATE SLOT TO ' + newSlot;
+ _0x7f9f36.updateCoreOptions.call(_this, 'save-state-slot', newSlot)
+ _this.elements.widgets.stateInfoDiv.innerHTML = 'SET SAVE STATE SLOT TO ' + newSlot;
clearTimeout(_0x378b5c.saveMsgTransitions);
_0x378b5c.saveMsgTransitions = setTimeout(function() {
- _0xa88a13.elements.widgets.stateInfoDiv.innerHTML = '';
+ _this.elements.widgets.stateInfoDiv.innerHTML = '';
}, 1500)
};
window.EJS_loadState = function(_0x4dd6a5) {
_0x378b5c.loadState(_0x4dd6a5, 0);
};
- var _0x840cf4 = _0x27f4c4.Module.cwrap('cmd_take_screenshot', '', []);
+ let _0x840cf4 = _0x27f4c4.Module.cwrap('cmd_take_screenshot', '', []);
_0x378b5c.getScreenData = function() {
- _0x378b5c.toggleShader(0x0);
_0x840cf4();
- _0x378b5c.toggleShader(0x1);
return _0x27f4c4.FS.readFile('screenshot.png');
};
_0x378b5c.restartGame = _0x27f4c4.Module.cwrap('system_restart', '', []);
@@ -4387,19 +4346,19 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x378b5c.controllers = _0x2593da.storage.get('controllers');
_0x378b5c.controllers || (_0x378b5c.controllers = JSON.parse(JSON.stringify(_0x378b5c.defaultControllers)));
}
- },
- _0xdcec2a = _0x378b5c;
+ }
+ let _0xdcec2a = _0x378b5c;
function _0x5005e6(_0x7f3270, _0x477158) {
return function(_0x20890f) {
if (Array.isArray(_0x20890f)) return _0x20890f;
}(_0x7f3270) || function(_0x557107, _0x409476) {
- var _0x2c1832 = [],
+ let _0x2c1832 = [],
_0x488a47 = true,
_0x34f76e = !0x1,
_0x19606f = void 0x0;
try {
- for (var _0x328f4d, _0x4d9086 = _0x557107[Symbol.iterator](); !(_0x488a47 = (_0x328f4d = _0x4d9086.next()).done) && (_0x2c1832.push(_0x328f4d.value), !_0x409476 || _0x2c1832.length !== _0x409476); _0x488a47 = true);
+ for (let _0x328f4d, _0x4d9086 = _0x557107[Symbol.iterator](); !(_0x488a47 = (_0x328f4d = _0x4d9086.next()).done) && (_0x2c1832.push(_0x328f4d.value), !_0x409476 || _0x2c1832.length !== _0x409476); _0x488a47 = true);
} catch (_0x13c09a) {
_0x34f76e = true, _0x19606f = _0x13c09a;
} finally {
@@ -4441,7 +4400,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},
'defaultCoreOptionsValues': function() {
- var _0xa88a13 = {};
+ let _0xa88a13 = {};
switch (this.system) {
case 'pce':
_0xa88a13 = {
@@ -4464,11 +4423,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0xa88a13;
},
'getCoreOptionsValues': function() {
- var _0xa88a13 = _0x7f9f36.storage.get('core-options');
+ let _0xa88a13 = _0x7f9f36.storage.get('core-options');
return _0x1e2c68.empty(_0xa88a13) && (_0xa88a13 = {}), _0xa88a13;
},
'getCoreOptions': function() {
- var _0xa88a13 = {};
+ let _0xa88a13 = {};
switch (this.system) {
case 'nes':
_0xa88a13.fceumm_palette = {
@@ -4981,8 +4940,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'default': 1
}
}
- if (this.statesSupported === true && window.indexedDB &&
- (typeof this.gameName == 'string' || (typeof this.config.gameUrl == 'string' && !this.config.gameUrl.startsWith('blob:')))) {
+ if (this.statesSupported === true && window.indexedDB && this.getStartName()) {
_0xa88a13['save-state-location'] = {
'label': this.localization('Save State Location'),
'options': {
@@ -4992,12 +4950,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'default': 'download'
}
}
- var _this = this;
+ let _this = this;
_0xdcec2a.getGameCoreOptions && _0xdcec2a.getGameCoreOptions().split('\n').forEach(function(_0x2bef5a, _0x49b64b) {
- var _0x5995db = _0x2bef5a.split('; '),
+ let _0x5995db = _0x2bef5a.split('; '),
_0x16274c = _0x5995db[0x0];
if (0x0 === _0x16274c.indexOf('fba-dipswitch-') || _this.coreVer === 2) {
- var _0x757776 = _0x5995db[0x1].split('|'),
+ let _0x757776 = _0x5995db[0x1].split('|'),
_0x1f895e = _0x16274c.split("|")[0].replace(/_/g, ' ').replace(/.+\-(.+)/, '$1');
_0x757776.slice(1, -1);
if (_0x757776.length === 1) return;
@@ -5014,7 +4972,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
/*
'supportNetPlay': function() {
if (this.lightgun || this.mouse) return !0x1;
- var _0xa88a13 = window.RTCPeerConnection || window.webkitPeerConnection00 || window.webkitRTCPeerConnection || window.mozRTCPeerConnection,
+ let _0xa88a13 = window.RTCPeerConnection || window.webkitPeerConnection00 || window.webkitRTCPeerConnection || window.mozRTCPeerConnection,
_0x17edbf = window.mozRTCIceCandidate || window.RTCIceCandidate,
_0x2c1832 = window.mozRTCSessionDescription || window.RTCSessionDescription;
return !!(_0xa88a13 && _0x17edbf && _0x2c1832) && !!(_0xa88a13 && 'createDataChannel' in _0xa88a13.prototype);
@@ -5043,29 +5001,29 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},
'createIcon': function(_0x43d42f, _0x42a597) {
- var _0x2c1832 = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+ let _0x2c1832 = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
_0x154f99(_0x2c1832, _0x5dc0c0(_0x42a597, {
'role': 'presentation',
'focusable': 'false'
}));
- var _0x50b7a7 = document.createElement('div');
+ let _0x50b7a7 = document.createElement('div');
_0x50b7a7.innerHTML = '' .concat(this.icons[_0x43d42f], ' ');
- for (var _0x373099 = _0x50b7a7.childNodes[0x0].childNodes, _0x804f4d = 0x0; _0x804f4d < _0x373099.length; _0x804f4d += 0x1) _0x2c1832.appendChild(_0x373099[_0x804f4d]);
+ for (let _0x373099 = _0x50b7a7.childNodes[0x0].childNodes, _0x804f4d = 0x0; _0x804f4d < _0x373099.length; _0x804f4d += 0x1) _0x2c1832.appendChild(_0x373099[_0x804f4d]);
return _0x2c1832;
},
'createLabel': function(_0x185043) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : {},
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : {},
_0x2c1832 = _0xb9b2ff.get(_0x185043, this.config),
_0x3d681f = {};
_0x3d681f[_0x17edbf.class] = true, _0x3d681f[this.config.classNames.hidden] = true;
- var _0x58a1d4 = Object.assign({}, _0x17edbf, {
+ let _0x58a1d4 = Object.assign({}, _0x17edbf, {
'class': [_0x17edbf.class, this.config.classNames.tooltip].filter(Boolean).join(' ')
});
return _0x428003('span', _0x58a1d4, _0x2c1832);
},
'createBadge': function(_0x415aef) {
if (_0x1e2c68.empty(_0x415aef)) return null;
- var _0x17edbf = _0x428003('span', {
+ let _0x17edbf = _0x428003('span', {
'class': this.config.classNames.menu.value
});
return _0x17edbf.appendChild(_0x428003('span', {
@@ -5073,12 +5031,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, _0x415aef)), _0x17edbf;
},
'createButton': function(_0x427a85, _0x493eb2) {
- var _0x2c1832, _0x325832, _0xcb618b, _0x25c678, _0x58309d = _0x428003('button'),
+ let _0x2c1832, _0x325832, _0xcb618b, _0x25c678, _0x58309d = _0x428003('button'),
_0x183584 = Object.assign({}, _0x493eb2),
_0x2345d2 = _0x9fdcea(_0x427a85),
_0x2ca20d = !0x1;
'type' in _0x183584 || (_0x183584.type = 'button');
- var _0x34225b = _0x449eac({
+ let _0x34225b = _0x449eac({
'ejs__control': true
});
switch ('class' in _0x183584 ? _0x183584.class.includes(_0x34225b) || (_0x183584.class += ' ' .concat(_0x34225b)) : _0x183584.class = _0x34225b, _0x427a85) {
@@ -5113,7 +5071,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}))) : (_0x58309d.appendChild(_0x7f9f36.createIcon.call(this, _0x325832)), _0x58309d.appendChild(_0x7f9f36.createLabel.call(this, _0x2c1832))), _0x5dc0c0(_0x183584, _0xa949a8(this.config.selectors.buttons[_0x2345d2], _0x183584)), _0x154f99(_0x58309d, _0x183584), 'play' === _0x2345d2 ? (_0x1e2c68.array(this.elements.buttons[_0x2345d2]) || (this.elements.buttons[_0x2345d2] = []), this.elements.buttons[_0x2345d2].push(_0x58309d)) : this.elements.buttons[_0x2345d2] = _0x58309d, _0x58309d;
},
'createRange': function(_0x491b4a, _0x5f154a) {
- var _0x2c1832 = _0x428003('input', _0x5dc0c0(_0xa949a8(this.config.selectors.inputs[_0x491b4a]), {
+ let _0x2c1832 = _0x428003('input', _0x5dc0c0(_0xa949a8(this.config.selectors.inputs[_0x491b4a]), {
'type': 'range',
'min': 0x0,
'max': 0x64,
@@ -5129,10 +5087,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return this.elements.inputs[_0x491b4a] = _0x2c1832, _0x7f9f36.updateRangeFill.call(this, _0x2c1832), _0x2c1832;
},
'bindMenuItemShortcuts': function(_0x1830d1, _0x2770c2) {
- var _0x2c1832 = this;
+ let _0x2c1832 = this;
_0x1093f4(_0x1830d1, 'keydown keyup', function(_0x4bb9d6) {
if ([0x20, 0x26, 0x27, 0x28].includes(_0x4bb9d6.which) && (_0x4bb9d6.preventDefault(), _0x4bb9d6.stopPropagation(), 'keydown' !== _0x4bb9d6.type)) {
- var _0x20ac7b, _0x51717d = _0x13f491(_0x1830d1, '[role="menuitemradio"]');
+ let _0x20ac7b, _0x51717d = _0x13f491(_0x1830d1, '[role="menuitemradio"]');
if (!_0x51717d && [0x20, 0x27].includes(_0x4bb9d6.which)) _0x7f9f36.showMenuPanel.call(_0x2c1832, _0x2770c2, true);
else 0x20 !== _0x4bb9d6.which && (0x28 === _0x4bb9d6.which || _0x51717d && 0x27 === _0x4bb9d6.which ? (_0x20ac7b = _0x1830d1.nextElementSibling, _0x1e2c68.element(_0x20ac7b) || (_0x20ac7b = _0x1830d1.parentNode.firstElementChild)) : (_0x20ac7b = _0x1830d1.previousElementSibling, _0x1e2c68.element(_0x20ac7b) || (_0x20ac7b = _0x1830d1.parentNode.lastElementChild)), _0x31cc23.call(_0x2c1832, _0x20ac7b, true));
}
@@ -5141,7 +5099,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
},
'createMenuItem': function(_0x52a95b) {
- var _0x17edbf = this,
+ let _0x17edbf = this,
_0x2c1832 = _0x52a95b.value,
_0x231912 = _0x52a95b.list,
_0x57313b = _0x52a95b.type,
@@ -5172,7 +5130,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), _0xb8fbbd.setAttribute('aria-checked', _0x2da7f0 ? 'true' : 'false');
}
});
- var _0x449ec7 = _0x7f9f36.getCoreOptions.call(this);
+ let _0x449ec7 = _0x7f9f36.getCoreOptions.call(this);
this.listeners.bind(_0xb8fbbd, 'click keyup', function(_0x270d0d) {
_0x1e2c68.keyboardEvent(_0x270d0d) && 0x20 !== _0x270d0d.which || (_0x270d0d.preventDefault(), _0x270d0d.stopPropagation(), _0xb8fbbd.checked = true, Object.keys(_0x7f9f36.normalOptions).includes(_0x57313b) && _0x7f9f36.updateNormalOptions.call(_0x17edbf, _0x57313b, _0x2c1832), Object.keys(_0x449ec7).includes(_0x57313b) && _0x7f9f36.updateCoreOptions.call(_0x17edbf, _0x57313b, _0x2c1832)), _0x7f9f36.showMenuPanel.call(_0x17edbf, 'home', _0x1e2c68.keyboardEvent(_0x270d0d));
}, _0x57313b, !0x1), _0x7f9f36.bindMenuItemShortcuts.call(this, _0xb8fbbd, _0x57313b), _0x231912.appendChild(_0xb8fbbd);
@@ -5181,14 +5139,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x1e2c68.element(this.elements.inputs.volume) && _0x7f9f36.setRange.call(this, this.elements.inputs.volume, this.muted ? 0x0 : this.volume), _0x1e2c68.element(this.elements.buttons.mute) && (this.elements.buttons.mute.pressed = this.muted || 0x0 === this.volume);
},
'setRange': function(_0x1c075b) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : 0x0;
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : 0x0;
_0x1e2c68.element(_0x1c075b) && (_0x1c075b.value = _0x17edbf, _0x7f9f36.updateRangeFill.call(this, _0x1c075b));
},
'updateRangeFill': function(_0x2dbde1) {
- var _0x17edbf = _0x1e2c68.event(_0x2dbde1) ? _0x2dbde1.target : _0x2dbde1;
+ let _0x17edbf = _0x1e2c68.event(_0x2dbde1) ? _0x2dbde1.target : _0x2dbde1;
if (_0x1e2c68.element(_0x17edbf) && 'range' === _0x17edbf.getAttribute('type')) {
if (_0x13f491(_0x17edbf, this.config.selectors.inputs.volume)) {
- var _0x2c1832 = 0x64 * _0x17edbf.value;
+ let _0x2c1832 = 0x64 * _0x17edbf.value;
_0x17edbf.setAttribute('aria-valuenow', _0x2c1832), _0x17edbf.setAttribute('aria-valuetext', '' .concat(_0x2c1832.toFixed(0x1), '%'));
} else _0x17edbf.setAttribute('aria-valuenow', _0x17edbf.value);
_0x59aa33.isWebkit && _0x17edbf.style.setProperty('--value', '' .concat(_0x17edbf.value / _0x17edbf.max * 0x64, '%'));
@@ -5199,7 +5157,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
'updateNormalOptions': function(_0x255b79, _0x505484) {
this.elements.settings.buttons[_0x255b79].querySelector('.' .concat(this.config.classNames.menu.value)).innerHTML = _0x7f9f36.normalOptions[_0x255b79].options[_0x505484];
- var _0x2c1832 = {};
+ let _0x2c1832 = {};
_0x2c1832[_0x255b79] = _0x505484, _0x7f9f36.storage.set(_0x2c1832), 'shader' === _0x255b79 && _0xdcec2a.setShader(_0x505484), 'virtual-gamepad' === _0x255b79 && _0xdcec2a.toggleVirtualGamepad.call(this, 'enabled' === _0x505484);
},
'updateCoreOptions': function(_0x41c4ad, _0x15823e) {
@@ -5209,7 +5167,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, 0x64), setTimeout(function() {
_0x27f4c4.Module.resumeMainLoop();
}, 0xc8)), 'nds' === this.system && _0x2d904a.wasm) {
- var _0x2c1832 = this.elements.wrapper.querySelector('canvas');
+ let _0x2c1832 = this.elements.wrapper.querySelector('canvas');
if ('screen_rotation' === _0x41c4ad) switch (_0x2c1832.style.transform = 'rotate(' + _0x15823e + 'deg)', _0x15823e) {
case '0':
_0xdcec2a.setVariable('desmume_input_rotation', '0');
@@ -5225,24 +5183,24 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
}
if ('arcade' === this.system || 'fba0.2.97.29' === this.system) {
- var _0x567ccc = this.elements.wrapper.querySelector('canvas');
+ let _0x567ccc = this.elements.wrapper.querySelector('canvas');
_0x567ccc.height = 'fba-aspect' === _0x41c4ad && 'PAR' === _0x15823e ? _0x567ccc.width / 0x10 * 0x9 : _0x567ccc.width / 0x4 * 0x3;
}
- var _0x31bdec = _0x7f9f36.getCoreOptions.call(this),
+ let _0x31bdec = _0x7f9f36.getCoreOptions.call(this),
_0x3efd0b = _0x7f9f36.storage.get('core-options');
if (_0x1e2c68.empty(_0x3efd0b) && (_0x3efd0b = {}), _0x3efd0b[_0x41c4ad] = _0x15823e, _0x7f9f36.storage.set({
'core-options': _0x3efd0b
}), this.elements.settings.buttons[_0x41c4ad]) {
- var _0xe95e6a = this.elements.settings.buttons[_0x41c4ad].querySelector('.' .concat(this.config.classNames.menu.value));
+ let _0xe95e6a = this.elements.settings.buttons[_0x41c4ad].querySelector('.' .concat(this.config.classNames.menu.value));
_0x1e2c68.object(_0x31bdec[_0x41c4ad].options) ? _0xe95e6a.innerHTML = _0x31bdec[_0x41c4ad].options[_0x15823e] : _0xe95e6a.innerHTML = _0x15823e;
}
},
'setOptionMenuItem': function(_0x2f0e6a, _0x85969e) {
- var _0x2c1832 = this,
+ let _0x2c1832 = this,
_0x549dac = this.elements.settings.panels.home.querySelector('[role="menu"]'),
_0x43777f = this.elements.settings.popup.children[0x0];
Object.keys(_0x2f0e6a).forEach(function(_0x4fcbcf) {
- var _0x177975 = _0x4fcbcf,
+ let _0x177975 = _0x4fcbcf,
_0x5f3e0f = _0x428003('button', _0x5dc0c0(_0xa949a8(_0x2c1832.config.selectors.buttons.settings), {
'type': 'button',
'class': _0x449eac({
@@ -5256,12 +5214,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x1093f4(_0x5f3e0f, 'click', function() {
_0x7f9f36.showMenuPanel.call(_0x2c1832, _0x177975, !0x1);
});
- var _0x1d5857, _0x1838f9 = _0x428003('span', null, _0x2f0e6a[_0x4fcbcf].label),
+ let _0x1d5857, _0x1838f9 = _0x428003('span', null, _0x2f0e6a[_0x4fcbcf].label),
_0x455b20 = _0x428003('span', {
'class': _0x2c1832.config.classNames.menu.value
});
_0x1e2c68.object(_0x85969e) && (_0x1d5857 = _0x85969e[_0x177975]), _0x1e2c68.empty(_0x1d5857) && (_0x1d5857 = _0x2f0e6a[_0x177975].default), _0x1e2c68.object(_0x2f0e6a[_0x177975].options) ? _0x455b20.innerHTML = _0x2f0e6a[_0x177975].options[_0x1d5857] : _0x455b20.innerHTML = _0x1d5857, _0x1838f9.appendChild(_0x455b20), _0x5f3e0f.appendChild(_0x1838f9), _0x549dac.appendChild(_0x5f3e0f);
- var _0x3f3775 = _0x428003('div', {
+ let _0x3f3775 = _0x428003('div', {
'data-pane': escape(_0x177975),
'hidden': ''
}),
@@ -5285,10 +5243,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), _0x3f3775.appendChild(_0x288440), _0x3f3775.appendChild(_0x428003('div', {
'role': 'menu'
})), _0x43777f.appendChild(_0x3f3775), _0x2c1832.elements.settings.buttons[_0x177975] = _0x5f3e0f, _0x2c1832.elements.settings.panels[_0x177975] = _0x3f3775;
- var _0x2c172f = _0x3f3775.querySelector('[role="menu"]');
+ let _0x2c172f = _0x3f3775.querySelector('[role="menu"]');
! function(_0x301c01) {
if (_0x1e2c68.element(_0x301c01))
- for (var _0x85969e = _0x301c01.childNodes.length; _0x85969e > 0x0;) _0x301c01.removeChild(_0x301c01.lastChild), _0x85969e -= 0x1;
+ for (let _0x85969e = _0x301c01.childNodes.length; _0x85969e > 0x0;) _0x301c01.removeChild(_0x301c01.lastChild), _0x85969e -= 0x1;
}(_0x2c172f), _0x1e2c68.object(_0x2f0e6a[_0x4fcbcf].options) ? Object.keys(_0x2f0e6a[_0x4fcbcf].options).forEach(function(_0x281296) {
_0x7f9f36.createMenuItem.call(_0x2c1832, {
'value': _0x281296,
@@ -5311,7 +5269,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
},
'setNormalOptionsMenu': function() {
- var _0xa88a13 = this,
+ let _this = this,
_0x17edbf = this,
_0x2c1832 = {};
_0x2c1832.orientation = _0x7f9f36.storage.get('orientation');
@@ -5321,17 +5279,17 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
})) : delete _0x7f9f36.normalOptions['virtual-gamepad'];
_0x7f9f36.setOptionMenuItem.call(this, _0x7f9f36.normalOptions, _0x2c1832);
_0x1093f4.call(_0x17edbf, _0x17edbf.elements.container, 'start-game', function() {
- var shader = _0x7f9f36.storage.get('shader');
+ let shader = _0x7f9f36.storage.get('shader');
if (shader !== 'disabled') {
_0xdcec2a.setShader(shader);
}
- var _0x2c1832 = _0xa88a13,
+ let _0x2c1832 = _this,
_0x42a7b1 = {};
_0xdcec2a.getGameCoreOptions && _0xdcec2a.getGameCoreOptions().split('\n').forEach(function(_0x4a987e, _0x10bd7a) {
- var _0x2c1832 = _0x4a987e.split('; '),
+ let _0x2c1832 = _0x4a987e.split('; '),
_0x1ddc5f = _0x2c1832[0];
if (0 === _0x1ddc5f.indexOf('fba-dipswitch-') || _0x17edbf.coreVer === 2) {
- var _0xbd808 = _0x2c1832[1].split('|'),
+ let _0xbd808 = _0x2c1832[1].split('|'),
_0x3c4b1a = _0x1ddc5f.split("|")[0].replace(/_/g, ' ').replace(/.+\-(.+)/, '$1');
_0xbd808.slice(1, -1);
if (_0xbd808.length === 1) return;
@@ -5343,7 +5301,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
};
}
});
- var _0x27d859 = _0x7f9f36.storage.get('core-options');
+ let _0x27d859 = _0x7f9f36.storage.get('core-options');
_0x7f9f36.coreOptionsValues = _0x27d859 || {};
_0x7f9f36.setOptionMenuItem.call(_0x17edbf, _0x42a7b1, _0x7f9f36.coreOptionsValues);
Object.keys(_0x7f9f36.coreOptionsValues).forEach(function(_0x51fc4e, _0x4b3613) {
@@ -5353,7 +5311,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
},
'updateCoreOptionMenuItems': function() {
- var _0xa88a13 = this.elements.settings.panels.home.querySelector('[role="menu"]'),
+ let _0xa88a13 = this.elements.settings.panels.home.querySelector('[role="menu"]'),
_0x17edbf = _0x7f9f36.getCoreOptions.call(this);
Object.keys(_0x17edbf).forEach(function(_0x20e093) {
_0xa88a13.querySelector('[item="' .concat(_0x20e093, '"]')).removeAttribute('disabled');
@@ -5361,38 +5319,38 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
'setCoreOptionsMenu': function() {
this.elements.settings.panels.home.querySelector('[role="menu"]'), this.elements.settings.popup.children[0x0];
- var _0xa88a13 = _0x7f9f36.getCoreOptions.call(this),
+ let _0xa88a13 = _0x7f9f36.getCoreOptions.call(this),
_0x17edbf = _0x7f9f36.storage.get('core-options');
_0x7f9f36.coreOptionsValues = _0x17edbf || {}, _0x7f9f36.setOptionMenuItem.call(this, _0xa88a13, _0x17edbf);
},
'checkMenu': function() {
- var _0xa88a13 = this.elements.settings.buttons;
+ let _0xa88a13 = this.elements.settings.buttons;
!_0x1e2c68.empty(_0xa88a13) && Object.values(_0xa88a13).some(function(_0x200331) {
return !_0x200331.hidden;
});
_0x132da7(this.elements.settings.menu, !0x1);
},
'focusFirstMenuItem': function(_0x303d68) {
- var _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] && arguments[0x1];
+ let _0x17edbf = arguments.length > 0x1 && void 0x0 !== arguments[0x1] && arguments[0x1];
if (!this.elements.settings.popup.hidden) {
- var _0x2c1832 = _0x303d68;
+ let _0x2c1832 = _0x303d68;
_0x1e2c68.element(_0x2c1832) || (_0x2c1832 = Object.values(this.elements.settings.panels).find(function(_0xe94c5e) {
return !_0xe94c5e.hidden;
}));
- var _0x2f3a13 = _0x2c1832.querySelector('[role^="menuitem"]');
+ let _0x2f3a13 = _0x2c1832.querySelector('[role^="menuitem"]');
_0x31cc23.call(this, _0x2f3a13, _0x17edbf);
}
},
'toggleMenu': function(_0x28d6c6) {
- var _0x17edbf = this.elements.settings.popup,
+ let _0x17edbf = this.elements.settings.popup,
_0x2c1832 = this.elements.buttons.settings;
if (_0x1e2c68.element(_0x17edbf) && _0x1e2c68.element(_0x2c1832)) {
- var _0x614270 = _0x17edbf.hidden,
+ let _0x614270 = _0x17edbf.hidden,
_0x14f1b5 = _0x614270;
if (_0x1e2c68.boolean(_0x28d6c6)) _0x14f1b5 = _0x28d6c6;
else if (_0x1e2c68.keyboardEvent(_0x28d6c6) && 0x1b === _0x28d6c6.which) _0x14f1b5 = !0x1;
else if (_0x1e2c68.event(_0x28d6c6)) {
- var _0xcf75ac = _0x17edbf.contains(_0x28d6c6.target);
+ let _0xcf75ac = _0x17edbf.contains(_0x28d6c6.target);
if (_0xcf75ac || !_0xcf75ac && _0x28d6c6.target !== _0x2c1832 && _0x14f1b5) return;
}
_0x2c1832.setAttribute('aria-expanded', _0x14f1b5);
@@ -5402,12 +5360,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},
'getMenuSize': function(_0x55fe13) {
- var _0x17edbf = _0x55fe13.cloneNode(true);
+ let _0x17edbf = _0x55fe13.cloneNode(true);
_0x17edbf.style.position = 'absolute';
_0x17edbf.style.opacity = 0;
_0x17edbf.removeAttribute('hidden');
_0x55fe13.parentNode.appendChild(_0x17edbf);
- var _0x2c1832 = _0x17edbf.scrollWidth,
+ let _0x2c1832 = _0x17edbf.scrollWidth,
_0x5edd1b = _0x17edbf.scrollHeight;
return _0x12a55d(_0x17edbf), {
'width': _0x2c1832,
@@ -5416,21 +5374,21 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
},
'showLoadStatePanel': function() {},
'showMenuPanel': function() {
- var _0xa88a13 = this,
+ let _this = this,
_0x17edbf = arguments.length > 0x0 && void 0x0 !== arguments[0x0] ? arguments[0x0] : '',
_0x2c1832 = arguments.length > 0x1 && void 0x0 !== arguments[0x1] && arguments[0x1],
_0x7f4281 = _0x530042.call(this, '[data-pane="' .concat(escape(_0x17edbf), '"]'));
if (_0x1e2c68.element(_0x7f4281)) {
- var _0x3d6729 = _0x7f4281.parentNode,
+ let _0x3d6729 = _0x7f4281.parentNode,
_0x381f57 = Array.from(_0x3d6729.children).find(function(_0x57c652) {
return !_0x57c652.hidden;
});
if (_0x2d904a.transitions && !_0x2d904a.reducedMotion) {
_0x3d6729.style.width = '' .concat(_0x381f57.scrollWidth, 'px');
_0x3d6729.style.height = '' .concat(_0x381f57.scrollHeight, 'px');
- var _0x29dd37 = _0x7f9f36.getMenuSize.call(this, _0x7f4281),
+ let _0x29dd37 = _0x7f9f36.getMenuSize.call(this, _0x7f4281),
_0x37447f = function _0x17edbf(_0x40854f) {
- _0x40854f.target === _0x3d6729 && ['width', 'height'].includes(_0x40854f.propertyName) && (_0x3d6729.style.width = '', _0x3d6729.style.height = '', _0x20109b.call(_0xa88a13, _0x3d6729, _0x5a2767, _0x17edbf));
+ _0x40854f.target === _0x3d6729 && ['width', 'height'].includes(_0x40854f.propertyName) && (_0x3d6729.style.width = '', _0x3d6729.style.height = '', _0x20109b.call(_this, _0x3d6729, _0x5a2767, _0x17edbf));
};
_0x1093f4.call(this, _0x3d6729, _0x5a2767, _0x37447f), _0x3d6729.style.width = '' .concat(_0x29dd37.width, 'px'), _0x3d6729.style.height = '' .concat(_0x29dd37.height, 'px');
}
@@ -5444,7 +5402,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'aria-haspopup': true,
'aria-expanded': !0x1
}));
- var _0x2c1832 = _0x428003('div', {
+ let _0x2c1832 = _0x428003('div', {
'class': _0x449eac({
'ejs__dialog': true,
'ejs__load-state__container': true
@@ -5462,13 +5420,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (! window.MediaRecorder) {
return;
};
- var _0x2c1832 = _0x7f9f36.createButton.call(this, 'screen-record', {
+ let _0x2c1832 = _0x7f9f36.createButton.call(this, 'screen-record', {
'aria-haspopup': true,
'aria-expanded': !0x1,
'style': 'margin-right:auto;'
});
_0x4c3fdd.appendChild(_0x2c1832);
- var _0x13c0e4 = _0x428003('div', {
+ let _0x13c0e4 = _0x428003('div', {
'class': _0x449eac({
'ejs__dialog': true,
'ejs__screenRecord__container': true
@@ -5483,13 +5441,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.elements.dialogs.screenRecord = _0x13c0e4;
},
'setGamepad': function(_0x4c3fdd, _0x289259) {
- var _0x2c1832 = _0x7f9f36.createButton.call(this, 'gamepad', {
+ let _0x2c1832 = _0x7f9f36.createButton.call(this, 'gamepad', {
'aria-haspopup': true,
'aria-expanded': !0x1,
'style': 'margin-right:auto;'
});
_0x4c3fdd.appendChild(_0x2c1832);
- var _0x13c0e4 = _0x428003('div', {
+ let _0x13c0e4 = _0x428003('div', {
'class': _0x449eac({
'ejs__dialog': true,
'ejs__gamepad__container': true
@@ -5504,13 +5462,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.elements.dialogs.gamepad = _0x13c0e4;
},
'setCheat': function(_0x328075, _0x21ca37) {
- var _0x2c1832 = _0x7f9f36.createButton.call(this, 'cheat', {
+ let _0x2c1832 = _0x7f9f36.createButton.call(this, 'cheat', {
'aria-haspopup': true,
'aria-expanded': !0x1,
'style': 'margin-right:auto;'
});
_0x328075.appendChild(_0x2c1832);
- var _0x173db3 = _0x428003('div', {
+ let _0x173db3 = _0x428003('div', {
'class': _0x449eac({
'ejs__dialog': true,
'ejs__cheat__container': true
@@ -5525,7 +5483,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.elements.dialogs.cheat = _0x173db3;
},
'setStateInfoBarWidget': function() {
- var _0xa88a13 = _0x428003('div', {
+ let _0xa88a13 = _0x428003('div', {
'class': _0x449eac({
'ejs__widget': true
})
@@ -5540,7 +5498,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.elements.widgets.stateInfoDiv = _0x17edbf;
},/*
'setNetplayWidgets': function() {
- var _0xa88a13 = _0x428003('div', {
+ let _0xa88a13 = _0x428003('div', {
'class': _0x449eac({
'ejs__widget': true,
'ejs__widget_netplay': true
@@ -5558,7 +5516,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'aria-haspopup': true,
'aria-expanded': !0x1
}));
- var _0x2c1832 = _0x428003('div', {
+ let _0x2c1832 = _0x428003('div', {
'class': _0x449eac({
'ejs__dialog': true,
'ejs__netplay__container': true
@@ -5577,20 +5535,20 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0x350d73(_0x24b1f3.target, _0x449eac({
'ejs__dialogs': true
}))) {
- var _0x2c1832 = _0x7f9f36.contextMenu.timer;
+ let _0x2c1832 = _0x7f9f36.contextMenu.timer;
if (this.started) {
- var _0x2a1dda = _0x530042.call(this, '.' .concat(_0x449eac({
+ let _0x2a1dda = _0x530042.call(this, '.' .concat(_0x449eac({
'ejs__contextmenu': true
}), ' ul'));
if (_0x4b9d55) {
_0x7f9f36.contextMenu.style.display = 'block';
_0x7f9f36.contextMenu.style.left = ''.concat(_0x24b1f3.layerX, 'px');
_0x7f9f36.contextMenu.style.top = ''.concat(_0x24b1f3.layerY, 'px');
- var _0x1b48e7 = _0x23ffa1.call(this, '.' .concat(_0x449eac({
+ let _0x1b48e7 = _0x23ffa1.call(this, '.' .concat(_0x449eac({
'ejs__contextmenu': true
}), ' ul li'));
if (null === _0x2a1dda.getAttribute('menu')) {
- var _0x14264d = _0x428003('li', {});
+ let _0x14264d = _0x428003('li', {});
_0x14264d.appendChild(_0x428003('a', {
'target': '_blank',
'href': 'https://github.com/ethanaobrien/emulatorjs' // Modifying this is against the terms of service
@@ -5604,37 +5562,38 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
},
'create': function(_0x42e40d) {
- var _0xa88a13 = this;
+ let _this = this;
_0x7f9f36.storage = new _0x2f61ba(this, 'ejs_' .concat(this.system, '_settings'));
- var _0x17edbf = _0x428003('div', _0xa949a8(this.config.selectors.controls.wrapper));
+ let _0x17edbf = _0x428003('div', _0xa949a8(this.config.selectors.controls.wrapper));
_0x7f9f36.contextMenu = _0x428003('div', {
'class': _0x449eac({
'ejs__contextmenu': true
}),
'style': 'position: absolute; display:none;z-index:9'
})
- var contextHtml = ['']
- var contextFunctions = []
+ let contextHtml = ['']
+ let contextFunctions = []
function addContextHtml(title, hidden, functi0n) {
if (typeof functi0n == 'function') {
contextFunctions.push(functi0n)
} else {
contextFunctions.push(function(){})
}
- var i = contextHtml.length - 1
+ let i = contextHtml.length - 1
if (hidden) {
contextHtml.splice(i, 0, ''+title+' ')
} else {
contextHtml.splice(i, 0, ''+title+' ')
}
}
- addContextHtml(_0xa88a13.localization('Take Screenshot'), false, function(_0x20faaa) {
- var _0x4e898a = _0x378b5c.getScreenData();
- if (typeof _0xa88a13.gameName == 'string') {
- var gamep = _0xa88a13.gameName
+ addContextHtml(_this.localization('Take Screenshot'), false, function(_0x20faaa) {
+ let _0x4e898a = _0x378b5c.getScreenData();
+ let gamep;
+ if (typeof _this.gameName == 'string') {
+ gamep = _this.gameName
}
- var gamepng = gamep ? '' .concat(gamep, '-screenshot.png') : 'game.png';
- var a = document.createElement('a');
+ let gamepng = gamep ? '' .concat(gamep, '-screenshot.png') : 'game.png';
+ let a = document.createElement('a');
a.href = URL.createObjectURL(new Blob([_0x4e898a]));
a.download = gamepng;
a.click();
@@ -5643,25 +5602,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
})
return false;
})
- addContextHtml(_0xa88a13.localization('Cache Manage'), true, function(_0x275730) {
+ addContextHtml(_this.localization('Cache Manage'), true, function(_0x275730) {
if (_0x27f4c4.romdb) {
- _0x132da7(_0xa88a13.elements.dialogs.cache, !0x1);
- var _0x3360eb = _0xa88a13.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content']));
- _0x3360eb.innerHTML = ''+_0xa88a13.localization('Loading')+'
', _0x27f4c4.romdb.getAll(function(_0x43586d) {
+ _0x132da7(_this.elements.dialogs.cache, !0x1);
+ let _0x3360eb = _this.elements.dialogs.cache.querySelector('.' .concat(_0x378b5c.classNames['dialog-content']));
+ _0x3360eb.innerHTML = ''+_this.localization('Loading')+'
', _0x27f4c4.romdb.getAll(function(_0x43586d) {
if (_0x43586d) {
- var _0x275730 = _0x428003('table', {
+ let _0x275730 = _0x428003('table', {
'style': 'width:100%;padding-left:10px;text-align:left'
}),
_0x1ab9e9 = _0x428003('tbody');
_0x43586d.length > 0x0 ? (_0x3360eb.innerHTML = '', _0x43586d.forEach(function(_0x32b0b7, _0x2d0e11) {
if (_0x32b0b7.key && !/-part-\d+$/ .test(_0x32b0b7.key)) {
- for (var _0x3360eb = Math.ceil(_0x32b0b7.filesize / 0x6400000), _0x277c67 = [_0x32b0b7.key], _0x3edb35 = 0x1; _0x3edb35 < _0x3360eb; _0x3edb35 += 0x1) _0x277c67.push('' .concat(_0x32b0b7.key, '-part-').concat(_0x3edb35));
- var _0x3e31f6 = _0x428003('tr'),
+ for (let _0x3360eb = Math.ceil(_0x32b0b7.filesize / 0x6400000), _0x277c67 = [_0x32b0b7.key], _0x3edb35 = 0x1; _0x3edb35 < _0x3360eb; _0x3edb35 += 0x1) _0x277c67.push('' .concat(_0x32b0b7.key, '-part-').concat(_0x3edb35));
+ let _0x3e31f6 = _0x428003('tr'),
_0x5b75bd = _0x428003('td'),
_0x227405 = _0x428003('td'),
_0xac150b = _0x428003('td');
_0x5b75bd.innerHTML = _0x32b0b7.filename, _0x227405.innerHTML = function(_0x1858c1) {
- var _0x2d0e11 = -0x1;
+ let _0x2d0e11 = -0x1;
do {
_0x1858c1 /= 0x400, _0x2d0e11++;
} while (_0x1858c1 > 0x400);
@@ -5674,31 +5633,31 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0x16f22a.stopPropagation(), !0x1;
};
}
- }), _0x275730.appendChild(_0x1ab9e9), _0x3360eb.appendChild(_0x275730)) : _0x3360eb.innerHTML = ''+_0xa88a13.localization('Empty')+'
';
- } else _0x3360eb.innerHTML = ''+_0xa88a13.localization('Empty')+'
';
+ }), _0x275730.appendChild(_0x1ab9e9), _0x3360eb.appendChild(_0x275730)) : _0x3360eb.innerHTML = ''+_this.localization('Empty')+'
';
+ } else _0x3360eb.innerHTML = ''+_this.localization('Empty')+'
';
}, function() {});
}
return false;
})
- addContextHtml(_0xa88a13.localization('Quick Save')+' (F2)', false, function(_0x395c73) {
+ addContextHtml(_this.localization('Quick Save')+' (F2)', false, function(_0x395c73) {
_0x378b5c.quickSaveState();
_0x2593da.contextMenu.style.display = 'none';
})
- addContextHtml(_0xa88a13.localization('Quick Load')+' (F4)', false, function(_0x124f69) {
+ addContextHtml(_this.localization('Quick Load')+' (F4)', false, function(_0x124f69) {
_0x378b5c.quickLoadState();
_0x2593da.contextMenu.style.display = 'none';
})
_0x7f9f36.contextMenu.innerHTML = contextHtml.join('')
- var a = _0x7f9f36.contextMenu.getElementsByTagName('li')
- for (var i=0; i ',
'exit-fullscreen': ' ',
@@ -5806,9 +5765,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'volume': ' \n \n ',
'cheat': ' '
}, this.id = Math.floor(0x2710 * Math.random());
- var _0x17edbf = null;
+ let _0x17edbf = null;
this.elements.controls = null;
- var _0x2c1832 = {
+ let _0x2c1832 = {
'id': this.id
},
_0x270a9e = true;
@@ -5818,25 +5777,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'speed': this.speed,
'quality': this.quality
}), _0x270a9e = !0x1);
- var _0x1e6644, _0x3ec218 = function(_0x406126) {
- var _0x17edbf = _0x406126;
+ let _0x1e6644, _0x3ec218 = function(_0x406126) {
+ let _0x17edbf = _0x406126;
return Object.entries(_0x2c1832).forEach(function(_0x3e992c) {
- var _0x2c1832 = _0x5005e6(_0x3e992c, 0x2),
+ let _0x2c1832 = _0x5005e6(_0x3e992c, 0x2),
_0x47c2ec = _0x2c1832[0x0],
_0x547588 = _0x2c1832[0x1];
_0x17edbf = _0x1a0e98(_0x17edbf, '{' .concat(_0x47c2ec, '}'), _0x547588);
}), _0x17edbf;
};
if (_0x270a9e && (_0x1e2c68.string(this.config.controls) ? _0x17edbf = _0x3ec218(_0x17edbf) : _0x1e2c68.element(_0x17edbf) && (_0x17edbf.innerHTML = _0x3ec218(_0x17edbf.innerHTML))), _0x1e2c68.string(this.config.selectors.controls.container) && (_0x1e6644 = document.querySelector(this.config.selectors.controls.container)), _0x1e2c68.element(_0x1e6644) || (_0x1e6644 = this.elements.container), _0x1e6644[_0x1e2c68.element(_0x17edbf) ? 'insertAdjacentElement' : 'insertAdjacentHTML']('afterbegin', _0x17edbf), _0x1e2c68.element(this.elements.controls) || _0x7f9f36.findElements.call(this), !_0x1e2c68.empty(this.elements.buttons)) {
- var _0xe8272c = function(_0x176a3e) {
- var _0x2c1832 = _0xa88a13.config.classNames.controlPressed;
+ let _0xe8272c = function(_0x176a3e) {
+ let _0x2c1832 = _this.config.classNames.controlPressed;
Object.defineProperty(_0x176a3e, 'pressed', {
'enumerable': true,
'get': function() {
return _0x350d73(_0x176a3e, _0x2c1832);
},
'set': function() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] && arguments[0x0];
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] && arguments[0x0];
_0x3a8e2f(_0x176a3e, _0x2c1832, _0xa88a13);
}
});
@@ -5851,29 +5810,29 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x2593da = _0x7f9f36;
function _0x28bdca(_0x5c50c3, _0x217698) {
- for (var _0x2c1832 = 0x0; _0x2c1832 < _0x217698.length; _0x2c1832++) {
- var _0x172cdb = _0x217698[_0x2c1832];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x217698.length; _0x2c1832++) {
+ let _0x172cdb = _0x217698[_0x2c1832];
_0x172cdb.enumerable = _0x172cdb.enumerable || !0x1, _0x172cdb.configurable = true, 'value' in _0x172cdb && (_0x172cdb.writable = true), Object.defineProperty(_0x5c50c3, _0x172cdb.key, _0x172cdb);
}
}
function _0x238270() {
if (this.enabled) {
- var _0xa88a13 = this.player.elements.buttons.fullscreen;
+ let _0xa88a13 = this.player.elements.buttons.fullscreen;
_0x1e2c68.element(_0xa88a13) && (_0xa88a13.pressed = this.active), _0xbae705.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true), _0x59aa33.isIos || _0x5e0c7d.call(this.player, this.target, this.active);
}
}
function _0x3c983f() {
- var _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] && arguments[0x0];
+ let _0xa88a13 = arguments.length > 0x0 && void 0x0 !== arguments[0x0] && arguments[0x0];
_0xa88a13 ? this.scrollPosition = {
'x': window.scrollX || 0x0,
'y': window.scrollY || 0x0
} : window.scrollTo(this.scrollPosition.x, this.scrollPosition.y), document.body.style.overflow = _0xa88a13 ? 'hidden' : '', _0x3a8e2f(this.target, this.player.config.classNames.fullscreen.fallback, _0xa88a13), _0x238270.call(this);
}
- var _0x335854 = function() {
+ let _0x335854 = function() {
function _0x1339df(_0x5f19c6) {
- var _0x2c1832 = this;
+ let _0x2c1832 = this;
! function(_0x143a8a, _0x32a0a1) {
if (!(_0x143a8a instanceof _0x32a0a1)) throw new TypeError('Cannot call a class as a function');
}(this, _0x1339df), this.player = _0x5f19c6, this.prefix = _0x1339df.prefix, this.property = _0x1339df.property, this.scrollPosition = {
@@ -5884,7 +5843,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), this.update();
}
- var _0x17edbf, _0x2c1832, _0x50d347;
+ let _0x17edbf, _0x2c1832, _0x50d347;
_0x17edbf = _0x1339df
@@ -5897,7 +5856,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'key': 'prefix',
'get': function() {
if (_0x1e2c68.function(document.exitFullscreen)) return '';
- var _0x1339df = '';
+ let _0x1339df = '';
return ['webkit', 'moz', 'ms'].some(function(_0xc1e0c3) {
return !(!_0x1e2c68.function(document['' .concat(_0xc1e0c3, 'ExitFullscreen')]) && !_0x1e2c68.function(document['' .concat(_0xc1e0c3, 'CancelFullScreen')]) || (_0x1339df = _0xc1e0c3, 0x0));
}), _0x1339df;
@@ -5926,7 +5885,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
if (_0x1339df.native)
if (this.prefix) {
if (!_0x1e2c68.empty(this.prefix)) {
- var _0x17edbf = 'moz' === this.prefix ? 'Cancel' : 'Exit';
+ let _0x17edbf = 'moz' === this.prefix ? 'Cancel' : 'Exit';
document['' .concat(this.prefix).concat(_0x17edbf).concat(this.property)]();
}
} else(document.cancelFullScreen || document.exitFullscreen).call(document);
@@ -5962,12 +5921,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
function _0x42b437(_0x458e02, _0x5729e1) {
if (Array.isArray(_0x458e02)) return _0x458e02;
- var _0x2c1832 = [],
+ let _0x2c1832 = [],
_0x2e7aa7 = true,
_0x393a5f = false,
_0x3b4eca = void 0x0;
try {
- for (var _0x1aca09, _0x1bb8de = _0x458e02[Symbol.iterator](); !(_0x2e7aa7 = (_0x1aca09 = _0x1bb8de.next()).done) && (_0x2c1832.push(_0x1aca09.value), !_0x5729e1 || _0x2c1832.length !== _0x5729e1); _0x2e7aa7 = true);
+ for (let _0x1aca09, _0x1bb8de = _0x458e02[Symbol.iterator](); !(_0x2e7aa7 = (_0x1aca09 = _0x1bb8de.next()).done) && (_0x2c1832.push(_0x1aca09.value), !_0x5729e1 || _0x2c1832.length !== _0x5729e1); _0x2e7aa7 = true);
} catch (_0x190997) {
_0x393a5f = true, _0x3b4eca = _0x190997;
} finally {
@@ -5980,7 +5939,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0x2c1832;
throw new TypeError('Invalid attempt to destructure non-iterable instance');
}
- var _0x37093c = function() {
+ let _0x37093c = function() {
function _0x31e271(_0x948a97) {
! function(_0x3adedc, _0x5952e9) {
if (!(_0x3adedc instanceof _0x5952e9)) throw new TypeError('Cannot call a class as a function');
@@ -5991,25 +5950,25 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x2593da.toggleMenu.call(this.emulator, _0x3156ad);
},
firstTouch: function() {
- var _0x31e271 = this.emulator,
+ let _0x31e271 = this.emulator,
_0x17edbf = _0x31e271.elements;
_0x31e271.touch = true, _0x3a8e2f(_0x17edbf.container, _0x31e271.config.classNames.isTouch, true);
},
setTabFocus: function(_0x20bf1f) {
- var _0x17edbf = this.emulator,
+ let _0x17edbf = this.emulator,
_0x2c1832 = _0x17edbf.elements,
_0x48d087 = _0x17edbf;
if (clearTimeout(this.focusTimer), 'keydown' !== _0x20bf1f.type || 0x9 === _0x20bf1f.which) {
'keydown' === _0x20bf1f.type && (this.lastKeyDown = _0x20bf1f.timeStamp);
- var _0x27d4ad, _0x967a30 = _0x20bf1f.timeStamp - this.lastKeyDown <= 0x14;
+ let _0x27d4ad, _0x967a30 = _0x20bf1f.timeStamp - this.lastKeyDown <= 0x14;
('focus' !== _0x20bf1f.type || _0x967a30) && (_0x27d4ad = _0x48d087.config.classNames.tabFocus, _0x3a8e2f(_0x23ffa1.call(_0x48d087, '.' .concat(_0x27d4ad)), _0x27d4ad, !0x1), this.focusTimer = setTimeout(function() {
- var _0x20bf1f = document.activeElement;
+ let _0x20bf1f = document.activeElement;
_0x2c1832.container.contains(_0x20bf1f) && _0x3a8e2f(document.activeElement, _0x48d087.config.classNames.tabFocus, true);
}, 0xa));
}
},
global: function() {
- var _0x31e271 = !(arguments.length > 0x0 && void 0x0 !== arguments[0x0]) || arguments[0x0],
+ let _0x31e271 = !(arguments.length > 0x0 && void 0x0 !== arguments[0x0]) || arguments[0x0],
_0x17edbf = this.emulator,
_0x2c1832 = _0x17edbf;
_0x1ef215.call(_0x2c1832, document.body, 'click', this.toggleMenu, _0x31e271), _0x455c85.call(_0x2c1832, document.body, 'touchstart', this.firstTouch), _0x1ef215.call(_0x2c1832, document.body, 'keydown focus blur', this.setTabFocus, _0x31e271, !0x1, true), _0x1093f4.call(_0x2c1832, document.body, 'keyup', function(_0x4e289a) {
@@ -6017,14 +5976,14 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
});
},
container: function() {
- var _0x31e271, _0x17edbf = this.emulator,
+ let _0x31e271, _0x17edbf = this.emulator,
_0x2c1832 = _0x17edbf.elements,
_0x45d275 = _0x17edbf,
setFullscreenInterval = null;
_0x1093f4.call(_0x45d275, _0x2c1832.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen start-game', function(_0x1ac81c) {
- var _0x3953b5 = _0x2c1832.controls;
+ let _0x3953b5 = _0x2c1832.controls;
_0x3953b5 && 'enterfullscreen' === _0x1ac81c.type && (_0x3953b5.pressed = !0x1, _0x3953b5.hover = !0x1);
- var _0x2c3de3 = 0x0;
+ let _0x2c3de3 = 0x0;
if (['touchstart', 'touchmove', 'mousemove', 'start-game'].includes(_0x1ac81c.type)) {
if (_0x17edbf.system == 'nds' && _0x1ac81c.type == 'mousemove' && _0x27f4c4 && _0x27f4c4.Module && _0x27f4c4.Module.canvas && (document.pointerLockElement === _0x27f4c4.Module.canvas || document.mozPointerLockElement === _0x27f4c4.Module.canvas)) {
_0x5ab74d.toggleControls.call(_0x45d275, false);
@@ -6041,7 +6000,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
};
}), _0x1093f4.call(_0x45d275, window, 'resize', function(_0x3e2cc5) {
- var _0x17edbf = _0x45d275.elements.container.clientHeight,
+ let _0x17edbf = _0x45d275.elements.container.clientHeight,
_0x2c1832 = _0x23ffa1.call(_0x45d275, '.' .concat(_0x449eac({
'ejs__menu__container': true
}), ' [role="menu"]'));
@@ -6063,7 +6022,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}catch(e){}
}
if (_0x45d275.coreVer === 2 && _0x27f4c4.Module) {
- var repeat = 50;
+ let repeat = 50;
clearInterval(setFullscreenInterval);
setFullscreenInterval = setInterval(function() {
_0x27f4c4.Module.setCanvasSize(window.innerWidth, window.innerHeight);
@@ -6094,24 +6053,24 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0xbae705.call(_0x45d275, window, 'resize');
}, 0x12c);
}), _0x1093f4.call(_0x45d275, _0x45d275.elements.container, 'start-game', function(_0x5b0a00) {
- var _0x17edbf = window.document.createEvent('UIEvents');
+ let _0x17edbf = window.document.createEvent('UIEvents');
_0x17edbf.initUIEvent('resize', true, !0x1, window, 0x0), window.dispatchEvent(_0x17edbf), _0x3a8e2f(_0x45d275.elements.container, _0x449eac({
'game-started': true
}), true);
}), _0x1093f4.call(_0x45d275, _0x45d275.elements.container, 'blur', function(_0x893c7a) {
- var _0x17edbf = _0x893c7a.currentTarget;
+ let _0x17edbf = _0x893c7a.currentTarget;
setTimeout(function() {
_0x17edbf.contains(document.activeElement) || _0xbae705.call(_0x45d275, _0x45d275.elements, 'blurgame');
}, 0x0);
}), _0x1093f4.call(_0x45d275, _0x45d275.elements.container, 'focus', function(_0xe0dee3) {
- var _0x17edbf = _0xe0dee3.currentTarget;
+ let _0x17edbf = _0xe0dee3.currentTarget;
setTimeout(function() {
_0x17edbf.contains(document.activeElement) && _0xbae705.call(_0x45d275, _0x45d275.elements, 'focusgame');
}, 0x0);
});
},
media: function() {
- var _0x31e271 = this.emulator,
+ let _0x31e271 = this.emulator,
_0x17edbf = _0x31e271.elements,
_0x2c1832 = _0x31e271;
_0x1093f4.call(_0x2c1832, _0x2c1832.game, 'volumechange', function(_0x3099fe) {
@@ -6138,21 +6097,21 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'muted': _0x2c1832.muted
}), _0xdcec2a.setVolume && _0xdcec2a.setVolume();
});
- var _0x38e17f = _0x2c1832.config.events.concat(['keyup', 'keydown']).join(' ');
+ let _0x38e17f = _0x2c1832.config.events.concat(['keyup', 'keydown']).join(' ');
_0x1093f4.call(_0x2c1832, _0x2c1832.game, _0x38e17f, function(_0x38e438) {
- var _0x2b4804 = _0x38e438.detail,
+ let _0x2b4804 = _0x38e438.detail,
_0x1bfeb2 = void 0x0 === _0x2b4804 ? {} : _0x2b4804;
'error' === _0x38e438.type && (_0x1bfeb2 = _0x2c1832.game.error), _0xbae705.call(_0x2c1832, _0x17edbf.container, _0x38e438.type, true, _0x1bfeb2);
});
},
proxy: function(_0x52d0c2, _0x500f90, _0x175ce5) {
- var _0x4bb44e = this.emulator,
+ let _0x4bb44e = this.emulator,
_0x584a64 = _0x4bb44e.config.listeners[_0x175ce5],
_0x5269fd = true;
_0x1e2c68.function(_0x584a64) && (_0x5269fd = _0x584a64.call(_0x4bb44e, _0x52d0c2)), _0x5269fd && _0x1e2c68.function(_0x500f90) && _0x500f90.call(_0x4bb44e, _0x52d0c2);
},
bind: function(_0x4a8d46, _0x8f91ad, _0x2affda, _0x41dfb1) {
- var _0x1363b1 = this,
+ let _0x1363b1 = this,
_0x53b9a1 = !(arguments.length > 0x4 && void 0x0 !== arguments[0x4]) || arguments[0x4],
_0x5209a5 = this.emulator,
_0x27b738 = _0x5209a5,
@@ -6163,7 +6122,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, _0x53b9a1 && !_0x100c9f);
},
controls: function() {
- var _0x31e271 = this,
+ let _0x31e271 = this,
_0x17edbf = this.emulator,
_0x2c1832 = _0x17edbf.elements,
_0x127f22 = _0x59aa33.isIE ? 'change' : 'input';
@@ -6174,9 +6133,10 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, 'fullscreen'), this.bind(_0x2c1832.buttons.gamepad, 'click', function() {
_0x5ab74d.toggleControls.call(_0x17edbf, !0x1), _0x132da7(_0x2c1832.dialogs.gamepad, !0x1);
}, 'mute'), this.bind(_0x2c1832.buttons.saveState, 'click', function() {
+ saveSaveFiles();
(async function() {
_0xbae705.call(_0x17edbf, _0x17edbf.elements.container, 'savestate-start', false, {});
- var _0x31e271 = await _0xdcec2a.saveState(),
+ let _0x31e271 = await _0xdcec2a.saveState(),
_0x2c1832 = _0xdcec2a.getScreenData();
if (_0x378b5c.saveLoadDB.call(_0x17edbf, 'save')) {
@@ -6187,16 +6147,18 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'state': _0x31e271
});
else {
- var _0x2b5fc8 = new Blob([_0x31e271]),
- _0x152605 = _0x17edbf.startName.split('/').pop().split('.'),
- _0x51d471 = _0x152605.slice(0x0, _0x152605.length - 0x1).join('.');
- if (typeof _0x17edbf.gameName == 'string') {
- var _0x51d471 = _0x17edbf.gameName
+ let name = _0x17edbf.getStartName(true, true).split('/').pop();
+ let data = new Blob([_0x31e271]);
+ if (name.includes('.')) {
+ name = name.substring(0, name.length-name.split('.').pop().length-1);
}
- var _0x49f6b6 = _0x51d471 ? '' .concat(_0x51d471, '.state') : 'game.state';
- var a = document.createElement('a');
+ if (typeof _0x17edbf.gameName == 'string') {
+ name = _0x17edbf.gameName
+ }
+ let _0x49f6b6 = name ? '' .concat(name, '.state') : 'game.state';
+ let a = document.createElement('a');
a.download = _0x49f6b6;
- a.href = URL.createObjectURL(_0x2b5fc8);
+ a.href = URL.createObjectURL(data);
a.click();
setTimeout(function() {
URL.revokeObjectURL(a.href);
@@ -6209,12 +6171,12 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, 'mute'), this.bind(_0x2c1832.buttons.settings, 'click', function(_0x1396ee) {
_0x1396ee.stopPropagation(), _0x2593da.toggleMenu.call(_0x17edbf, _0x1396ee);
}), this.bind(_0x2c1832.buttons.settings, 'keyup', function(_0x454936) {
- var _0x2c1832 = _0x454936.which;
+ let _0x2c1832 = _0x454936.which;
[0xd, 0x20].includes(_0x2c1832) && (0xd !== _0x2c1832 ? (_0x454936.preventDefault(), _0x454936.stopPropagation(), _0x2593da.toggleMenu.call(_0x17edbf, _0x454936)) : _0x2593da.focusFirstMenuItem.call(_0x17edbf, null, true));
}, null, !0x1), this.bind(_0x2c1832.settings.menu, 'keydown', function(_0x40072c) {
0x1b === _0x40072c.which && _0x2593da.toggleMenu.call(_0x17edbf, _0x40072c);
}), _0x59aa33.isIos) {
- var _0x4bd188 = _0x23ffa1.call(_0x17edbf, 'input[type="range"]');
+ let _0x4bd188 = _0x23ffa1.call(_0x17edbf, 'input[type="range"]');
Array.from(_0x4bd188).forEach(function(_0x345e4c) {
return _0x31e271.bind(_0x345e4c, _0x127f22, function(_0x58e6a9) {
return _0x2b30e0(_0x58e6a9.target);
@@ -6232,16 +6194,16 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}), this.bind(_0x2c1832.controls, 'mousedown mouseup touchstart touchend touchcancel', function(_0x4bfb22) {
if (['mousedown', 'touchstart'].includes(_0x4bfb22.type)) {
_0x2c1832.controls.pressed = true;
- var _0x17edbf = _0x2c1832.controls.getAttribute('data-timer2');
+ let _0x17edbf = _0x2c1832.controls.getAttribute('data-timer2');
clearTimeout(_0x17edbf);
} else {
- var _0x29ba04 = setTimeout(function() {
+ let _0x29ba04 = setTimeout(function() {
_0x2c1832.controls.pressed = !0x1;
}, 0xfa0);
_0x2c1832.controls.setAttribute('data-timer2', _0x29ba04);
}
}), this.bind(_0x2c1832.controls, 'focusin focusout', function(_0x54e607) {
- var _0x466a37 = _0x17edbf.config,
+ let _0x466a37 = _0x17edbf.config,
_0x2ab6f3 = _0x17edbf.elements,
_0x5f0669 = 'focusin' === _0x54e607.type,
_0x11de96 = _0x2ab6f3.controls.getAttribute('data-timer');
@@ -6249,13 +6211,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
setTimeout(function() {
_0x3a8e2f(_0x2ab6f3.controls, _0x466a37.classNames.noTransition, !0x1);
}, 0x0);
- var _0x314d11 = _0x31e271.touch ? 0xbb8 : 0xfa0;
+ let _0x314d11 = _0x31e271.touch ? 0xbb8 : 0xfa0;
clearTimeout(_0x11de96), _0x11de96 = setTimeout(function() {
return _0x5ab74d.toggleControls.call(_0x17edbf, !0x1);
}, _0x314d11), _0x2ab6f3.controls.setAttribute('data-timer', _0x11de96);
}
}), this.bind(_0x2c1832.inputs.volume, 'wheel', function(_0x28b2d2) {
- var _0x2c1832 = _0x28b2d2.webkitDirectionInvertedFromDevice,
+ let _0x2c1832 = _0x28b2d2.webkitDirectionInvertedFromDevice,
_0x12883c = _0x42b437([_0x28b2d2.deltaX, -_0x28b2d2.deltaY].map(function(_0x1ce956) {
return _0x2c1832 ? -_0x1ce956 : _0x1ce956;
}), 0x2),
@@ -6263,7 +6225,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x5dcee2 = _0x12883c[0x1],
_0x5691ae = Math.sign(Math.abs(_0x247794) > Math.abs(_0x5dcee2) ? _0x247794 : _0x5dcee2);
_0x17edbf.increaseVolume(_0x5691ae / 0x32);
- var _0x47df17 = _0x17edbf.game.volume;
+ let _0x47df17 = _0x17edbf.game.volume;
(0x1 === _0x5691ae && _0x47df17 < 0x1 || -0x1 === _0x5691ae && _0x47df17 > 0x0) && _0x28b2d2.preventDefault();
}, 'volume', !0x1), this.bind(_0x2c1832.controls, 'contextmenu', function(_0x1db0c5) {
_0x1db0c5.stopPropagation();
@@ -6277,32 +6239,32 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}();
function _0x1a3a6c(_0x5a5a15, _0x4e2d69) {
- for (var _0x2c1832 = 0x0; _0x2c1832 < _0x4e2d69.length; _0x2c1832++) {
- var _0x2e1c57 = _0x4e2d69[_0x2c1832];
+ for (let _0x2c1832 = 0x0; _0x2c1832 < _0x4e2d69.length; _0x2c1832++) {
+ let _0x2e1c57 = _0x4e2d69[_0x2c1832];
_0x2e1c57.enumerable = _0x2e1c57.enumerable || false, _0x2e1c57.configurable = true, 'value' in _0x2e1c57 && (_0x2e1c57.writable = true), Object.defineProperty(_0x5a5a15, _0x2e1c57.key, _0x2e1c57);
}
}
- var _0x3dbc76 = function() {
+ let _0x3dbc76 = function() {
function _0x6954aa(_0x28cce1, _0x2ba0e6) {
return new Promise(async function(resolve, reject) {
- var _0x5938bc = this;
- var _0x2136bc = function(path, isDirectory) {
- var finpath = window.location.pathname.split('/').pop();
- var finalpath = window.location.pathname.substring(0, window.location.pathname.length - finpath.length);
- var split3 = finalpath.split('/')
- var split2 = path.split('/')
- var split1 = [ ]
- for (var i=0; i 0) {
- var split1 = function(origpath) {
+ let split1 = function(origpath) {
if (origpath === '/') {
return '/'
} else {
@@ -6314,9 +6276,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
split1.push(split2[w]);
}
}
- var path = split1.join('/')
+ path = split1.join('/')
if (! path.startsWith('/')) {
- var path = '/' + path;
+ path = '/' + path;
}
path = window.location.protocol + '//' + window.location.host + path;
}
@@ -6328,7 +6290,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}
return path
}
- this.version = '2.3.0';
+ this.version = '2.3.5';
this.system = '';
this.adUrl = null;
this.gameName = null;
@@ -6358,13 +6320,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.lightgun = this.config.lightgun;
this.loadStateOnStart = this.config.loadStateOnStart || false;
this.adUrl = this.config.adUrl || null;
- this.gameName = this.config.gameName || null;
+ _0x1e2c68.string(this.config.gameName) && (this.gameName = this.config.gameName || null);
this.mouse = this.config.mouse;
this.multitap = this.config.multitap;
this.cheats = this.config.cheats;
this.cheats || (this.cheats = []);
/*
- var u = function(a, b) {
+ let u = function(a, b) {
if (typeof b === 'string') {
return b;
} else if (a === true) {
@@ -6382,8 +6344,8 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.statesSupported = this.config.statesSupported || true;
this.customPaths = function(paths) {
if (! paths) return {};
- var newPaths = {};
- for (var k in paths) {
+ let newPaths = {};
+ for (let k in paths) {
if (typeof paths[k] == 'string') {
newPaths[k] = _0x2136bc(paths[k]);
}
@@ -6393,9 +6355,9 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.dataPath = function(path) {
if (typeof path != 'string') {
return function(origpath) {
- var fullrequestpath = origpath
- var finpath = fullrequestpath.split('/').pop()
- var finalpath = fullrequestpath.substring(0, fullrequestpath.length - finpath.length)
+ let fullrequestpath = origpath
+ let finpath = fullrequestpath.split('/').pop()
+ let finalpath = fullrequestpath.substring(0, fullrequestpath.length - finpath.length)
if (origpath == '/') {
return window.location.protocol + '//' + window.location.host + '/';
} else {
@@ -6412,13 +6374,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
return _0x2136bc(path, true);
}(this.config.dataPath);
this.localization = await (async function(dataPath, customPath, lang) {
- var localJson = {};
+ let localJson = {};
if (lang && typeof lang == 'string' && lang !== 'en-US') {
- var url = (customPath && typeof customPath[lang+'.json'] == 'string') ? customPath[lang+'.json'] : dataPath+'localization/'+lang+'.json';
+ let url = (customPath && typeof customPath[lang+'.json'] == 'string') ? customPath[lang+'.json'] : dataPath+'localization/'+lang+'.json';
try {
- var res = await fetch(url);
- var text = await res.text();
- var localJson = JSON.parse(text);
+ let res = await fetch(url);
+ let text = await res.text();
+ let localJson = JSON.parse(text);
_0x39ca5e.i18n = localJson.i18n;
_0x7f9f36.normalOptions = localJson.normalOptions;
} catch(e) {
@@ -6437,13 +6399,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}(this.dataPath, this.customPaths, this.config.lang));
this.config = _0x5dc0c0({}, _0x39ca5e, _0x6954aa.defaults, _0x2ba0e6 || {});
Object.keys(this.config.classNames).forEach(function(_0x1d6b41) {
- var _0x28cce1 = _0x5938bc;
+ let _0x28cce1 = _0x5938bc;
if (_0x1e2c68.object(_0x28cce1.config.classNames[_0x1d6b41])) Object.keys(_0x28cce1.config.classNames[_0x1d6b41]).forEach(function(_0x42f7f2) {
- var _0x2ba0e6 = {};
+ let _0x2ba0e6 = {};
_0x2ba0e6[_0x5938bc.config.classNames[_0x1d6b41][_0x42f7f2]] = true, _0x5938bc.config.classNames[_0x1d6b41][_0x42f7f2] = _0x449eac(_0x2ba0e6);
});
else {
- var _0x2ba0e6 = {};
+ let _0x2ba0e6 = {};
_0x2ba0e6[_0x5938bc.config.classNames[_0x1d6b41]] = true, _0x5938bc.config.classNames[_0x1d6b41] = _0x449eac(_0x2ba0e6);
}
});
@@ -6481,13 +6443,13 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
this.storage = new _0x2f61ba(this, 'ejs_settings');
this.game.emulator = this;
_0x1e2c68.element(this.elements.container) || (this.elements.container = _0x428003('div'), _0x580edd(this.game, this.elements.container));
- var _0x5e63f0 = _0x428003('div', {
+ let _0x5e63f0 = _0x428003('div', {
'class': _0x449eac({
'ejs__widgets': true
})
});
this.elements.container.appendChild(_0x5e63f0);
- var _0x32c8af = _0x428003('div', {
+ let _0x32c8af = _0x428003('div', {
'class': _0x449eac({
'ejs__dialogs': true
})
@@ -6503,11 +6465,11 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
resolve(this);
}.bind(this))
}
- var _0x17edbf, _0x2c1832, _0x423c42;
+ let _0x17edbf, _0x2c1832, _0x423c42;
_0x17edbf = _0x6954aa, _0x423c42 = [{
'key': 'setup',
'value': function(_0x3bb461) {
- var _0x2c1832 = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : {},
+ let _0x2c1832 = arguments.length > 0x1 && void 0x0 !== arguments[0x1] ? arguments[0x1] : {},
_0x3eda14 = null;
return _0x1e2c68.string(_0x3bb461) ? _0x3eda14 = Array.from(document.querySelectorAll(_0x3bb461)) : _0x1e2c68.nodeList(_0x3bb461) ? _0x3eda14 = Array.from(_0x3bb461) : _0x1e2c68.array(_0x3bb461) && (_0x3eda14 = _0x3bb461.filter(_0x1e2c68.element)), _0x1e2c68.empty(_0x3eda14) ? null : _0x3eda14.map(function(_0x176f95) {
return new _0x6954aa(_0x176f95, _0x2c1832);
@@ -6521,7 +6483,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'increaseVolume',
'value': function(_0x2881c7) {
- var _0x17edbf = this.game.muted ? 0x0 : this.volume;
+ let _0x17edbf = this.game.muted ? 0x0 : this.volume;
this.volume = _0x17edbf + (_0x1e2c68.number(_0x2881c7) ? _0x2881c7 : 0x0);
}
}, {
@@ -6533,16 +6495,28 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
'key': 'toggleControls',
'value': function(_0x1c82b4) {
if (this.started) {
- var _0x17edbf = void 0x0 === _0x1c82b4 ? void 0x0 : !_0x1c82b4,
+ let _0x17edbf = void 0x0 === _0x1c82b4 ? void 0x0 : !_0x1c82b4,
_0x2c1832 = _0x3a8e2f(this.elements.container, this.config.classNames.hideControls, _0x17edbf);
return _0x2c1832 && _0x2593da.toggleMenu.call(this, !0x1), !_0x2c1832;
}
return !0x1;
}
}, {
- 'key': 'setStatesSupported',
- 'value': function(newValue) {
- this.statesSupported = newValue;
+ 'key': 'getStartName',
+ 'value': function(force, noSystem) {
+ let rv;
+ if (this.startName && (force === true || this.startName !== 'rom')) {
+ rv = this.startName;
+ } else if (!this.config.gameUrl.startsWith('blob:')) {
+ rv = this.config.gameUrl.split('/').pop().replace(/[^a-z0-9 ,.]/ig, '');
+ } else if (this.gameName) {
+ rv = (noSystem===true?'':this.system+'-')+this.gameName.replace(/\#/g, '');
+ } else if (this.config.gameId) {
+ rv = (noSystem===true?'':this.system+'-')+this.config.gameId;
+ } else if (force === true) {
+ rv = this.config.gameUrl.split('/').pop().replace(/[^a-z0-9 ,.]/ig, '');
+ }
+ return rv;
}
}, {
'key': 'loadState',
@@ -6567,7 +6541,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'playing',
'set': function() {
- var _0x6954aa = !(arguments.length > 0x0 && void 0x0 !== arguments[0x0]) || arguments[0x0];
+ let _0x6954aa = !(arguments.length > 0x0 && void 0x0 !== arguments[0x0]) || arguments[0x0];
Array.from(this.elements.buttons.play || []).forEach(function(_0x4a27d3) {
_0x4a27d3.pressed = _0x6954aa;
}), this.paused = !_0x6954aa;
@@ -6578,7 +6552,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'volume',
'set': function(_0x52441c) {
- var _0x17edbf = _0x52441c;
+ let _0x17edbf = _0x52441c;
_0x1e2c68.string(_0x17edbf) && (_0x17edbf = Number(_0x17edbf)), _0x1e2c68.number(_0x17edbf) || (_0x17edbf = this.storage.get('volume')), _0x1e2c68.number(_0x17edbf) || (_0x17edbf = this.config.volume), _0x17edbf > 0x1 && (_0x17edbf = 0x1), _0x17edbf < 0x0 && (_0x17edbf = 0x0), this.config.volume = _0x17edbf, this.game.volume = _0x17edbf, !_0x1e2c68.empty(_0x52441c) && this.muted && _0x17edbf > 0x0 && (this.muted = !0x1);
},
'get': function() {
@@ -6587,7 +6561,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
}, {
'key': 'muted',
'set': function(_0x218306) {
- var _0x17edbf = _0x218306;
+ let _0x17edbf = _0x218306;
_0x1e2c68.boolean(_0x17edbf) || (_0x17edbf = this.storage.get('muted')), _0x1e2c68.boolean(_0x17edbf) || (_0x17edbf = this.config.muted), this.config.muted = _0x17edbf, this.game.muted = _0x17edbf;
},
'get': function() {
@@ -6598,6 +6572,7 @@ window.EJS_main = function(_0xa88a13, _0x17edbf, _0x2c1832) {
_0x423c42 && _0x1a3a6c(_0x17edbf, _0x423c42)
return _0x6954aa;
}();
+
_0x3dbc76.defaults = {};
_0x17edbf.default = _0x3dbc76;
}
diff --git a/data/emulator.js b/data/emulator.js
index fa3440e..eeb852f 100644
--- a/data/emulator.js
+++ b/data/emulator.js
@@ -255,98 +255,7 @@ var EJS = function(_0x574f5e) {
}
}
}
-}, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, function(_0x4f4230, _0x181c20) {
- var _0x4b3a38, _0x30dbdf, _0x40240d = _0x4f4230.exports = {};
-
- function _0x508793() {
- throw new Error('setTimeout has not been defined');
- }
-
- function _0x1e140b() {
- throw new Error('clearTimeout has not been defined');
- }
-
- function _0x58e592(_0x1e83f0) {
- if (_0x4b3a38 === setTimeout) return setTimeout(_0x1e83f0, 0x0);
- if ((_0x4b3a38 === _0x508793 || !_0x4b3a38) && setTimeout) return _0x4b3a38 = setTimeout, setTimeout(_0x1e83f0, 0x0);
- try {
- return _0x4b3a38(_0x1e83f0, 0x0);
- } catch (_0x4743cf) {
- try {
- return _0x4b3a38.call(null, _0x1e83f0, 0x0);
- } catch (_0x53620e) {
- return _0x4b3a38.call(this, _0x1e83f0, 0x0);
- }
- }
- }! function() {
- try {
- _0x4b3a38 = 'function' == typeof setTimeout ? setTimeout : _0x508793;
- } catch (_0x2ba20e) {
- _0x4b3a38 = _0x508793;
- }
- try {
- _0x30dbdf = 'function' == typeof clearTimeout ? clearTimeout : _0x1e140b;
- } catch (_0x5202a1) {
- _0x30dbdf = _0x1e140b;
- }
- }();
- var _0x493e74, _0x501f0f = [],
- _0x3ba731 = !0x1,
- _0x21c3e3 = -0x1;
-
- function _0x21e6b7() {
- _0x3ba731 && _0x493e74 && (_0x3ba731 = !0x1, _0x493e74.length ? _0x501f0f = _0x493e74.concat(_0x501f0f) : _0x21c3e3 = -0x1, _0x501f0f.length && _0x30d6c8());
- }
-
- function _0x30d6c8() {
- if (!_0x3ba731) {
- var _0x4f4230 = _0x58e592(_0x21e6b7);
- _0x3ba731 = true;
- for (var _0x181c20 = _0x501f0f.length; _0x181c20;) {
- for (_0x493e74 = _0x501f0f, _0x501f0f = []; ++_0x21c3e3 < _0x181c20;) _0x493e74 && _0x493e74[_0x21c3e3].run();
- _0x21c3e3 = -0x1, _0x181c20 = _0x501f0f.length;
- }
- _0x493e74 = null, _0x3ba731 = !0x1,
- function(_0x294b98) {
- if (_0x30dbdf === clearTimeout) return clearTimeout(_0x294b98);
- if ((_0x30dbdf === _0x1e140b || !_0x30dbdf) && clearTimeout) return _0x30dbdf = clearTimeout, clearTimeout(_0x294b98);
- try {
- _0x30dbdf(_0x294b98);
- } catch (_0x353086) {
- try {
- return _0x30dbdf.call(null, _0x294b98);
- } catch (_0x430227) {
- return _0x30dbdf.call(this, _0x294b98);
- }
- }
- }(_0x4f4230);
- }
- }
-
- function _0x5b9c05(_0x1d5ae2, _0x5b9ff8) {
- this.fun = _0x1d5ae2, this.array = _0x5b9ff8;
- }
-
- function _0x11873d() {}
- _0x40240d.nextTick = function(_0x14ed62) {
- var _0x181c20 = new Array(arguments.length - 0x1);
- if (arguments.length > 0x1)
- for (var _0x1c0f88 = 0x1; _0x1c0f88 < arguments.length; _0x1c0f88++) _0x181c20[_0x1c0f88 - 0x1] = arguments[_0x1c0f88];
- _0x501f0f.push(new _0x5b9c05(_0x14ed62, _0x181c20)), 0x1 !== _0x501f0f.length || _0x3ba731 || _0x58e592(_0x30d6c8);
- }, _0x5b9c05.prototype.run = function() {
- this.fun.apply(null, this.array);
- }, _0x40240d.title = 'browser', _0x40240d.browser = true, _0x40240d.env = {}, _0x40240d.argv = [], _0x40240d.version = '', _0x40240d.versions = {}, _0x40240d.on = _0x11873d, _0x40240d.addListener = _0x11873d, _0x40240d.once = _0x11873d, _0x40240d.off = _0x11873d, _0x40240d.removeListener = _0x11873d, _0x40240d.removeAllListeners = _0x11873d, _0x40240d.emit = _0x11873d, _0x40240d.prependListener = _0x11873d, _0x40240d.prependOnceListener = _0x11873d, _0x40240d.listeners = function(_0x4a7ed5) {
- return [];
- }, _0x40240d.binding = function(_0x4fe55f) {
- throw new Error('process.binding is not supported');
- }, _0x40240d.cwd = function() {
- return '/';
- }, _0x40240d.chdir = function(_0x33049c) {
- throw new Error('process.chdir is not supported');
- }, _0x40240d.umask = function() {
- return 0x0;
- };
-}, null, null, null, null, null, null, null, function(_0x2e240f, _0x5b82af, _0x39b24a) {
+}, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, function(_0x2e240f, _0x5b82af, _0x39b24a) {
var _0xafdfe, _0x133983;
! function(_0xcb4965, _0x3924c5, _0x2b6d6d) {
'use strict';
@@ -762,25 +671,7 @@ var EJS = function(_0x574f5e) {
return _0x2b9783.prototype = _0x28a590, _0x2b9783.version = _0x28a590.version, _0x2b9783;
}) ? _0xafdfe.call(_0x5b82af, _0x39b24a, _0x5b82af, _0x2e240f) : _0xafdfe) || (_0x2e240f.exports = _0x133983);
}();
-}, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, function(_0x5e1357, _0x334b04) {
- _0x5e1357.exports = function(_0x1bfcef) {
- return _0x1bfcef.webpackPolyfill || (_0x1bfcef.deprecate = function() {}, _0x1bfcef.paths = [], _0x1bfcef.children || (_0x1bfcef.children = []), Object.defineProperty(_0x1bfcef, 'loaded', {
- 'enumerable': true,
- 'get': function() {
- return _0x1bfcef.l;
- }
- }), Object.defineProperty(_0x1bfcef, 'id', {
- 'enumerable': true,
- 'get': function() {
- return _0x1bfcef.i;
- }
- }), _0x1bfcef.webpackPolyfill = 0x1), _0x1bfcef;
- };
-}, function(_0xac5f55, _0x6036c7) {
- (function(_0x5be4df) {
- _0xac5f55.exports = _0x5be4df;
- }.call(this, {}));
-}, null, null, null, null, null, null, null, null, null, null, null, null, function(_0xc6a4b0, _0x7437ff, _0x459722) {
+}, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, function(_0xc6a4b0, _0x7437ff, _0x459722) {
var _0x4bddd8;
! function() {
'use strict';
@@ -1479,141 +1370,4 @@ var EJS = function(_0x574f5e) {
'factory': _0x5c2a4b
};
});
-}, function(_0x58785f, _0x269d2d, _0x36e800) {
- (function(_0x514d66, _0x179a8a) {
- var _0x1e876b;
-
- function _0x37ea03(_0xc47df6) {
- return (_0x37ea03 = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function(_0x3452dd) {
- return typeof _0x3452dd;
- } : function(_0xf9423c) {
- return _0xf9423c && 'function' == typeof Symbol && _0xf9423c.constructor === Symbol && _0xf9423c !== Symbol.prototype ? 'symbol' : typeof _0xf9423c;
- })(_0xc47df6);
- }! function() {
- 'use strict';
- var _0x497ce1 = 'input is invalid type',
- _0x22b8cf = 'object' === ('undefined' == typeof window ? 'undefined' : _0x37ea03(window)),
- _0x149fcb = _0x22b8cf ? window : {};
- _0x149fcb.JS_MD5_NO_WINDOW && (_0x22b8cf = !0x1);
- var _0x5a9bb1 = !_0x22b8cf && 'object' === ('undefined' == typeof self ? 'undefined' : _0x37ea03(self)),
- _0x9c7cc0 = !_0x149fcb.JS_MD5_NO_NODE_JS && 'object' === (void 0x0 === _0x514d66 ? 'undefined' : _0x37ea03(_0x514d66)) && _0x514d66.versions && _0x514d66.versions.node;
- _0x9c7cc0 ? _0x149fcb = window : _0x5a9bb1 && (_0x149fcb = self);
- var _0x178f75 = !_0x149fcb.JS_MD5_NO_COMMON_JS && 'object' === _0x37ea03(_0x179a8a) && _0x179a8a.exports,
- _0x256e04 = _0x36e800(0x90),
- _0x3204dd = !_0x149fcb.JS_MD5_NO_ARRAY_BUFFER && 'undefined' != typeof ArrayBuffer,
- _0x13a835 = '0123456789abcdef' .split(''),
- _0x48470a = [0x80, 0x8000, 0x800000, -0x80000000],
- _0x349fda = [0x0, 0x8, 0x10, 0x18],
- _0x41150a = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'],
- _0x41cf2e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' .split(''),
- _0x232b50 = [],
- _0x42d3ec;
- if (_0x3204dd) {
- var _0x7a5fbb = new ArrayBuffer(0x44);
- _0x42d3ec = new Uint8Array(_0x7a5fbb), _0x232b50 = new Uint32Array(_0x7a5fbb);
- }!_0x149fcb.JS_MD5_NO_NODE_JS && Array.isArray || (Array.isArray = function(_0x4ac178) {
- return '[object Array]' === Object.prototype.toString.call(_0x4ac178);
- }), !_0x3204dd || !_0x149fcb.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW && ArrayBuffer.isView || (ArrayBuffer.isView = function(_0x27f298) {
- return 'object' === _0x37ea03(_0x27f298) && _0x27f298.buffer && _0x27f298.buffer.constructor === ArrayBuffer;
- });
- var _0x23df61 = function(_0x3b5d61) {
- return function(_0x2f213a) {
- return new _0x52468b(true).update(_0x2f213a)[_0x3b5d61]();
- };
- },
- _0x3a7f83 = function() {
- var _0x5c6b67 = _0x23df61('hex');
- _0x9c7cc0 && (_0x5c6b67 = _0x2c5426(_0x5c6b67)), _0x5c6b67.create = function() {
- return new _0x52468b();
- }, _0x5c6b67.update = function(_0x3df208) {
- return _0x5c6b67.create().update(_0x3df208);
- };
- for (var _0x2f6a43 = 0x0; _0x2f6a43 < _0x41150a.length; ++_0x2f6a43) {
- var _0x31f7a7 = _0x41150a[_0x2f6a43];
- _0x5c6b67[_0x31f7a7] = _0x23df61(_0x31f7a7);
- }
- return _0x5c6b67;
- },
- _0x2c5426 = function _0x2c5426(_0x4a1bfd) {
- var _0x4bbc7e = require('crypto'),
- _0x5a9763 = require('buffer').Buffer,
- _0x27c8cc = function(_0x4bb699) {
- if ('string' == typeof _0x4bb699) return _0x4bbc7e.createHash('md5').update(_0x4bb699, 'utf8').digest('hex');
- if (null == _0x4bb699) throw _0x497ce1;
- return _0x4bb699.constructor === ArrayBuffer && (_0x4bb699 = new Uint8Array(_0x4bb699)), Array.isArray(_0x4bb699) || ArrayBuffer.isView(_0x4bb699) || _0x4bb699.constructor === _0x5a9763 ? _0x4bbc7e.createHash('md5').update(new _0x5a9763(_0x4bb699)).digest('hex') : _0x4a1bfd(_0x4bb699);
- };
- return _0x27c8cc;
- };
-
- function _0x52468b(_0x49f6ae) {
- if (_0x49f6ae) _0x232b50[0x0] = _0x232b50[0x10] = _0x232b50[0x1] = _0x232b50[0x2] = _0x232b50[0x3] = _0x232b50[0x4] = _0x232b50[0x5] = _0x232b50[0x6] = _0x232b50[0x7] = _0x232b50[0x8] = _0x232b50[0x9] = _0x232b50[0xa] = _0x232b50[0xb] = _0x232b50[0xc] = _0x232b50[0xd] = _0x232b50[0xe] = _0x232b50[0xf] = 0x0, this.blocks = _0x232b50, this.buffer8 = _0x42d3ec;
- else if (_0x3204dd) {
- var _0x47c30c = new ArrayBuffer(0x44);
- this.buffer8 = new Uint8Array(_0x47c30c), this.blocks = new Uint32Array(_0x47c30c);
- } else this.blocks = [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0];
- this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0x0, this.finalized = this.hashed = !0x1, this.first = true;
- }
- _0x52468b.prototype.update = function(_0x4b25f7) {
- if (!this.finalized) {
- var _0x560880, _0x34611f = _0x37ea03(_0x4b25f7);
- if ('string' !== _0x34611f) {
- if ('object' !== _0x34611f) throw _0x497ce1;
- if (null === _0x4b25f7) throw _0x497ce1;
- if (_0x3204dd && _0x4b25f7.constructor === ArrayBuffer) _0x4b25f7 = new Uint8Array(_0x4b25f7);
- else if (!(Array.isArray(_0x4b25f7) || _0x3204dd && ArrayBuffer.isView(_0x4b25f7))) throw _0x497ce1;
- _0x560880 = true;
- }
- for (var _0x419f10, _0x3a9793, _0x39ee4a = 0x0, _0x5506c6 = _0x4b25f7.length, _0xe0faf3 = this.blocks, _0x1d2007 = this.buffer8; _0x39ee4a < _0x5506c6;) {
- if (this.hashed && (this.hashed = !0x1, _0xe0faf3[0x0] = _0xe0faf3[0x10], _0xe0faf3[0x10] = _0xe0faf3[0x1] = _0xe0faf3[0x2] = _0xe0faf3[0x3] = _0xe0faf3[0x4] = _0xe0faf3[0x5] = _0xe0faf3[0x6] = _0xe0faf3[0x7] = _0xe0faf3[0x8] = _0xe0faf3[0x9] = _0xe0faf3[0xa] = _0xe0faf3[0xb] = _0xe0faf3[0xc] = _0xe0faf3[0xd] = _0xe0faf3[0xe] = _0xe0faf3[0xf] = 0x0), _0x560880)
- if (_0x3204dd)
- for (_0x3a9793 = this.start; _0x39ee4a < _0x5506c6 && _0x3a9793 < 0x40; ++_0x39ee4a) _0x1d2007[_0x3a9793++] = _0x4b25f7[_0x39ee4a];
- else
- for (_0x3a9793 = this.start; _0x39ee4a < _0x5506c6 && _0x3a9793 < 0x40; ++_0x39ee4a) _0xe0faf3[_0x3a9793 >> 0x2] |= _0x4b25f7[_0x39ee4a] << _0x349fda[0x3 & _0x3a9793++];
- else if (_0x3204dd)
- for (_0x3a9793 = this.start; _0x39ee4a < _0x5506c6 && _0x3a9793 < 0x40; ++_0x39ee4a)(_0x419f10 = _0x4b25f7.charCodeAt(_0x39ee4a)) < 0x80 ? _0x1d2007[_0x3a9793++] = _0x419f10 : _0x419f10 < 0x800 ? (_0x1d2007[_0x3a9793++] = 0xc0 | _0x419f10 >> 0x6, _0x1d2007[_0x3a9793++] = 0x80 | 0x3f & _0x419f10) : _0x419f10 < 0xd800 || _0x419f10 >= 0xe000 ? (_0x1d2007[_0x3a9793++] = 0xe0 | _0x419f10 >> 0xc, _0x1d2007[_0x3a9793++] = 0x80 | _0x419f10 >> 0x6 & 0x3f, _0x1d2007[_0x3a9793++] = 0x80 | 0x3f & _0x419f10) : (_0x419f10 = 0x10000 + ((0x3ff & _0x419f10) << 0xa | 0x3ff & _0x4b25f7.charCodeAt(++_0x39ee4a)), _0x1d2007[_0x3a9793++] = 0xf0 | _0x419f10 >> 0x12, _0x1d2007[_0x3a9793++] = 0x80 | _0x419f10 >> 0xc & 0x3f, _0x1d2007[_0x3a9793++] = 0x80 | _0x419f10 >> 0x6 & 0x3f, _0x1d2007[_0x3a9793++] = 0x80 | 0x3f & _0x419f10);
- else
- for (_0x3a9793 = this.start; _0x39ee4a < _0x5506c6 && _0x3a9793 < 0x40; ++_0x39ee4a)(_0x419f10 = _0x4b25f7.charCodeAt(_0x39ee4a)) < 0x80 ? _0xe0faf3[_0x3a9793 >> 0x2] |= _0x419f10 << _0x349fda[0x3 & _0x3a9793++] : _0x419f10 < 0x800 ? (_0xe0faf3[_0x3a9793 >> 0x2] |= (0xc0 | _0x419f10 >> 0x6) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | 0x3f & _0x419f10) << _0x349fda[0x3 & _0x3a9793++]) : _0x419f10 < 0xd800 || _0x419f10 >= 0xe000 ? (_0xe0faf3[_0x3a9793 >> 0x2] |= (0xe0 | _0x419f10 >> 0xc) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | _0x419f10 >> 0x6 & 0x3f) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | 0x3f & _0x419f10) << _0x349fda[0x3 & _0x3a9793++]) : (_0x419f10 = 0x10000 + ((0x3ff & _0x419f10) << 0xa | 0x3ff & _0x4b25f7.charCodeAt(++_0x39ee4a)), _0xe0faf3[_0x3a9793 >> 0x2] |= (0xf0 | _0x419f10 >> 0x12) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | _0x419f10 >> 0xc & 0x3f) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | _0x419f10 >> 0x6 & 0x3f) << _0x349fda[0x3 & _0x3a9793++], _0xe0faf3[_0x3a9793 >> 0x2] |= (0x80 | 0x3f & _0x419f10) << _0x349fda[0x3 & _0x3a9793++]);
- this.lastByteIndex = _0x3a9793, this.bytes += _0x3a9793 - this.start, _0x3a9793 >= 0x40 ? (this.start = _0x3a9793 - 0x40, this.hash(), this.hashed = true) : this.start = _0x3a9793;
- }
- return this.bytes > 0xffffffff && (this.hBytes += this.bytes / 0x100000000 << 0x0, this.bytes = this.bytes % 0x100000000), this;
- }
- }, _0x52468b.prototype.finalize = function() {
- if (!this.finalized) {
- this.finalized = true;
- var _0x1173a3 = this.blocks,
- _0x5660dd = this.lastByteIndex;
- _0x1173a3[_0x5660dd >> 0x2] |= _0x48470a[0x3 & _0x5660dd], _0x5660dd >= 0x38 && (this.hashed || this.hash(), _0x1173a3[0x0] = _0x1173a3[0x10], _0x1173a3[0x10] = _0x1173a3[0x1] = _0x1173a3[0x2] = _0x1173a3[0x3] = _0x1173a3[0x4] = _0x1173a3[0x5] = _0x1173a3[0x6] = _0x1173a3[0x7] = _0x1173a3[0x8] = _0x1173a3[0x9] = _0x1173a3[0xa] = _0x1173a3[0xb] = _0x1173a3[0xc] = _0x1173a3[0xd] = _0x1173a3[0xe] = _0x1173a3[0xf] = 0x0), _0x1173a3[0xe] = this.bytes << 0x3, _0x1173a3[0xf] = this.hBytes << 0x3 | this.bytes >>> 0x1d, this.hash();
- }
- }, _0x52468b.prototype.hash = function() {
- var _0x300239, _0x465f5a, _0x1c9d0, _0x58f351, _0x5c6cd7, _0xb38ae4, _0x2e1661 = this.blocks;
- this.first ? _0x465f5a = ((_0x465f5a = ((_0x300239 = ((_0x300239 = _0x2e1661[0x0] - 0x28955b89) << 0x7 | _0x300239 >>> 0x19) - 0x10325477 << 0x0) ^ (_0x1c9d0 = ((_0x1c9d0 = (-0x10325477 ^ (_0x58f351 = ((_0x58f351 = (-0x67452302 ^ 0x77777777 & _0x300239) + _0x2e1661[0x1] - 0x705f434) << 0xc | _0x58f351 >>> 0x14) + _0x300239 << 0x0) & (-0x10325477 ^ _0x300239)) + _0x2e1661[0x2] - 0x4324b227) << 0x11 | _0x1c9d0 >>> 0xf) + _0x58f351 << 0x0) & (_0x58f351 ^ _0x300239)) + _0x2e1661[0x3] - 0x4e748589) << 0x16 | _0x465f5a >>> 0xa) + _0x1c9d0 << 0x0 : (_0x300239 = this.h0, _0x465f5a = this.h1, _0x1c9d0 = this.h2, _0x465f5a = ((_0x465f5a += ((_0x300239 = ((_0x300239 += ((_0x58f351 = this.h3) ^ _0x465f5a & (_0x1c9d0 ^ _0x58f351)) + _0x2e1661[0x0] - 0x28955b88) << 0x7 | _0x300239 >>> 0x19) + _0x465f5a << 0x0) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0x465f5a ^ (_0x58f351 = ((_0x58f351 += (_0x1c9d0 ^ _0x300239 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x1] - 0x173848aa) << 0xc | _0x58f351 >>> 0x14) + _0x300239 << 0x0) & (_0x300239 ^ _0x465f5a)) + _0x2e1661[0x2] + 0x242070db) << 0x11 | _0x1c9d0 >>> 0xf) + _0x58f351 << 0x0) & (_0x58f351 ^ _0x300239)) + _0x2e1661[0x3] - 0x3e423112) << 0x16 | _0x465f5a >>> 0xa) + _0x1c9d0 << 0x0), _0x465f5a = ((_0x465f5a += ((_0x300239 = ((_0x300239 += (_0x58f351 ^ _0x465f5a & (_0x1c9d0 ^ _0x58f351)) + _0x2e1661[0x4] - 0xa83f051) << 0x7 | _0x300239 >>> 0x19) + _0x465f5a << 0x0) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0x465f5a ^ (_0x58f351 = ((_0x58f351 += (_0x1c9d0 ^ _0x300239 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x5] + 0x4787c62a) << 0xc | _0x58f351 >>> 0x14) + _0x300239 << 0x0) & (_0x300239 ^ _0x465f5a)) + _0x2e1661[0x6] - 0x57cfb9ed) << 0x11 | _0x1c9d0 >>> 0xf) + _0x58f351 << 0x0) & (_0x58f351 ^ _0x300239)) + _0x2e1661[0x7] - 0x2b96aff) << 0x16 | _0x465f5a >>> 0xa) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x300239 = ((_0x300239 += (_0x58f351 ^ _0x465f5a & (_0x1c9d0 ^ _0x58f351)) + _0x2e1661[0x8] + 0x698098d8) << 0x7 | _0x300239 >>> 0x19) + _0x465f5a << 0x0) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0x465f5a ^ (_0x58f351 = ((_0x58f351 += (_0x1c9d0 ^ _0x300239 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x9] - 0x74bb0851) << 0xc | _0x58f351 >>> 0x14) + _0x300239 << 0x0) & (_0x300239 ^ _0x465f5a)) + _0x2e1661[0xa] - 0xa44f) << 0x11 | _0x1c9d0 >>> 0xf) + _0x58f351 << 0x0) & (_0x58f351 ^ _0x300239)) + _0x2e1661[0xb] - 0x76a32842) << 0x16 | _0x465f5a >>> 0xa) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x300239 = ((_0x300239 += (_0x58f351 ^ _0x465f5a & (_0x1c9d0 ^ _0x58f351)) + _0x2e1661[0xc] + 0x6b901122) << 0x7 | _0x300239 >>> 0x19) + _0x465f5a << 0x0) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0x465f5a ^ (_0x58f351 = ((_0x58f351 += (_0x1c9d0 ^ _0x300239 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0xd] - 0x2678e6d) << 0xc | _0x58f351 >>> 0x14) + _0x300239 << 0x0) & (_0x300239 ^ _0x465f5a)) + _0x2e1661[0xe] - 0x5986bc72) << 0x11 | _0x1c9d0 >>> 0xf) + _0x58f351 << 0x0) & (_0x58f351 ^ _0x300239)) + _0x2e1661[0xf] + 0x49b40821) << 0x16 | _0x465f5a >>> 0xa) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ _0x1c9d0 & ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ _0x58f351 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x1] - 0x9e1da9e) << 0x5 | _0x300239 >>> 0x1b) + _0x465f5a << 0x0) ^ _0x465f5a)) + _0x2e1661[0x6] - 0x3fbf4cc0) << 0x9 | _0x58f351 >>> 0x17) + _0x300239 << 0x0) ^ _0x300239 & ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ _0x465f5a & (_0x58f351 ^ _0x300239)) + _0x2e1661[0xb] + 0x265e5a51) << 0xe | _0x1c9d0 >>> 0x12) + _0x58f351 << 0x0) ^ _0x58f351)) + _0x2e1661[0x0] - 0x16493856) << 0x14 | _0x465f5a >>> 0xc) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ _0x1c9d0 & ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ _0x58f351 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x5] - 0x29d0efa3) << 0x5 | _0x300239 >>> 0x1b) + _0x465f5a << 0x0) ^ _0x465f5a)) + _0x2e1661[0xa] + 0x2441453) << 0x9 | _0x58f351 >>> 0x17) + _0x300239 << 0x0) ^ _0x300239 & ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ _0x465f5a & (_0x58f351 ^ _0x300239)) + _0x2e1661[0xf] - 0x275e197f) << 0xe | _0x1c9d0 >>> 0x12) + _0x58f351 << 0x0) ^ _0x58f351)) + _0x2e1661[0x4] - 0x182c0438) << 0x14 | _0x465f5a >>> 0xc) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ _0x1c9d0 & ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ _0x58f351 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0x9] + 0x21e1cde6) << 0x5 | _0x300239 >>> 0x1b) + _0x465f5a << 0x0) ^ _0x465f5a)) + _0x2e1661[0xe] - 0x3cc8f82a) << 0x9 | _0x58f351 >>> 0x17) + _0x300239 << 0x0) ^ _0x300239 & ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ _0x465f5a & (_0x58f351 ^ _0x300239)) + _0x2e1661[0x3] - 0xb2af279) << 0xe | _0x1c9d0 >>> 0x12) + _0x58f351 << 0x0) ^ _0x58f351)) + _0x2e1661[0x8] + 0x455a14ed) << 0x14 | _0x465f5a >>> 0xc) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ _0x1c9d0 & ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ _0x58f351 & (_0x465f5a ^ _0x1c9d0)) + _0x2e1661[0xd] - 0x561c16fb) << 0x5 | _0x300239 >>> 0x1b) + _0x465f5a << 0x0) ^ _0x465f5a)) + _0x2e1661[0x2] - 0x3105c08) << 0x9 | _0x58f351 >>> 0x17) + _0x300239 << 0x0) ^ _0x300239 & ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ _0x465f5a & (_0x58f351 ^ _0x300239)) + _0x2e1661[0x7] + 0x676f02d9) << 0xe | _0x1c9d0 >>> 0x12) + _0x58f351 << 0x0) ^ _0x58f351)) + _0x2e1661[0xc] - 0x72d5b376) << 0x14 | _0x465f5a >>> 0xc) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0xb38ae4 = (_0x58f351 = ((_0x58f351 += ((_0x5c6cd7 = _0x465f5a ^ _0x1c9d0) ^ (_0x300239 = ((_0x300239 += (_0x5c6cd7 ^ _0x58f351) + _0x2e1661[0x5] - 0x5c6be) << 0x4 | _0x300239 >>> 0x1c) + _0x465f5a << 0x0)) + _0x2e1661[0x8] - 0x788e097f) << 0xb | _0x58f351 >>> 0x15) + _0x300239 << 0x0) ^ _0x300239) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0xb38ae4 ^ _0x465f5a) + _0x2e1661[0xb] + 0x6d9d6122) << 0x10 | _0x1c9d0 >>> 0x10) + _0x58f351 << 0x0)) + _0x2e1661[0xe] - 0x21ac7f4) << 0x17 | _0x465f5a >>> 0x9) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0xb38ae4 = (_0x58f351 = ((_0x58f351 += ((_0x5c6cd7 = _0x465f5a ^ _0x1c9d0) ^ (_0x300239 = ((_0x300239 += (_0x5c6cd7 ^ _0x58f351) + _0x2e1661[0x1] - 0x5b4115bc) << 0x4 | _0x300239 >>> 0x1c) + _0x465f5a << 0x0)) + _0x2e1661[0x4] + 0x4bdecfa9) << 0xb | _0x58f351 >>> 0x15) + _0x300239 << 0x0) ^ _0x300239) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0xb38ae4 ^ _0x465f5a) + _0x2e1661[0x7] - 0x944b4a0) << 0x10 | _0x1c9d0 >>> 0x10) + _0x58f351 << 0x0)) + _0x2e1661[0xa] - 0x41404390) << 0x17 | _0x465f5a >>> 0x9) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0xb38ae4 = (_0x58f351 = ((_0x58f351 += ((_0x5c6cd7 = _0x465f5a ^ _0x1c9d0) ^ (_0x300239 = ((_0x300239 += (_0x5c6cd7 ^ _0x58f351) + _0x2e1661[0xd] + 0x289b7ec6) << 0x4 | _0x300239 >>> 0x1c) + _0x465f5a << 0x0)) + _0x2e1661[0x0] - 0x155ed806) << 0xb | _0x58f351 >>> 0x15) + _0x300239 << 0x0) ^ _0x300239) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0xb38ae4 ^ _0x465f5a) + _0x2e1661[0x3] - 0x2b10cf7b) << 0x10 | _0x1c9d0 >>> 0x10) + _0x58f351 << 0x0)) + _0x2e1661[0x6] + 0x4881d05) << 0x17 | _0x465f5a >>> 0x9) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0xb38ae4 = (_0x58f351 = ((_0x58f351 += ((_0x5c6cd7 = _0x465f5a ^ _0x1c9d0) ^ (_0x300239 = ((_0x300239 += (_0x5c6cd7 ^ _0x58f351) + _0x2e1661[0x9] - 0x262b2fc7) << 0x4 | _0x300239 >>> 0x1c) + _0x465f5a << 0x0)) + _0x2e1661[0xc] - 0x1924661b) << 0xb | _0x58f351 >>> 0x15) + _0x300239 << 0x0) ^ _0x300239) ^ (_0x1c9d0 = ((_0x1c9d0 += (_0xb38ae4 ^ _0x465f5a) + _0x2e1661[0xf] + 0x1fa27cf8) << 0x10 | _0x1c9d0 >>> 0x10) + _0x58f351 << 0x0)) + _0x2e1661[0x2] - 0x3b53a99b) << 0x17 | _0x465f5a >>> 0x9) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ (_0x465f5a | ~_0x58f351)) + _0x2e1661[0x0] - 0xbd6ddbc) << 0x6 | _0x300239 >>> 0x1a) + _0x465f5a << 0x0) | ~_0x1c9d0)) + _0x2e1661[0x7] + 0x432aff97) << 0xa | _0x58f351 >>> 0x16) + _0x300239 << 0x0) ^ ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ (_0x58f351 | ~_0x465f5a)) + _0x2e1661[0xe] - 0x546bdc59) << 0xf | _0x1c9d0 >>> 0x11) + _0x58f351 << 0x0) | ~_0x300239)) + _0x2e1661[0x5] - 0x36c5fc7) << 0x15 | _0x465f5a >>> 0xb) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ (_0x465f5a | ~_0x58f351)) + _0x2e1661[0xc] + 0x655b59c3) << 0x6 | _0x300239 >>> 0x1a) + _0x465f5a << 0x0) | ~_0x1c9d0)) + _0x2e1661[0x3] - 0x70f3336e) << 0xa | _0x58f351 >>> 0x16) + _0x300239 << 0x0) ^ ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ (_0x58f351 | ~_0x465f5a)) + _0x2e1661[0xa] - 0x100b83) << 0xf | _0x1c9d0 >>> 0x11) + _0x58f351 << 0x0) | ~_0x300239)) + _0x2e1661[0x1] - 0x7a7ba22f) << 0x15 | _0x465f5a >>> 0xb) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ (_0x465f5a | ~_0x58f351)) + _0x2e1661[0x8] + 0x6fa87e4f) << 0x6 | _0x300239 >>> 0x1a) + _0x465f5a << 0x0) | ~_0x1c9d0)) + _0x2e1661[0xf] - 0x1d31920) << 0xa | _0x58f351 >>> 0x16) + _0x300239 << 0x0) ^ ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ (_0x58f351 | ~_0x465f5a)) + _0x2e1661[0x6] - 0x5cfebcec) << 0xf | _0x1c9d0 >>> 0x11) + _0x58f351 << 0x0) | ~_0x300239)) + _0x2e1661[0xd] + 0x4e0811a1) << 0x15 | _0x465f5a >>> 0xb) + _0x1c9d0 << 0x0, _0x465f5a = ((_0x465f5a += ((_0x58f351 = ((_0x58f351 += (_0x465f5a ^ ((_0x300239 = ((_0x300239 += (_0x1c9d0 ^ (_0x465f5a | ~_0x58f351)) + _0x2e1661[0x4] - 0x8ac817e) << 0x6 | _0x300239 >>> 0x1a) + _0x465f5a << 0x0) | ~_0x1c9d0)) + _0x2e1661[0xb] - 0x42c50dcb) << 0xa | _0x58f351 >>> 0x16) + _0x300239 << 0x0) ^ ((_0x1c9d0 = ((_0x1c9d0 += (_0x300239 ^ (_0x58f351 | ~_0x465f5a)) + _0x2e1661[0x2] + 0x2ad7d2bb) << 0xf | _0x1c9d0 >>> 0x11) + _0x58f351 << 0x0) | ~_0x300239)) + _0x2e1661[0x9] - 0x14792c6f) << 0x15 | _0x465f5a >>> 0xb) + _0x1c9d0 << 0x0, this.first ? (this.h0 = _0x300239 + 0x67452301 << 0x0, this.h1 = _0x465f5a - 0x10325477 << 0x0, this.h2 = _0x1c9d0 - 0x67452302 << 0x0, this.h3 = _0x58f351 + 0x10325476 << 0x0, this.first = !0x1) : (this.h0 = this.h0 + _0x300239 << 0x0, this.h1 = this.h1 + _0x465f5a << 0x0, this.h2 = this.h2 + _0x1c9d0 << 0x0, this.h3 = this.h3 + _0x58f351 << 0x0);
- }, _0x52468b.prototype.hex = function() {
- this.finalize();
- var _0x4dad8a = this.h0,
- _0x2c4342 = this.h1,
- _0xb03471 = this.h2,
- _0x321760 = this.h3;
- return _0x13a835[_0x4dad8a >> 0x4 & 0xf] + _0x13a835[0xf & _0x4dad8a] + _0x13a835[_0x4dad8a >> 0xc & 0xf] + _0x13a835[_0x4dad8a >> 0x8 & 0xf] + _0x13a835[_0x4dad8a >> 0x14 & 0xf] + _0x13a835[_0x4dad8a >> 0x10 & 0xf] + _0x13a835[_0x4dad8a >> 0x1c & 0xf] + _0x13a835[_0x4dad8a >> 0x18 & 0xf] + _0x13a835[_0x2c4342 >> 0x4 & 0xf] + _0x13a835[0xf & _0x2c4342] + _0x13a835[_0x2c4342 >> 0xc & 0xf] + _0x13a835[_0x2c4342 >> 0x8 & 0xf] + _0x13a835[_0x2c4342 >> 0x14 & 0xf] + _0x13a835[_0x2c4342 >> 0x10 & 0xf] + _0x13a835[_0x2c4342 >> 0x1c & 0xf] + _0x13a835[_0x2c4342 >> 0x18 & 0xf] + _0x13a835[_0xb03471 >> 0x4 & 0xf] + _0x13a835[0xf & _0xb03471] + _0x13a835[_0xb03471 >> 0xc & 0xf] + _0x13a835[_0xb03471 >> 0x8 & 0xf] + _0x13a835[_0xb03471 >> 0x14 & 0xf] + _0x13a835[_0xb03471 >> 0x10 & 0xf] + _0x13a835[_0xb03471 >> 0x1c & 0xf] + _0x13a835[_0xb03471 >> 0x18 & 0xf] + _0x13a835[_0x321760 >> 0x4 & 0xf] + _0x13a835[0xf & _0x321760] + _0x13a835[_0x321760 >> 0xc & 0xf] + _0x13a835[_0x321760 >> 0x8 & 0xf] + _0x13a835[_0x321760 >> 0x14 & 0xf] + _0x13a835[_0x321760 >> 0x10 & 0xf] + _0x13a835[_0x321760 >> 0x1c & 0xf] + _0x13a835[_0x321760 >> 0x18 & 0xf];
- }, _0x52468b.prototype.toString = _0x52468b.prototype.hex, _0x52468b.prototype.digest = function() {
- this.finalize();
- var _0x499395 = this.h0,
- _0x56399c = this.h1,
- _0x742cc9 = this.h2,
- _0x23afbe = this.h3;
- return [0xff & _0x499395, _0x499395 >> 0x8 & 0xff, _0x499395 >> 0x10 & 0xff, _0x499395 >> 0x18 & 0xff, 0xff & _0x56399c, _0x56399c >> 0x8 & 0xff, _0x56399c >> 0x10 & 0xff, _0x56399c >> 0x18 & 0xff, 0xff & _0x742cc9, _0x742cc9 >> 0x8 & 0xff, _0x742cc9 >> 0x10 & 0xff, _0x742cc9 >> 0x18 & 0xff, 0xff & _0x23afbe, _0x23afbe >> 0x8 & 0xff, _0x23afbe >> 0x10 & 0xff, _0x23afbe >> 0x18 & 0xff];
- }, _0x52468b.prototype.array = _0x52468b.prototype.digest, _0x52468b.prototype.arrayBuffer = function() {
- this.finalize();
- var _0x15f454 = new ArrayBuffer(0x10),
- _0x15cf0e = new Uint32Array(_0x15f454);
- return _0x15cf0e[0x0] = this.h0, _0x15cf0e[0x1] = this.h1, _0x15cf0e[0x2] = this.h2, _0x15cf0e[0x3] = this.h3, _0x15f454;
- }, _0x52468b.prototype.buffer = _0x52468b.prototype.arrayBuffer, _0x52468b.prototype.base64 = function() {
- for (var _0x205cc3, _0x5abd40, _0x213dac, _0x501a73 = '', _0x56610d = this.array(), _0x3a9ef2 = 0x0; _0x3a9ef2 < 0xf;) _0x205cc3 = _0x56610d[_0x3a9ef2++], _0x5abd40 = _0x56610d[_0x3a9ef2++], _0x213dac = _0x56610d[_0x3a9ef2++], _0x501a73 += _0x41cf2e[_0x205cc3 >>> 0x2] + _0x41cf2e[0x3f & (_0x205cc3 << 0x4 | _0x5abd40 >>> 0x4)] + _0x41cf2e[0x3f & (_0x5abd40 << 0x2 | _0x213dac >>> 0x6)] + _0x41cf2e[0x3f & _0x213dac];
- return _0x205cc3 = _0x56610d[_0x3a9ef2], _0x501a73 += _0x41cf2e[_0x205cc3 >>> 0x2] + _0x41cf2e[_0x205cc3 << 0x4 & 0x3f] + '==';
- };
- var _0x269d2d = _0x3a7f83();
- _0x178f75 ? _0x179a8a.exports = _0x269d2d : (_0x149fcb.md5 = _0x269d2d, _0x256e04 && (_0x1e876b = function() {
- return _0x269d2d;
- }.call(_0x269d2d, _0x36e800, _0x269d2d, _0x179a8a), void 0x0 === _0x1e876b || (_0x179a8a.exports = _0x1e876b)));
- }();
- }.call(this, _0x36e800(0x31), _0x36e800(0x8f)(_0x58785f)));
-}, window.EJS_main]).default;
+}, null, window.EJS_main]).default;
diff --git a/data/emulator.min.js b/data/emulator.min.js
index f42ce34..5df84ce 100644
--- a/data/emulator.min.js
+++ b/data/emulator.min.js
@@ -1 +1 @@
-var EJS=function(a){window.EJS_MODULES=a;var n={},o=[];function i(e){if(n[e])return n[e].exports;o.push(e);var t=n[e]={i:e,l:!1,exports:{}};return a[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return window.getUsedModules=function(){return o.sort(function(e,t){return t'+n.localization("CORS Error")+" ":t.innerHTML=''+n.localization("Network Error")+" "}},null,null,null,null,null,function(e){function t(){if(!(navigator.getGamepads||navigator.webkitGetGamepads))throw new Error("get gamepads not found!");if(this.rAF=window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.requestAnimationFrame,!this.rAF)throw new Error("request animation frame was not found!");this.loop()}t.prototype={gamepads:[],rAF:null,getGamepads:function(){return navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():[]},loop:async function(){this.updateGamepadState(),this.rAF.call(null,this.loop.bind(this))},updateGamepadState:function(){for(var n=this.getGamepads(),a=0;athis.options.threshold){var r={};for(l in this.direction)this.direction.hasOwnProperty(l)&&(r[l]=this.direction[l]);var l,c={};for(l in this.direction={x:n,y:a,angle:t},e.direction=this.direction,r)r[l]===this.direction[l]&&(c[l]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+n,e),c.y||this.trigger("plain:"+a,e),c.angle||this.trigger("dir dir:"+t,e)}return e},a.prototype=new e,(a.constructor=a).id=0,a.prototype.prepareNipples=function(){var e=this,a=e.nipples;a.on=e.on.bind(e),a.off=e.off.bind(e),a.options=e.options,a.destroy=e.destroy.bind(e),a.ids=e.ids,a.id=e.id,a.processOnMove=e.processOnMove.bind(e),a.processOnEnd=e.processOnEnd.bind(e),a.get=function(e){if(void 0===e)return a[0];for(var t=0,n=a.length;t>2]|=e[i]<>6:(a<55296||57344<=a?l[o++]=224|a>>12:(a=65536+((1023&a)<<10|1023&e.charCodeAt(++i)),l[o++]=240|a>>18,l[o++]=128|a>>12&63),l[o++]=128|a>>6&63),l[o++]=128|63&a);else for(o=this.start;i>2]|=a<>2]|=(192|a>>6)<>2]|=(224|a>>12)<>2]|=(240|a>>18)<>2]|=(128|a>>12&63)<>2]|=(128|a>>6&63)<>2]|=(128|63&a)<>2]|=u[3&t],56<=t&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash())},g.prototype.hash=function(){var e,t,n,a,o,i=this.blocks,s=this.first?((s=((e=((e=i[0]-680876937)<<7|e>>>25)-271733879<<0)^(t=((t=(-271733879^(n=((n=(-1732584194^2004318071&e)+i[1]-117830708)<<12|n>>>20)+e<<0)&(-271733879^e))+i[2]-1126478375)<<17|t>>>15)+n<<0)&(n^e))+i[3]-1316259209)<<22|s>>>10)+t<<0:(e=this.h0,s=this.h1,t=this.h2,((s+=((e=((e+=((n=this.h3)^s&(t^n))+i[0]-680876936)<<7|e>>>25)+s<<0)^(t=((t+=(s^(n=((n+=(t^e&(s^t))+i[1]-389564586)<<12|n>>>20)+e<<0)&(e^s))+i[2]+606105819)<<17|t>>>15)+n<<0)&(n^e))+i[3]-1044525330)<<22|s>>>10)+t<<0);s=((s+=((e=((e+=(n^s&(t^n))+i[4]-176418897)<<7|e>>>25)+s<<0)^(t=((t+=(s^(n=((n+=(t^e&(s^t))+i[5]+1200080426)<<12|n>>>20)+e<<0)&(e^s))+i[6]-1473231341)<<17|t>>>15)+n<<0)&(n^e))+i[7]-45705983)<<22|s>>>10)+t<<0,s=((s+=((e=((e+=(n^s&(t^n))+i[8]+1770035416)<<7|e>>>25)+s<<0)^(t=((t+=(s^(n=((n+=(t^e&(s^t))+i[9]-1958414417)<<12|n>>>20)+e<<0)&(e^s))+i[10]-42063)<<17|t>>>15)+n<<0)&(n^e))+i[11]-1990404162)<<22|s>>>10)+t<<0,s=((s+=((e=((e+=(n^s&(t^n))+i[12]+1804603682)<<7|e>>>25)+s<<0)^(t=((t+=(s^(n=((n+=(t^e&(s^t))+i[13]-40341101)<<12|n>>>20)+e<<0)&(e^s))+i[14]-1502002290)<<17|t>>>15)+n<<0)&(n^e))+i[15]+1236535329)<<22|s>>>10)+t<<0,s=((s+=((n=((n+=(s^t&((e=((e+=(t^n&(s^t))+i[1]-165796510)<<5|e>>>27)+s<<0)^s))+i[6]-1069501632)<<9|n>>>23)+e<<0)^e&((t=((t+=(e^s&(n^e))+i[11]+643717713)<<14|t>>>18)+n<<0)^n))+i[0]-373897302)<<20|s>>>12)+t<<0,s=((s+=((n=((n+=(s^t&((e=((e+=(t^n&(s^t))+i[5]-701558691)<<5|e>>>27)+s<<0)^s))+i[10]+38016083)<<9|n>>>23)+e<<0)^e&((t=((t+=(e^s&(n^e))+i[15]-660478335)<<14|t>>>18)+n<<0)^n))+i[4]-405537848)<<20|s>>>12)+t<<0,s=((s+=((n=((n+=(s^t&((e=((e+=(t^n&(s^t))+i[9]+568446438)<<5|e>>>27)+s<<0)^s))+i[14]-1019803690)<<9|n>>>23)+e<<0)^e&((t=((t+=(e^s&(n^e))+i[3]-187363961)<<14|t>>>18)+n<<0)^n))+i[8]+1163531501)<<20|s>>>12)+t<<0,s=((s+=((n=((n+=(s^t&((e=((e+=(t^n&(s^t))+i[13]-1444681467)<<5|e>>>27)+s<<0)^s))+i[2]-51403784)<<9|n>>>23)+e<<0)^e&((t=((t+=(e^s&(n^e))+i[7]+1735328473)<<14|t>>>18)+n<<0)^n))+i[12]-1926607734)<<20|s>>>12)+t<<0,s=((s+=((o=(n=((n+=((a=s^t)^(e=((e+=(a^n)+i[5]-378558)<<4|e>>>28)+s<<0))+i[8]-2022574463)<<11|n>>>21)+e<<0)^e)^(t=((t+=(o^s)+i[11]+1839030562)<<16|t>>>16)+n<<0))+i[14]-35309556)<<23|s>>>9)+t<<0,s=((s+=((o=(n=((n+=((a=s^t)^(e=((e+=(a^n)+i[1]-1530992060)<<4|e>>>28)+s<<0))+i[4]+1272893353)<<11|n>>>21)+e<<0)^e)^(t=((t+=(o^s)+i[7]-155497632)<<16|t>>>16)+n<<0))+i[10]-1094730640)<<23|s>>>9)+t<<0,s=((s+=((o=(n=((n+=((a=s^t)^(e=((e+=(a^n)+i[13]+681279174)<<4|e>>>28)+s<<0))+i[0]-358537222)<<11|n>>>21)+e<<0)^e)^(t=((t+=(o^s)+i[3]-722521979)<<16|t>>>16)+n<<0))+i[6]+76029189)<<23|s>>>9)+t<<0,s=((s+=((o=(n=((n+=((a=s^t)^(e=((e+=(a^n)+i[9]-640364487)<<4|e>>>28)+s<<0))+i[12]-421815835)<<11|n>>>21)+e<<0)^e)^(t=((t+=(o^s)+i[15]+530742520)<<16|t>>>16)+n<<0))+i[2]-995338651)<<23|s>>>9)+t<<0,s=((s+=((n=((n+=(s^((e=((e+=(t^(s|~n))+i[0]-198630844)<<6|e>>>26)+s<<0)|~t))+i[7]+1126891415)<<10|n>>>22)+e<<0)^((t=((t+=(e^(n|~s))+i[14]-1416354905)<<15|t>>>17)+n<<0)|~e))+i[5]-57434055)<<21|s>>>11)+t<<0,s=((s+=((n=((n+=(s^((e=((e+=(t^(s|~n))+i[12]+1700485571)<<6|e>>>26)+s<<0)|~t))+i[3]-1894986606)<<10|n>>>22)+e<<0)^((t=((t+=(e^(n|~s))+i[10]-1051523)<<15|t>>>17)+n<<0)|~e))+i[1]-2054922799)<<21|s>>>11)+t<<0,s=((s+=((n=((n+=(s^((e=((e+=(t^(s|~n))+i[8]+1873313359)<<6|e>>>26)+s<<0)|~t))+i[15]-30611744)<<10|n>>>22)+e<<0)^((t=((t+=(e^(n|~s))+i[6]-1560198380)<<15|t>>>17)+n<<0)|~e))+i[13]+1309151649)<<21|s>>>11)+t<<0,s=((s+=((n=((n+=(s^((e=((e+=(t^(s|~n))+i[4]-145523070)<<6|e>>>26)+s<<0)|~t))+i[11]-1120210379)<<10|n>>>22)+e<<0)^((t=((t+=(e^(n|~s))+i[2]+718787259)<<15|t>>>17)+n<<0)|~e))+i[9]-343485551)<<21|s>>>11)+t<<0,this.first?(this.h0=e+1732584193<<0,this.h1=s-271733879<<0,this.h2=t-1732584194<<0,this.h3=n+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+s<<0,this.h2=this.h2+t<<0,this.h3=this.h3+n<<0)},g.prototype.toString=g.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,a=this.h3;return l[e>>4&15]+l[15&e]+l[e>>12&15]+l[e>>8&15]+l[e>>20&15]+l[e>>16&15]+l[e>>28&15]+l[e>>24&15]+l[t>>4&15]+l[15&t]+l[t>>12&15]+l[t>>8&15]+l[t>>20&15]+l[t>>16&15]+l[t>>28&15]+l[t>>24&15]+l[n>>4&15]+l[15&n]+l[n>>12&15]+l[n>>8&15]+l[n>>20&15]+l[n>>16&15]+l[n>>28&15]+l[n>>24&15]+l[a>>4&15]+l[15&a]+l[a>>12&15]+l[a>>8&15]+l[a>>20&15]+l[a>>16&15]+l[a>>28&15]+l[a>>24&15]},g.prototype.array=g.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,n=this.h2,a=this.h3;return[255&e,e>>8&255,e>>16&255,e>>24&255,255&t,t>>8&255,t>>16&255,t>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&a,a>>8&255,a>>16&255,a>>24&255]},g.prototype.buffer=g.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},g.prototype.base64=function(){for(var e,t,n,a="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],n=o[i++],a+=h[e>>>2]+h[63&(e<<4|t>>>4)]+h[63&(t<<2|n>>>6)]+h[63&n];return e=o[i],a+(h[e>>>2]+h[e<<4&63]+"==")};var v=function(){var t=a("hex");(t=s?o(t):t).create=function(){return new g},t.update=function(e){return t.create().update(e)};for(var e=0;e= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\n// compatibility #defines\n#define vTexCoord TEX0.xy\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\nTEX0.xy = TexCoord.xy;\nfloat x = 0.5 * SourceSize.z;\nfloat y = 0.5 * SourceSize.w;\nvec2 dg1 = vec2( x, y);\nvec2 dg2 = vec2(-x, y);\nvec2 dx = vec2(x, 0.0);\nvec2 dy = vec2(0.0, y);\nt1 = vec4(vTexCoord - dg1, vTexCoord - dy);\nt2 = vec4(vTexCoord - dg2, vTexCoord + dx);\nt3 = vec4(vTexCoord + dg1, vTexCoord + dy);\nt4 = vec4(vTexCoord + dg2, vTexCoord - dx);\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\n\n// compatibility #defines\n#define Source Texture\n#define vTexCoord TEX0.xy\n\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nfloat mx = 0.325; // start smoothing wt.\nfloat k = -0.250; // wt. decrease factor\nfloat max_w = 0.25; // max filter weight\nfloat min_w =-0.05; // min filter weight\nfloat lum_add = 0.25; // affects smoothing\nvec3 dt = vec3(1.0);\n\nvoid main()\n{\nvec3 c00 = COMPAT_TEXTURE(Source, t1.xy).xyz; \nvec3 c10 = COMPAT_TEXTURE(Source, t1.zw).xyz; \nvec3 c20 = COMPAT_TEXTURE(Source, t2.xy).xyz; \nvec3 c01 = COMPAT_TEXTURE(Source, t4.zw).xyz; \nvec3 c11 = COMPAT_TEXTURE(Source, vTexCoord).xyz; \nvec3 c21 = COMPAT_TEXTURE(Source, t2.zw).xyz; \nvec3 c02 = COMPAT_TEXTURE(Source, t4.xy).xyz; \nvec3 c12 = COMPAT_TEXTURE(Source, t3.zw).xyz; \nvec3 c22 = COMPAT_TEXTURE(Source, t3.xy).xyz; \n\nfloat md1 = dot(abs(c00 - c22), dt);\nfloat md2 = dot(abs(c02 - c20), dt);\n\nfloat w1 = dot(abs(c22 - c11), dt) * md2;\nfloat w2 = dot(abs(c02 - c11), dt) * md1;\nfloat w3 = dot(abs(c00 - c11), dt) * md2;\nfloat w4 = dot(abs(c20 - c11), dt) * md1;\n\nfloat t1 = w1 + w3;\nfloat t2 = w2 + w4;\nfloat ww = max(t1, t2) + 0.0001;\n\nc11 = (w1 * c00 + w2 * c20 + w3 * c22 + w4 * c02 + ww * c11) / (t1 + t2 + ww);\n\nfloat lc1 = k / (0.12 * dot(c10 + c12 + c11, dt) + lum_add);\nfloat lc2 = k / (0.12 * dot(c01 + c21 + c11, dt) + lum_add);\n\nw1 = clamp(lc1 * dot(abs(c11 - c10), dt) + mx, min_w, max_w);\nw2 = clamp(lc2 * dot(abs(c11 - c21), dt) + mx, min_w, max_w);\nw3 = clamp(lc1 * dot(abs(c11 - c12), dt) + mx, min_w, max_w);\nw4 = clamp(lc2 * dot(abs(c11 - c01), dt) + mx, min_w, max_w);\nFragColor = vec4(w1 * c10 + w2 * c21 + w3 * c12 + w4 * c01 + (1.0 - w1 - w2 - w3 - w4) * c11, 1.0);\n} \n#endif\n","4xScaleHQ.glsl":"/*\n4xGLSLHqFilter shader\n\nCopyright (C) 2005 guest(r) - guest.r@gmail.com\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n*/\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\nCOMPAT_VARYING vec4 t5;\nCOMPAT_VARYING vec4 t6;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\n// compatibility #defines\n#define vTexCoord TEX0.xy\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\nTEX0.xy = TexCoord.xy;\nfloat x = 0.5 * SourceSize.z;\nfloat y = 0.5 * SourceSize.w;\nvec2 dg1 = vec2( x, y);\nvec2 dg2 = vec2(-x, y);\nvec2 sd1 = dg1 * 0.5;\nvec2 sd2 = dg2 * 0.5;\nvec2 ddx = vec2(x, 0.0);\nvec2 ddy = vec2(0.0, y);\nt1 = vec4(vTexCoord - sd1, vTexCoord - ddy);\nt2 = vec4(vTexCoord - sd2, vTexCoord + ddx);\nt3 = vec4(vTexCoord + sd1, vTexCoord + ddy);\nt4 = vec4(vTexCoord + sd2, vTexCoord - ddx);\nt5 = vec4(vTexCoord - dg1, vTexCoord - dg2);\nt6 = vec4(vTexCoord + dg1, vTexCoord + dg2);\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\nCOMPAT_VARYING vec4 t5;\nCOMPAT_VARYING vec4 t6;\n\n// compatibility #defines\n#define Source Texture\n#define vTexCoord TEX0.xy\n\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nfloat mx = 1.0; // start smoothing wt.\nfloat k = -1.10; // wt. decrease factor\nfloat max_w = 0.75; // max filter weight\nfloat min_w = 0.03; // min filter weight\nfloat lum_add = 0.33; // affects smoothing\nvec3 dt = vec3(1.0);\n\nvoid main()\n{\nvec3 c = COMPAT_TEXTURE(Source, vTexCoord).xyz;\nvec3 i1 = COMPAT_TEXTURE(Source, t1.xy).xyz; \nvec3 i2 = COMPAT_TEXTURE(Source, t2.xy).xyz; \nvec3 i3 = COMPAT_TEXTURE(Source, t3.xy).xyz; \nvec3 i4 = COMPAT_TEXTURE(Source, t4.xy).xyz; \nvec3 o1 = COMPAT_TEXTURE(Source, t5.xy).xyz; \nvec3 o3 = COMPAT_TEXTURE(Source, t6.xy).xyz; \nvec3 o2 = COMPAT_TEXTURE(Source, t5.zw).xyz;\nvec3 o4 = COMPAT_TEXTURE(Source, t6.zw).xyz;\nvec3 s1 = COMPAT_TEXTURE(Source, t1.zw).xyz; \nvec3 s2 = COMPAT_TEXTURE(Source, t2.zw).xyz; \nvec3 s3 = COMPAT_TEXTURE(Source, t3.zw).xyz; \nvec3 s4 = COMPAT_TEXTURE(Source, t4.zw).xyz; \n\nfloat ko1=dot(abs(o1-c),dt);\nfloat ko2=dot(abs(o2-c),dt);\nfloat ko3=dot(abs(o3-c),dt);\nfloat ko4=dot(abs(o4-c),dt);\n\nfloat k1=min(dot(abs(i1-i3),dt),max(ko1,ko3));\nfloat k2=min(dot(abs(i2-i4),dt),max(ko2,ko4));\n\nfloat w1 = k2; if(ko3= 130\n #define COMPAT_VARYING out\n #define COMPAT_ATTRIBUTE in\n #define COMPAT_TEXTURE texture\n #else\n #define COMPAT_VARYING varying\n #define COMPAT_ATTRIBUTE attribute\n #define COMPAT_TEXTURE texture2D\n #endif\n \n #ifdef GL_ES\n #define COMPAT_PRECISION mediump\n #else\n #define COMPAT_PRECISION\n #endif\n COMPAT_VARYING float _frame_rotation;\n struct input_dummy {\n vec2 _video_size;\n vec2 _texture_size;\n vec2 _output_dummy_size;\n float _frame_count;\n float _frame_direction;\n float _frame_rotation;\n };\n vec4 _oPosition1;\n vec4 _r0005;\n COMPAT_ATTRIBUTE vec4 VertexCoord;\n COMPAT_ATTRIBUTE vec4 TexCoord;\n COMPAT_VARYING vec4 TEX0;\n \n uniform mat4 MVPMatrix;\n uniform int FrameDirection;\n uniform int FrameCount;\n uniform COMPAT_PRECISION vec2 OutputSize;\n uniform COMPAT_PRECISION vec2 TextureSize;\n uniform COMPAT_PRECISION vec2 InputSize;\n void main()\n {\n vec2 _oTex;\n _r0005 = VertexCoord.x*MVPMatrix[0];\n _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];\n _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];\n _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];\n _oPosition1 = _r0005;\n _oTex = TexCoord.xy;\n gl_Position = _r0005;\n TEX0.xy = TexCoord.xy;\n }\n #elif defined(FRAGMENT)\n \n #if __VERSION__ >= 130\n #define COMPAT_VARYING in\n #define COMPAT_TEXTURE texture\n out vec4 FragColor;\n #else\n #define COMPAT_VARYING varying\n #define FragColor gl_FragColor\n #define COMPAT_TEXTURE texture2D\n #endif\n \n #ifdef GL_ES\n #ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n #else\n precision mediump float;\n #endif\n #define COMPAT_PRECISION mediump\n #else\n #define COMPAT_PRECISION\n #endif\n COMPAT_VARYING float _frame_rotation;\n struct input_dummy {\n vec2 _video_size;\n vec2 _texture_size;\n vec2 _output_dummy_size;\n float _frame_count;\n float _frame_direction;\n float _frame_rotation;\n };\n vec4 _ret_0;\n float _TMP30;\n float _TMP29;\n float _TMP28;\n float _TMP13;\n float _TMP32;\n float _TMP11;\n float _TMP10;\n float _TMP31;\n float _TMP9;\n float _TMP8;\n float _TMP15;\n float _TMP14;\n float _TMP33;\n vec4 _TMP34;\n vec4 _TMP27;\n vec4 _TMP25;\n vec4 _TMP23;\n vec4 _TMP21;\n vec4 _TMP26;\n vec4 _TMP24;\n vec4 _TMP22;\n vec4 _TMP20;\n float _TMP4;\n vec4 _TMP3;\n vec4 _TMP2;\n float _TMP19;\n float _TMP18;\n float _TMP17;\n float _TMP16;\n vec4 _TMP1;\n vec2 _TMP0;\n uniform sampler2D Texture;\n input_dummy _IN1;\n float _TMP43;\n float _x_step0044;\n float _curve0044;\n float _a0048;\n float _val0052;\n float _a0052;\n vec4 _TMP57;\n vec4 _x0072;\n vec2 _c0086;\n vec4 _x0088;\n vec4 _x0094;\n vec2 _c0098;\n vec4 _x0100;\n vec2 _c0104;\n vec4 _x0106;\n vec4 _sample_min0110;\n vec4 _sample_max0110;\n vec4 _r0112;\n vec4 _TMP117;\n vec2 _co0124;\n vec2 _c0126;\n vec4 _x0128;\n vec4 _x0134;\n vec2 _c0138;\n vec4 _x0140;\n vec2 _c0144;\n vec4 _x0146;\n vec4 _sample_min0150;\n vec4 _sample_max0150;\n vec4 _r0152;\n vec4 _TMP157;\n float _TMP163;\n float _x_step0164;\n float _curve0164;\n float _a0168;\n float _val0172;\n float _a0172;\n float _TMP183;\n float _TMP189;\n float _x0190;\n float _a0196;\n float _x0198;\n vec2 _x0200;\n float _x0208;\n COMPAT_VARYING vec4 TEX0;\n \n uniform COMPAT_PRECISION vec2 OutputSize;\n uniform COMPAT_PRECISION vec2 TextureSize;\n uniform COMPAT_PRECISION vec2 InputSize;\n void main()\n {\n vec2 _dx1;\n vec2 _dy;\n vec2 _pix_co;\n vec2 _tex_co;\n vec2 _dist;\n vec3 _col2;\n vec3 _col21;\n vec4 _coeffs1;\n float _luma;\n float _bright;\n float _scan_weight;\n vec2 _mod_fac;\n int _dot_no;\n vec3 _mask_weight;\n vec3 _TMP37;\n _dx1 = vec2(1.00000000E+00/TextureSize.x, 0.00000000E+00);\n _dy = vec2(0.00000000E+00, 1.00000000E+00/TextureSize.y);\n _pix_co = TEX0.xy*TextureSize - vec2( 5.00000000E-01, 5.00000000E-01);\n _TMP0 = floor(_pix_co);\n _tex_co = (_TMP0 + vec2( 5.00000000E-01, 5.00000000E-01))/TextureSize;\n _dist = fract(_pix_co);\n _x_step0044 = float((_dist.x >= 5.00000000E-01));\n _a0048 = 2.50000000E-01 - (_dist.x - _x_step0044)*(_dist.x - _x_step0044);\n _TMP33 = inversesqrt(_a0048);\n _TMP14 = 1.00000000E+00/_TMP33;\n _a0052 = 5.00000000E-01 - _dist.x;\n _val0052 = float((_a0052 > 0.00000000E+00));\n _TMP15 = _val0052 - float((_a0052 < 0.00000000E+00));\n _curve0044 = 5.00000000E-01 - _TMP14*_TMP15;\n _TMP43 = _dist.x + 2.50000000E-01*(_curve0044 - _dist.x);\n _coeffs1 = 3.14159274E+00*vec4(1.00000000E+00 + _TMP43, _TMP43, 1.00000000E+00 - _TMP43, 2.00000000E+00 - _TMP43);\n _TMP1 = abs(_coeffs1);\n _TMP57 = max(_TMP1, vec4( 9.99999975E-06, 9.99999975E-06, 9.99999975E-06, 9.99999975E-06));\n _TMP16 = sin(_TMP57.x);\n _TMP17 = sin(_TMP57.y);\n _TMP18 = sin(_TMP57.z);\n _TMP19 = sin(_TMP57.w);\n _TMP2 = vec4(_TMP16, _TMP17, _TMP18, _TMP19);\n _x0072 = _TMP57/2.00000000E+00;\n _TMP16 = sin(_x0072.x);\n _TMP17 = sin(_x0072.y);\n _TMP18 = sin(_x0072.z);\n _TMP19 = sin(_x0072.w);\n _TMP3 = vec4(_TMP16, _TMP17, _TMP18, _TMP19);\n _coeffs1 = ((2.00000000E+00*_TMP2)*_TMP3)/(_TMP57*_TMP57);\n _TMP4 = dot(_coeffs1, vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _coeffs1 = _coeffs1/_TMP4;\n _c0086 = _tex_co - _dx1;\n _TMP20 = COMPAT_TEXTURE(Texture, _c0086);\n _x0088 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP21 = _TMP20*_x0088;\n _TMP22 = COMPAT_TEXTURE(Texture, _tex_co);\n _x0094 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP23 = _TMP22*_x0094;\n _c0098 = _tex_co + _dx1;\n _TMP24 = COMPAT_TEXTURE(Texture, _c0098);\n _x0100 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP25 = _TMP24*_x0100;\n _c0104 = _tex_co + 2.00000000E+00*_dx1;\n _TMP26 = COMPAT_TEXTURE(Texture, _c0104);\n _x0106 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP27 = _TMP26*_x0106;\n _r0112 = _coeffs1.x*_TMP21;\n _r0112 = _r0112 + _coeffs1.y*_TMP23;\n _r0112 = _r0112 + _coeffs1.z*_TMP25;\n _r0112 = _r0112 + _coeffs1.w*_TMP27;\n _sample_min0110 = min(_TMP23, _TMP25);\n _sample_max0110 = max(_TMP23, _TMP25);\n _TMP34 = min(_sample_max0110, _r0112);\n _TMP117 = max(_sample_min0110, _TMP34);\n _co0124 = _tex_co + _dy;\n _c0126 = _co0124 - _dx1;\n _TMP20 = COMPAT_TEXTURE(Texture, _c0126);\n _x0128 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP21 = _TMP20*_x0128;\n _TMP22 = COMPAT_TEXTURE(Texture, _co0124);\n _x0134 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP23 = _TMP22*_x0134;\n _c0138 = _co0124 + _dx1;\n _TMP24 = COMPAT_TEXTURE(Texture, _c0138);\n _x0140 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP25 = _TMP24*_x0140;\n _c0144 = _co0124 + 2.00000000E+00*_dx1;\n _TMP26 = COMPAT_TEXTURE(Texture, _c0144);\n _x0146 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP27 = _TMP26*_x0146;\n _r0152 = _coeffs1.x*_TMP21;\n _r0152 = _r0152 + _coeffs1.y*_TMP23;\n _r0152 = _r0152 + _coeffs1.z*_TMP25;\n _r0152 = _r0152 + _coeffs1.w*_TMP27;\n _sample_min0150 = min(_TMP23, _TMP25);\n _sample_max0150 = max(_TMP23, _TMP25);\n _TMP34 = min(_sample_max0150, _r0152);\n _TMP157 = max(_sample_min0150, _TMP34);\n _x_step0164 = float((_dist.y >= 5.00000000E-01));\n _a0168 = 2.50000000E-01 - (_dist.y - _x_step0164)*(_dist.y - _x_step0164);\n _TMP33 = inversesqrt(_a0168);\n _TMP14 = 1.00000000E+00/_TMP33;\n _a0172 = 5.00000000E-01 - _dist.y;\n _val0172 = float((_a0172 > 0.00000000E+00));\n _TMP15 = _val0172 - float((_a0172 < 0.00000000E+00));\n _curve0164 = 5.00000000E-01 - _TMP14*_TMP15;\n _TMP163 = _dist.y + (_curve0164 - _dist.y);\n _col2 = _TMP117.xyz + _TMP163*(_TMP157.xyz - _TMP117.xyz);\n _luma = dot(vec3( 2.12599993E-01, 7.15200007E-01, 7.22000003E-02), _col2);\n _TMP8 = max(_col2.y, _col2.z);\n _TMP9 = max(_col2.x, _TMP8);\n _bright = (_TMP9 + _luma)/2.00000000E+00;\n _TMP31 = min(6.49999976E-01, _bright);\n _TMP183 = max(3.49999994E-01, _TMP31);\n _x0190 = _bright*1.50000000E+00;\n _TMP31 = min(1.50000000E+00, _x0190);\n _TMP189 = max(1.50000000E+00, _TMP31);\n _a0196 = TEX0.y*2.00000000E+00*3.14159274E+00*TextureSize.y;\n _TMP10 = cos(_a0196);\n _x0198 = _TMP10*5.00000000E-01 + 5.00000000E-01;\n _TMP11 = pow(_x0198, _TMP189);\n _scan_weight = 1.00000000E+00 - _TMP11;\n _x0200 = (TEX0.xy*OutputSize*TextureSize)/InputSize;\n _mod_fac = floor(_x0200);\n _x0208 = _mod_fac.x/3.00000000E+00;\n _TMP32 = floor(_x0208);\n _TMP13 = _mod_fac.x - 3.00000000E+00*_TMP32;\n _dot_no = int(_TMP13);\n if (_dot_no == 0) {\n _mask_weight = vec3( 1.00000000E+00, 6.99999988E-01, 6.99999988E-01);\n } else {\n if (_dot_no == 1) {\n _mask_weight = vec3( 6.99999988E-01, 1.00000000E+00, 6.99999988E-01);\n } else {\n _mask_weight = vec3( 6.99999988E-01, 6.99999988E-01, 1.00000000E+00);\n }\n }\n if (InputSize.y >= 4.00000000E+02) {\n _scan_weight = 1.00000000E+00;\n }\n _col21 = _col2.xyz;\n _col2 = _col2*vec3(_scan_weight, _scan_weight, _scan_weight);\n _col2 = _col2 + _TMP183*(_col21 - _col2);\n _col2 = _col2*_mask_weight;\n _TMP28 = pow(_col2.x, 5.55555582E-01);\n _TMP29 = pow(_col2.y, 5.55555582E-01);\n _TMP30 = pow(_col2.z, 5.55555582E-01);\n _col2 = vec3(_TMP28, _TMP29, _TMP30);\n _TMP37 = _col2*1.20000005E+00;\n _ret_0 = vec4(_TMP37.x, _TMP37.y, _TMP37.z, 1.00000000E+00);\n FragColor = _ret_0;\n return;\n }\n #endif\n","crt-aperture.glsl":'\n/*\nCRT Shader by EasyMode\nLicense: GPL\n*/\n/*\n#pragma parameter SHARPNESS_IMAGE "Sharpness Image" 1.0 1.0 5.0 1.0\n#pragma parameter SHARPNESS_EDGES "Sharpness Edges" 3.0 1.0 5.0 1.0\n#pragma parameter GLOW_WIDTH "Glow Width" 0.5 0.05 0.65 0.05\n#pragma parameter GLOW_HEIGHT "Glow Height" 0.5 0.05 0.65 0.05\n#pragma parameter GLOW_HALATION "Glow Halation" 0.1 0.0 1.0 0.01\n#pragma parameter GLOW_DIFFUSION "Glow Diffusion" 0.05 0.0 1.0 0.01\n#pragma parameter MASK_COLORS "Mask Colors" 2.0 2.0 3.0 1.0\n#pragma parameter MASK_STRENGTH "Mask Strength" 0.3 0.0 1.0 0.05\n#pragma parameter MASK_SIZE "Mask Size" 1.0 1.0 9.0 1.0\n#pragma parameter SCANLINE_SIZE_MIN "Scanline Size Min." 0.5 0.5 1.5 0.05\n#pragma parameter SCANLINE_SIZE_MAX "Scanline Size Max." 1.5 0.5 1.5 0.05\n#pragma parameter GAMMA_INPUT "Gamma Input" 2.4 1.0 5.0 0.1\n#pragma parameter GAMMA_OUTPUT "Gamma Output" 2.4 1.0 5.0 0.1\n#pragma parameter BRIGHTNESS "Brightness" 1.5 0.0 2.0 0.05\n* */\n\n#define Coord TEX0\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define OUT out\n#define IN in\n#define tex2D texture\n#else\n#define OUT varying \n#define IN attribute \n#define tex2D texture2D\n#endif\n\n#ifdef GL_ES\n#define PRECISION mediump\n#else\n#define PRECISION\n#endif\n\nIN vec4 VertexCoord;\nIN vec4 Color;\nIN vec2 TexCoord;\nOUT vec4 color;\nOUT vec2 Coord;\n\nuniform mat4 MVPMatrix;\nuniform PRECISION int FrameDirection;\nuniform PRECISION int FrameCount;\nuniform PRECISION vec2 OutputSize;\nuniform PRECISION vec2 TextureSize;\nuniform PRECISION vec2 InputSize;\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\ncolor = Color;\nCoord = TexCoord;\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define IN in\n#define tex2D texture\nout vec4 FragColor;\n#else\n#define IN varying\n#define FragColor gl_FragColor\n#define tex2D texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define PRECISION mediump\n#else\n#define PRECISION\n#endif\n\nuniform PRECISION int FrameDirection;\nuniform PRECISION int FrameCount;\nuniform PRECISION vec2 OutputSize;\nuniform PRECISION vec2 TextureSize;\nuniform PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nIN vec2 Coord;\n\n#ifdef PARAMETER_UNIFORM\nuniform PRECISION float SHARPNESS_IMAGE;\nuniform PRECISION float SHARPNESS_EDGES;\nuniform PRECISION float GLOW_WIDTH;\nuniform PRECISION float GLOW_HEIGHT;\nuniform PRECISION float GLOW_HALATION;\nuniform PRECISION float GLOW_DIFFUSION;\nuniform PRECISION float MASK_COLORS;\nuniform PRECISION float MASK_STRENGTH;\nuniform PRECISION float MASK_SIZE;\nuniform PRECISION float SCANLINE_SIZE_MIN;\nuniform PRECISION float SCANLINE_SIZE_MAX;\nuniform PRECISION float GAMMA_INPUT;\nuniform PRECISION float GAMMA_OUTPUT;\nuniform PRECISION float BRIGHTNESS;\n#else\n#define SHARPNESS_IMAGE 1.0\n#define SHARPNESS_EDGES 3.0\n#define GLOW_WIDTH 0.5\n#define GLOW_HEIGHT 0.5\n#define GLOW_HALATION 0.1\n#define GLOW_DIFFUSION 0.05\n#define MASK_COLORS 2.0\n#define MASK_STRENGTH 0.3\n#define MASK_SIZE 1.0\n#define SCANLINE_SIZE_MIN 0.5\n#define SCANLINE_SIZE_MAX 1.5\n#define GAMMA_INPUT 2.4\n#define GAMMA_OUTPUT 2.4\n#define BRIGHTNESS 1.5\n#endif\n\n#define FIX(c) max(abs(c), 1e-5)\n#define PI 3.141592653589\n#define saturate(c) clamp(c, 0.0, 1.0)\n#define TEX2D(c) pow(tex2D(tex, c).rgb, vec3(GAMMA_INPUT))\n\nmat3 get_color_matrix(sampler2D tex, vec2 co, vec2 dx)\n{\nreturn mat3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx));\n}\n\nvec3 blur(mat3 m, float dist, float rad)\n{\nvec3 x = vec3(dist - 1.0, dist, dist + 1.0) / rad;\nvec3 w = exp2(x * x * -1.0);\n\nreturn (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z);\n}\n\nvec3 filter_gaussian(sampler2D tex, vec2 co, vec2 tex_size)\n{\nvec2 dx = vec2(1.0 / tex_size.x, 0.0);\nvec2 dy = vec2(0.0, 1.0 / tex_size.y);\nvec2 pix_co = co * tex_size;\nvec2 tex_co = (floor(pix_co) + 0.5) / tex_size;\nvec2 dist = (fract(pix_co) - 0.5) * -1.0;\n\nmat3 line0 = get_color_matrix(tex, tex_co - dy, dx);\nmat3 line1 = get_color_matrix(tex, tex_co, dx);\nmat3 line2 = get_color_matrix(tex, tex_co + dy, dx);\nmat3 column = mat3(blur(line0, dist.x, GLOW_WIDTH),\n blur(line1, dist.x, GLOW_WIDTH),\n blur(line2, dist.x, GLOW_WIDTH));\n\nreturn blur(column, dist.y, GLOW_HEIGHT);\n}\n\nvec3 filter_lanczos(sampler2D tex, vec2 co, vec2 tex_size, float sharp)\n{\ntex_size.x *= sharp;\n\nvec2 dx = vec2(1.0 / tex_size.x, 0.0);\nvec2 pix_co = co * tex_size - vec2(0.5, 0.0);\nvec2 tex_co = (floor(pix_co) + vec2(0.5, 0.0)) / tex_size;\nvec2 dist = fract(pix_co);\nvec4 coef = PI * vec4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0);\n\ncoef = FIX(coef);\ncoef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef);\ncoef /= dot(coef, vec4(1.0));\n\nvec4 col1 = vec4(TEX2D(tex_co), 1.0);\nvec4 col2 = vec4(TEX2D(tex_co + dx), 1.0);\n\nreturn (mat4(col1, col1, col2, col2) * coef).rgb;\n}\n\nvec3 get_scanline_weight(float x, vec3 col)\n{\nvec3 beam = mix(vec3(SCANLINE_SIZE_MIN), vec3(SCANLINE_SIZE_MAX), col);\nvec3 x_mul = 2.0 / beam;\nvec3 x_offset = x_mul * 0.5;\n\nreturn smoothstep(0.0, 1.0, 1.0 - abs(x * x_mul - x_offset)) * x_offset;\n}\n\nvec3 get_mask_weight(float x)\n{\nfloat i = mod(floor(x * OutputSize.x * TextureSize.x / (InputSize.x * MASK_SIZE)), MASK_COLORS);\n\nif (i == 0.0) return mix(vec3(1.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), MASK_COLORS - 2.0);\nelse if (i == 1.0) return vec3(0.0, 1.0, 0.0);\nelse return vec3(0.0, 0.0, 1.0);\n}\n\nvoid main()\n{\nvec3 col_glow = filter_gaussian(Texture, Coord, TextureSize);\nvec3 col_soft = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_IMAGE);\nvec3 col_sharp = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_EDGES);\nvec3 col = sqrt(col_sharp * col_soft);\n\ncol *= get_scanline_weight(fract(Coord.y * TextureSize.y), col_soft);\ncol_glow = saturate(col_glow - col);\ncol += col_glow * col_glow * GLOW_HALATION;\ncol = mix(col, col * get_mask_weight(Coord.x) * MASK_COLORS, MASK_STRENGTH);\ncol += col_glow * GLOW_DIFFUSION;\ncol = pow(col * BRIGHTNESS, vec3(1.0 / GAMMA_OUTPUT));\n\nFragColor = vec4(col, 1.0);\n}\n\n#endif\n',"crt-geom.glsl":'\n/*\nCRT-interlaced\n\nCopyright (C) 2010-2012 cgwg, Themaister and DOLLS\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the Free\nSoftware Foundation; either version 2 of the License, or (at your option)\nany later version.\n\n(cgwg gave their consent to have the original version of this shader\ndistributed under the GPL in this message:\n\nhttp://board.byuu.org/viewtopic.php?p=26075#p26075\n\n"Feel free to distribute my shaders under the GPL. After all, the\nbarrel distortion code was taken from the Curvature shader, which is\nunder the GPL."\n)\nThis shader variant is pre-configured with screen curvature\n*/\n/*\n#pragma parameter CRTgamma "CRTGeom Target Gamma" 2.4 0.1 5.0 0.1\n#pragma parameter monitorgamma "CRTGeom Monitor Gamma" 2.2 0.1 5.0 0.1\n#pragma parameter d "CRTGeom Distance" 1.6 0.1 3.0 0.1\n#pragma parameter CURVATURE "CRTGeom Curvature Toggle" 1.0 0.0 1.0 1.0\n#pragma parameter R "CRTGeom Curvature Radius" 2.0 0.1 10.0 0.1\n#pragma parameter cornersize "CRTGeom Corner Size" 0.03 0.001 1.0 0.005\n#pragma parameter cornersmooth "CRTGeom Corner Smoothness" 1000.0 80.0 2000.0 100.0\n#pragma parameter x_tilt "CRTGeom Horizontal Tilt" 0.0 -0.5 0.5 0.05\n#pragma parameter y_tilt "CRTGeom Vertical Tilt" 0.0 -0.5 0.5 0.05\n#pragma parameter overscan_x "CRTGeom Horiz. Overscan %" 100.0 -125.0 125.0 1.0\n#pragma parameter overscan_y "CRTGeom Vert. Overscan %" 100.0 -125.0 125.0 1.0\n#pragma parameter DOTMASK "CRTGeom Dot Mask Toggle" 0.3 0.0 0.3 0.3\n#pragma parameter SHARPER "CRTGeom Sharpness" 1.0 1.0 3.0 1.0\n#pragma parameter scanline_weight "CRTGeom Scanline Weight" 0.3 0.1 0.5 0.05\n*/\n\n#ifndef PARAMETER_UNIFORM\n#define CRTgamma 2.4\n#define monitorgamma 2.2\n#define d 1.6\n#define CURVATURE 1.0\n#define R 2.0\n#define cornersize 0.03\n#define cornersmooth 1000.0\n#define x_tilt 0.0\n#define y_tilt 0.0\n#define overscan_x 100.0\n#define overscan_y 100.0\n#define DOTMASK 0.3\n#define SHARPER 1.0\n#define scanline_weight 0.3\n#endif\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\nCOMPAT_VARYING vec2 overscan;\nCOMPAT_VARYING vec2 aspect;\nCOMPAT_VARYING vec3 stretch;\nCOMPAT_VARYING vec2 sinangle;\nCOMPAT_VARYING vec2 cosangle;\nCOMPAT_VARYING vec2 one;\nCOMPAT_VARYING float mod_factor;\nCOMPAT_VARYING vec2 ilfac;\n\n#ifdef PARAMETER_UNIFORM\nuniform COMPAT_PRECISION float CRTgamma;\nuniform COMPAT_PRECISION float monitorgamma;\nuniform COMPAT_PRECISION float d;\nuniform COMPAT_PRECISION float CURVATURE;\nuniform COMPAT_PRECISION float R;\nuniform COMPAT_PRECISION float cornersize;\nuniform COMPAT_PRECISION float cornersmooth;\nuniform COMPAT_PRECISION float x_tilt;\nuniform COMPAT_PRECISION float y_tilt;\nuniform COMPAT_PRECISION float overscan_x;\nuniform COMPAT_PRECISION float overscan_y;\nuniform COMPAT_PRECISION float DOTMASK;\nuniform COMPAT_PRECISION float SHARPER;\nuniform COMPAT_PRECISION float scanline_weight;\n#endif\n\n#define FIX(c) max(abs(c), 1e-5);\n\nfloat intersect(vec2 xy)\n{\nfloat A = dot(xy,xy)+d*d;\nfloat B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d);\nfloat C = d*d + 2.0*R*d*cosangle.x*cosangle.y;\nreturn (-B-sqrt(B*B-4.0*A*C))/(2.0*A);\n}\n\nvec2 bkwtrans(vec2 xy)\n{\nfloat c = intersect(xy);\nvec2 point = vec2(c)*xy;\npoint -= vec2(-R)*sinangle;\npoint /= vec2(R);\nvec2 tang = sinangle/cosangle;\nvec2 poc = point/cosangle;\nfloat A = dot(tang,tang)+1.0;\nfloat B = -2.0*dot(poc,tang);\nfloat C = dot(poc,poc)-1.0;\nfloat a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A);\nvec2 uv = (point-a*sinangle)/cosangle;\nfloat r = R*acos(a);\nreturn uv*r/sin(r/R);\n}\n\nvec2 fwtrans(vec2 uv)\n{\nfloat r = FIX(sqrt(dot(uv,uv)));\nuv *= sin(r/R)/r;\nfloat x = 1.0-cos(r/R);\nfloat D = d/R + x*cosangle.x*cosangle.y+dot(uv,sinangle);\nreturn d*(uv*cosangle-x*sinangle)/D;\n}\n\nvec3 maxscale()\n{\nvec2 c = bkwtrans(-R * sinangle / (1.0 + R/d*cosangle.x*cosangle.y));\nvec2 a = vec2(0.5,0.5)*aspect;\nvec2 lo = vec2(fwtrans(vec2(-a.x,c.y)).x, fwtrans(vec2(c.x,-a.y)).y)/aspect;\nvec2 hi = vec2(fwtrans(vec2(+a.x,c.y)).x, fwtrans(vec2(c.x,+a.y)).y)/aspect;\nreturn vec3((hi+lo)*aspect*0.5,max(hi.x-lo.x,hi.y-lo.y));\n}\n\nvoid main()\n{\n// START of parameters\n\n// gamma of simulated CRT\n//\tCRTgamma = 1.8;\n// gamma of display monitor (typically 2.2 is correct)\n//\tmonitorgamma = 2.2;\n// overscan (e.g. 1.02 for 2% overscan)\noverscan = vec2(1.00,1.00);\n// aspect ratio\naspect = vec2(1.0, 0.75);\n// lengths are measured in units of (approximately) the width\n// of the monitor simulated distance from viewer to monitor\n//\td = 2.0;\n// radius of curvature\n//\tR = 1.5;\n// tilt angle in radians\n// (behavior might be a bit wrong if both components are\n// nonzero)\nconst vec2 angle = vec2(0.0,0.0);\n// size of curved corners\n//\tcornersize = 0.03;\n// border smoothness parameter\n// decrease if borders are too aliased\n//\tcornersmooth = 1000.0;\n\n// END of parameters\n\nvec4 _oColor;\nvec2 _otexCoord;\ngl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3];\n_oPosition1 = gl_Position;\n_oColor = COLOR;\n_otexCoord = TexCoord.xy;\nCOL0 = COLOR;\nTEX0.xy = TexCoord.xy;\n\n// Precalculate a bunch of useful values we\'ll need in the fragment\n// shader.\nsinangle = sin(vec2(x_tilt, y_tilt)) + vec2(0.001);//sin(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3)));\ncosangle = cos(vec2(x_tilt, y_tilt)) + vec2(0.001);//cos(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3)));\nstretch = maxscale();\n\nilfac = vec2(1.0,clamp(floor(InputSize.y/200.0), 1.0, 2.0));\n\n// The size of one texel, in texture-coordinates.\nvec2 sharpTextureSize = vec2(SHARPER * TextureSize.x, TextureSize.y);\none = ilfac / sharpTextureSize;\n\n// Resulting X pixel-coordinate of the pixel we\'re drawing.\nmod_factor = TexCoord.x * TextureSize.x * OutputSize.x / InputSize.x;\n\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nstruct output_dummy {\nvec4 _color;\n};\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\n\n// Comment the next line to disable interpolation in linear gamma (and\n// gain speed).\n#define LINEAR_PROCESSING\n\n// Enable screen curvature.\n// #define CURVATURE\n\n// Enable 3x oversampling of the beam profile\n#define OVERSAMPLE\n\n// Use the older, purely gaussian beam profile\n//#define USEGAUSSIAN\n\n// Macros.\n#define FIX(c) max(abs(c), 1e-5);\n#define PI 3.141592653589\n\n#ifdef LINEAR_PROCESSING\n# define TEX2D(c) pow(COMPAT_TEXTURE(Texture, (c)), vec4(CRTgamma))\n#else\n# define TEX2D(c) COMPAT_TEXTURE(Texture, (c))\n#endif\n\nCOMPAT_VARYING vec2 one;\nCOMPAT_VARYING float mod_factor;\nCOMPAT_VARYING vec2 ilfac;\nCOMPAT_VARYING vec2 overscan;\nCOMPAT_VARYING vec2 aspect;\nCOMPAT_VARYING vec3 stretch;\nCOMPAT_VARYING vec2 sinangle;\nCOMPAT_VARYING vec2 cosangle;\n\n#ifdef PARAMETER_UNIFORM\nuniform COMPAT_PRECISION float CRTgamma;\nuniform COMPAT_PRECISION float monitorgamma;\nuniform COMPAT_PRECISION float d;\nuniform COMPAT_PRECISION float CURVATURE;\nuniform COMPAT_PRECISION float R;\nuniform COMPAT_PRECISION float cornersize;\nuniform COMPAT_PRECISION float cornersmooth;\nuniform COMPAT_PRECISION float x_tilt;\nuniform COMPAT_PRECISION float y_tilt;\nuniform COMPAT_PRECISION float overscan_x;\nuniform COMPAT_PRECISION float overscan_y;\nuniform COMPAT_PRECISION float DOTMASK;\nuniform COMPAT_PRECISION float SHARPER;\nuniform COMPAT_PRECISION float scanline_weight;\n#endif\n\nfloat intersect(vec2 xy)\n{\nfloat A = dot(xy,xy)+d*d;\nfloat B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d);\nfloat C = d*d + 2.0*R*d*cosangle.x*cosangle.y;\nreturn (-B-sqrt(B*B-4.0*A*C))/(2.0*A);\n}\n\nvec2 bkwtrans(vec2 xy)\n{\nfloat c = intersect(xy);\nvec2 point = vec2(c)*xy;\npoint -= vec2(-R)*sinangle;\npoint /= vec2(R);\nvec2 tang = sinangle/cosangle;\nvec2 poc = point/cosangle;\nfloat A = dot(tang,tang)+1.0;\nfloat B = -2.0*dot(poc,tang);\nfloat C = dot(poc,poc)-1.0;\nfloat a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A);\nvec2 uv = (point-a*sinangle)/cosangle;\nfloat r = FIX(R*acos(a));\nreturn uv*r/sin(r/R);\n}\n\nvec2 transform(vec2 coord)\n{\ncoord *= TextureSize / InputSize;\ncoord = (coord-vec2(0.5))*aspect*stretch.z+stretch.xy;\nreturn (bkwtrans(coord)/vec2(overscan_x / 100.0, overscan_y / 100.0)/aspect+vec2(0.5)) * InputSize / TextureSize;\n}\n\nfloat corner(vec2 coord)\n{\ncoord *= TextureSize / InputSize;\ncoord = (coord - vec2(0.5)) * vec2(overscan_x / 100.0, overscan_y / 100.0) + vec2(0.5);\ncoord = min(coord, vec2(1.0)-coord) * aspect;\nvec2 cdist = vec2(cornersize);\ncoord = (cdist - min(coord,cdist));\nfloat dist = sqrt(dot(coord,coord));\nreturn clamp((cdist.x-dist)*cornersmooth,0.0, 1.0);\n}\n\n// Calculate the influence of a scanline on the current pixel.\n//\n// \'distance\' is the distance in texture coordinates from the current\n// pixel to the scanline in question.\n// \'color\' is the colour of the scanline at the horizontal location of\n// the current pixel.\nvec4 scanlineWeights(float distance, vec4 color)\n{\n// "wid" controls the width of the scanline beam, for each RGB\n// channel The "weights" lines basically specify the formula\n// that gives you the profile of the beam, i.e. the intensity as\n// a function of distance from the vertical center of the\n// scanline. In this case, it is gaussian if width=2, and\n// becomes nongaussian for larger widths. Ideally this should\n// be normalized so that the integral across the beam is\n// independent of its width. That is, for a narrower beam\n// "weights" should have a higher peak at the center of the\n// scanline than for a wider beam.\n#ifdef USEGAUSSIAN\nvec4 wid = 0.3 + 0.1 * pow(color, vec4(3.0));\nvec4 weights = vec4(distance / wid);\nreturn 0.4 * exp(-weights * weights) / wid;\n#else\nvec4 wid = 2.0 + 2.0 * pow(color, vec4(4.0));\nvec4 weights = vec4(distance / scanline_weight);\nreturn 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid);\n#endif\n}\n\nvoid main()\n{\n// Here\'s a helpful diagram to keep in mind while trying to\n// understand the code:\n//\n// | | | | |\n// -------------------------------\n// | | | | |\n// | 01 | 11 | 21 | 31 | <-- current scanline\n// | | @ | | |\n// -------------------------------\n// | | | | |\n// | 02 | 12 | 22 | 32 | <-- next scanline\n// | | | | |\n// -------------------------------\n// | | | | |\n//\n// Each character-cell represents a pixel on the output\n// surface, "@" represents the current pixel (always somewhere\n// in the bottom half of the current scan-line, or the top-half\n// of the next scanline). The grid of lines represents the\n// edges of the texels of the underlying texture.\n\n// Texture coordinates of the texel containing the active pixel.\nvec2 xy = (CURVATURE > 0.5) ? transform(TEX0.xy) : TEX0.xy;\n\nfloat cval = corner(xy);\n\n// Of all the pixels that are mapped onto the texel we are\n// currently rendering, which pixel are we currently rendering?\nvec2 ilvec = vec2(0.0,ilfac.y > 1.5 ? mod(float(FrameCount),2.0) : 0.0);\nvec2 ratio_scale = (xy * TextureSize - vec2(0.5) + ilvec)/ilfac;\n#ifdef OVERSAMPLE\nfloat filter_ = InputSize.y/OutputSize.y;//fwidth(ratio_scale.y);\n#endif\nvec2 uv_ratio = fract(ratio_scale);\n\n// Snap to the center of the underlying texel.\nxy = (floor(ratio_scale)*ilfac + vec2(0.5) - ilvec) / TextureSize;\n\n// Calculate Lanczos scaling coefficients describing the effect\n// of various neighbour texels in a scanline on the current\n// pixel.\nvec4 coeffs = PI * vec4(1.0 + uv_ratio.x, uv_ratio.x, 1.0 - uv_ratio.x, 2.0 - uv_ratio.x);\n\n// Prevent division by zero.\ncoeffs = FIX(coeffs);\n\n// Lanczos2 kernel.\ncoeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs);\n\n// Normalize.\ncoeffs /= dot(coeffs, vec4(1.0));\n\n// Calculate the effective colour of the current and next\n// scanlines at the horizontal location of the current pixel,\n// using the Lanczos coefficients above.\nvec4 col = clamp(mat4(\n TEX2D(xy + vec2(-one.x, 0.0)),\n TEX2D(xy),\n TEX2D(xy + vec2(one.x, 0.0)),\n TEX2D(xy + vec2(2.0 * one.x, 0.0))) * coeffs,\n 0.0, 1.0);\nvec4 col2 = clamp(mat4(\n TEX2D(xy + vec2(-one.x, one.y)),\n TEX2D(xy + vec2(0.0, one.y)),\n TEX2D(xy + one),\n TEX2D(xy + vec2(2.0 * one.x, one.y))) * coeffs,\n 0.0, 1.0);\n\n#ifndef LINEAR_PROCESSING\ncol = pow(col , vec4(CRTgamma));\ncol2 = pow(col2, vec4(CRTgamma));\n#endif\n\n// Calculate the influence of the current and next scanlines on\n// the current pixel.\nvec4 weights = scanlineWeights(uv_ratio.y, col);\nvec4 weights2 = scanlineWeights(1.0 - uv_ratio.y, col2);\n#ifdef OVERSAMPLE\nuv_ratio.y =uv_ratio.y+1.0/3.0*filter_;\nweights = (weights+scanlineWeights(uv_ratio.y, col))/3.0;\nweights2=(weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2))/3.0;\nuv_ratio.y =uv_ratio.y-2.0/3.0*filter_;\nweights=weights+scanlineWeights(abs(uv_ratio.y), col)/3.0;\nweights2=weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2)/3.0;\n#endif\n\nvec3 mul_res = (col * weights + col2 * weights2).rgb * vec3(cval);\n\n// dot-mask emulation:\n// Output pixels are alternately tinted green and magenta.\nvec3 dotMaskWeights = mix(\nvec3(1.0, 1.0 - DOTMASK, 1.0),\nvec3(1.0 - DOTMASK, 1.0, 1.0 - DOTMASK),\nfloor(mod(mod_factor, 2.0))\n);\n\nmul_res *= dotMaskWeights;\n\n// Convert the image gamma for display on our output device.\nmul_res = pow(mul_res, vec3(1.0 / monitorgamma));\n\n// Color the texel.\noutput_dummy _OUT;\n_OUT._color = vec4(mul_res, 1.0);\nFragColor = _OUT._color;\nreturn;\n} \n#endif\n\n'},me=e(57),J=e(11),Q={addStyleHook:function(){H(this.elements.container,this.config.selectors.container.replace(".",""),!0),H(this.elements.container,this.config.classNames.uiSupported,!0),H(this.elements.container,this.config.classNames.hideControls,!0)},build:function(){this.listeners.media(),F.element(this.elements.controls)||(ae.inject.call(this),this.listeners.controls()),this.volume=null,this.muted=null,ae.updateVolume.call(this),H(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0},toggleControls:function(e){var n,t,a=this.elements.controls;a&&(n=0,t=r.call(this,".".concat(X({ejs__dialogs:!0})," > .").concat(X({ejs__dialog:!0}))),Array.from(t).forEach(function(e,t){!0!==e.hidden&&(n+=1)}),0>>0},o.prototype.readU24=function(){return this.littleEndian?this._lastRead=this._u8array[this.offset]+(this._u8array[this.offset+1]<<8)+(this._u8array[this.offset+2]<<16):this._lastRead=(this._u8array[this.offset]<<16)+(this._u8array[this.offset+1]<<8)+this._u8array[this.offset+2],this.offset+=3,this._lastRead>>>0},o.prototype.readU32=function(){return this.littleEndian?this._lastRead=this._u8array[this.offset]+(this._u8array[this.offset+1]<<8)+(this._u8array[this.offset+2]<<16)+(this._u8array[this.offset+3]<<24):this._lastRead=(this._u8array[this.offset]<<24)+(this._u8array[this.offset+1]<<16)+(this._u8array[this.offset+2]<<8)+this._u8array[this.offset+3],this.offset+=4,this._lastRead>>>0},o.prototype.readBytes=function(e){this._lastRead=new Array(e);for(var t=0;t>8):(this._u8array[this.offset]=e>>8,this._u8array[this.offset+1]=255&e),this.offset+=2},o.prototype.writeU24=function(e){this.littleEndian?(this._u8array[this.offset]=255&e,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=(16711680&e)>>16):(this._u8array[this.offset]=(16711680&e)>>16,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=255&e),this.offset+=3},o.prototype.writeU32=function(e){this.littleEndian?(this._u8array[this.offset]=255&e,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=(16711680&e)>>16,this._u8array[this.offset+3]=(4278190080&e)>>24):(this._u8array[this.offset]=(4278190080&e)>>24,this._u8array[this.offset+1]=(16711680&e)>>16,this._u8array[this.offset+2]=(65280&e)>>8,this._u8array[this.offset+3]=255&e),this.offset+=4},o.prototype.writeBytes=function(e){for(var t=0;tn&&(n=o.offset+o.length):o.offset+o.data.length>n&&(n=o.offset+o.data.length)}n===e.fileSize?t=e.slice(0,e.fileSize):(t=new Z(n),e.copyToFile(t,0))}for(e.seek(0),a=0;a>>1:n>>>1;e[t]=n}return e}();function $(e,t,n){for(var a=t?new Uint8Array(e._u8array.buffer,t):e._u8array,o=-1,i=n?a.length-4:a.length,s=0;s>>8^ye[255&(o^a[s])];return(-1^o)>>>0}var be=1,_e=2,Te=3;function we(){this.sourceSize=0,this.targetSize=0,this.metaData="",this.actions=[],this.sourceChecksum=0,this.targetChecksum=0,this.patchChecksum=0}function xe(e){e.readVLV=Se,e.littleEndian=!0;var t=new we,n=(e.seek(4),t.sourceSize=e.readVLV(),t.targetSize=e.readVLV(),e.readVLV());n&&(t.metaData=e.readString(n));for(var a=e.fileSize-12;e.offset>2)};i.type===be?i.bytes=e.readBytes(i.length):i.type!==_e&&i.type!==Te||(o=e.readVLV(),i.relativeOffset=(1&o?-1:1)*(o>>1)),t.actions.push(i)}if(t.sourceChecksum=e.readU32(),t.targetChecksum=e.readU32(),t.patchChecksum=e.readU32(),t.patchChecksum!==$(e,0,!0))throw new Error("error_crc_patch");return t}function Se(){for(var e=0,t=1;;){var n=this.readU8();if(e+=(127&n)*t,128&n)break;e+=t<<=7}return this._lastRead=e}function Ee(e){for(;;){var t=127&e;if(0==(e>>=7)){this.writeU8(128|t);break}this.writeU8(t),e--}}function Me(e){for(var t=0;;){if(0==(e>>=7)){t++;break}t++,e--}return t}we.prototype.toString=function(){var e="Source size: "+this.sourceSize;return(e=(e+="\nTarget size: "+this.targetSize)+("\nMetadata: "+this.metaData))+("\n#Actions: "+this.actions.length)},we.prototype.validateSource=function(e,t){return this.sourceChecksum===$(e,t)},we.prototype.apply=function(e,t){if(t&&!this.validateSource(e))throw new Error("error_crc_input");for(var n=new Z(this.targetSize),a=0,o=0,i=0;i>=7)){this.writeU8(128|t);break}this.writeU8(t),--e}}function Pe(){for(var e=0,t=1;;){var n=this.readU8();if(-1==n)throw new Error("Can't read UPS VLV at 0x"+(this.offset-1).toString(16));if(e+=(127&n)*t,0!=(128&n))break;e+=t<<=7}return e}function Ie(e){for(var t=0;t++,0!=(e>>=7);)--e;return t}function Oe(e){var t=new l;for(e.readVLV=Pe,e.seek(Ce.length),t.sizeInput=e.readVLV(),t.sizeOutput=e.readVLV();e.offset\n \n \n \n ",e=V("iframe",{src:g.adUrl,scrolling:"no",frameborder:"no",style:"width:300px !important;height:250px !important;display: block !important;"}),ee.loading.querySelector(".".concat(w.ad)).removeChild(ee.loading.querySelector(".".concat(w.ad," iframe"))),ee.loading.querySelector(".".concat(w.ad)).appendChild(e),W.webgl.DETECTED||(B(ee.loading.querySelector(".".concat(w["start-game"])),!0),ee.loading.querySelector(".".concat(w.p3)).innerHTML='Failed to initialize WebGL. '),ee.loading.querySelector(".".concat(w.ad," iframe")).style.setProperty("display","block","important"),ee.loading.querySelector(".".concat(w.ad," iframe")).style.setProperty("visibility","visible","important"),ee.loading.querySelector(".".concat(w.ad)).style.setProperty("display","block","important"),ee.loading.querySelector(".".concat(w.ad)).style.setProperty("visibility","visible","important")):(ee.loading.innerHTML='\n "),W.webgl.DETECTED||(B(ee.loading.querySelector(".".concat(w["start-game"])),!0),ee.loading.querySelector(".".concat(w.p3)).innerHTML='Failed to initialize WebGL. ')),window.URL||window.webkitURL),x=function(e){return 80===e[0]&&75===e[1]&&(3===e[2]&&4===e[3]||5===e[2]&&6===e[3]||7===e[2]&&8===e[3])?"zip":55===e[0]&&122===e[1]&&188===e[2]&&175===e[3]&&39===e[4]&&28===e[5]?"7z":82===e[0]&&97===e[1]&&114===e[2]&&33===e[3]&&26===e[4]&&7===e[5]&&(0===e[6]||1===e[6]&&0==e[7])?"rar":void 0},S=async function(e){e=await(await fetch(e)).text(),e=new Blob([e],{type:"application/javascript"}),e=window.URL.createObjectURL(e);return new Worker(e)},E=async function(e){var t=await(await fetch(e)).text(),e=new Blob(["\nvar dataToPass = [];\nModule = {\n monitorRunDependencies: function(left) {\n if (left == 0) {\n setTimeout(function() {\n unrar(dataToPass, null);\n }, 100);\n }\n },\n onRuntimeInitialized: function() {\n },\n locateFile: function(file) {\n return '"+e+".mem';\n }\n};\n"+t+'\nvar unrar = function(data, password) {\n var cb = function(fileName, fileSize, progress) {\n postMessage({"t":4,"current":progress,"total":fileSize, "name": fileName});\n };\n\n var rarContent = readRARContent(data.map(function(d) {\n return {\n name: d.name,\n content: new Uint8Array(d.content)\n }\n }), password, cb)\n var rec = function(entry) {\n if (entry.type === \'file\') {\n postMessage({"t":2,"file":entry.fullFileName,"size":entry.fileSize,"data":entry.fileContent});\n } else if (entry.type === \'dir\') {\n Object.keys(entry.ls).forEach(function(k) {\n rec(entry.ls[k]);\n })\n } else {\n throw "Unknown type";\n }\n }\n rec(rarContent);\n postMessage({"t":1});\n return rarContent;\n};\nonmessage = function(data) {\n dataToPass.push({name: \'test.rar\', content: data.data});\n};\n '],{type:"application/javascript"}),t=window.URL.createObjectURL(e);return new Worker(t)},M=null,C=null,l=null,d=null;try{M=new me({dbVersion:1,storePrefix:"ejs-",storeName:"system",keyPath:null,autoIncrement:!1,onStoreReady:function(){n=!0},onError:function(){n=!0}}),C=new me({dbVersion:1,storePrefix:"ejs-",storeName:"roms",keyPath:null,autoIncrement:!1,onStoreReady:function(){a=!0},onError:function(){a=!0}}),l=new me({dbVersion:1,storePrefix:"ejs-",storeName:"bios",keyPath:null,autoIncrement:!1,onStoreReady:function(){o=!0},onError:function(){o=!0}}),d=new me({dbVersion:1,storePrefix:"ejs-",storeName:"romsdata",keyPath:null,autoIncrement:!1,onStoreReady:function(){},onError:function(){}})}catch(e){o=a=n=!0,console.log(e)}G.call(g,g.elements.container,"start-game",function(e){g.started=!0,g.playing=!0,B(ee.loading.querySelector(".".concat(w["loading-info"])),!0),!te||"undefined"!=te.virtualGamepadContainer&&null!==te.virtualGamepadContainer||Q.toggleControls.call(g,!0);var t,n,a,o,i,s,r,l,c=X({"ejs__tooltip--visible":!0}),d=g.elements.buttons.gamepad.querySelector(".".concat(X({ejs__tooltip:!0}))),u=(H(d,c,!0),setTimeout(function(){H(d,c,!1)},5e3),"string"==typeof g.adUrl&&(B(ee.loading.querySelector(".".concat(w["close-ad"])),!1),!0!==g.config.noAutoAdClose&&setTimeout(function(){g.started&&ee.loading.querySelector(".".concat(w.ad))&&ee.loading.querySelector(".".concat(w.ad)).parentNode.removeChild(ee.loading.querySelector(".".concat(w.ad)))},1e4)),B(ee.loading.querySelector(".".concat(w["start-game"])),!0),K(ae.defaultCoreOptionsValues.call(p),ae.storage.get("core-options")||{})),f=("n64"===g.system&&u&&Object.keys(u).forEach(function(e){"glupen64-aspect"===e&&"16:9"===u[e]&&(T.height=T.width/16*9,ee.aspectRatio=16/9)}),"arcade"!==p.system&&"fba0.2.97.29"!==p.system||u&&Object.keys(u).forEach(function(e){"fba-aspect"===e&&"PAR"===u[e]&&(T.height=T.width/16*9,ee.aspectRatio=16/9)}),"gba"===g.system&&(T.height=T.width/1.5,ee.aspectRatio=1.5),window.setTimeout(function(){},150),f=p,"undefined"!=typeof RI?(document.removeEventListener("mousemove",RI.eventHandler,!1),T.removeEventListener("mousedown",RI.canvasEventHandler,!1),T.removeEventListener("mouseup",RI.canvasEventHandler,!1),f.elements.container.addEventListener("mousemove",function(e){var t=0,n=0,a=e.offsetX-ee.Module.canvas.offsetLeft,o=e.offsetY-ee.Module.canvas.offsetTop;if("mousemove"===e.type){t=a<0?(a=0,-ee.Module.canvas.offsetWidth):a>ee.Module.canvas.offsetWidth?(a=ee.Module.canvas.offsetWidth,ee.Module.canvas.offsetWidth):a-RI.currentX,n=o<0?(o=0,-ee.Module.canvas.offsetHeight):o>ee.Module.canvas.offsetHeight?(o=ee.Module.canvas.offsetHeight,ee.Module.canvas.offsetHeight):o-RI.currentY,RI.currentX=a,RI.currentY=o;for(var i=0;i>2]=t,HEAP32[RI.contexts[i].state+36>>2]=n}},!1),f.elements.container.addEventListener("mousedown",RI.canvasEventHandler,!1),f.elements.container.addEventListener("mouseup",RI.canvasEventHandler,!1),f.elements.container.addEventListener("touchstart",t=function(e){if(e.targetTouches[0]){var t,n=0,a=0,o=e.target.getBoundingClientRect(),i=e.targetTouches[0].clientX-o.left,o=e.targetTouches[0].clientY-o.top,n=i<0?(i=0,-ee.Module.canvas.offsetWidth):i>ee.Module.canvas.offsetWidth?(i=ee.Module.canvas.offsetWidth,ee.Module.canvas.offsetWidth):i-RI.currentX,a=o<0?(o=0,-ee.Module.canvas.offsetHeight):o>ee.Module.canvas.offsetHeight?(o=ee.Module.canvas.offsetHeight,ee.Module.canvas.offsetHeight):o-RI.currentY;RI.currentX=i,RI.currentY=o;for(var s=0;s>2]=n,HEAP32[RI.contexts[s].state+36>>2]=a;switch(e.type){case"touchend":case"touchstart":if(0===e.button)t=40;else{if(2!==e.button)break;t=41}for(var r="touchend"===e.type?0:1,l=0;l>0]=r}}},!1),f.elements.container.addEventListener("touchend",t,!1)):(f=function(e){e=new MouseEvent(e.type,e);ee.Module.canvas.dispatchEvent(e)},q.call(p,".".concat(X({ejs__dialogs:!0}))).addEventListener("mousemove",f,!1),q.call(p,".".concat(X({ejs__dialogs:!0}))).addEventListener("mousedown",f,!1),q.call(p,".".concat(X({ejs__dialogs:!0}))).addEventListener("mouseup",f,!1)),"msx"===g.system&&"undefined"!=typeof RI&&(document.removeEventListener("keydown",RI.eventHandler,!1),document.removeEventListener("keyup",RI.eventHandler,!1),t=function(e){var t=e.keyCode,n=t>>3,a=1<<(7&t);switch(e.type){case"keyup":case"keydown":if(32<=n)throw"key code error! bad code: "+t;for(var o=0;o>0];"keyup"===e.type?i&=~a:i|=a,HEAP8[RI.contexts[o].state+n>>0]=i}}},document.addEventListener("keydown",t,!1),document.addEventListener("keyup",t,!1)),setTimeout(function(){var o=Y.info();null===te.setVolume&&"undefined"!=typeof RA?(RA.queueAudio=function(){var e=g.volume,t=RA.bufIndex,n=RA.bufIndex?RA.buffers[RA.bufIndex-1].endTime:RA.context.currentTime,a=(RA.buffers[t].endTime=n+RA.buffers[t].duration,RA.context.createBufferSource());a.buffer=RA.buffers[t],1===(e=g.muted?0:e)?a.connect(RA.context.destination):(t=RA.context.createGain(),a.connect(t),t.connect(RA.context.destination),Y.isEdge||"chrome"===o.name&&parseInt(o.version,10)<=60||"firefox"===o.name&&parseInt(o.version,10)<=56||"opera"===o.name&&parseInt(o.version,10)<=44?t.gain.value=e:"firefox"===o.name?t.gain.setValueAtTime(e,RA.context.currentTime):t.gain.setValueAtTime(e,RA.context.currentTime,0)),a.start(n),RA.bufIndex+=1,RA.bufOffset=0},Y.isIos&&window.addEventListener("touchstart",function(){var e;RA.context&&(RA.context.resume(),(e=RA.context.createBufferSource()).connect(RA.context.destination),e.start())},!1)):te.setVolume()},500),setTimeout(function(){g.elements.container.focus()},30),void 0===window.addRunDependency&&(window.Module=void 0),ee.FS.readFile(g.startName));f.length<=33554432&&".cue"!=g.startName.substr(-4)&&(a="snes"===g.system||["snes2002","snes2005","snes2010"].includes(g.system)?(n=f.length%1024,new Z(n?f.slice?f.slice(n):f.subarray(n):f)):new Z(f),o=Re.a.create(),i=new FileReader,s=0,r=a._u8array.length,l=function(){var e;sDoesn\'t look like your browser is supported'}else l.innerHTML='Invalid Rom '}function n(e){if(e.data){if(1===e.data.t&&(!r.startName&&u&&(r.startName=u),e.target.terminate(),s(r.startName)),2===e.data.t){var t=e.data.file.split("/"),n=(a=t.pop()).split(".").pop(),a=a.replace(/\#/g,"");ee.FS.createPath("/",t.join("/"),!0,!0);for(var o=h[c].length-1;0<=o;--o)h[c][o]===n.toLowerCase()&&d'+z.localization("Missing mame config")+"");r=r.split("|");ee.coreFileName="".concat(z.system,"-").concat(r[0]),a="1"===r[1],F.element(z.elements.buttons.saveState)&&B(z.elements.buttons.saveState,!a),F.element(z.elements.buttons.loadState)&&B(z.elements.buttons.loadState,!a),B(ae.contextMenu.querySelectorAll("ul li").item(2),!a),B(ae.contextMenu.querySelectorAll("ul li").item(3),!a),c=2===z.coreVer?"":z.system.concat("-old-").concat(r[0],"-wasm.data"),r[0]?(W.wasm&&i?u=!0:(s.innerHTML=''+z.localization("Webassembly support is not detected in this browser")+" ",c=""),c&&(M.db?M.get(c,function(e){e&&e.version===n?2===g.coreVer?k(e.data):((e=e.data.slice?e.data.slice(12):e.data.subarray(12)).set([55,122,188,175,39,28,0,3],0),k(e)):d(c,n)}):d(c,n))):s.innerHTML=''+z.localization("Unsupported Game")+" "}else{var l,c=!1;if(W.wasm&&i?(l="wasm",c=!0,"n64"!==z.system||e||2===z.coreVer||(l="legacy-wasm"),u=!0):o&&(c=!0,l="asmjs","n64"!==z.system||e||2===z.coreVer||(l="legacy-asmjs")),!0!==(c="undefined"!=typeof EJS_CUSTOM_COREFILE?EJS_CUSTOM_COREFILE:c))return void(s.innerHTML=''+z.localization("Please upgrade your browser to the latest version")+" ");c=2===z.coreVer?t+"-"+l+".data":t+"-old-"+l+".data","undefined"!=typeof EJS_CUSTOM_COREFILE&&(c=EJS_CUSTOM_COREFILE),M.db?M.get(c,function(e){!e||e.version!==n||"undefined"!=typeof EJS_DEBUG_XX&&!0===EJS_DEBUG_XX?d(c,n):2===g.coreVer?k(e.data):((e=e.data.slice?e.data.slice(12):e.data.subarray(12)).set([55,122,188,175,39,28,0,3],0),k(e))}):d(c,n)}F.element(z.elements.buttons.saveState)&&B(z.elements.buttons.saveState,!a),F.element(z.elements.buttons.loadState)&&B(z.elements.buttons.loadState,!a),B(ae.contextMenu.querySelectorAll("ul li").item(2),!a),B(ae.contextMenu.querySelectorAll("ul li").item(3),!a),g.setStatesSupported(a),z.config.buttons&&(!1===z.config.buttons.playPause&&F.element(z.elements.buttons.play[0])&&B(z.elements.buttons.play[0],!0),!1===z.config.buttons.restart&&F.element(z.elements.buttons.restart)&&B(z.elements.buttons.restart,!0),!1===z.config.buttons.mute&&F.element(z.elements.buttons.mute)&&B(z.elements.buttons.mute,!0),!1===z.config.buttons.settings&&F.element(z.elements.buttons.settings)&&B(z.elements.buttons.settings,!0),!1===z.config.buttons.fullscreen&&F.element(z.elements.buttons.fullscreen)&&B(z.elements.buttons.fullscreen,!0),!1===z.config.buttons.saveState&&F.element(z.elements.buttons.saveState)&&B(z.elements.buttons.saveState,!0),!1===z.config.buttons.loadState&&F.element(z.elements.buttons.loadState)&&B(z.elements.buttons.loadState,!0),!1===z.config.buttons.screenRecord&&F.element(z.elements.buttons.screenRecord)&&B(z.elements.buttons.screenRecord,!0),!1===z.config.buttons.gamepad&&F.element(z.elements.buttons.gamepad)&&B(z.elements.buttons.gamepad,!0),!1===z.config.buttons.cheat&&F.element(z.elements.buttons.cheat)&&B(z.elements.buttons.cheat,!0),!1===z.config.buttons.volume&&F.element(z.elements.inputs.volume)&&B(z.elements.inputs.volume,!0),!1===z.config.buttons.screenshot&&B(ae.contextMenu.querySelectorAll("ul li").item(0),!0),!0===z.config.buttons.cacheManage&&B(ae.contextMenu.querySelectorAll("ul li").item(1),!1),!1===z.config.buttons.quickSave&&B(ae.contextMenu.querySelectorAll("ul li").item(2),!0),!1===z.config.buttons.quickLoad&&B(ae.contextMenu.querySelectorAll("ul li").item(3),!0))}else s.innerHTML=''+z.localization("Invalid System")+" "}).catch(function(e){D(e,t,g)}),ee.romdb=C,!1;setTimeout(L,50)}};oe(ee.loading.querySelector(".".concat(w["start-game"])),"click touchstart",L),!0===g.startOnLoad&&ee.loading.querySelector(".".concat(w["start-game"])).click()}},p=ee;function Ne(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t')),!t)return!0;for(var n in t)De(n);return!0}),playerName:"",players:[],waitingList:{},roomMaster:null,inputsData:{},coreOptionData:{},currentFrame:0,wait:!(De=function(e){if(!document.getElementById(e))return!1}),progressHelper:{},icons:{lock:' '},disableInput:!1,disableControl:function(e){if(e){for(var t=0;t<24;t+=1)m.simulateInputFn(0,t,0),m.simulateInputFn(1,t,0),m.simulateInputFn(2,t,0),m.simulateInputFn(3,t,0);m.disableInput=!0}else m.disableInput=!1},isPaused:null,setVolume:null,setVariable:null,simulateInput:null,simulateInputFn:null,toggleShader:null,saveState:null,screenRecord:null,loadState:null,quickSaveState:null,quickLoadState:null,changeStateSlot:null,getScreenData:null,getStateInfo:null,setCheat:null,resetCheat:null,getGameCoreOptions:null,classNames:{"dialog-container":X({"dialog-container":!0}),tabs:X({tabs:!0}),"dialog-title":X({"dialog-title":!0}),"dialog-content":X({"dialog-content":!0}),"dialog-buttons":X({"dialog-buttons":!0}),overlay:X({overlay:!0}),"key-setting-popup":X({"key-setting-popup":!0}),"tabs-panel":X({"tabs-panel":!0}),"tabs-content":X({"tabs-content":!0}),"button-container":X({"button-container":!0}),set:X({set:!0}),active:X({active:!0}),"btn-cancel":X({"btn-cancel":!0}),"btn-reset":X({"btn-reset":!0}),"btn-clear":X({"btn-clear":!0}),"btn-create":X({"btn-create":!0}),"btn-submit":X({"btn-submit":!0}),"btn-join-room":X({"btn-join-room":!0}),"btn-quit":X({"btn-quit":!0}),"btn-create-room":X({"btn-create-room":!0}),modal:X({modal:!0}),modal__overlay:X({modal__overlay:!0}),modal__container:X({modal__container:!0}),modal__header:X({modal__header:!0}),modal__title:X({modal__title:!0}),modal__close:X({modal__close:!0}),modal__content:X({modal__content:!0}),modal__btn:X({modal__btn:!0}),"modal__btn-primary":X({"modal__btn-primary":!0}),"micromodal-slide":X({"micromodal-slide":!0}),modal__errmsg:X({modal__errmsg:!0}),modal__footer:X({modal__footer:!0}),"cheats-add":X({"cheats-add":!0}),"cheats-list":X({"cheats-list":!0}),"cheat-code-input":X({"cheat-code-input":!0}),"cheat-name-input":X({"cheat-name-input":!0}),"ejs-switch":X({"ejs-switch":!0}),"ejs-delete-cheat":X({"ejs-delete-cheat":!0})},initShaders:function(){for(var e,t=he,n=Object.keys(t),a=0;a\n \n
'+r.localization("Control Settings")+' \n \n \n \n \n \n \n
\n
[Select] \n
'+r.localization("Press keyboard or gamepad")+"
\n
\n
\n \n ",'\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
'+r.localization("Gamepad")+'
\n
'+r.localization("Keyboard")+'
\n
\n
\n
\n
\n
')),n='\n \n
\n {label}: \n
\n
\n
\n
\n
');"nes"===r.system?i={0:"B",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",24:r.localization("QUICK SAVE STATE"),25:r.localization("QUICK LOAD STATE"),26:r.localization("CHANGE STATE SLOT")}:"snes"===r.system?i={0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",24:r.localization("QUICK SAVE STATE"),25:r.localization("QUICK LOAD STATE"),26:r.localization("CHANGE STATE SLOT")}:"n64"===r.system?(i={0:"B",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",10:"L",11:"R",12:"Z",19:"L STICK UP",18:"L STICK DOWN",17:"L STICK LEFT",16:"L STICK RIGHT",23:"R STICK UP",22:"R STICK DOWN",21:"R STICK LEFT",20:"R STICK RIGHT",24:r.localization("QUICK SAVE STATE"),25:r.localization("QUICK LOAD STATE"),26:r.localization("CHANGE STATE SLOT")},2===r.coreVer&&(i[0]="A",i[1]="B",delete i[8])):i="nds"===r.system?{0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",14:"Microphone",24:r.localization("QUICK SAVE STATE"),25:r.localization("QUICK LOAD STATE"),26:r.localization("CHANGE STATE SLOT")}:{0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",12:"L2",13:"R2",14:"L3",15:"R3",19:"L STICK UP",18:"L STICK DOWN",17:"L STICK LEFT",16:"L STICK RIGHT",23:"R STICK UP",22:"R STICK DOWN",21:"R STICK LEFT",20:"R STICK RIGHT",24:r.localization("QUICK SAVE STATE"),25:r.localization("QUICK LOAD STATE"),26:r.localization("CHANGE STATE SLOT")},["arcade","mame"].includes(r.system)&&(i[2]=r.localization("INSERT COIN")),!1===r.statesSupported&&(delete i[24],delete i[25],delete i[26]);for(var a=[2,3,4,5,6,7,8,0,9,1,10,11,12,13,14,15,19,18,17,16,23,22,21,20,24,25,26],t=0;t<=3;t+=1)!function(t){r.elements.dialogs.gamepad.querySelector(".".concat(m.classNames["tabs-content"])).innerHTML+=e.replace(/{index}/g,t),a.forEach(function(e){i[e]&&(r.elements.dialogs.gamepad.querySelector("#controls-".concat(t)).innerHTML+=n.replace(/{index}/g,t).replace(/{id}/g,e).replace(/{label}/g,i[e]))}),r.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),r.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="'.concat(t,'"][data-type="2"]'))&&(r.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc")}(t);Object.keys(m.controllers).forEach(function(a){m.controllers[a]&&Object.keys(m.controllers[a]).forEach(function(e){var t=r.elements.dialogs.gamepad.querySelector('[data-id="'.concat(e,'"][data-index="').concat(a,'"][data-type="1"]')),n=r.elements.dialogs.gamepad.querySelector('[data-id="'.concat(e,'"][data-index="').concat(a,'"][data-type="2"]'));if(!t||!n)return!1;e=m.controllers[a][e];e&&(e.type&&1!==parseInt(e.type,10)?n.value="":e.value&&(t.value=m.keyMap[e.value]||"",t.setAttribute("data-value",e.value)),e.value2&&(n.value=isNaN(e.value2)?e.value2:"button ".concat(parseInt(e.value2,10)+1),n.setAttribute("data-value",e.value2)))})}),G.call(this,r.elements.dialogs.gamepad.querySelector(".".concat(m.classNames["btn-submit"])),"click",function(e){var t=r.elements.dialogs.gamepad.querySelectorAll("input"),o={};return Array.from(t).forEach(function(e){var t,n=e.getAttribute("data-index"),a=e.getAttribute("data-value"),e=(2===parseInt(e.getAttribute("data-type"),10)&&(t=e.getAttribute("data-value")),e.getAttribute("data-id"));o[n]||(o[n]={}),o[n][e]||(o[n][e]={}),a&&(o[n][e].value=a),t&&(o[n][e].value2=t)}),ae.storage.set({controllers:o}),m.controllers=o,B(r.elements.dialogs.gamepad,!0),r.elements.container.focus(),e.stopPropagation(),!1}),G.call(this,r.elements.dialogs.gamepad.querySelector(".".concat(m.classNames["btn-reset"])),"click",function(e){m.controllers=JSON.parse(JSON.stringify(m.defaultControllers)),localStorage.removeItem(ae.storage.key);for(var t=r.elements.dialogs.gamepad.querySelectorAll("input"),n=0;nGamepad:'.concat(m.gamepad.gamepads[a].id," "+r.localization("Press keyboard or gamepad")+" "+r.localization("Press escape (esc) to clear")):t+=" Press keyboard "+r.localization("Press escape (esc) to clear"),s.querySelector(".".concat(m.classNames["key-setting-popup"])).innerHTML=t,e.stopPropagation()})})},setCacheDialog:function(){var t=this;t.elements.dialogs.cache.innerHTML='\n \n
\n
'+t.localization("Cache Manager")+' \n \n
\n\n
\n
\n
\n "),G.call(this,t.elements.dialogs.cache.querySelector(".".concat(m.classNames["btn-cancel"])),"click",function(e){return B(t.elements.dialogs.cache,!0),t.elements.container.focus(),e.stopPropagation(),!1}),G.call(this,t.elements.dialogs.cache.querySelector(".".concat(m.classNames["dialog-title"]," a")),"click",function(e){return p.romdb&&(p.romdb.clear(),t.elements.dialogs.cache.querySelector(".".concat(m.classNames["dialog-content"])).innerHTML=''+t.localization("Empty")+"
"),e.stopPropagation(),!1})},showLoading:function(e){Ge.show("modal-6ed698f3d04061f5",{closeByEsckey:!1}),e&&console.log(""),B(this.elements.dialogs.loading,!1)},hideLoading:function(){Ge.close(),B(this.elements.dialogs.loading,!0)},setLoadingDialog:function(){this.elements.dialogs.loading&&(this.elements.dialogs.loading.innerHTML='\n \n
\n
\n '+this.localization("Loading")+"...\n
\n
\n
"))},setCheatDialog:function(){var i,s,a,r=this;r.elements.dialogs.cheat&&(r.elements.dialogs.cheat.innerHTML='\n \n\n \n\n \n
\n
\n \n
\n\n
\n '+r.localization("Code")+' \n \n '+r.localization("Description")+' \n \n\n \n \n
\n
\n
\n "),i=r.elements.dialogs.cheat.querySelector("#modal-85cd7a1c543a484b"),G.call(this,r.elements.dialogs.cheat.querySelector(".".concat(m.classNames["cheats-add"])),"click",function(e){return Ge.show("modal-85cd7a1c543a484b",{closeTrigger:"data-modal-close"}),!1}),s=r.elements.dialogs.cheat.querySelector(".".concat(m.classNames["cheats-list"])),G.call(this,i.querySelector(".".concat(m.classNames["modal__btn-primary"])),"click",function(e){var t,n,a=i.querySelector(".".concat(m.classNames["cheat-name-input"])).value,o=i.querySelector(".".concat(m.classNames["cheat-code-input"])).value;return a&&o&&(t=s.querySelectorAll("input:checked"),i.querySelector(".".concat(m.classNames["cheat-name-input"])).value="",i.querySelector(".".concat(m.classNames["cheat-code-input"])).value="",Ge.close(),n=r.cheats.length,r.cheats.push([a,o]),s.innerHTML+='\n
\n
').concat(a,' \n
× \n
'),t.forEach(function(e,t){s.querySelector("#ejs-cheat-switch-".concat(t)).setAttribute("checked","checked")})),"localStorage"in window&&localStorage.setItem("".concat(r.system,"-").concat(r.startName,"-cheats"),JSON.stringify(r.cheats)),e.stopPropagation(),!1}),a=function(){if("localStorage"in window){var e=localStorage.getItem("".concat(r.system,"-").concat(r.startName,"-cheats"));try{e=JSON.parse(e)}catch(e){}e&&(r.cheats=e)}s.innerHTML="",r.cheats&&Array.isArray(r.cheats)&&r.cheats.forEach(function(e,t){var n=e[0];e[1],s.innerHTML+='\n
\n
').concat(n,' \n
× \n
')})},G.call(r,s,"click",function(e){var t,n;return e.target&&e.target.classList.contains(m.classNames["ejs-delete-cheat"])&&e.target.getAttribute("data-idx")&&(t=e.target.getAttribute("data-idx"),r.cheats.splice(t,1),"localStorage"in window&&localStorage.setItem("".concat(r.system,"-").concat(r.startName,"-cheats"),JSON.stringify(r.cheats)),n=[],s.querySelectorAll("input").forEach(function(e,t){n[t]=!!s.querySelector("#ejs-cheat-switch-".concat(t,":checked"))}),n.splice(t,1),a(),n.forEach(function(e,t){e&&s.querySelector("#ejs-cheat-switch-".concat(t)).setAttribute("checked","checked")})),e.stopPropagation(),!1}),G.call(r,r.elements.container,"start-game",function(e){a()}),G.call(this,r.elements.dialogs.cheat.querySelector(".".concat(m.classNames["btn-cancel"])),"click",function(e){return B(r.elements.dialogs.cheat,!0),e.stopPropagation(),r.elements.container.focus(),!1}),G.call(this,r.elements.dialogs.cheat.querySelector(".".concat(m.classNames["btn-submit"])),"click",function(e){return m.resetCheat(),s.querySelectorAll("input:checked").forEach(function(e,t){e=r.cheats[e.value];e&&m.setCheat(t,1,e[1])}),B(r.elements.dialogs.cheat,!0),r.elements.container.focus(),!1}),"arcade"!==r.system&&"mame"!==r.system&&"mame2003"!==r.system&&"mame2010"!==r.system||(F.element(r.elements.buttons.cheat)&&B(r.elements.buttons.cheat,!0),m.allowCheat=!1),m.setCheat||(B(r.elements.buttons.cheat,!0),m.allowCheat=!1))},initKeyboard:function(){var i=this,s=this,r=this.elements.dialogs.gamepad.querySelector(".".concat(m.classNames.overlay));G.call(this,document.body,"keydown keyup",function(n){if(!(112<=n.which&&n.which<=123)){var e=!i.elements.dialogs.gamepad.hidden&&!r.hidden,a="keydown"===n.type;if(a&&e){var e=r.getAttribute("data-index"),t=r.getAttribute("data-id"),o=null;if(n.key&&"escape"===m.keyMap[n.keyCode])return(o=s.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="1"]'))).setAttribute("data-value",""),o.value=""(o=s.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="2"]'))).setAttribute("data-value",""),o.value="",void B(r,!0);e=r.getAttribute("data-index"),t=r.getAttribute("data-id"),o=null;n.key&&((o=s.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="1"]'))).setAttribute("data-value",n.keyCode),o.value=m.keyMap[n.keyCode]),B(r,!0)}else Object.keys(m.controllers).forEach(function(t){Object.keys(m.controllers[t]).forEach(function(e){parseInt(m.controllers[t][e].value,10)===n.keyCode&&["24","25","26"].includes(e)&&"keydown"==n.type&&!n.repeat&&("24"==e?m.quickSaveState():"25"==e?m.quickLoadState():"26"==e&&m.changeStateSlot()),parseInt(m.controllers[t][e].value,10)===n.keyCode&&(a?16<=e&&e<=23?m.simulateInput(t,e,32767):m.simulateInput(t,e,1):m.simulateInput(t,e,0))})})}}),document.body.addEventListener("keydown",function(e){var t=e.keyCode||e.which;[32,37,38,39,40,112,113,114,115,116,117,118,119,120,121,122,123].includes(t)&&e.srcElement===s.elements.container&&e.preventDefault(),e.srcElement.className.split(/ +/).includes(m.classNames.set)&&e.preventDefault()})},initGamepad:function(){var n,l=this,o=this,c=this.elements.dialogs.gamepad.querySelector(".".concat(m.classNames.overlay));try{n=new fe}catch(e){return void console.warn("gamepad not supported")}(m.gamepad=n).on("buttondown",function(n){var e,t,a;l.elements.dialogs.gamepad.hidden||c.hidden?Object.keys(m.controllers[n.gamepadIndex.toString()]).forEach(function(e){var t=n.gamepadIndex.toString();parseInt(m.controllers[t][e].value2,10)===parseInt(n.index,10)&&["24","25","26"].includes(e)&&("24"==e?m.quickSaveState():"25"==e?m.quickLoadState():"26"==e&&m.changeStateSlot()),parseInt(m.controllers[t][e].value2,10)===parseInt(n.index,10)&&parseInt(t,10)===parseInt(n.gamepadIndex,10)&&m.simulateInput(t,e,1)}):(e=parseInt(c.getAttribute("data-index"),10),t=c.getAttribute("data-id"),n.gamepadIndex===parseInt(e,10)&&(a=null,(a=o.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="2"]'))).setAttribute("data-value",n.index),a.value="button ".concat(n.index+1),B(c,!0)))}),n.on("buttonup",function(n){Object.keys(m.controllers).forEach(function(t){Object.keys(m.controllers[t]).forEach(function(e){parseInt(m.controllers[t][e].value2,10)===parseInt(n.index,10)&&parseInt(t,10)===parseInt(n.gamepadIndex,10)&&m.simulateInput(t,e,0)})})}),n.on("axischanged",function(e){var t,n=.5<(t=e.value)||t<-.5?0')+(''),i=0;i'+t[i].text+"
");o=(o+=" ")+('');for(i=0;i'+t[i].text+"
");o=(o+=" ")+('');for(i=0;i'+t[i].text+"
");o=(o+="")+('');for(var s,i=0;i'+t[i].text+"
");m.virtualGamepadContainer.innerHTML=o+="",B(m.virtualGamepadContainer,!e);var r,l=X({"virtual-gamepad":!0}),c=X({touch:!0});Y.isIos||G.call(this,q.call(this,".".concat(l)),"touchmove",function(e){e.stopPropagation()});for(i=0;i{var e=q.call(n,".".concat(l," .").concat(X(t.id)));e&&G.call(n,e,"touchstart touchend",function(e){"touchend"===e.type?(H(e.target,c,!1),window.setTimeout(function(){m.syncInput(0,t.number,0)},30)):(H(e.target,c,!0),m.syncInput(0,t.number,1)),e.stopPropagation()})});var p,e=V("div",{class:X({ejs__widget:!0,ejs__widget_controls_toggle:!0})},"");e.innerHTML=' ',q.call(this,".".concat(X({ejs__widgets:!0}))).appendChild(e),G.call(this,e,"mousedown touchstart",function(e){H(e.target,c,!0),clearTimeout(p),Q.toggleControls.call(n,!0),p=setTimeout(function(){Q.toggleControls.call(n,!1)},5e3)})}function h(){var e;return"n64"!==n.system||"d-pad"===(e=ae&&"function"==typeof ae.getCoreOptionsValues?ae.getCoreOptionsValues()["joystick-input"]:e)?{downVal:1,4:4,5:5,6:6,7:7}:{downVal:32767,4:19,5:18,6:17,7:16}}},setup:function(){var e,t,n,a=this;this.game?(m.playerName=a.config.playerName,H(this.elements.container,this.config.classNames.type,!0),this.elements.container.setAttribute("tabindex","0"),this.color&&(e=function(e){var t=e.toLowerCase();if(t&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)){if(4===t.length){for(var n="#",a=1;a<4;a+=1)n+=t.slice(a,a+1).concat(t.slice(a,a+1));t=n}for(var o=[],i=1;i<7;i+=2)o.push(parseInt("0x".concat(t.slice(i,i+2)),16));return o}return null}(this.color))&&this.elements.container.setAttribute("style","--ejs-primary-color: ".concat(e[0],", ").concat(e[1],", ").concat(e[2])),this.elements.wrapper=V("div",{class:this.config.classNames.video}),O(this.game,this.elements.wrapper),"video"!==a.game.tagName.toLocaleLowerCase()&&(t=this.config.volume,Object.defineProperty(a.game,"volume",{get:function(){return t},set:function(e){t=e,U.call(a,a.game,"volumechange")}}),n=a.storage.get("muted"),Object.defineProperty(a.game,"muted",{get:function(){return n},set:function(e){e=!!F.boolean(e)&&e;n=e,U.call(a,a.game,"volumechange")}})),window.addEventListener("beforeunload",function(e){a.started&&(p.FS.syncfs(function(){}),m.saveSavFiles(),p.FS.syncfs(function(){}))},!0),setInterval(function(){a.started&&(console.log("saving save files"),m.saveSavFiles(),p.FS.syncfs(!1,function(){}))},3e5)):console.warn("No game element found!")},listeners:function(){var s=this;s.elements.buttons.restart&&G.call(s,s.elements.buttons.restart,"click",function(e){m.restartGame(),m.inputsData={}}),s.elements.buttons.screenRecord&&G.call(s,s.elements.buttons.screenRecord,"click",function(e){var a,o,i;s.recordData||(s.recordData={started:!1,data:[],stopped:!1}),s.recordData.started?s.recordData.started&&(s.recordData.recorder.stop(),s.recordData.stopped=!0):(a=MediaRecorder.isTypeSupported("video/webm; codecs=h264")?{mimeType:"video/webm; codecs=h264"}:MediaRecorder.isTypeSupported("video/webm; codecs=H264")?{mimeType:"video/webm; codecs=H264"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp9")?{mimeType:"video/webm; codecs=vp9"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp8")?{mimeType:"video/webm; codecs=vp8"}:MediaRecorder.isTypeSupported("video/webm; codecs=avc1")?{mimeType:"video/webm; codecs=avc1"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp9.0")?{mimeType:"video/webm; codecs=vp9.0"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp8.0")?{mimeType:"video/webm; codecs=vp8.0"}:{},p.Module.pauseMainLoop(),s.playing=!1,alert('please check "share system audio" to have audio in the recording. We only need the audio stream so your entire screen will not be recorded'),o=p.Module.canvas.captureStream(30),i=setTimeout(function(){s.playing=!0,p.Module.resumeMainLoop()},2e4),navigator.mediaDevices.getDisplayMedia({audio:!0,video:{mediaSource:"screen"}}).then(function(e){try{clearTimeout(i)}catch(e){}for(var t=e.getAudioTracks(),n=0;n>0;if(0>0,o=0;o".concat(this.icons[e],"");for(var a=t.childNodes[0].childNodes,o=0;o",""]),i=[];function n(e,t,n){"function"==typeof n?i.push(n):i.push(function(){});n=a.length-1;t?a.splice(n,0,''+e+" "):a.splice(n,0,''+e+" ")}n(o.localization("Take Screenshot"),!1,function(e){var t=m.getScreenData(),n=(n="string"==typeof o.gameName?o.gameName:n)?"".concat(n,"-screenshot.png"):"game.png",a=document.createElement("a");return a.href=URL.createObjectURL(new Blob([t])),a.download=n,a.click(),setTimeout(function(){URL.revokeObjectURL(a.src)}),!1}),n(o.localization("Cache Manage"),!0,function(e){var n;return p.romdb&&(B(o.elements.dialogs.cache,!1),(n=o.elements.dialogs.cache.querySelector(".".concat(m.classNames["dialog-content"]))).innerHTML=""+o.localization("Loading")+"
",p.romdb.getAll(function(e){var t,c;e?(t=V("table",{style:"width:100%;padding-left:10px;text-align:left"}),c=V("tbody"),0Remove',i.appendChild(s),i.appendChild(r),i.appendChild(l),c.appendChild(i),l.querySelector("a").onclick=function(e){p.romdb.removeBatch(a);try{c.removeChild(i)}catch(e){}return e.stopPropagation(),!1}}}),t.appendChild(c),n.appendChild(t)):n.innerHTML=''+o.localization("Empty")+"
"):n.innerHTML=''+o.localization("Empty")+"
"},function(){})),!1}),n(o.localization("Quick Save")+" (F2)",!1,function(e){m.quickSaveState(),ae.contextMenu.style.display="none"}),n(o.localization("Quick Load")+" (F4)",!1,function(e){m.quickLoadState(),ae.contextMenu.style.display="none"}),ne.contextMenu.innerHTML=a.join("");for(var s=ne.contextMenu.getElementsByTagName("li"),r=0;r ',"exit-fullscreen":' ',gamepad:' ',"load-state":' ',muted:' ',pause:' ',play:' ',restart:' ',"save-state":' ',"screen-record":' ',settings:' ',volume:' \n \n ',cheat:' '},this.id=Math.floor(1e4*Math.random()),null),t=(this.elements.controls=null,{id:this.id}),a=!0;F.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this.props)),this.config.controls||(this.config.controls=[]),F.element(this.config.controls)||F.string(this.config.controls)?e=this.config.controls:(e=ne.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality}),a=!1);function o(e){var n=e;return Object.entries(t).forEach(function(e){t=2;var e=function(e){if(Array.isArray(e))return e}(e=e)||function(e,t){var n=[],a=!0,o=!1,i=void 0;try{for(var s,r=e[Symbol.iterator]();!(a=(s=r.next()).done)&&(n.push(s.value),!t||n.length!==t);a=!0);}catch(e){o=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(o)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}(),t=e[0],e=e[1];n=d(n,"{".concat(t,"}"),e)}),n}var i,s;a&&(F.string(this.config.controls)?e=o(e):F.element(e)&&(e.innerHTML=o(e.innerHTML))),F.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),(i=F.element(i)?i:this.elements.container)[F.element(e)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",e),F.element(this.elements.controls)||ne.findElements.call(this),F.empty(this.elements.buttons)||(s=function(e){var t=n.config.classNames.controlPressed;Object.defineProperty(e,"pressed",{enumerable:!0,get:function(){return k(e,t)},set:function(){H(e,t,0Math.abs(n)?a:n),n=(i.increaseVolume(a/50),i.game.volume);(1===a&&n<1||-1===a&&0'+n.localization("CORS Error")+" ":t.innerHTML=''+n.localization("Network Error")+" "}},null,null,null,null,null,function(e){function t(){if(!(navigator.getGamepads||navigator.webkitGetGamepads))throw new Error("get gamepads not found!");if(this.rAF=window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.requestAnimationFrame,!this.rAF)throw new Error("request animation frame was not found!");this.loop()}t.prototype={gamepads:[],rAF:null,getGamepads:function(){return navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():[]},loop:async function(){this.updateGamepadState(),this.rAF.call(null,this.loop.bind(this))},updateGamepadState:function(){for(var n=this.getGamepads(),a=0;athis.options.threshold){var l={};for(r in this.direction)this.direction.hasOwnProperty(r)&&(l[r]=this.direction[r]);var r,c={};for(r in this.direction={x:n,y:a,angle:t},e.direction=this.direction,l)l[r]===this.direction[r]&&(c[r]=!0);if(c.x&&c.y&&c.angle)return e;c.x&&c.y||this.trigger("plain",e),c.x||this.trigger("plain:"+n,e),c.y||this.trigger("plain:"+a,e),c.angle||this.trigger("dir dir:"+t,e)}return e},a.prototype=new e,(a.constructor=a).id=0,a.prototype.prepareNipples=function(){var e=this,a=e.nipples;a.on=e.on.bind(e),a.off=e.off.bind(e),a.options=e.options,a.destroy=e.destroy.bind(e),a.ids=e.ids,a.id=e.id,a.processOnMove=e.processOnMove.bind(e),a.processOnEnd=e.processOnEnd.bind(e),a.get=function(e){if(void 0===e)return a[0];for(var t=0,n=a.length;t= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\n// compatibility #defines\n#define vTexCoord TEX0.xy\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\nTEX0.xy = TexCoord.xy;\nfloat x = 0.5 * SourceSize.z;\nfloat y = 0.5 * SourceSize.w;\nvec2 dg1 = vec2( x, y);\nvec2 dg2 = vec2(-x, y);\nvec2 dx = vec2(x, 0.0);\nvec2 dy = vec2(0.0, y);\nt1 = vec4(vTexCoord - dg1, vTexCoord - dy);\nt2 = vec4(vTexCoord - dg2, vTexCoord + dx);\nt3 = vec4(vTexCoord + dg1, vTexCoord + dy);\nt4 = vec4(vTexCoord + dg2, vTexCoord - dx);\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\n\n// compatibility #defines\n#define Source Texture\n#define vTexCoord TEX0.xy\n\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nfloat mx = 0.325; // start smoothing wt.\nfloat k = -0.250; // wt. decrease factor\nfloat max_w = 0.25; // max filter weight\nfloat min_w =-0.05; // min filter weight\nfloat lum_add = 0.25; // affects smoothing\nvec3 dt = vec3(1.0);\n\nvoid main()\n{\nvec3 c00 = COMPAT_TEXTURE(Source, t1.xy).xyz; \nvec3 c10 = COMPAT_TEXTURE(Source, t1.zw).xyz; \nvec3 c20 = COMPAT_TEXTURE(Source, t2.xy).xyz; \nvec3 c01 = COMPAT_TEXTURE(Source, t4.zw).xyz; \nvec3 c11 = COMPAT_TEXTURE(Source, vTexCoord).xyz; \nvec3 c21 = COMPAT_TEXTURE(Source, t2.zw).xyz; \nvec3 c02 = COMPAT_TEXTURE(Source, t4.xy).xyz; \nvec3 c12 = COMPAT_TEXTURE(Source, t3.zw).xyz; \nvec3 c22 = COMPAT_TEXTURE(Source, t3.xy).xyz; \n\nfloat md1 = dot(abs(c00 - c22), dt);\nfloat md2 = dot(abs(c02 - c20), dt);\n\nfloat w1 = dot(abs(c22 - c11), dt) * md2;\nfloat w2 = dot(abs(c02 - c11), dt) * md1;\nfloat w3 = dot(abs(c00 - c11), dt) * md2;\nfloat w4 = dot(abs(c20 - c11), dt) * md1;\n\nfloat t1 = w1 + w3;\nfloat t2 = w2 + w4;\nfloat ww = max(t1, t2) + 0.0001;\n\nc11 = (w1 * c00 + w2 * c20 + w3 * c22 + w4 * c02 + ww * c11) / (t1 + t2 + ww);\n\nfloat lc1 = k / (0.12 * dot(c10 + c12 + c11, dt) + lum_add);\nfloat lc2 = k / (0.12 * dot(c01 + c21 + c11, dt) + lum_add);\n\nw1 = clamp(lc1 * dot(abs(c11 - c10), dt) + mx, min_w, max_w);\nw2 = clamp(lc2 * dot(abs(c11 - c21), dt) + mx, min_w, max_w);\nw3 = clamp(lc1 * dot(abs(c11 - c12), dt) + mx, min_w, max_w);\nw4 = clamp(lc2 * dot(abs(c11 - c01), dt) + mx, min_w, max_w);\nFragColor = vec4(w1 * c10 + w2 * c21 + w3 * c12 + w4 * c01 + (1.0 - w1 - w2 - w3 - w4) * c11, 1.0);\n} \n#endif\n","4xScaleHQ.glsl":"/*\n4xGLSLHqFilter shader\n\nCopyright (C) 2005 guest(r) - guest.r@gmail.com\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n*/\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\nCOMPAT_VARYING vec4 t5;\nCOMPAT_VARYING vec4 t6;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\n// compatibility #defines\n#define vTexCoord TEX0.xy\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\nTEX0.xy = TexCoord.xy;\nfloat x = 0.5 * SourceSize.z;\nfloat y = 0.5 * SourceSize.w;\nvec2 dg1 = vec2( x, y);\nvec2 dg2 = vec2(-x, y);\nvec2 sd1 = dg1 * 0.5;\nvec2 sd2 = dg2 * 0.5;\nvec2 ddx = vec2(x, 0.0);\nvec2 ddy = vec2(0.0, y);\nt1 = vec4(vTexCoord - sd1, vTexCoord - ddy);\nt2 = vec4(vTexCoord - sd2, vTexCoord + ddx);\nt3 = vec4(vTexCoord + sd1, vTexCoord + ddy);\nt4 = vec4(vTexCoord + sd2, vTexCoord - ddx);\nt5 = vec4(vTexCoord - dg1, vTexCoord - dg2);\nt6 = vec4(vTexCoord + dg1, vTexCoord + dg2);\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\nCOMPAT_VARYING vec4 t1;\nCOMPAT_VARYING vec4 t2;\nCOMPAT_VARYING vec4 t3;\nCOMPAT_VARYING vec4 t4;\nCOMPAT_VARYING vec4 t5;\nCOMPAT_VARYING vec4 t6;\n\n// compatibility #defines\n#define Source Texture\n#define vTexCoord TEX0.xy\n\n#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize\n#define OutSize vec4(OutputSize, 1.0 / OutputSize)\n\nfloat mx = 1.0; // start smoothing wt.\nfloat k = -1.10; // wt. decrease factor\nfloat max_w = 0.75; // max filter weight\nfloat min_w = 0.03; // min filter weight\nfloat lum_add = 0.33; // affects smoothing\nvec3 dt = vec3(1.0);\n\nvoid main()\n{\nvec3 c = COMPAT_TEXTURE(Source, vTexCoord).xyz;\nvec3 i1 = COMPAT_TEXTURE(Source, t1.xy).xyz; \nvec3 i2 = COMPAT_TEXTURE(Source, t2.xy).xyz; \nvec3 i3 = COMPAT_TEXTURE(Source, t3.xy).xyz; \nvec3 i4 = COMPAT_TEXTURE(Source, t4.xy).xyz; \nvec3 o1 = COMPAT_TEXTURE(Source, t5.xy).xyz; \nvec3 o3 = COMPAT_TEXTURE(Source, t6.xy).xyz; \nvec3 o2 = COMPAT_TEXTURE(Source, t5.zw).xyz;\nvec3 o4 = COMPAT_TEXTURE(Source, t6.zw).xyz;\nvec3 s1 = COMPAT_TEXTURE(Source, t1.zw).xyz; \nvec3 s2 = COMPAT_TEXTURE(Source, t2.zw).xyz; \nvec3 s3 = COMPAT_TEXTURE(Source, t3.zw).xyz; \nvec3 s4 = COMPAT_TEXTURE(Source, t4.zw).xyz; \n\nfloat ko1=dot(abs(o1-c),dt);\nfloat ko2=dot(abs(o2-c),dt);\nfloat ko3=dot(abs(o3-c),dt);\nfloat ko4=dot(abs(o4-c),dt);\n\nfloat k1=min(dot(abs(i1-i3),dt),max(ko1,ko3));\nfloat k2=min(dot(abs(i2-i4),dt),max(ko2,ko4));\n\nfloat w1 = k2; if(ko3= 130\n #define COMPAT_VARYING out\n #define COMPAT_ATTRIBUTE in\n #define COMPAT_TEXTURE texture\n #else\n #define COMPAT_VARYING varying\n #define COMPAT_ATTRIBUTE attribute\n #define COMPAT_TEXTURE texture2D\n #endif\n \n #ifdef GL_ES\n #define COMPAT_PRECISION mediump\n #else\n #define COMPAT_PRECISION\n #endif\n COMPAT_VARYING float _frame_rotation;\n struct input_dummy {\n vec2 _video_size;\n vec2 _texture_size;\n vec2 _output_dummy_size;\n float _frame_count;\n float _frame_direction;\n float _frame_rotation;\n };\n vec4 _oPosition1;\n vec4 _r0005;\n COMPAT_ATTRIBUTE vec4 VertexCoord;\n COMPAT_ATTRIBUTE vec4 TexCoord;\n COMPAT_VARYING vec4 TEX0;\n \n uniform mat4 MVPMatrix;\n uniform int FrameDirection;\n uniform int FrameCount;\n uniform COMPAT_PRECISION vec2 OutputSize;\n uniform COMPAT_PRECISION vec2 TextureSize;\n uniform COMPAT_PRECISION vec2 InputSize;\n void main()\n {\n vec2 _oTex;\n _r0005 = VertexCoord.x*MVPMatrix[0];\n _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1];\n _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2];\n _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3];\n _oPosition1 = _r0005;\n _oTex = TexCoord.xy;\n gl_Position = _r0005;\n TEX0.xy = TexCoord.xy;\n }\n #elif defined(FRAGMENT)\n \n #if __VERSION__ >= 130\n #define COMPAT_VARYING in\n #define COMPAT_TEXTURE texture\n out vec4 FragColor;\n #else\n #define COMPAT_VARYING varying\n #define FragColor gl_FragColor\n #define COMPAT_TEXTURE texture2D\n #endif\n \n #ifdef GL_ES\n #ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n #else\n precision mediump float;\n #endif\n #define COMPAT_PRECISION mediump\n #else\n #define COMPAT_PRECISION\n #endif\n COMPAT_VARYING float _frame_rotation;\n struct input_dummy {\n vec2 _video_size;\n vec2 _texture_size;\n vec2 _output_dummy_size;\n float _frame_count;\n float _frame_direction;\n float _frame_rotation;\n };\n vec4 _ret_0;\n float _TMP30;\n float _TMP29;\n float _TMP28;\n float _TMP13;\n float _TMP32;\n float _TMP11;\n float _TMP10;\n float _TMP31;\n float _TMP9;\n float _TMP8;\n float _TMP15;\n float _TMP14;\n float _TMP33;\n vec4 _TMP34;\n vec4 _TMP27;\n vec4 _TMP25;\n vec4 _TMP23;\n vec4 _TMP21;\n vec4 _TMP26;\n vec4 _TMP24;\n vec4 _TMP22;\n vec4 _TMP20;\n float _TMP4;\n vec4 _TMP3;\n vec4 _TMP2;\n float _TMP19;\n float _TMP18;\n float _TMP17;\n float _TMP16;\n vec4 _TMP1;\n vec2 _TMP0;\n uniform sampler2D Texture;\n input_dummy _IN1;\n float _TMP43;\n float _x_step0044;\n float _curve0044;\n float _a0048;\n float _val0052;\n float _a0052;\n vec4 _TMP57;\n vec4 _x0072;\n vec2 _c0086;\n vec4 _x0088;\n vec4 _x0094;\n vec2 _c0098;\n vec4 _x0100;\n vec2 _c0104;\n vec4 _x0106;\n vec4 _sample_min0110;\n vec4 _sample_max0110;\n vec4 _r0112;\n vec4 _TMP117;\n vec2 _co0124;\n vec2 _c0126;\n vec4 _x0128;\n vec4 _x0134;\n vec2 _c0138;\n vec4 _x0140;\n vec2 _c0144;\n vec4 _x0146;\n vec4 _sample_min0150;\n vec4 _sample_max0150;\n vec4 _r0152;\n vec4 _TMP157;\n float _TMP163;\n float _x_step0164;\n float _curve0164;\n float _a0168;\n float _val0172;\n float _a0172;\n float _TMP183;\n float _TMP189;\n float _x0190;\n float _a0196;\n float _x0198;\n vec2 _x0200;\n float _x0208;\n COMPAT_VARYING vec4 TEX0;\n \n uniform COMPAT_PRECISION vec2 OutputSize;\n uniform COMPAT_PRECISION vec2 TextureSize;\n uniform COMPAT_PRECISION vec2 InputSize;\n void main()\n {\n vec2 _dx1;\n vec2 _dy;\n vec2 _pix_co;\n vec2 _tex_co;\n vec2 _dist;\n vec3 _col2;\n vec3 _col21;\n vec4 _coeffs1;\n float _luma;\n float _bright;\n float _scan_weight;\n vec2 _mod_fac;\n int _dot_no;\n vec3 _mask_weight;\n vec3 _TMP37;\n _dx1 = vec2(1.00000000E+00/TextureSize.x, 0.00000000E+00);\n _dy = vec2(0.00000000E+00, 1.00000000E+00/TextureSize.y);\n _pix_co = TEX0.xy*TextureSize - vec2( 5.00000000E-01, 5.00000000E-01);\n _TMP0 = floor(_pix_co);\n _tex_co = (_TMP0 + vec2( 5.00000000E-01, 5.00000000E-01))/TextureSize;\n _dist = fract(_pix_co);\n _x_step0044 = float((_dist.x >= 5.00000000E-01));\n _a0048 = 2.50000000E-01 - (_dist.x - _x_step0044)*(_dist.x - _x_step0044);\n _TMP33 = inversesqrt(_a0048);\n _TMP14 = 1.00000000E+00/_TMP33;\n _a0052 = 5.00000000E-01 - _dist.x;\n _val0052 = float((_a0052 > 0.00000000E+00));\n _TMP15 = _val0052 - float((_a0052 < 0.00000000E+00));\n _curve0044 = 5.00000000E-01 - _TMP14*_TMP15;\n _TMP43 = _dist.x + 2.50000000E-01*(_curve0044 - _dist.x);\n _coeffs1 = 3.14159274E+00*vec4(1.00000000E+00 + _TMP43, _TMP43, 1.00000000E+00 - _TMP43, 2.00000000E+00 - _TMP43);\n _TMP1 = abs(_coeffs1);\n _TMP57 = max(_TMP1, vec4( 9.99999975E-06, 9.99999975E-06, 9.99999975E-06, 9.99999975E-06));\n _TMP16 = sin(_TMP57.x);\n _TMP17 = sin(_TMP57.y);\n _TMP18 = sin(_TMP57.z);\n _TMP19 = sin(_TMP57.w);\n _TMP2 = vec4(_TMP16, _TMP17, _TMP18, _TMP19);\n _x0072 = _TMP57/2.00000000E+00;\n _TMP16 = sin(_x0072.x);\n _TMP17 = sin(_x0072.y);\n _TMP18 = sin(_x0072.z);\n _TMP19 = sin(_x0072.w);\n _TMP3 = vec4(_TMP16, _TMP17, _TMP18, _TMP19);\n _coeffs1 = ((2.00000000E+00*_TMP2)*_TMP3)/(_TMP57*_TMP57);\n _TMP4 = dot(_coeffs1, vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _coeffs1 = _coeffs1/_TMP4;\n _c0086 = _tex_co - _dx1;\n _TMP20 = COMPAT_TEXTURE(Texture, _c0086);\n _x0088 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP21 = _TMP20*_x0088;\n _TMP22 = COMPAT_TEXTURE(Texture, _tex_co);\n _x0094 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP23 = _TMP22*_x0094;\n _c0098 = _tex_co + _dx1;\n _TMP24 = COMPAT_TEXTURE(Texture, _c0098);\n _x0100 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP25 = _TMP24*_x0100;\n _c0104 = _tex_co + 2.00000000E+00*_dx1;\n _TMP26 = COMPAT_TEXTURE(Texture, _c0104);\n _x0106 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP27 = _TMP26*_x0106;\n _r0112 = _coeffs1.x*_TMP21;\n _r0112 = _r0112 + _coeffs1.y*_TMP23;\n _r0112 = _r0112 + _coeffs1.z*_TMP25;\n _r0112 = _r0112 + _coeffs1.w*_TMP27;\n _sample_min0110 = min(_TMP23, _TMP25);\n _sample_max0110 = max(_TMP23, _TMP25);\n _TMP34 = min(_sample_max0110, _r0112);\n _TMP117 = max(_sample_min0110, _TMP34);\n _co0124 = _tex_co + _dy;\n _c0126 = _co0124 - _dx1;\n _TMP20 = COMPAT_TEXTURE(Texture, _c0126);\n _x0128 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP20 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP21 = _TMP20*_x0128;\n _TMP22 = COMPAT_TEXTURE(Texture, _co0124);\n _x0134 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP22 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP23 = _TMP22*_x0134;\n _c0138 = _co0124 + _dx1;\n _TMP24 = COMPAT_TEXTURE(Texture, _c0138);\n _x0140 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP24 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP25 = _TMP24*_x0140;\n _c0144 = _co0124 + 2.00000000E+00*_dx1;\n _TMP26 = COMPAT_TEXTURE(Texture, _c0144);\n _x0146 = vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00) + (_TMP26 - vec4( 1.00000000E+00, 1.00000000E+00, 1.00000000E+00, 1.00000000E+00));\n _TMP27 = _TMP26*_x0146;\n _r0152 = _coeffs1.x*_TMP21;\n _r0152 = _r0152 + _coeffs1.y*_TMP23;\n _r0152 = _r0152 + _coeffs1.z*_TMP25;\n _r0152 = _r0152 + _coeffs1.w*_TMP27;\n _sample_min0150 = min(_TMP23, _TMP25);\n _sample_max0150 = max(_TMP23, _TMP25);\n _TMP34 = min(_sample_max0150, _r0152);\n _TMP157 = max(_sample_min0150, _TMP34);\n _x_step0164 = float((_dist.y >= 5.00000000E-01));\n _a0168 = 2.50000000E-01 - (_dist.y - _x_step0164)*(_dist.y - _x_step0164);\n _TMP33 = inversesqrt(_a0168);\n _TMP14 = 1.00000000E+00/_TMP33;\n _a0172 = 5.00000000E-01 - _dist.y;\n _val0172 = float((_a0172 > 0.00000000E+00));\n _TMP15 = _val0172 - float((_a0172 < 0.00000000E+00));\n _curve0164 = 5.00000000E-01 - _TMP14*_TMP15;\n _TMP163 = _dist.y + (_curve0164 - _dist.y);\n _col2 = _TMP117.xyz + _TMP163*(_TMP157.xyz - _TMP117.xyz);\n _luma = dot(vec3( 2.12599993E-01, 7.15200007E-01, 7.22000003E-02), _col2);\n _TMP8 = max(_col2.y, _col2.z);\n _TMP9 = max(_col2.x, _TMP8);\n _bright = (_TMP9 + _luma)/2.00000000E+00;\n _TMP31 = min(6.49999976E-01, _bright);\n _TMP183 = max(3.49999994E-01, _TMP31);\n _x0190 = _bright*1.50000000E+00;\n _TMP31 = min(1.50000000E+00, _x0190);\n _TMP189 = max(1.50000000E+00, _TMP31);\n _a0196 = TEX0.y*2.00000000E+00*3.14159274E+00*TextureSize.y;\n _TMP10 = cos(_a0196);\n _x0198 = _TMP10*5.00000000E-01 + 5.00000000E-01;\n _TMP11 = pow(_x0198, _TMP189);\n _scan_weight = 1.00000000E+00 - _TMP11;\n _x0200 = (TEX0.xy*OutputSize*TextureSize)/InputSize;\n _mod_fac = floor(_x0200);\n _x0208 = _mod_fac.x/3.00000000E+00;\n _TMP32 = floor(_x0208);\n _TMP13 = _mod_fac.x - 3.00000000E+00*_TMP32;\n _dot_no = int(_TMP13);\n if (_dot_no == 0) {\n _mask_weight = vec3( 1.00000000E+00, 6.99999988E-01, 6.99999988E-01);\n } else {\n if (_dot_no == 1) {\n _mask_weight = vec3( 6.99999988E-01, 1.00000000E+00, 6.99999988E-01);\n } else {\n _mask_weight = vec3( 6.99999988E-01, 6.99999988E-01, 1.00000000E+00);\n }\n }\n if (InputSize.y >= 4.00000000E+02) {\n _scan_weight = 1.00000000E+00;\n }\n _col21 = _col2.xyz;\n _col2 = _col2*vec3(_scan_weight, _scan_weight, _scan_weight);\n _col2 = _col2 + _TMP183*(_col21 - _col2);\n _col2 = _col2*_mask_weight;\n _TMP28 = pow(_col2.x, 5.55555582E-01);\n _TMP29 = pow(_col2.y, 5.55555582E-01);\n _TMP30 = pow(_col2.z, 5.55555582E-01);\n _col2 = vec3(_TMP28, _TMP29, _TMP30);\n _TMP37 = _col2*1.20000005E+00;\n _ret_0 = vec4(_TMP37.x, _TMP37.y, _TMP37.z, 1.00000000E+00);\n FragColor = _ret_0;\n return;\n }\n #endif\n","crt-aperture.glsl":'\n/*\nCRT Shader by EasyMode\nLicense: GPL\n*/\n/*\n#pragma parameter SHARPNESS_IMAGE "Sharpness Image" 1.0 1.0 5.0 1.0\n#pragma parameter SHARPNESS_EDGES "Sharpness Edges" 3.0 1.0 5.0 1.0\n#pragma parameter GLOW_WIDTH "Glow Width" 0.5 0.05 0.65 0.05\n#pragma parameter GLOW_HEIGHT "Glow Height" 0.5 0.05 0.65 0.05\n#pragma parameter GLOW_HALATION "Glow Halation" 0.1 0.0 1.0 0.01\n#pragma parameter GLOW_DIFFUSION "Glow Diffusion" 0.05 0.0 1.0 0.01\n#pragma parameter MASK_COLORS "Mask Colors" 2.0 2.0 3.0 1.0\n#pragma parameter MASK_STRENGTH "Mask Strength" 0.3 0.0 1.0 0.05\n#pragma parameter MASK_SIZE "Mask Size" 1.0 1.0 9.0 1.0\n#pragma parameter SCANLINE_SIZE_MIN "Scanline Size Min." 0.5 0.5 1.5 0.05\n#pragma parameter SCANLINE_SIZE_MAX "Scanline Size Max." 1.5 0.5 1.5 0.05\n#pragma parameter GAMMA_INPUT "Gamma Input" 2.4 1.0 5.0 0.1\n#pragma parameter GAMMA_OUTPUT "Gamma Output" 2.4 1.0 5.0 0.1\n#pragma parameter BRIGHTNESS "Brightness" 1.5 0.0 2.0 0.05\n* */\n\n#define Coord TEX0\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define OUT out\n#define IN in\n#define tex2D texture\n#else\n#define OUT varying \n#define IN attribute \n#define tex2D texture2D\n#endif\n\n#ifdef GL_ES\n#define PRECISION mediump\n#else\n#define PRECISION\n#endif\n\nIN vec4 VertexCoord;\nIN vec4 Color;\nIN vec2 TexCoord;\nOUT vec4 color;\nOUT vec2 Coord;\n\nuniform mat4 MVPMatrix;\nuniform PRECISION int FrameDirection;\nuniform PRECISION int FrameCount;\nuniform PRECISION vec2 OutputSize;\nuniform PRECISION vec2 TextureSize;\nuniform PRECISION vec2 InputSize;\n\nvoid main()\n{\ngl_Position = MVPMatrix * VertexCoord;\ncolor = Color;\nCoord = TexCoord;\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define IN in\n#define tex2D texture\nout vec4 FragColor;\n#else\n#define IN varying\n#define FragColor gl_FragColor\n#define tex2D texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define PRECISION mediump\n#else\n#define PRECISION\n#endif\n\nuniform PRECISION int FrameDirection;\nuniform PRECISION int FrameCount;\nuniform PRECISION vec2 OutputSize;\nuniform PRECISION vec2 TextureSize;\nuniform PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nIN vec2 Coord;\n\n#ifdef PARAMETER_UNIFORM\nuniform PRECISION float SHARPNESS_IMAGE;\nuniform PRECISION float SHARPNESS_EDGES;\nuniform PRECISION float GLOW_WIDTH;\nuniform PRECISION float GLOW_HEIGHT;\nuniform PRECISION float GLOW_HALATION;\nuniform PRECISION float GLOW_DIFFUSION;\nuniform PRECISION float MASK_COLORS;\nuniform PRECISION float MASK_STRENGTH;\nuniform PRECISION float MASK_SIZE;\nuniform PRECISION float SCANLINE_SIZE_MIN;\nuniform PRECISION float SCANLINE_SIZE_MAX;\nuniform PRECISION float GAMMA_INPUT;\nuniform PRECISION float GAMMA_OUTPUT;\nuniform PRECISION float BRIGHTNESS;\n#else\n#define SHARPNESS_IMAGE 1.0\n#define SHARPNESS_EDGES 3.0\n#define GLOW_WIDTH 0.5\n#define GLOW_HEIGHT 0.5\n#define GLOW_HALATION 0.1\n#define GLOW_DIFFUSION 0.05\n#define MASK_COLORS 2.0\n#define MASK_STRENGTH 0.3\n#define MASK_SIZE 1.0\n#define SCANLINE_SIZE_MIN 0.5\n#define SCANLINE_SIZE_MAX 1.5\n#define GAMMA_INPUT 2.4\n#define GAMMA_OUTPUT 2.4\n#define BRIGHTNESS 1.5\n#endif\n\n#define FIX(c) max(abs(c), 1e-5)\n#define PI 3.141592653589\n#define saturate(c) clamp(c, 0.0, 1.0)\n#define TEX2D(c) pow(tex2D(tex, c).rgb, vec3(GAMMA_INPUT))\n\nmat3 get_color_matrix(sampler2D tex, vec2 co, vec2 dx)\n{\nreturn mat3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx));\n}\n\nvec3 blur(mat3 m, float dist, float rad)\n{\nvec3 x = vec3(dist - 1.0, dist, dist + 1.0) / rad;\nvec3 w = exp2(x * x * -1.0);\n\nreturn (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z);\n}\n\nvec3 filter_gaussian(sampler2D tex, vec2 co, vec2 tex_size)\n{\nvec2 dx = vec2(1.0 / tex_size.x, 0.0);\nvec2 dy = vec2(0.0, 1.0 / tex_size.y);\nvec2 pix_co = co * tex_size;\nvec2 tex_co = (floor(pix_co) + 0.5) / tex_size;\nvec2 dist = (fract(pix_co) - 0.5) * -1.0;\n\nmat3 line0 = get_color_matrix(tex, tex_co - dy, dx);\nmat3 line1 = get_color_matrix(tex, tex_co, dx);\nmat3 line2 = get_color_matrix(tex, tex_co + dy, dx);\nmat3 column = mat3(blur(line0, dist.x, GLOW_WIDTH),\n blur(line1, dist.x, GLOW_WIDTH),\n blur(line2, dist.x, GLOW_WIDTH));\n\nreturn blur(column, dist.y, GLOW_HEIGHT);\n}\n\nvec3 filter_lanczos(sampler2D tex, vec2 co, vec2 tex_size, float sharp)\n{\ntex_size.x *= sharp;\n\nvec2 dx = vec2(1.0 / tex_size.x, 0.0);\nvec2 pix_co = co * tex_size - vec2(0.5, 0.0);\nvec2 tex_co = (floor(pix_co) + vec2(0.5, 0.0)) / tex_size;\nvec2 dist = fract(pix_co);\nvec4 coef = PI * vec4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0);\n\ncoef = FIX(coef);\ncoef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef);\ncoef /= dot(coef, vec4(1.0));\n\nvec4 col1 = vec4(TEX2D(tex_co), 1.0);\nvec4 col2 = vec4(TEX2D(tex_co + dx), 1.0);\n\nreturn (mat4(col1, col1, col2, col2) * coef).rgb;\n}\n\nvec3 get_scanline_weight(float x, vec3 col)\n{\nvec3 beam = mix(vec3(SCANLINE_SIZE_MIN), vec3(SCANLINE_SIZE_MAX), col);\nvec3 x_mul = 2.0 / beam;\nvec3 x_offset = x_mul * 0.5;\n\nreturn smoothstep(0.0, 1.0, 1.0 - abs(x * x_mul - x_offset)) * x_offset;\n}\n\nvec3 get_mask_weight(float x)\n{\nfloat i = mod(floor(x * OutputSize.x * TextureSize.x / (InputSize.x * MASK_SIZE)), MASK_COLORS);\n\nif (i == 0.0) return mix(vec3(1.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), MASK_COLORS - 2.0);\nelse if (i == 1.0) return vec3(0.0, 1.0, 0.0);\nelse return vec3(0.0, 0.0, 1.0);\n}\n\nvoid main()\n{\nvec3 col_glow = filter_gaussian(Texture, Coord, TextureSize);\nvec3 col_soft = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_IMAGE);\nvec3 col_sharp = filter_lanczos(Texture, Coord, TextureSize, SHARPNESS_EDGES);\nvec3 col = sqrt(col_sharp * col_soft);\n\ncol *= get_scanline_weight(fract(Coord.y * TextureSize.y), col_soft);\ncol_glow = saturate(col_glow - col);\ncol += col_glow * col_glow * GLOW_HALATION;\ncol = mix(col, col * get_mask_weight(Coord.x) * MASK_COLORS, MASK_STRENGTH);\ncol += col_glow * GLOW_DIFFUSION;\ncol = pow(col * BRIGHTNESS, vec3(1.0 / GAMMA_OUTPUT));\n\nFragColor = vec4(col, 1.0);\n}\n\n#endif\n',"crt-geom.glsl":'\n/*\nCRT-interlaced\n\nCopyright (C) 2010-2012 cgwg, Themaister and DOLLS\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the Free\nSoftware Foundation; either version 2 of the License, or (at your option)\nany later version.\n\n(cgwg gave their consent to have the original version of this shader\ndistributed under the GPL in this message:\n\nhttp://board.byuu.org/viewtopic.php?p=26075#p26075\n\n"Feel free to distribute my shaders under the GPL. After all, the\nbarrel distortion code was taken from the Curvature shader, which is\nunder the GPL."\n)\nThis shader variant is pre-configured with screen curvature\n*/\n/*\n#pragma parameter CRTgamma "CRTGeom Target Gamma" 2.4 0.1 5.0 0.1\n#pragma parameter monitorgamma "CRTGeom Monitor Gamma" 2.2 0.1 5.0 0.1\n#pragma parameter d "CRTGeom Distance" 1.6 0.1 3.0 0.1\n#pragma parameter CURVATURE "CRTGeom Curvature Toggle" 1.0 0.0 1.0 1.0\n#pragma parameter R "CRTGeom Curvature Radius" 2.0 0.1 10.0 0.1\n#pragma parameter cornersize "CRTGeom Corner Size" 0.03 0.001 1.0 0.005\n#pragma parameter cornersmooth "CRTGeom Corner Smoothness" 1000.0 80.0 2000.0 100.0\n#pragma parameter x_tilt "CRTGeom Horizontal Tilt" 0.0 -0.5 0.5 0.05\n#pragma parameter y_tilt "CRTGeom Vertical Tilt" 0.0 -0.5 0.5 0.05\n#pragma parameter overscan_x "CRTGeom Horiz. Overscan %" 100.0 -125.0 125.0 1.0\n#pragma parameter overscan_y "CRTGeom Vert. Overscan %" 100.0 -125.0 125.0 1.0\n#pragma parameter DOTMASK "CRTGeom Dot Mask Toggle" 0.3 0.0 0.3 0.3\n#pragma parameter SHARPER "CRTGeom Sharpness" 1.0 1.0 3.0 1.0\n#pragma parameter scanline_weight "CRTGeom Scanline Weight" 0.3 0.1 0.5 0.05\n*/\n\n#ifndef PARAMETER_UNIFORM\n#define CRTgamma 2.4\n#define monitorgamma 2.2\n#define d 1.6\n#define CURVATURE 1.0\n#define R 2.0\n#define cornersize 0.03\n#define cornersmooth 1000.0\n#define x_tilt 0.0\n#define y_tilt 0.0\n#define overscan_x 100.0\n#define overscan_y 100.0\n#define DOTMASK 0.3\n#define SHARPER 1.0\n#define scanline_weight 0.3\n#endif\n\n#if defined(VERTEX)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING out\n#define COMPAT_ATTRIBUTE in\n#define COMPAT_TEXTURE texture\n#else\n#define COMPAT_VARYING varying \n#define COMPAT_ATTRIBUTE attribute \n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nCOMPAT_ATTRIBUTE vec4 VertexCoord;\nCOMPAT_ATTRIBUTE vec4 COLOR;\nCOMPAT_ATTRIBUTE vec4 TexCoord;\nCOMPAT_VARYING vec4 COL0;\nCOMPAT_VARYING vec4 TEX0;\n\nvec4 _oPosition1; \nuniform mat4 MVPMatrix;\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\n\nCOMPAT_VARYING vec2 overscan;\nCOMPAT_VARYING vec2 aspect;\nCOMPAT_VARYING vec3 stretch;\nCOMPAT_VARYING vec2 sinangle;\nCOMPAT_VARYING vec2 cosangle;\nCOMPAT_VARYING vec2 one;\nCOMPAT_VARYING float mod_factor;\nCOMPAT_VARYING vec2 ilfac;\n\n#ifdef PARAMETER_UNIFORM\nuniform COMPAT_PRECISION float CRTgamma;\nuniform COMPAT_PRECISION float monitorgamma;\nuniform COMPAT_PRECISION float d;\nuniform COMPAT_PRECISION float CURVATURE;\nuniform COMPAT_PRECISION float R;\nuniform COMPAT_PRECISION float cornersize;\nuniform COMPAT_PRECISION float cornersmooth;\nuniform COMPAT_PRECISION float x_tilt;\nuniform COMPAT_PRECISION float y_tilt;\nuniform COMPAT_PRECISION float overscan_x;\nuniform COMPAT_PRECISION float overscan_y;\nuniform COMPAT_PRECISION float DOTMASK;\nuniform COMPAT_PRECISION float SHARPER;\nuniform COMPAT_PRECISION float scanline_weight;\n#endif\n\n#define FIX(c) max(abs(c), 1e-5);\n\nfloat intersect(vec2 xy)\n{\nfloat A = dot(xy,xy)+d*d;\nfloat B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d);\nfloat C = d*d + 2.0*R*d*cosangle.x*cosangle.y;\nreturn (-B-sqrt(B*B-4.0*A*C))/(2.0*A);\n}\n\nvec2 bkwtrans(vec2 xy)\n{\nfloat c = intersect(xy);\nvec2 point = vec2(c)*xy;\npoint -= vec2(-R)*sinangle;\npoint /= vec2(R);\nvec2 tang = sinangle/cosangle;\nvec2 poc = point/cosangle;\nfloat A = dot(tang,tang)+1.0;\nfloat B = -2.0*dot(poc,tang);\nfloat C = dot(poc,poc)-1.0;\nfloat a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A);\nvec2 uv = (point-a*sinangle)/cosangle;\nfloat r = R*acos(a);\nreturn uv*r/sin(r/R);\n}\n\nvec2 fwtrans(vec2 uv)\n{\nfloat r = FIX(sqrt(dot(uv,uv)));\nuv *= sin(r/R)/r;\nfloat x = 1.0-cos(r/R);\nfloat D = d/R + x*cosangle.x*cosangle.y+dot(uv,sinangle);\nreturn d*(uv*cosangle-x*sinangle)/D;\n}\n\nvec3 maxscale()\n{\nvec2 c = bkwtrans(-R * sinangle / (1.0 + R/d*cosangle.x*cosangle.y));\nvec2 a = vec2(0.5,0.5)*aspect;\nvec2 lo = vec2(fwtrans(vec2(-a.x,c.y)).x, fwtrans(vec2(c.x,-a.y)).y)/aspect;\nvec2 hi = vec2(fwtrans(vec2(+a.x,c.y)).x, fwtrans(vec2(c.x,+a.y)).y)/aspect;\nreturn vec3((hi+lo)*aspect*0.5,max(hi.x-lo.x,hi.y-lo.y));\n}\n\nvoid main()\n{\n// START of parameters\n\n// gamma of simulated CRT\n//\tCRTgamma = 1.8;\n// gamma of display monitor (typically 2.2 is correct)\n//\tmonitorgamma = 2.2;\n// overscan (e.g. 1.02 for 2% overscan)\noverscan = vec2(1.00,1.00);\n// aspect ratio\naspect = vec2(1.0, 0.75);\n// lengths are measured in units of (approximately) the width\n// of the monitor simulated distance from viewer to monitor\n//\td = 2.0;\n// radius of curvature\n//\tR = 1.5;\n// tilt angle in radians\n// (behavior might be a bit wrong if both components are\n// nonzero)\nconst vec2 angle = vec2(0.0,0.0);\n// size of curved corners\n//\tcornersize = 0.03;\n// border smoothness parameter\n// decrease if borders are too aliased\n//\tcornersmooth = 1000.0;\n\n// END of parameters\n\nvec4 _oColor;\nvec2 _otexCoord;\ngl_Position = VertexCoord.x * MVPMatrix[0] + VertexCoord.y * MVPMatrix[1] + VertexCoord.z * MVPMatrix[2] + VertexCoord.w * MVPMatrix[3];\n_oPosition1 = gl_Position;\n_oColor = COLOR;\n_otexCoord = TexCoord.xy;\nCOL0 = COLOR;\nTEX0.xy = TexCoord.xy;\n\n// Precalculate a bunch of useful values we\'ll need in the fragment\n// shader.\nsinangle = sin(vec2(x_tilt, y_tilt)) + vec2(0.001);//sin(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3)));\ncosangle = cos(vec2(x_tilt, y_tilt)) + vec2(0.001);//cos(vec2(max(abs(x_tilt), 1e-3), max(abs(y_tilt), 1e-3)));\nstretch = maxscale();\n\nilfac = vec2(1.0,clamp(floor(InputSize.y/200.0), 1.0, 2.0));\n\n// The size of one texel, in texture-coordinates.\nvec2 sharpTextureSize = vec2(SHARPER * TextureSize.x, TextureSize.y);\none = ilfac / sharpTextureSize;\n\n// Resulting X pixel-coordinate of the pixel we\'re drawing.\nmod_factor = TexCoord.x * TextureSize.x * OutputSize.x / InputSize.x;\n\n}\n\n#elif defined(FRAGMENT)\n\n#if __VERSION__ >= 130\n#define COMPAT_VARYING in\n#define COMPAT_TEXTURE texture\nout vec4 FragColor;\n#else\n#define COMPAT_VARYING varying\n#define FragColor gl_FragColor\n#define COMPAT_TEXTURE texture2D\n#endif\n\n#ifdef GL_ES\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n#define COMPAT_PRECISION mediump\n#else\n#define COMPAT_PRECISION\n#endif\n\nstruct output_dummy {\nvec4 _color;\n};\n\nuniform COMPAT_PRECISION int FrameDirection;\nuniform COMPAT_PRECISION int FrameCount;\nuniform COMPAT_PRECISION vec2 OutputSize;\nuniform COMPAT_PRECISION vec2 TextureSize;\nuniform COMPAT_PRECISION vec2 InputSize;\nuniform sampler2D Texture;\nCOMPAT_VARYING vec4 TEX0;\n\n// Comment the next line to disable interpolation in linear gamma (and\n// gain speed).\n#define LINEAR_PROCESSING\n\n// Enable screen curvature.\n// #define CURVATURE\n\n// Enable 3x oversampling of the beam profile\n#define OVERSAMPLE\n\n// Use the older, purely gaussian beam profile\n//#define USEGAUSSIAN\n\n// Macros.\n#define FIX(c) max(abs(c), 1e-5);\n#define PI 3.141592653589\n\n#ifdef LINEAR_PROCESSING\n# define TEX2D(c) pow(COMPAT_TEXTURE(Texture, (c)), vec4(CRTgamma))\n#else\n# define TEX2D(c) COMPAT_TEXTURE(Texture, (c))\n#endif\n\nCOMPAT_VARYING vec2 one;\nCOMPAT_VARYING float mod_factor;\nCOMPAT_VARYING vec2 ilfac;\nCOMPAT_VARYING vec2 overscan;\nCOMPAT_VARYING vec2 aspect;\nCOMPAT_VARYING vec3 stretch;\nCOMPAT_VARYING vec2 sinangle;\nCOMPAT_VARYING vec2 cosangle;\n\n#ifdef PARAMETER_UNIFORM\nuniform COMPAT_PRECISION float CRTgamma;\nuniform COMPAT_PRECISION float monitorgamma;\nuniform COMPAT_PRECISION float d;\nuniform COMPAT_PRECISION float CURVATURE;\nuniform COMPAT_PRECISION float R;\nuniform COMPAT_PRECISION float cornersize;\nuniform COMPAT_PRECISION float cornersmooth;\nuniform COMPAT_PRECISION float x_tilt;\nuniform COMPAT_PRECISION float y_tilt;\nuniform COMPAT_PRECISION float overscan_x;\nuniform COMPAT_PRECISION float overscan_y;\nuniform COMPAT_PRECISION float DOTMASK;\nuniform COMPAT_PRECISION float SHARPER;\nuniform COMPAT_PRECISION float scanline_weight;\n#endif\n\nfloat intersect(vec2 xy)\n{\nfloat A = dot(xy,xy)+d*d;\nfloat B = 2.0*(R*(dot(xy,sinangle)-d*cosangle.x*cosangle.y)-d*d);\nfloat C = d*d + 2.0*R*d*cosangle.x*cosangle.y;\nreturn (-B-sqrt(B*B-4.0*A*C))/(2.0*A);\n}\n\nvec2 bkwtrans(vec2 xy)\n{\nfloat c = intersect(xy);\nvec2 point = vec2(c)*xy;\npoint -= vec2(-R)*sinangle;\npoint /= vec2(R);\nvec2 tang = sinangle/cosangle;\nvec2 poc = point/cosangle;\nfloat A = dot(tang,tang)+1.0;\nfloat B = -2.0*dot(poc,tang);\nfloat C = dot(poc,poc)-1.0;\nfloat a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A);\nvec2 uv = (point-a*sinangle)/cosangle;\nfloat r = FIX(R*acos(a));\nreturn uv*r/sin(r/R);\n}\n\nvec2 transform(vec2 coord)\n{\ncoord *= TextureSize / InputSize;\ncoord = (coord-vec2(0.5))*aspect*stretch.z+stretch.xy;\nreturn (bkwtrans(coord)/vec2(overscan_x / 100.0, overscan_y / 100.0)/aspect+vec2(0.5)) * InputSize / TextureSize;\n}\n\nfloat corner(vec2 coord)\n{\ncoord *= TextureSize / InputSize;\ncoord = (coord - vec2(0.5)) * vec2(overscan_x / 100.0, overscan_y / 100.0) + vec2(0.5);\ncoord = min(coord, vec2(1.0)-coord) * aspect;\nvec2 cdist = vec2(cornersize);\ncoord = (cdist - min(coord,cdist));\nfloat dist = sqrt(dot(coord,coord));\nreturn clamp((cdist.x-dist)*cornersmooth,0.0, 1.0);\n}\n\n// Calculate the influence of a scanline on the current pixel.\n//\n// \'distance\' is the distance in texture coordinates from the current\n// pixel to the scanline in question.\n// \'color\' is the colour of the scanline at the horizontal location of\n// the current pixel.\nvec4 scanlineWeights(float distance, vec4 color)\n{\n// "wid" controls the width of the scanline beam, for each RGB\n// channel The "weights" lines basically specify the formula\n// that gives you the profile of the beam, i.e. the intensity as\n// a function of distance from the vertical center of the\n// scanline. In this case, it is gaussian if width=2, and\n// becomes nongaussian for larger widths. Ideally this should\n// be normalized so that the integral across the beam is\n// independent of its width. That is, for a narrower beam\n// "weights" should have a higher peak at the center of the\n// scanline than for a wider beam.\n#ifdef USEGAUSSIAN\nvec4 wid = 0.3 + 0.1 * pow(color, vec4(3.0));\nvec4 weights = vec4(distance / wid);\nreturn 0.4 * exp(-weights * weights) / wid;\n#else\nvec4 wid = 2.0 + 2.0 * pow(color, vec4(4.0));\nvec4 weights = vec4(distance / scanline_weight);\nreturn 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid);\n#endif\n}\n\nvoid main()\n{\n// Here\'s a helpful diagram to keep in mind while trying to\n// understand the code:\n//\n// | | | | |\n// -------------------------------\n// | | | | |\n// | 01 | 11 | 21 | 31 | <-- current scanline\n// | | @ | | |\n// -------------------------------\n// | | | | |\n// | 02 | 12 | 22 | 32 | <-- next scanline\n// | | | | |\n// -------------------------------\n// | | | | |\n//\n// Each character-cell represents a pixel on the output\n// surface, "@" represents the current pixel (always somewhere\n// in the bottom half of the current scan-line, or the top-half\n// of the next scanline). The grid of lines represents the\n// edges of the texels of the underlying texture.\n\n// Texture coordinates of the texel containing the active pixel.\nvec2 xy = (CURVATURE > 0.5) ? transform(TEX0.xy) : TEX0.xy;\n\nfloat cval = corner(xy);\n\n// Of all the pixels that are mapped onto the texel we are\n// currently rendering, which pixel are we currently rendering?\nvec2 ilvec = vec2(0.0,ilfac.y > 1.5 ? mod(float(FrameCount),2.0) : 0.0);\nvec2 ratio_scale = (xy * TextureSize - vec2(0.5) + ilvec)/ilfac;\n#ifdef OVERSAMPLE\nfloat filter_ = InputSize.y/OutputSize.y;//fwidth(ratio_scale.y);\n#endif\nvec2 uv_ratio = fract(ratio_scale);\n\n// Snap to the center of the underlying texel.\nxy = (floor(ratio_scale)*ilfac + vec2(0.5) - ilvec) / TextureSize;\n\n// Calculate Lanczos scaling coefficients describing the effect\n// of various neighbour texels in a scanline on the current\n// pixel.\nvec4 coeffs = PI * vec4(1.0 + uv_ratio.x, uv_ratio.x, 1.0 - uv_ratio.x, 2.0 - uv_ratio.x);\n\n// Prevent division by zero.\ncoeffs = FIX(coeffs);\n\n// Lanczos2 kernel.\ncoeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs);\n\n// Normalize.\ncoeffs /= dot(coeffs, vec4(1.0));\n\n// Calculate the effective colour of the current and next\n// scanlines at the horizontal location of the current pixel,\n// using the Lanczos coefficients above.\nvec4 col = clamp(mat4(\n TEX2D(xy + vec2(-one.x, 0.0)),\n TEX2D(xy),\n TEX2D(xy + vec2(one.x, 0.0)),\n TEX2D(xy + vec2(2.0 * one.x, 0.0))) * coeffs,\n 0.0, 1.0);\nvec4 col2 = clamp(mat4(\n TEX2D(xy + vec2(-one.x, one.y)),\n TEX2D(xy + vec2(0.0, one.y)),\n TEX2D(xy + one),\n TEX2D(xy + vec2(2.0 * one.x, one.y))) * coeffs,\n 0.0, 1.0);\n\n#ifndef LINEAR_PROCESSING\ncol = pow(col , vec4(CRTgamma));\ncol2 = pow(col2, vec4(CRTgamma));\n#endif\n\n// Calculate the influence of the current and next scanlines on\n// the current pixel.\nvec4 weights = scanlineWeights(uv_ratio.y, col);\nvec4 weights2 = scanlineWeights(1.0 - uv_ratio.y, col2);\n#ifdef OVERSAMPLE\nuv_ratio.y =uv_ratio.y+1.0/3.0*filter_;\nweights = (weights+scanlineWeights(uv_ratio.y, col))/3.0;\nweights2=(weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2))/3.0;\nuv_ratio.y =uv_ratio.y-2.0/3.0*filter_;\nweights=weights+scanlineWeights(abs(uv_ratio.y), col)/3.0;\nweights2=weights2+scanlineWeights(abs(1.0-uv_ratio.y), col2)/3.0;\n#endif\n\nvec3 mul_res = (col * weights + col2 * weights2).rgb * vec3(cval);\n\n// dot-mask emulation:\n// Output pixels are alternately tinted green and magenta.\nvec3 dotMaskWeights = mix(\nvec3(1.0, 1.0 - DOTMASK, 1.0),\nvec3(1.0 - DOTMASK, 1.0, 1.0 - DOTMASK),\nfloor(mod(mod_factor, 2.0))\n);\n\nmul_res *= dotMaskWeights;\n\n// Convert the image gamma for display on our output device.\nmul_res = pow(mul_res, vec3(1.0 / monitorgamma));\n\n// Color the texel.\noutput_dummy _OUT;\n_OUT._color = vec4(mul_res, 1.0);\nFragColor = _OUT._color;\nreturn;\n} \n#endif\n\n'},xe=s(57),K=s(11),J={addStyleHook:function(){B(this.elements.container,this.config.selectors.container.replace(".",""),!0),B(this.elements.container,this.config.classNames.uiSupported,!0),B(this.elements.container,this.config.classNames.hideControls,!0)},build:function(){this.listeners.media(),D.element(this.elements.controls)||(ne.inject.call(this),this.listeners.controls()),this.volume=null,this.muted=null,ne.updateVolume.call(this),B(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0},toggleControls:function(t){var a=this.elements.controls;if(a){let n=0,e=c.call(this,".".concat(q({ejs__dialogs:!0})," > .").concat(q({ejs__dialog:!0})));Array.from(e).forEach(function(e,t){!0!==e.hidden&&(n+=1)}),0>>0},a.prototype.readU24=function(){return this.littleEndian?this._lastRead=this._u8array[this.offset]+(this._u8array[this.offset+1]<<8)+(this._u8array[this.offset+2]<<16):this._lastRead=(this._u8array[this.offset]<<16)+(this._u8array[this.offset+1]<<8)+this._u8array[this.offset+2],this.offset+=3,this._lastRead>>>0},a.prototype.readU32=function(){return this.littleEndian?this._lastRead=this._u8array[this.offset]+(this._u8array[this.offset+1]<<8)+(this._u8array[this.offset+2]<<16)+(this._u8array[this.offset+3]<<24):this._lastRead=(this._u8array[this.offset]<<24)+(this._u8array[this.offset+1]<<16)+(this._u8array[this.offset+2]<<8)+this._u8array[this.offset+3],this.offset+=4,this._lastRead>>>0},a.prototype.readBytes=function(t){this._lastRead=new Array(t);for(let e=0;e>8):(this._u8array[this.offset]=e>>8,this._u8array[this.offset+1]=255&e),this.offset+=2},a.prototype.writeU24=function(e){this.littleEndian?(this._u8array[this.offset]=255&e,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=(16711680&e)>>16):(this._u8array[this.offset]=(16711680&e)>>16,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=255&e),this.offset+=3},a.prototype.writeU32=function(e){this.littleEndian?(this._u8array[this.offset]=255&e,this._u8array[this.offset+1]=(65280&e)>>8,this._u8array[this.offset+2]=(16711680&e)>>16,this._u8array[this.offset+3]=(4278190080&e)>>24):(this._u8array[this.offset]=(4278190080&e)>>24,this._u8array[this.offset+1]=(16711680&e)>>16,this._u8array[this.offset+2]=(65280&e)>>8,this._u8array[this.offset+3]=255&e),this.offset+=4},a.prototype.writeBytes=function(t){for(let e=0;ee&&(e=a.offset+a.length):a.offset+a.data.length>e&&(e=a.offset+a.data.length)}s===n.fileSize?t=n.slice(0,n.fileSize):(t=new Q(s),n.copyToFile(t,0))}for(n.seek(0),_0x5a0a71=0;_0x5a0a71>>1:t>>>1;e[n]=t}return o}();function Z(o,i,s){for(let e=i?new Uint8Array(o._u8array.buffer,i):o._u8array,t=-1,n=s?e.length-4:e.length,a=0;a>>8^Ee[255&(t^e[a])];return(-1^_0x20e2c1)>>>0}let Me=1,Ce=2,Pe=3;function Ie(){this.sourceSize=0,this.targetSize=0,this.metaData="",this.actions=[],this.sourceChecksum=0,this.targetChecksum=0,this.patchChecksum=0}function Ae(n){n.readVLV=Oe,n.littleEndian=!0;let a=new Ie;n.seek(4),a.sourceSize=n.readVLV(),a.targetSize=n.readVLV();var e=n.readVLV();e&&(a.metaData=n.readString(e));for(var o,t=n.fileSize-12;n.offset>2)};t.type===Me?t.bytes=n.readBytes(t.length):t.type!==Ce&&t.type!==Pe||(o=n.readVLV(),t.relativeOffset=(1&o?-1:1)*(o>>1)),a.actions.push(t)}if(a.sourceChecksum=n.readU32(),a.targetChecksum=n.readU32(),a.patchChecksum=n.readU32(),a.patchChecksum!==Z(n,0,!0))throw new Error("error_crc_patch");return a}function Oe(){for(let e=0,t=1;;){var n=this.readU8();if(e+=(127&n)*t,128&n)break;e+=t<<=7}return this._lastRead=p}function Re(e){for(;;){var t=127&e;if(0==(e>>=7)){this.writeU8(128|t);break}this.writeU8(t),e--}}function Ne(t){for(let e=0;;){if(0==(t>>=7)){e++;break}e++,t--}return o}Ie.prototype.toString=function(){var e="Source size: "+this.sourceSize;return(e=(e+="\nTarget size: "+this.targetSize)+("\nMetadata: "+this.metaData))+("\n#Actions: "+this.actions.length)},Ie.prototype.validateSource=function(e,t){return this.sourceChecksum===Z(e,t)},Ie.prototype.apply=function(o,e){if(e&&!this.validateSource(o))throw new Error("error_crc_input");for(let t=new Q(this.targetSize),n=0,e=0,a=0;a>=7)){this.writeU8(128|t);break}this.writeU8(t),--e}}function Le(){for(let e=0,t=1;;){var n=this.readU8();if(-1==n)throw new Error("Can't read UPS VLV at 0x"+(this.offset-1).toString(16));if(e+=(127&n)*t,0!=(128&n))break;e+=t<<=7}return p}function je(t){for(let e=0;e++,0!=(t>>=7);)--t;return o}function De(t){let e=new d;for(t.readVLV=Le,t.seek(ke.length),e.sizeInput=t.readVLV(),e.sizeOutput=t.readVLV();t.offset\n \n \n \n ",e=V("iframe",{src:_.adUrl,scrolling:"no",frameborder:"no",style:"width:300px !important;height:250px !important;display: block !important;"}),$.loading.querySelector(".".concat(T.ad)).removeChild($.loading.querySelector(".".concat(T.ad," iframe"))),$.loading.querySelector(".".concat(T.ad)).appendChild(e),Y.webgl.DETECTED||(U($.loading.querySelector(".".concat(T["start-game"])),!0),$.loading.querySelector(".".concat(T.p3)).innerHTML='Failed to initialize WebGL. '),$.loading.querySelector(".".concat(T.ad," iframe")).style.setProperty("display","block","important"),$.loading.querySelector(".".concat(T.ad," iframe")).style.setProperty("visibility","visible","important"),$.loading.querySelector(".".concat(T.ad)).style.setProperty("display","block","important"),$.loading.querySelector(".".concat(T.ad)).style.setProperty("visibility","visible","important")):($.loading.innerHTML='\n "),Y.webgl.DETECTED||(U($.loading.querySelector(".".concat(T["start-game"])),!0),$.loading.querySelector(".".concat(T.p3)).innerHTML='Failed to initialize WebGL. '));let o=window.URL||window.webkitURL,x=function(e){return 80===e[0]&&75===e[1]&&(3===e[2]&&4===e[3]||5===e[2]&&6===e[3]||7===e[2]&&8===e[3])?"zip":55===e[0]&&122===e[1]&&188===e[2]&&175===e[3]&&39===e[4]&&28===e[5]?"7z":82===e[0]&&97===e[1]&&114===e[2]&&33===e[3]&&26===e[4]&&7===e[5]&&(0===e[6]||1===e[6]&&0==e[7])?"rar":void 0},w=async function(e){e=await(await fetch(e)).text(),e=new Blob([e],{type:"application/javascript"}),e=window.URL.createObjectURL(e);return new Worker(e)},S=async function(e){var t=await(await fetch(e)).text(),e=new Blob(["\nlet dataToPass = [];\nModule = {\n monitorRunDependencies: function(left) {\n if (left == 0) {\n setTimeout(function() {\n unrar(dataToPass, null);\n }, 100);\n }\n },\n onRuntimeInitialized: function() {\n },\n locateFile: function(file) {\n return '"+e+".mem';\n }\n};\n"+t+'\nlet unrar = function(data, password) {\n let cb = function(fileName, fileSize, progress) {\n postMessage({"t":4,"current":progress,"total":fileSize, "name": fileName});\n };\n\n let rarContent = readRARContent(data.map(function(d) {\n return {\n name: d.name,\n content: new Uint8Array(d.content)\n }\n }), password, cb)\n let rec = function(entry) {\n if (entry.type === \'file\') {\n postMessage({"t":2,"file":entry.fullFileName,"size":entry.fileSize,"data":entry.fileContent});\n } else if (entry.type === \'dir\') {\n Object.keys(entry.ls).forEach(function(k) {\n rec(entry.ls[k]);\n })\n } else {\n throw "Unknown type";\n }\n }\n rec(rarContent);\n postMessage({"t":1});\n return rarContent;\n};\nonmessage = function(data) {\n dataToPass.push({name: \'test.rar\', content: data.data});\n};\n '],{type:"application/javascript"}),t=window.URL.createObjectURL(e);return new Worker(t)},E=null,M=null,r=null,d=null;try{E=new xe({dbVersion:1,storePrefix:"ejs-",storeName:"system",keyPath:null,autoIncrement:!1,onStoreReady:function(){n=!0},onError:function(){n=!0}}),M=new xe({dbVersion:1,storePrefix:"ejs-",storeName:"roms",keyPath:null,autoIncrement:!1,onStoreReady:function(){a=!0},onError:function(){a=!0}}),r=new xe({dbVersion:1,storePrefix:"ejs-",storeName:"bios",keyPath:null,autoIncrement:!1,onStoreReady:function(){i=!0},onError:function(){i=!0}}),d=new xe({dbVersion:1,storePrefix:"ejs-",storeName:"romsdata",keyPath:null,autoIncrement:!1,onStoreReady:function(){},onError:function(){}})}catch(e){n=!0,a=!0,i=!0,console.log(e)}F.call(_,_.elements.container,"start-game",function(e){_.started=!0,_.playing=!0,U($.loading.querySelector(".".concat(T["loading-info"])),!0),!ee||"undefined"!=ee.virtualGamepadContainer&&null!==ee.virtualGamepadContainer||J.toggleControls.call(_,!0);let t=q({"ejs__tooltip--visible":!0}),n=_.elements.buttons.gamepad.querySelector(".".concat(q({ejs__tooltip:!0}))),a=(B(n,t,!0),setTimeout(function(){B(n,t,!1)},5e3),"string"==typeof _.adUrl&&(U($.loading.querySelector(".".concat(T["close-ad"])),!1),!0!==_.config.noAutoAdClose&&setTimeout(function(){_.started&&$.loading.querySelector(".".concat(T.ad))&&$.loading.querySelector(".".concat(T.ad)).parentNode.removeChild($.loading.querySelector(".".concat(T.ad)))},1e4)),U($.loading.querySelector(".".concat(T["start-game"])),!0),W(ne.defaultCoreOptionsValues.call(u),ne.storage.get("core-options")||{}));"n64"===_.system&&a&&Object.keys(a).forEach(function(e){"glupen64-aspect"===e&&"16:9"===a[e]&&(s.height=s.width/16*9,$.aspectRatio=16/9)}),"arcade"!==u.system&&"fba0.2.97.29"!==u.system||a&&Object.keys(a).forEach(function(e){"fba-aspect"===e&&"PAR"===a[e]&&(s.height=s.width/16*9,$.aspectRatio=16/9)}),"gba"===_.system&&(s.height=s.width/1.5,$.aspectRatio=1.5);{let e=u;"undefined"!=typeof RI?(document.removeEventListener("mousemove",RI.eventHandler,!1),s.removeEventListener("mousedown",RI.canvasEventHandler,!1),s.removeEventListener("mouseup",RI.canvasEventHandler,!1),e.elements.container.addEventListener("mousemove",function(e){let t=0,n=0,a=e.offsetX-$.Module.canvas.offsetLeft,o=e.offsetY-$.Module.canvas.offsetTop;if("mousemove"===e.type){t=a<0?(a=0,-$.Module.canvas.offsetWidth):a>$.Module.canvas.offsetWidth?(a=$.Module.canvas.offsetWidth,$.Module.canvas.offsetWidth):a-RI.currentX,n=o<0?(o=0,-$.Module.canvas.offsetHeight):o>$.Module.canvas.offsetHeight?(o=$.Module.canvas.offsetHeight,$.Module.canvas.offsetHeight):o-RI.currentY,RI.currentX=a,RI.currentY=o;for(let e=0;e>2]=t,HEAP32[RI.contexts[e].state+36>>2]=n}},!1),e.elements.container.addEventListener("mousedown",RI.canvasEventHandler,!1),e.elements.container.addEventListener("mouseup",RI.canvasEventHandler,!1),o=function(l){if(l.targetTouches[0]){let t,n,a=0,o=0,e=l.target.getBoundingClientRect(),i=l.targetTouches[0].clientX-e.left,s=l.targetTouches[0].clientY-e.top;a=i<0?(i=0,-$.Module.canvas.offsetWidth):i>$.Module.canvas.offsetWidth?(i=$.Module.canvas.offsetWidth,$.Module.canvas.offsetWidth):i-RI.currentX,o=s<0?(s=0,-$.Module.canvas.offsetHeight):s>$.Module.canvas.offsetHeight?(s=$.Module.canvas.offsetHeight,$.Module.canvas.offsetHeight):s-RI.currentY,RI.currentX=i,RI.currentY=s;for(let e=0;e>2]=a,HEAP32[RI.contexts[e].state+36>>2]=o;switch(l.type){case"touchend":case"touchstart":if(0===l.button)n=40;else{if(2!==l.button)break;n=41}t="touchend"===l.type?0:1;for(let e=0;e>0]=t}}},e.elements.container.addEventListener("touchstart",o,!1),e.elements.container.addEventListener("touchend",o,!1)):(o=function(e){e=new MouseEvent(e.type,e);$.Module.canvas.dispatchEvent(e)},H.call(u,".".concat(q({ejs__dialogs:!0}))).addEventListener("mousemove",o,!1),H.call(u,".".concat(q({ejs__dialogs:!0}))).addEventListener("mousedown",o,!1),H.call(u,".".concat(q({ejs__dialogs:!0}))).addEventListener("mouseup",o,!1))}var o;"msx"===_.system&&"undefined"!=typeof RI&&(document.removeEventListener("keydown",RI.eventHandler,!1),document.removeEventListener("keyup",RI.eventHandler,!1),o=function(n){var e=n.keyCode,a=e>>3,o=1<<(7&e);switch(n.type){case"keyup":case"keydown":if(32<=a)throw"key code error! bad code: "+e;for(let t=0;t>0];"keyup"===n.type?e&=~o:e|=o,HEAP8[RI.contexts[t].state+a>>0]=e}}},document.addEventListener("keydown",o,!1),document.addEventListener("keyup",o,!1)),setTimeout(function(){let o;o=X.info(),null===ee.setVolume&&"undefined"!=typeof RA?(RA.queueAudio=function(){let e,t=_.volume,n=RA.bufIndex,a=(e=RA.bufIndex?RA.buffers[RA.bufIndex-1].endTime:RA.context.currentTime,RA.buffers[n].endTime=e+RA.buffers[n].duration,RA.context.createBufferSource());if(a.buffer=RA.buffers[n],1===(t=_.muted?0:t))a.connect(RA.context.destination);else{let e=RA.context.createGain();a.connect(e),e.connect(RA.context.destination),X.isEdge||"chrome"===o.name&&parseInt(o.version,10)<=60||"firefox"===o.name&&parseInt(o.version,10)<=56||"opera"===o.name&&parseInt(o.version,10)<=44?e.gain.value=t:"firefox"===o.name?e.gain.setValueAtTime(t,RA.context.currentTime):e.gain.setValueAtTime(t,RA.context.currentTime,0)}a.start(e),RA.bufIndex+=1,RA.bufOffset=0},X.isIos&&window.addEventListener("touchstart",function(){if(RA.context){RA.context.resume();let e=RA.context.createBufferSource();e.connect(RA.context.destination),e.start()}},!1)):ee.setVolume()},500),setTimeout(function(){_.elements.container.focus()},30),void 0===window.addRunDependency&&(window.Module=void 0)}),"string"==typeof _.adUrl&&F.call(_,$.loading.querySelector(".".concat(T["close-ad"])),"click",function(e){e instanceof MouseEvent&&_.started&&$.loading.querySelector(".".concat(T.ad))&&$.loading.querySelector(".".concat(T.ad)).parentNode.removeChild($.loading.querySelector(".".concat(T.ad))),_.elements.container.focus()});let C=function(){M.db&&M.getAll(function(e){Array.isArray(e)&&10Doesn\'t look like your browser is supported'}else i.innerHTML='Invalid Rom '}function a(e){if(e.data){if(1===e.data.t&&(!o.startName&&r&&(o.startName=r),e.target.terminate(),n(o.startName)),2===e.data.t){let t=e.data.file.split("/"),n=t.pop(),a=n.split(".").pop();n=n.replace(/\#/g,""),$.FS.createPath("/",t.join("/"),!0,!0);for(let e=v[s].length-1;0<=e;--e)v[s][e]===a.toLowerCase()&&e>l&&(l=e,o.startName=["",t.join("/"),n].join("/"),o.startName=o.startName.replace(/\/+/,"/"));n&&($.FS.createDataFile("/".concat(t.join("/")),n,e.data.data,!0,!1),h+=e.data.data.length),r="/".concat(t.join("/"),"/").concat(n)}var t;4===e.data.t&&0'+u.localization("Missing mame config")+"");s=e.split("|");$.coreFileName="".concat(u.system,"-").concat(s[0]),t="1"===s[1],D.element(u.elements.buttons.saveState)&&U(u.elements.buttons.saveState,!t),D.element(u.elements.buttons.loadState)&&U(u.elements.buttons.loadState,!t),U(ne.contextMenu.querySelectorAll("ul li").item(2),!t),U(ne.contextMenu.querySelectorAll("ul li").item(3),!t),l=2===u.coreVer?"":u.system.concat("-old-").concat(s[0],"-wasm.data"),s[0]?(Y.wasm&&o?g=!0:(c.innerHTML=''+u.localization("Webassembly support is not detected in this browser")+" ",l=""),l&&(E.db?E.get(l,function(t){if(t&&t.version===n)if(2===_.coreVer)z(t.data);else{let e=t.data.slice?t.data.slice(12):t.data.subarray(12);e.set([55,122,188,175,39,28,0,3],0),z(e)}else d(l,n)}):d(l,n))):c.innerHTML=''+u.localization("Unsupported Game")+" "}else{l=!1;let e;if(Y.wasm&&o?(e="wasm",l=!0,"n64"!==u.system||i||2===u.coreVer||(e="legacy-wasm"),g=!0):a&&(l=!0,e="asmjs","n64"!==u.system||i||2===u.coreVer||(e="legacy-asmjs")),!0!==(l="undefined"!=typeof EJS_CUSTOM_COREFILE?EJS_CUSTOM_COREFILE:l))return void(c.innerHTML=''+u.localization("Please upgrade your browser to the latest version")+" ");l=2===u.coreVer?r+"-"+e+".data":r+"-old-"+e+".data","undefined"!=typeof EJS_CUSTOM_COREFILE&&(l=EJS_CUSTOM_COREFILE),E.db?E.get(l,function(t){if(!t||t.version!==n||"undefined"!=typeof EJS_DEBUG_XX&&!0===EJS_DEBUG_XX)d(l,n);else if(2===_.coreVer)z(t.data);else{let e=t.data.slice?t.data.slice(12):t.data.subarray(12);e.set([55,122,188,175,39,28,0,3],0),z(e)}}):d(l,n)}D.element(u.elements.buttons.saveState)&&U(u.elements.buttons.saveState,!t),D.element(u.elements.buttons.loadState)&&U(u.elements.buttons.loadState,!t),U(ne.contextMenu.querySelectorAll("ul li").item(2),!t),U(ne.contextMenu.querySelectorAll("ul li").item(3),!t),u.statesSupported=t,u.config.buttons&&(!1===u.config.buttons.playPause&&D.element(u.elements.buttons.play[0])&&U(u.elements.buttons.play[0],!0),!1===u.config.buttons.restart&&D.element(u.elements.buttons.restart)&&U(u.elements.buttons.restart,!0),!1===u.config.buttons.mute&&D.element(u.elements.buttons.mute)&&U(u.elements.buttons.mute,!0),!1===u.config.buttons.settings&&D.element(u.elements.buttons.settings)&&U(u.elements.buttons.settings,!0),!1===u.config.buttons.fullscreen&&D.element(u.elements.buttons.fullscreen)&&U(u.elements.buttons.fullscreen,!0),!1===u.config.buttons.saveState&&D.element(u.elements.buttons.saveState)&&U(u.elements.buttons.saveState,!0),!1===u.config.buttons.loadState&&D.element(u.elements.buttons.loadState)&&U(u.elements.buttons.loadState,!0),!1===u.config.buttons.screenRecord&&D.element(u.elements.buttons.screenRecord)&&U(u.elements.buttons.screenRecord,!0),!1===u.config.buttons.gamepad&&D.element(u.elements.buttons.gamepad)&&U(u.elements.buttons.gamepad,!0),!1===u.config.buttons.cheat&&D.element(u.elements.buttons.cheat)&&U(u.elements.buttons.cheat,!0),!1===u.config.buttons.volume&&D.element(u.elements.inputs.volume)&&U(u.elements.inputs.volume,!0),!1===u.config.buttons.screenshot&&U(ne.contextMenu.querySelectorAll("ul li").item(0),!0),!0===u.config.buttons.cacheManage&&U(ne.contextMenu.querySelectorAll("ul li").item(1),!1),!1===u.config.buttons.quickSave&&U(ne.contextMenu.querySelectorAll("ul li").item(2),!0),!1===u.config.buttons.quickLoad&&U(ne.contextMenu.querySelectorAll("ul li").item(3),!0))}else c.innerHTML=''+u.localization("Invalid System")+" "}).catch(function(e){j(e,t,_)}),$.romdb=M,!1}setTimeout(L,50)};ae($.loading.querySelector(".".concat(T["start-game"])),"click touchstart",L),!0===_.startOnLoad&&$.loading.querySelector(".".concat(T["start-game"])).click()}};let g=$;function Fe(e){return function(n){if(Array.isArray(n)){for(let e=0,t=new Array(n.length);e')),!t)return!0;for(var n in t)He(n);return!0},{init:function(e){let t=Object.assign({},{openTrigger:"data-micromodal-trigger"},e),n=Fe(document.querySelectorAll("[".concat(t.openTrigger,"]"))),a=function(e,n){let a=[];return e.forEach(function(e){var t=e.attributes[n].value;void 0===a[t]&&(a[t]=[]),a[t].push(e)}),a}(n,t.openTrigger);if(!0!==t.debugMode||!1!==qe(n,a))for(var o in a){var i=a[o];t.targetModal=o,t.triggers=Fe(i),new Ue(t)}},show:function(e,t){let n=t||{};return n.targetModal=e,!0===n.debugMode&&!1===He(e)?Be=null:(Be=new Ue(n)).showModal(),Be},close:function(){Be.closeModal()}});var v={defaultControllers:{0:{0:{value:"88",value2:"1"},1:{value:"83",value2:"3"},2:{value:"16",value2:"8"},3:{value:"13",value2:"9"},4:{value:"38",value2:"12"},5:{value:"40",value2:"13"},6:{value:"37",value2:"14"},7:{value:"39",value2:"15"},8:{value:"90",value2:"0"},9:{value:"65",value2:"2"},10:{value:"81",value2:"4"},11:{value:"69",value2:"5"},12:{value:"82",value2:"6"},13:{value:"87",value2:"7"},14:{},15:{},16:{value:"72"},17:{value:"70"},18:{value:"71"},19:{value:"84"},20:{value:"76"},21:{value:"74"},22:{value:"75"},23:{value:"73"},24:{},25:{},26:{}},1:{},2:{},3:{}},controllers:{},virtualGamepadContainer:null,keyMap:{8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",19:"pause/break",20:"caps lock",27:"escape",32:"space",33:"page up",34:"page down",35:"end",36:"home",37:"left arrow",38:"up arrow",39:"right arrow",40:"down arrow",45:"insert",46:"delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",91:"left window key",92:"right window key",93:"select key",96:"numpad 0",97:"numpad 1",98:"numpad 2",99:"numpad 3",100:"numpad 4",101:"numpad 5",102:"numpad 6",103:"numpad 7",104:"numpad 8",105:"numpad 9",106:"multiply",107:"add",109:"subtract",110:"decimal point",111:"divide",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"num lock",145:"scroll lock",186:"semi-colon",187:"equal sign",188:"comma",189:"dash",190:"period",191:"forward slash",192:"grave accent",219:"open bracket",220:"back slash",221:"close braket",222:"single quote"},saveLoaddbDB:function(){try{return new xe({dbVersion:1,storePrefix:"ejs-",storeName:"states",keyPath:null,autoIncrement:!1,onStoreReady:function(){},onError:function(){}})}catch(e){console.log(e)}}(),saveLoadDB:function(n){try{if(!v.saveLoaddbDB.db)return!1;if(ne&&"function"==typeof ne.getCoreOptionsValues){var e=ne.getCoreOptionsValues()["save-state-location"];if(!e||"download"===e)return!1;if(!this.getStartName())return!1;var a=ne.getCoreOptionsValues()["save-state-slot"],o=this.getStartName();if(!a)return!1;let t=o+"-"+a;return async function(){if("save"===n)try{var e=await v.saveState();v.saveLoaddbDB.put(t,e)}catch(e){return}else v.saveLoaddbDB.get(t,function(e){EJS_loadState(e)})}(),!0}return!1}catch(e){return!1}},gamepad:null,allowCheat:!0,connection:null,connected:!1,playerName:"",players:[],waitingList:{},roomMaster:null,inputsData:{},coreOptionData:{},currentFrame:0,wait:!1,progressHelper:{},icons:{lock:' '},isPaused:null,setVolume:null,setVariable:null,simulateInput:null,simulateInputFn:null,toggleShader:null,saveState:null,screenRecord:null,loadState:null,quickSaveState:null,quickLoadState:null,changeStateSlot:null,getScreenData:null,getStateInfo:null,setCheat:null,resetCheat:null,getGameCoreOptions:null,classNames:{"dialog-container":q({"dialog-container":!0}),tabs:q({tabs:!0}),"dialog-title":q({"dialog-title":!0}),"dialog-content":q({"dialog-content":!0}),"dialog-buttons":q({"dialog-buttons":!0}),overlay:q({overlay:!0}),"key-setting-popup":q({"key-setting-popup":!0}),"tabs-panel":q({"tabs-panel":!0}),"tabs-content":q({"tabs-content":!0}),"button-container":q({"button-container":!0}),set:q({set:!0}),active:q({active:!0}),"btn-cancel":q({"btn-cancel":!0}),"btn-reset":q({"btn-reset":!0}),"btn-clear":q({"btn-clear":!0}),"btn-create":q({"btn-create":!0}),"btn-submit":q({"btn-submit":!0}),"btn-join-room":q({"btn-join-room":!0}),"btn-quit":q({"btn-quit":!0}),"btn-create-room":q({"btn-create-room":!0}),modal:q({modal:!0}),modal__overlay:q({modal__overlay:!0}),modal__container:q({modal__container:!0}),modal__header:q({modal__header:!0}),modal__title:q({modal__title:!0}),modal__close:q({modal__close:!0}),modal__content:q({modal__content:!0}),modal__btn:q({modal__btn:!0}),"modal__btn-primary":q({"modal__btn-primary":!0}),"micromodal-slide":q({"micromodal-slide":!0}),modal__errmsg:q({modal__errmsg:!0}),modal__footer:q({modal__footer:!0}),"cheats-add":q({"cheats-add":!0}),"cheats-list":q({"cheats-list":!0}),"cheat-code-input":q({"cheat-code-input":!0}),"cheat-name-input":q({"cheat-name-input":!0}),"ejs-switch":q({"ejs-switch":!0}),"ejs-delete-cheat":q({"ejs-delete-cheat":!0})},initShaders:function(){for(let e=Te,t=Object.keys(e),n,a=0;a\n \n
'+l.localization("Control Settings")+' \n \n \n \n \n \n \n
\n
[Select] \n
'+l.localization("Press keyboard or gamepad")+"
\n
\n
\n \n ",'\n \n
\n
\n
Connected gamepad: n/a
\n
\n
\n
\n
\n
'+l.localization("Gamepad")+'
\n
'+l.localization("Keyboard")+'
\n
\n
\n
\n
\n
')),a='\n \n
\n {label}: \n
\n
\n
\n
\n
'),o;"nes"===l.system?o={0:"B",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",24:l.localization("QUICK SAVE STATE"),25:l.localization("QUICK LOAD STATE"),26:l.localization("CHANGE STATE SLOT")}:"snes"===l.system?o={0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",24:l.localization("QUICK SAVE STATE"),25:l.localization("QUICK LOAD STATE"),26:l.localization("CHANGE STATE SLOT")}:"n64"===l.system?(o={0:"B",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",10:"L",11:"R",12:"Z",19:"L STICK UP",18:"L STICK DOWN",17:"L STICK LEFT",16:"L STICK RIGHT",23:"R STICK UP",22:"R STICK DOWN",21:"R STICK LEFT",20:"R STICK RIGHT",24:l.localization("QUICK SAVE STATE"),25:l.localization("QUICK LOAD STATE"),26:l.localization("CHANGE STATE SLOT")},2===l.coreVer&&(o[0]="A",o[1]="B",delete o[8])):o="nds"===l.system?{0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",14:"Microphone",24:l.localization("QUICK SAVE STATE"),25:l.localization("QUICK LOAD STATE"),26:l.localization("CHANGE STATE SLOT")}:{0:"B",1:"Y",2:"SELECT",3:"START",4:"UP",5:"DOWN",6:"LEFT",7:"RIGHT",8:"A",9:"X",10:"L",11:"R",12:"L2",13:"R2",14:"L3",15:"R3",19:"L STICK UP",18:"L STICK DOWN",17:"L STICK LEFT",16:"L STICK RIGHT",23:"R STICK UP",22:"R STICK DOWN",21:"R STICK LEFT",20:"R STICK RIGHT",24:l.localization("QUICK SAVE STATE"),25:l.localization("QUICK LOAD STATE"),26:l.localization("CHANGE STATE SLOT")},["arcade","mame"].includes(l.system)&&(o[2]=l.localization("INSERT COIN")),!1===l.statesSupported&&(delete o[24],delete o[25],delete o[26]);for(let e=[2,3,4,5,6,7,8,0,9,1,10,11,12,13,14,15,19,18,17,16,23,22,21,20,24,25,26],t=0;t<=3;t+=1)!function(t){l.elements.dialogs.gamepad.querySelector(".".concat(v.classNames["tabs-content"])).innerHTML+=n.replace(/{index}/g,t),e.forEach(function(e){o[e]&&(l.elements.dialogs.gamepad.querySelector("#controls-".concat(t)).innerHTML+=a.replace(/{index}/g,t).replace(/{id}/g,e).replace(/{label}/g,o[e]))}),l.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="16"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="17"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="18"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="19"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="20"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="21"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="22"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc"),l.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="'.concat(t,'"][data-type="2"]'))&&(l.elements.dialogs.gamepad.querySelector('[data-id="23"][data-index="'.concat(t,'"][data-type="2"]')).style.backgroundColor="#ccc")}(t);Object.keys(v.controllers).forEach(function(a){v.controllers[a]&&Object.keys(v.controllers[a]).forEach(function(e){let t=l.elements.dialogs.gamepad.querySelector('[data-id="'.concat(e,'"][data-index="').concat(a,'"][data-type="1"]')),n=l.elements.dialogs.gamepad.querySelector('[data-id="'.concat(e,'"][data-index="').concat(a,'"][data-type="2"]'));if(!t||!n)return!1;e=v.controllers[a][e];e&&(e.type&&1!==parseInt(e.type,10)?n.value="":e.value&&(t.value=v.keyMap[e.value]||"",t.setAttribute("data-value",e.value)),e.value2&&(n.value=isNaN(e.value2)?e.value2:"button ".concat(parseInt(e.value2,10)+1),n.setAttribute("data-value",e.value2)))})}),F.call(this,l.elements.dialogs.gamepad.querySelector(".".concat(v.classNames["btn-submit"])),"click",function(e){let t=l.elements.dialogs.gamepad.querySelectorAll("input"),o={};return Array.from(t).forEach(function(e){let t,n=e.getAttribute("data-index"),a=e.getAttribute("data-value");2===parseInt(e.getAttribute("data-type"),10)&&(t=e.getAttribute("data-value"));e=e.getAttribute("data-id");o[n]||(o[n]={}),o[n][e]||(o[n][e]={}),a&&(o[n][e].value=a),t&&(o[n][e].value2=t)}),ne.storage.set({controllers:o}),v.controllers=o,U(l.elements.dialogs.gamepad,!0),l.elements.container.focus(),e.stopPropagation(),!1}),F.call(this,l.elements.dialogs.gamepad.querySelector(".".concat(v.classNames["btn-reset"])),"click",function(e){v.controllers=JSON.parse(JSON.stringify(v.defaultControllers)),localStorage.removeItem(ne.storage.key);let t=l.elements.dialogs.gamepad.querySelectorAll("input");for(let e=0;eGamepad:'.concat(v.gamepad.gamepads[a].id," "+l.localization("Press keyboard or gamepad")+" "+l.localization("Press escape (esc) to clear")):i+=" Press keyboard "+l.localization("Press escape (esc) to clear"),r.querySelector(".".concat(v.classNames["key-setting-popup"])).innerHTML=i,e.stopPropagation()})})},setCacheDialog:function(){let t=this;t.elements.dialogs.cache.innerHTML='\n \n
\n
'+t.localization("Cache Manager")+' \n \n
\n\n
\n
\n
\n "),F.call(this,t.elements.dialogs.cache.querySelector(".".concat(v.classNames["btn-cancel"])),"click",function(e){return U(t.elements.dialogs.cache,!0),t.elements.container.focus(),e.stopPropagation(),!1}),F.call(this,t.elements.dialogs.cache.querySelector(".".concat(v.classNames["dialog-title"]," a")),"click",function(e){return g.romdb&&(g.romdb.clear(),t.elements.dialogs.cache.querySelector(".".concat(v.classNames["dialog-content"])).innerHTML=''+t.localization("Empty")+"
"),e.stopPropagation(),!1})},showLoading:function(e){Xe.show("modal-6ed698f3d04061f5",{closeByEsckey:!1}),e&&console.log(""),U(this.elements.dialogs.loading,!1)},hideLoading:function(){Xe.close(),U(this.elements.dialogs.loading,!0)},setLoadingDialog:function(){this.elements.dialogs.loading&&(this.elements.dialogs.loading.innerHTML='\n \n
\n
\n '+this.localization("Loading")+"...\n
\n
\n
"))},setCheatDialog:function(){let s=this;if(s.elements.dialogs.cheat){s.elements.dialogs.cheat.innerHTML='\n \n\n \n\n \n
\n
\n \n
\n\n
\n '+s.localization("Code")+' \n \n '+s.localization("Description")+' \n \n\n \n \n
\n
\n
\n ");let o=s.elements.dialogs.cheat.querySelector("#modal-85cd7a1c543a484b"),i=(F.call(this,s.elements.dialogs.cheat.querySelector(".".concat(v.classNames["cheats-add"])),"click",function(e){return Xe.show("modal-85cd7a1c543a484b",{closeTrigger:"data-modal-close"}),!1}),s.elements.dialogs.cheat.querySelector(".".concat(v.classNames["cheats-list"]))),a=(F.call(this,o.querySelector(".".concat(v.classNames["modal__btn-primary"])),"click",function(e){var t=o.querySelector(".".concat(v.classNames["cheat-name-input"])).value,n=o.querySelector(".".concat(v.classNames["cheat-code-input"])).value;if(t&&n){let e=i.querySelectorAll("input:checked");o.querySelector(".".concat(v.classNames["cheat-name-input"])).value="",o.querySelector(".".concat(v.classNames["cheat-code-input"])).value="",Xe.close();var a=s.cheats.length;s.cheats.push([t,n]),i.innerHTML+='\n
\n
').concat(t,' \n
× \n
'),e.forEach(function(e,t){i.querySelector("#ejs-cheat-switch-".concat(t)).setAttribute("checked","checked")})}return"localStorage"in window&&s.getStartName()&&(localStorage.setItem("".concat(s.system,"-").concat(s.getStartName(),"-cheats"),JSON.stringify(s.cheats)),e.stopPropagation()),!1}),function(){if("localStorage"in window&&s.getStartName()){let e=localStorage.getItem("".concat(s.system,"-").concat(s.getStartName(),"-cheats"));try{e=JSON.parse(e)}catch(e){}e&&(s.cheats=e)}i.innerHTML="",s.cheats&&Array.isArray(s.cheats)&&s.cheats.forEach(function(e,t){var n=e[0];e[1],i.innerHTML+='\n
\n
').concat(n,' \n
× \n
')})});F.call(s,i,"click",function(e){if(e.target&&e.target.classList.contains(v.classNames["ejs-delete-cheat"])&&e.target.getAttribute("data-idx")){var t=e.target.getAttribute("data-idx");s.cheats.splice(t,1),"localStorage"in window&&s.getStartName()&&localStorage.setItem("".concat(s.system,"-").concat(s.getStartName(),"-cheats"),JSON.stringify(s.cheats));let n=[];i.querySelectorAll("input").forEach(function(e,t){n[t]=!!i.querySelector("#ejs-cheat-switch-".concat(t,":checked"))}),n.splice(t,1),a(),n.forEach(function(e,t){e&&i.querySelector("#ejs-cheat-switch-".concat(t)).setAttribute("checked","checked")})}return e.stopPropagation(),!1}),F.call(s,s.elements.container,"start-game",function(e){a()}),F.call(this,s.elements.dialogs.cheat.querySelector(".".concat(v.classNames["btn-cancel"])),"click",function(e){return U(s.elements.dialogs.cheat,!0),e.stopPropagation(),s.elements.container.focus(),!1}),F.call(this,s.elements.dialogs.cheat.querySelector(".".concat(v.classNames["btn-submit"])),"click",function(e){return v.resetCheat(),i.querySelectorAll("input:checked").forEach(function(e,t){e=s.cheats[e.value];e&&v.setCheat(t,1,e[1])}),U(s.elements.dialogs.cheat,!0),s.elements.container.focus(),!1}),"arcade"!==s.system&&"mame"!==s.system&&"mame2003"!==s.system&&"mame2010"!==s.system||(D.element(s.elements.buttons.cheat)&&U(s.elements.buttons.cheat,!0),v.allowCheat=!1),v.setCheat||(U(s.elements.buttons.cheat,!0),v.allowCheat=!1)}},initKeyboard:function(){let t=this,o=this,i=this.elements.dialogs.gamepad.querySelector(".".concat(v.classNames.overlay));F.call(this,document.body,"keydown keyup",function(a){if(!(112<=a.which&&a.which<=123)){let e=!t.elements.dialogs.gamepad.hidden&&!i.hidden,n="keydown"===a.type;if(n&&e){let e=i.getAttribute("data-index"),t=i.getAttribute("data-id"),n=null;if(a.key&&"escape"===v.keyMap[a.keyCode])return(n=o.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="1"]'))).setAttribute("data-value",""),n.value=""(n=o.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="2"]'))).setAttribute("data-value",""),n.value="",void U(i,!0);e=i.getAttribute("data-index"),t=i.getAttribute("data-id"),n=null,a.key&&((n=o.elements.dialogs.gamepad.querySelector('[data-id="'.concat(t,'"][data-index="').concat(e,'"][data-type="1"]'))).setAttribute("data-value",a.keyCode),n.value=v.keyMap[a.keyCode]),U(i,!0)}else Object.keys(v.controllers).forEach(function(t){Object.keys(v.controllers[t]).forEach(function(e){parseInt(v.controllers[t][e].value,10)===a.keyCode&&["24","25","26"].includes(e)&&"keydown"==a.type&&!a.repeat&&("24"==e?v.quickSaveState():"25"==e?v.quickLoadState():"26"==e&&v.changeStateSlot()),parseInt(v.controllers[t][e].value,10)===a.keyCode&&(n?16<=e&&e<=23?v.simulateInput(t,e,32767):v.simulateInput(t,e,1):v.simulateInput(t,e,0))})})}}),document.body.addEventListener("keydown",function(e){var t=e.keyCode||e.which;[32,37,38,39,40,112,113,114,115,116,117,118,119,120,121,122,123].includes(t)&&e.srcElement===o.elements.container&&e.preventDefault(),e.srcElement.className.split(/ +/).includes(v.classNames.set)&&e.preventDefault()})},initGamepad:function(){let l=this,o=this,r=this.elements.dialogs.gamepad.querySelector(".".concat(v.classNames.overlay)),n;try{n=new ye}catch(e){return void console.warn("gamepad not supported")}(v.gamepad=n).on("buttondown",function(n){if(l.elements.dialogs.gamepad.hidden||r.hidden)Object.keys(v.controllers[n.gamepadIndex.toString()]).forEach(function(e){var t=n.gamepadIndex.toString();parseInt(v.controllers[t][e].value2,10)===parseInt(n.index,10)&&["24","25","26"].includes(e)&&("24"==e?v.quickSaveState():"25"==e?v.quickLoadState():"26"==e&&v.changeStateSlot()),parseInt(v.controllers[t][e].value2,10)===parseInt(n.index,10)&&parseInt(t,10)===parseInt(n.gamepadIndex,10)&&v.simulateInput(t,e,1)});else{var t=parseInt(r.getAttribute("data-index"),10),a=r.getAttribute("data-id");if(n.gamepadIndex===parseInt(t,10)){let e=null;(e=o.elements.dialogs.gamepad.querySelector('[data-id="'.concat(a,'"][data-index="').concat(t,'"][data-type="2"]'))).setAttribute("data-value",n.index),e.value="button ".concat(n.index+1),U(r,!0)}}}),n.on("buttonup",function(n){Object.keys(v.controllers).forEach(function(t){Object.keys(v.controllers[t]).forEach(function(e){parseInt(v.controllers[t][e].value2,10)===parseInt(n.index,10)&&parseInt(t,10)===parseInt(n.gamepadIndex,10)&&v.simulateInput(t,e,0)})})}),n.on("axischanged",function(n){var a=.5<(t=n.value)||t<-.5?0')+('');for(let n=0;n'+o[n].text+"
"}a=(a+="")+('');for(let n=0;n'+o[n].text+"
"}a=(a+="")+('');for(let n=0;n'+o[n].text+"
"}a=(a+="")+('');for(let n=0;n'+o[n].text+"
"}a+="",v.virtualGamepadContainer.innerHTML=a,U(v.virtualGamepadContainer,!r);let n=q({"virtual-gamepad":!0}),i=q({touch:!0});X.isIos||F.call(this,H.call(this,".".concat(n)),"touchmove",function(e){e.stopPropagation()});let s;for(let e=0;e{var e=H.call(c,".".concat(n," .").concat(q(t.id)));e&&F.call(c,e,"touchstart touchend",function(e){"touchend"===e.type?(B(e.target,i,!1),window.setTimeout(function(){v.syncInput(0,t.number,0)},30)):(B(e.target,i,!0),v.syncInput(0,t.number,1)),e.stopPropagation()})});let e=V("div",{class:q({ejs__widget:!0,ejs__widget_controls_toggle:!0})},"");e.innerHTML=' ',H.call(this,".".concat(q({ejs__widgets:!0}))).appendChild(e);let t;F.call(this,e,"mousedown touchstart",function(e){B(e.target,i,!0),clearTimeout(t),J.toggleControls.call(c,!0),t=setTimeout(function(){J.toggleControls.call(c,!1)},5e3)})}},setup:function(){let a=this;if(this.game){var e;if(v.playerName=a.config.playerName,B(this.elements.container,this.config.classNames.type,!0),this.elements.container.setAttribute("tabindex","0"),!this.color||(e=function(e){let n=e.toLowerCase();if(n&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(n)){if(4===n.length){for(let e="#",t=1;t<4;t+=1)e+=n.slice(t,t+1).concat(n.slice(t,t+1));n=s}for(let e=[],t=1;t<7;t+=2)e.push(parseInt("0x".concat(n.slice(t,t+2)),16));return _0x5ac4ff}return null}(this.color))&&this.elements.container.setAttribute("style","--ejs-primary-color: ".concat(e[0],", ").concat(e[1],", ").concat(e[2])),this.elements.wrapper=V("div",{class:this.config.classNames.video}),R(this.game,this.elements.wrapper),"video"!==a.game.tagName.toLocaleLowerCase()){let t=this.config.volume,n=(Object.defineProperty(a.game,"volume",{get:function(){return t},set:function(e){t=e,G.call(a,a.game,"volumechange")}}),a.storage.get("muted"));Object.defineProperty(a.game,"muted",{get:function(){return n},set:function(e){e=!!D.boolean(e)&&e;n=e,G.call(a,a.game,"volumechange")}})}window.addEventListener("beforeunload",function(e){a.started&&a.getStartName()&&(g.FS.syncfs(function(){}),v.saveSavFiles(),g.FS.syncfs(function(){}))},!0),window.saveSaveFiles=function(){a.getStartName()&&(console.log("saving save files"),v.saveSavFiles(),g.FS.syncfs(!1,function(){}))},setInterval(function(){a.started&&saveSaveFiles()},3e5)}else console.warn("No game element found!")},listeners:function(){let i=this;i.elements.buttons.restart&&F.call(i,i.elements.buttons.restart,"click",function(e){v.restartGame(),v.inputsData={},saveSaveFiles()}),i.elements.buttons.screenRecord&&F.call(i,i.elements.buttons.screenRecord,"click",function(e){if(i.recordData||(i.recordData={started:!1,data:[],stopped:!1}),i.recordData.started)i.recordData.started&&(i.recordData.recorder.stop(),i.recordData.stopped=!0);else{let n;n=MediaRecorder.isTypeSupported("video/webm; codecs=h264")?{mimeType:"video/webm; codecs=h264"}:MediaRecorder.isTypeSupported("video/webm; codecs=H264")?{mimeType:"video/webm; codecs=H264"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp9")?{mimeType:"video/webm; codecs=vp9"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp8")?{mimeType:"video/webm; codecs=vp8"}:MediaRecorder.isTypeSupported("video/webm; codecs=avc1")?{mimeType:"video/webm; codecs=avc1"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp9.0")?{mimeType:"video/webm; codecs=vp9.0"}:MediaRecorder.isTypeSupported("video/webm; codecs=vp8.0")?{mimeType:"video/webm; codecs=vp8.0"}:{},g.Module.pauseMainLoop(),i.playing=!1,alert('please check "share system audio" to have audio in the recording. We only need the audio stream so your entire screen will not be recorded');let a=g.Module.canvas.captureStream(30),o=setTimeout(function(){i.playing=!0,g.Module.resumeMainLoop()},2e4);navigator.mediaDevices.getDisplayMedia({audio:!0,video:{mediaSource:"screen"}}).then(function(e){try{clearTimeout(o)}catch(e){}var t=e.getAudioTracks();for(let e=0;e>0;if(0>0,t=0;t".concat(this.icons[e],"");for(let e=a.childNodes[0].childNodes,t=0;t",""]),o=[];function n(e,t,n){"function"==typeof n?o.push(n):o.push(function(){});n=a.length-1;t?a.splice(n,0,''+e+" "):a.splice(n,0,''+e+" ")}n(s.localization("Take Screenshot"),!1,function(e){var t=v.getScreenData();let n;var a=(n="string"==typeof s.gameName?s.gameName:n)?"".concat(n,"-screenshot.png"):"game.png";let o=document.createElement("a");return o.href=URL.createObjectURL(new Blob([t])),o.download=a,o.click(),setTimeout(function(){URL.revokeObjectURL(o.src)}),!1}),n(s.localization("Cache Manage"),!0,function(e){if(g.romdb){U(s.elements.dialogs.cache,!1);let n=s.elements.dialogs.cache.querySelector(".".concat(v.classNames["dialog-content"]));n.innerHTML=""+s.localization("Loading")+"
",g.romdb.getAll(function(t){if(t){let e=V("table",{style:"width:100%;padding-left:10px;text-align:left"}),i=V("tbody");0Remove',t.appendChild(e),t.appendChild(n),t.appendChild(a),i.appendChild(t),a.querySelector("a").onclick=function(e){g.romdb.removeBatch(_0x277c67);try{i.removeChild(t)}catch(e){}return e.stopPropagation(),!1}}}),e.appendChild(i),n.appendChild(e)):n.innerHTML=''+s.localization("Empty")+"
"}else n.innerHTML=''+s.localization("Empty")+"
"},function(){})}return!1}),n(s.localization("Quick Save")+" (F2)",!1,function(e){v.quickSaveState(),ne.contextMenu.style.display="none"}),n(s.localization("Quick Load")+" (F4)",!1,function(e){v.quickLoadState(),ne.contextMenu.style.display="none"}),te.contextMenu.innerHTML=a.join("");var i=te.contextMenu.getElementsByTagName("li");for(let e=0;e ',"exit-fullscreen":' ',gamepad:' ',"load-state":' ',muted:' ',pause:' ',play:' ',restart:' ',"save-state":' ',"screen-record":' ',settings:' ',volume:' \n \n ',cheat:' '},this.id=Math.floor(1e4*Math.random()),null),a=(this.elements.controls=null,{id:this.id}),n=!0;D.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this.props)),this.config.controls||(this.config.controls=[]),D.element(this.config.controls)||D.string(this.config.controls)?t=this.config.controls:(t=te.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality}),n=!1);function o(e){let n=e;return Object.entries(a).forEach(function(e){t=2;var e=function(e){if(Array.isArray(e))return e}(e=e)||function(n,a){let o=[],i=!0,t=!1,s=void 0;try{for(let e,t=n[Symbol.iterator]();!(i=(e=t.next()).done)&&(o.push(e.value),!a||o.length!==a);i=!0);}catch(e){t=!0,s=e}finally{try{i||null==_0x4d9086.return||_0x4d9086.return()}finally{if(t)throw s}}return o}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}(),t=e[0],e=e[1];n=fe(n,"{".concat(t,"}"),e)}),n}let i;if(n&&(D.string(this.config.controls)?t=o(t):D.element(t)&&(t.innerHTML=o(t.innerHTML))),D.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),(i=D.element(i)?i:this.elements.container)[D.element(t)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",t),D.element(this.elements.controls)||te.findElements.call(this),!D.empty(this.elements.buttons)){let t=function(t){let n=e.config.classNames.controlPressed;Object.defineProperty(t,"pressed",{enumerable:!0,get:function(){return z(t,n)},set:function(){var e=0Math.abs(o)?a:o);l.increaseVolume(i/50);var s=l.game.volume;(1===i&&s<1||-1===i&&0 {
if (response.ok) {
response.text().then(body => {
- var version = JSON.parse(body);
+ let version = JSON.parse(body);
if (VERSION < version.current_version) {
console.log('Using emulatorjs version ' + VERSION + ' but the newest version is ' + version.current_version + '\nopen https://github.com/ethanaobrien/emulatorjs to update');
}
@@ -13,10 +13,10 @@
}
})
}
- var scriptTag = document.getElementsByTagName('script')[0];
+ let scriptTag = document.getElementsByTagName('script')[0];
function loadStyle(file) {
return new Promise(function(resolve, reject) {
- var css = document.createElement('link');
+ let css = document.createElement('link');
css.rel = 'stylesheet';
css.href = function() {
if ('undefined' != typeof EJS_paths && typeof EJS_paths[file] == 'string') {
@@ -34,7 +34,7 @@
}
function loadScript(file) {
return new Promise(function (resolve, reject) {
- var script = document.createElement('script');
+ let script = document.createElement('script');
script.src = function() {
if ('undefined' != typeof EJS_paths && typeof EJS_paths[file] == 'string') {
return EJS_paths[file];
@@ -57,7 +57,7 @@
await loadStyle('emu-css.min.css');
await loadScript('emulator.min.js');
}
- var config = {};
+ let config = {};
config.gameUrl = EJS_gameUrl;
'undefined' != typeof EJS_mameCore && (config.mameCore = EJS_mameCore);
'undefined' != typeof EJS_biosUrl && (config.biosUrl = EJS_biosUrl);
diff --git a/data/v.json b/data/v.json
index 80974f3..a71c0ea 100644
--- a/data/v.json
+++ b/data/v.json
@@ -1,6 +1,6 @@
{
"nes": {
- "version":"23",
+ "version":"24",
"netplay": 1,
"old": {"wasm":1, "asmjs":1 },
"state": 1,
@@ -10,7 +10,7 @@
"oldCores": 1
},
"snes": {
- "version":"20",
+ "version":"21",
"netplay": 1,
"old": {"wasm":1, "asmjs":1 },
"state": 1,
@@ -47,12 +47,13 @@
"oldCores": 1
},
"arcade": {
- "version":"14",
+ "version":"15",
"netplay": 1,
"state": 1,
- "asmjs": 1,
+ "asmjs": 0,
"wasm": 1,
- "newCores": 0,
+ "old": {"wasm":1, "asmjs":1 },
+ "newCores": 1,
"oldCores": 1
},
"fba0.2.97.29": {
@@ -119,7 +120,7 @@
"oldCores": 1
},
"vb": {
- "version":"6",
+ "version":"7",
"netplay": 0,
"old": {"wasm":1, "asmjs":1 },
"state": 1,
@@ -138,7 +139,7 @@
"oldCores": 1
},
"atari5200": {
- "version":"3",
+ "version":"4",
"netplay": 1,
"state": 1,
"asmjs": 1,
@@ -183,7 +184,7 @@
"oldCores": 1
},
"gb": {
- "version":"11",
+ "version":"12",
"netplay": 0,
"state": 1,
"old": {"wasm":0, "asmjs":1 },
@@ -202,7 +203,7 @@
"oldCores": 1
},
"gba": {
- "version":"9",
+ "version":"10",
"netplay": 0,
"state": 1,
"old": {"wasm":0, "asmjs":1 },
@@ -266,7 +267,7 @@
"oldCores": 1
},
"n64": {
- "version":"12",
+ "version":"13",
"netplay": 1,
"state": 1,
"asmjs": 0,
@@ -276,7 +277,7 @@
"oldCores": 1
},
"nds": {
- "version":"15",
+ "version":"16",
"old": {"wasm":1, "asmjs":1 },
"netplay": 0,
"state": 1,
@@ -304,7 +305,7 @@
"oldCores": 1
},
"mame2003": {
- "version":"4",
+ "version":"5",
"old": {"wasm":0, "asmjs":1 },
"netplay": 1,
"state": 1,
diff --git a/data/version.json b/data/version.json
index 2552db4..bb019ac 100644
--- a/data/version.json
+++ b/data/version.json
@@ -1 +1 @@
-{ "current_version": 3 }
+{ "current_version": 23.5 }