(function (t) { "use strict"; function e() { } function n(t) { if (t = t || {}, this.IS_MASTER = t.isMaster || !1, !this.IS_MASTER) throw Error("The DataStore can only be instantiated by the Master"); this.dataStore = {} } function r(t, e) { if (this.IS_MASTER = t && t.isMaster ? t.isMaster : !1, this.IS_SLAVE = !this.IS_MASTER, this.messenger = null, this.subscribers = {}, this.moduleReady = e ? e : !1, this.gameState = "resume", !t || !t.messenger) throw Error("No messenger passed to the Game module instance"); this.messenger = t.messenger, window.addEventListener ? window.addEventListener("message", this._performAction.bind(this), !1) : window.attachEvent && window.attachEvent("onmessage", this._performAction.bind(this)) } function i(t, e) { t = t || {}, this.IS_MASTER = t.isMaster, this.IS_SLAVE = !this.IS_MASTER, this.moduleReady = e ? e : !1, this.messenger = t.messenger, this.data = t.data || null, this._setupMasterEvent() } function o(t, e) { t = t || {}, this.isMaster = t.isMaster, this.isStandalone = t.isStandalone, this.messenger = t.messenger, this.moduleReady = e ? e : !1, this.timeoutAfter = 500, this.timeout = !1, this._callbacks = { pause: !1, resume: !1 } } function a(t, e) { t = t || {}, this.IS_MASTER = t.isMaster, this.isStandalone = t.isStandalone, this.messenger = t.messenger, this.eventTracking = t.eventTracking, this.moduleReady = e ? e : !1, this.events = { GAME_START: "GAME_START", GAME_END: "GAME_END", GAME_PAUSE: "GAME_PAUSE", GAME_CONTINUE: "GAME_CONTINUE", GAME_MUTE: "GAME_MUTE", LEVEL_FAIL: "LEVEL_FAIL", LEVEL_COMPLETE: "LEVEL_COMPLETE" }, this._setupEvents() } function s(t, e) { t = t || {}, this.IS_MASTER = t.isMaster, this.IS_SLAVE = !this.IS_MASTER, this.data = t.data, this.messenger = t.messenger, this.moduleReady = e ? e : !1, this.gamePlayTracking = { started: !1, appid: null, host: null, timestamp: null }, this.timeInGameTracking = { started: !1, appid: null, timestamp: null } } function u(t, e) { t = t || {}, this.IS_MASTER = t.isMaster, this.IS_SLAVE = !this.IS_MASTER, this.moduleReady = e ? e : !1, this.messenger = t.messenger, this.components = t.components, this.data = t.data || null } function c(t) { var e = "string" == typeof t ? p(t) : t; e && (this.type = e.type, this.callbackId = e.callbackId, this.data = e.data) } function p(t) { var e, n, r, i = !1, o = []; if ("string" == typeof t && (o = t.split("|"), "gameapi" === o[0])) { o.shift(), e = o.shift(), r = parseInt(o.shift(), 10), n = o.join("|"); try { i = { type: e, callbackId: r, data: "" !== n ? JSON.parse(n) : "" } } catch (a) { } } return i } // ih5game.setShare({ // desc: "圣诞节来啦!圣诞老人快起床!!~~~~" // }); function l(t) { t = t || {}, this.IS_MASTER = "boolean" == typeof t.isMaster ? t.isMaster : !1, this.IS_SLAVE = !this.IS_MASTER, this.api = t.api ? t.api : {}, this._target = t.target ? t.target : {}, this._callbacks = [], this._channels = [], this.IS_MASTER && t.dataStore && (this.dataStore = t.dataStore), this._setupEventListener() } function d(t, n, o, s, u) { this.version = "0.13.7", this.isReady = !1, this._setRole(), this.__ = {}, this.__.dataStore = this.IS_MASTER ? new t({ isMaster: !0 }) : null, this.__.messenger = new n({ isMaster: this.IS_MASTER, api: this, target: this._getTarget(), dataStore: this.__.dataStore }), this.__.components = new e, this.Branding = new o({ isMaster: this.IS_MASTER, messenger: this.__.messenger, components: this.__.components }, !1), this.__.EventTracking = new s({ isMaster: this.IS_MASTER, data: null, messenger: this.__.messenger }, !1), this.GameBreak = new u({ isMaster: this.IS_MASTER, isStandalone: this.IS_STANDALONE, messenger: this.__.messenger }, !1), this.Game = new r({ isMaster: this.IS_MASTER, messenger: this.__.messenger }, !1), this.Score = new i({ isMaster: this.IS_MASTER, messenger: this.__.messenger }, !1), this.GameEvent = new a({ isMaster: this.IS_MASTER, messenger: this.__.messenger, eventTracking: this.__.EventTracking }, !1) } var h; (function (t) { if ("function" == typeof bootstrap) bootstrap("promise", t); else if ("object" == typeof exports) module.exports = t(); else if ("function" == typeof define && define.amd) define(t); else if ("undefined" != typeof ses) { if (!ses.ok()) return; ses.makeQ = t } else h = t() })(function () { function t(t) { return function () { return X.apply(t, arguments) } } function e(t) { return t === Object(t) } function n(t) { return "[object StopIteration]" === ee(t) || t instanceof W } function r(t, e) { if (q && e.stack && "object" == typeof t && null !== t && t.stack && -1 === t.stack.indexOf(ne)) { for (var n = [], r = e; r; r = r.source) r.stack && n.unshift(r.stack); n.unshift(t.stack); var o = n.join("\n" + ne + "\n"); t.stack = i(o) } } function i(t) { for (var e = t.split("\n"), n = [], r = 0; e.length > r; ++r) { var i = e[r]; s(i) || o(i) || !i || n.push(i) } return n.join("\n") } function o(t) { return -1 !== t.indexOf("(module.js:") || -1 !== t.indexOf("(node.js:") } function a(t) { var e = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t); if (e) return [e[1], Number(e[2])]; var n = /at ([^ ]+):(\d+):(?:\d+)$/.exec(t); if (n) return [n[1], Number(n[2])]; var r = /.*@(.+):(\d+)$/.exec(t); return r ? [r[1], Number(r[2])] : void 0 } function s(t) { var e = a(t); if (!e) return !1; var n = e[0], r = e[1]; return n === F && r >= J && ae >= r } function u() { if (q) try { throw Error() } catch (t) { var e = t.stack.split("\n"), n = e[0].indexOf("@") > 0 ? e[1] : e[2], r = a(n); if (!r) return; return F = r[0], r[1] } } function c(t, e, n) { return function () { return "undefined" != typeof console && "function" == typeof console.warn && console.warn(e + " is deprecated, use " + n + " instead.", Error("").stack), t.apply(t, arguments) } } function p(t) { return y(t) ? t : v(t) ? I(t) : k(t) } function l() { function t(t) { e = t, o.source = t, Q(n, function (e, n) { H(function () { t.promiseDispatch.apply(t, n) }) }, void 0), n = void 0, r = void 0 } var e, n = [], r = [], i = Y(l.prototype), o = Y(f.prototype); if (o.promiseDispatch = function (t, i, o) { var a = K(arguments); n ? (n.push(a), "when" === i && o[1] && r.push(o[1])) : H(function () { e.promiseDispatch.apply(e, a) }) }, o.valueOf = function () { if (n) return o; var t = m(e); return y(t) && (e = t), t }, o.inspect = function () { return e ? e.inspect() : { state: "pending" } }, p.longStackSupport && q) try { throw Error() } catch (a) { o.stack = a.stack.substring(a.stack.indexOf("\n") + 1) } return i.promise = o, i.resolve = function (n) { e || t(p(n)) }, i.fulfill = function (n) { e || t(k(n)) }, i.reject = function (n) { e || t(T(n)) }, i.notify = function (t) { e || Q(r, function (e, n) { H(function () { n(t) }) }, void 0) }, i } function d(t) { if ("function" != typeof t) throw new TypeError("resolver must be a function."); var e = l(); try { t(e.resolve, e.reject, e.notify) } catch (n) { e.reject(n) } return e.promise } function h(t) { return d(function (e, n) { for (var r = 0, i = t.length; i > r; r++) p(t[r]).then(e, n) }) } function f(t, e, n) { void 0 === e && (e = function (t) { return T(Error("Promise does not support operation: " + t)) }), void 0 === n && (n = function () { return { state: "unknown" } }); var r = Y(f.prototype); if (r.promiseDispatch = function (n, i, o) { var a; try { a = t[i] ? t[i].apply(r, o) : e.call(r, i, o) } catch (s) { a = T(s) } n && n(a) }, r.inspect = n, n) { var i = n(); "rejected" === i.state && (r.exception = i.reason), r.valueOf = function () { var t = n(); return "pending" === t.state || "rejected" === t.state ? r : t.value } } return r } function g(t, e, n, r) { return p(t).then(e, n, r) } function m(t) { if (y(t)) { var e = t.inspect(); if ("fulfilled" === e.state) return e.value } return t } function y(t) { return e(t) && "function" == typeof t.promiseDispatch && "function" == typeof t.inspect } function v(t) { return e(t) && "function" == typeof t.then } function _(t) { return y(t) && "pending" === t.inspect().state } function S(t) { return !y(t) || "fulfilled" === t.inspect().state } function w(t) { return y(t) && "rejected" === t.inspect().state } function b() { re.length = 0, ie.length = 0, oe || (oe = !0) } function A(t, e) { oe && (ie.push(t), e && e.stack !== void 0 ? re.push(e.stack) : re.push("(no stack) " + e)) } function E(t) { if (oe) { var e = $(ie, t); -1 !== e && (ie.splice(e, 1), re.splice(e, 1)) } } function T(t) { var e = f({ when: function (e) { return e && E(this), e ? e(t) : this } }, function () { return this }, function () { return { state: "rejected", reason: t } }); return A(e, t), e } function k(t) { return f({ when: function () { return t }, get: function (e) { return t[e] }, set: function (e, n) { t[e] = n }, "delete": function (e) { delete t[e] }, post: function (e, n) { return null === e || void 0 === e ? t.apply(void 0, n) : t[e].apply(t, n) }, apply: function (e, n) { return t.apply(e, n) }, keys: function () { return te(t) } }, void 0, function () { return { state: "fulfilled", value: t } }) } function I(t) { var e = l(); return H(function () { try { t.then(e.resolve, e.reject, e.notify) } catch (n) { e.reject(n) } }), e.promise } function M(t) { return f({ isDef: function () { } }, function (e, n) { return L(t, e, n) }, function () { return p(t).inspect() }) } function R(t, e, n) { return p(t).spread(e, n) } function C(t) { return function () { function e(t, e) { var a; if ("undefined" == typeof StopIteration) { try { a = r[t](e) } catch (s) { return T(s) } return a.done ? a.value : g(a.value, i, o) } try { a = r[t](e) } catch (s) { return n(s) ? s.value : T(s) } return g(a, i, o) } var r = t.apply(this, arguments), i = e.bind(e, "next"), o = e.bind(e, "throw"); return i() } } function P(t) { p.done(p.async(t)()) } function O(t) { throw new W(t) } function x(t) { return function () { return R([this, G(arguments)], function (e, n) { return t.apply(e, n) }) } } function L(t, e, n) { return p(t).dispatch(e, n) } function G(t) { return g(t, function (t) { var e = 0, n = l(); return Q(t, function (r, i, o) { var a; y(i) && "fulfilled" === (a = i.inspect()).state ? t[o] = a.value : (++e, g(i, function (r) { t[o] = r, 0 === --e && n.resolve(t) }, n.reject, function (t) { n.notify({ index: o, value: t }) })) }, void 0), 0 === e && n.resolve(t), n.promise }) } function N(t) { return g(t, function (t) { return t = z(t, p), g(G(z(t, function (t) { return g(t, U, U) })), function () { return t }) }) } function j(t) { return p(t).allSettled() } function D(t, e) { return p(t).then(void 0, void 0, e) } function B(t, e) { return p(t).nodeify(e) } var q = !1; try { throw Error() } catch (V) { q = !!V.stack } var F, W, J = u(), U = function () { }, H = function () { function t() { for (; e.next;) { e = e.next; var n = e.task; e.task = void 0; var i = e.domain; i && (e.domain = void 0, i.enter()); try { n() } catch (a) { if (o) throw i && i.exit(), setTimeout(t, 0), i && i.enter(), a; setTimeout(function () { throw a }, 0) } i && i.exit() } r = !1 } var e = { task: void 0, next: null }, n = e, r = !1, i = void 0, o = !1; if (H = function (t) { n = n.next = { task: t, domain: o && process.domain, next: null }, r || (r = !0, i()) }, "undefined" != typeof process && process.nextTick) o = !0, i = function () { process.nextTick(t) }; else if ("function" == typeof setImmediate) i = "undefined" != typeof window ? setImmediate.bind(window, t) : function () { setImmediate(t) }; else if ("undefined" != typeof MessageChannel) { var a = new MessageChannel; a.port1.onmessage = function () { i = s, a.port1.onmessage = t, t() }; var s = function () { a.port2.postMessage(0) }; i = function () { setTimeout(t, 0), s() } } else i = function () { setTimeout(t, 0) }; return H }(), X = Function.call, K = t(Array.prototype.slice), Q = t(Array.prototype.reduce || function (t, e) { var n = 0, r = this.length; if (1 === arguments.length) for (; ;) { if (n in this) { e = this[n++]; break } if (++n >= r) throw new TypeError } for (; r > n; n++) n in this && (e = t(e, this[n], n)); return e }), $ = t(Array.prototype.indexOf || function (t) { for (var e = 0; this.length > e; e++) if (this[e] === t) return e; return -1 }), z = t(Array.prototype.map || function (t, e) { var n = this, r = []; return Q(n, function (i, o, a) { r.push(t.call(e, o, a, n)) }, void 0), r }), Y = Object.create || function (t) { function e() { } return e.prototype = t, new e }, Z = t(Object.prototype.hasOwnProperty), te = Object.keys || function (t) { var e = []; for (var n in t) Z(t, n) && e.push(n); return e }, ee = t(Object.prototype.toString); W = "undefined" != typeof ReturnValue ? ReturnValue : function (t) { this.value = t }; var ne = "From previous event:"; p.resolve = p, p.nextTick = H, p.longStackSupport = !1, p.defer = l, l.prototype.makeNodeResolver = function () { var t = this; return function (e, n) { e ? t.reject(e) : arguments.length > 2 ? t.resolve(K(arguments, 1)) : t.resolve(n) } }, p.Promise = d, p.promise = d, d.race = h, d.all = G, d.reject = T, d.resolve = p, p.passByCopy = function (t) { return t }, f.prototype.passByCopy = function () { return this }, p.join = function (t, e) { return p(t).join(e) }, f.prototype.join = function (t) { return p([this, t]).spread(function (t, e) { if (t === e) return t; throw Error("Can't join: not the same: " + t + " " + e) }) }, p.race = h, f.prototype.race = function () { return this.then(p.race) }, p.makePromise = f, f.prototype.toString = function () { return "[object Promise]" }, f.prototype.then = function (t, e, n) { function i(e) { try { return "function" == typeof t ? t(e) : e } catch (n) { return T(n) } } function o(t) { if ("function" == typeof e) { r(t, s); try { return e(t) } catch (n) { return T(n) } } return T(t) } function a(t) { return "function" == typeof n ? n(t) : t } var s = this, u = l(), c = !1; return H(function () { s.promiseDispatch(function (t) { c || (c = !0, u.resolve(i(t))) }, "when", [ function (t) { c || (c = !0, u.resolve(o(t))) } ]) }), s.promiseDispatch(void 0, "when", [void 0, function (t) { var e, n = !1; try { e = a(t) } catch (r) { if (n = !0, !p.onerror) throw r; p.onerror(r) } n || u.notify(e) } ]), u.promise }, p.when = g, f.prototype.thenResolve = function (t) { return this.then(function () { return t }) }, p.thenResolve = function (t, e) { return p(t).thenResolve(e) }, f.prototype.thenReject = function (t) { return this.then(function () { throw t }) }, p.thenReject = function (t, e) { return p(t).thenReject(e) }, p.nearer = m, p.isPromise = y, p.isPromiseAlike = v, p.isPending = _, f.prototype.isPending = function () { return "pending" === this.inspect().state }, p.isFulfilled = S, f.prototype.isFulfilled = function () { return "fulfilled" === this.inspect().state }, p.isRejected = w, f.prototype.isRejected = function () { return "rejected" === this.inspect().state }; var re = [], ie = [], oe = !0; p.resetUnhandledRejections = b, p.getUnhandledReasons = function () { return re.slice() }, p.stopUnhandledRejectionTracking = function () { b(), oe = !1 }, b(), p.reject = T, p.fulfill = k, p.master = M, p.spread = R, f.prototype.spread = function (t, e) { return this.all().then(function (e) { return t.apply(void 0, e) }, e) }, p.async = C, p.spawn = P, p["return"] = O, p.promised = x, p.dispatch = L, f.prototype.dispatch = function (t, e) { var n = this, r = l(); return H(function () { n.promiseDispatch(r.resolve, t, e) }), r.promise }, p.get = function (t, e) { return p(t).dispatch("get", [e]) }, f.prototype.get = function (t) { return this.dispatch("get", [t]) }, p.set = function (t, e, n) { return p(t).dispatch("set", [e, n]) }, f.prototype.set = function (t, e) { return this.dispatch("set", [t, e]) }, p.del = p["delete"] = function (t, e) { return p(t).dispatch("delete", [e]) }, f.prototype.del = f.prototype["delete"] = function (t) { return this.dispatch("delete", [t]) }, p.mapply = p.post = function (t, e, n) { return p(t).dispatch("post", [e, n]) }, f.prototype.mapply = f.prototype.post = function (t, e) { return this.dispatch("post", [t, e]) }, p.send = p.mcall = p.invoke = function (t, e) { return p(t).dispatch("post", [e, K(arguments, 2)]) }, f.prototype.send = f.prototype.mcall = f.prototype.invoke = function (t) { return this.dispatch("post", [t, K(arguments, 1)]) }, p.fapply = function (t, e) { return p(t).dispatch("apply", [void 0, e]) }, f.prototype.fapply = function (t) { return this.dispatch("apply", [void 0, t]) }, p["try"] = p.fcall = function (t) { return p(t).dispatch("apply", [void 0, K(arguments, 1)]) }, f.prototype.fcall = function () { return this.dispatch("apply", [void 0, K(arguments)]) }, p.fbind = function (t) { var e = p(t), n = K(arguments, 1); return function () { return e.dispatch("apply", [this, n.concat(K(arguments))]) } }, f.prototype.fbind = function () { var t = this, e = K(arguments); return function () { return t.dispatch("apply", [this, e.concat(K(arguments))]) } }, p.keys = function (t) { return p(t).dispatch("keys", []) }, f.prototype.keys = function () { return this.dispatch("keys", []) }, p.all = G, f.prototype.all = function () { return G(this) }, p.allResolved = c(N, "allResolved", "allSettled"), f.prototype.allResolved = function () { return N(this) }, p.allSettled = j, f.prototype.allSettled = function () { return this.then(function (t) { return G(z(t, function (t) { function e() { return t.inspect() } return t = p(t), t.then(e, e) })) }) }, p.fail = p["catch"] = function (t, e) { return p(t).then(void 0, e) }, f.prototype.fail = f.prototype["catch"] = function (t) { return this.then(void 0, t) }, p.progress = D, f.prototype.progress = function (t) { return this.then(void 0, void 0, t) }, p.fin = p["finally"] = function (t, e) { return p(t)["finally"](e) }, f.prototype.fin = f.prototype["finally"] = function (t) { return t = p(t), this.then(function (e) { return t.fcall().then(function () { return e }) }, function (e) { return t.fcall().then(function () { throw e }) }) }, p.done = function (t, e, n, r) { return p(t).done(e, n, r) }, f.prototype.done = function (t, e, n) { var i = function (t) { H(function () { if (r(t, o), !p.onerror) throw t; p.onerror(t) }) }, o = t || e || n ? this.then(t, e, n) : this; "object" == typeof process && process && process.domain && (i = process.domain.bind(i)), o.then(void 0, i) }, p.timeout = function (t, e, n) { return p(t).timeout(e, n) }, f.prototype.timeout = function (t, e) { var n = l(), r = setTimeout(function () { n.reject(Error(e || "Timed out after " + t + " ms")) }, t); return this.then(function (t) { clearTimeout(r), n.resolve(t) }, function (t) { clearTimeout(r), n.reject(t) }, n.notify), n.promise }, p.delay = function (t, e) { return void 0 === e && (e = t, t = void 0), p(t).delay(e) }, f.prototype.delay = function (t) { return this.then(function (e) { var n = l(); return setTimeout(function () { n.resolve(e) }, t), n.promise }) }, p.nfapply = function (t, e) { return p(t).nfapply(e) }, f.prototype.nfapply = function (t) { var e = l(), n = K(t); return n.push(e.makeNodeResolver()), this.fapply(n).fail(e.reject), e.promise }, p.nfcall = function (t) { var e = K(arguments, 1); return p(t).nfapply(e) }, f.prototype.nfcall = function () { var t = K(arguments), e = l(); return t.push(e.makeNodeResolver()), this.fapply(t).fail(e.reject), e.promise }, p.nfbind = p.denodeify = function (t) { var e = K(arguments, 1); return function () { var n = e.concat(K(arguments)), r = l(); return n.push(r.makeNodeResolver()), p(t).fapply(n).fail(r.reject), r.promise } }, f.prototype.nfbind = f.prototype.denodeify = function () { var t = K(arguments); return t.unshift(this), p.denodeify.apply(void 0, t) }, p.nbind = function (t, e) { var n = K(arguments, 2); return function () { function r() { return t.apply(e, arguments) } var i = n.concat(K(arguments)), o = l(); return i.push(o.makeNodeResolver()), p(r).fapply(i).fail(o.reject), o.promise } }, f.prototype.nbind = function () { var t = K(arguments, 0); return t.unshift(this), p.nbind.apply(void 0, t) }, p.nmapply = p.npost = function (t, e, n) { return p(t).npost(e, n) }, f.prototype.nmapply = f.prototype.npost = function (t, e) { var n = K(e || []), r = l(); return n.push(r.makeNodeResolver()), this.dispatch("post", [t, n]).fail(r.reject), r.promise }, p.nsend = p.nmcall = p.ninvoke = function (t, e) { var n = K(arguments, 2), r = l(); return n.push(r.makeNodeResolver()), p(t).dispatch("post", [e, n]).fail(r.reject), r.promise }, f.prototype.nsend = f.prototype.nmcall = f.prototype.ninvoke = function (t) { var e = K(arguments, 1), n = l(); return e.push(n.makeNodeResolver()), this.dispatch("post", [t, e]).fail(n.reject), n.promise }, p.nodeify = B, f.prototype.nodeify = function (t) { return t ? (this.then(function (e) { H(function () { t(null, e) }) }, function (e) { H(function () { t(e) }) }), void 0) : this }; var ae = u(); return p }), function (t) { var e = "Promise" in t && "cast" in t.Promise && "resolve" in t.Promise && "reject" in t.Promise && "all" in t.Promise && "race" in t.Promise && "spread" in t.Promise; e || (t.Promise = h.promise, t.Promise.all = h.all, t.Promise.timeout = h.timeout, h.stopUnhandledRejectionTracking()) }(t !== void 0 ? t : this); var f = { timeout: 3e3 }; f.getGameConfig = function () { var t = h.defer(); return SpilGames(["JSLib"], function (e) { var n = e.get("current.game.integration.info"); n ? t.resolve(n) : t.reject(Error("No data retrieved from JSLib")) }), t.promise.timeout(this.timeout) }, f.getBrandingConfig = function (t) { var e = h.defer(), n = "configs", r = t.portal.siteId, i = t.portal.channelId, o = t.portal.applicationId; return SpilGames(["Net", "JSLib"], function (t, a) { t.send({ url: [n, i, r, o].join("/"), type: "GET", dataType: "JSON" }, function (t) { if (t && t.configar) window.postMessage(new c({ type: "success", callbackId: null, data: "log.configar.getBranding.success" }), "*"), e.resolve(t.configar); else { var n = {}; try { n = a.get("configar.data.cached") || n } catch (r) { } e.reject(n) } }) }), e.promise.timeout(this.timeout) }; var g = {}; g.argsToArray = function (t) { return t ? Array.prototype.slice.apply(t) : [] }, g.isA10 = function () { return /4399.com/.test(window.location.host) }, g.disableKeys = function (t) { var e = t.keyCode; (8 === e || 9 === e || e >= 32 && 40 >= e || 46 === e) && t.preventDefault() }, g.trackGA = function () { }, g.getRole = function () { var t = "function" == typeof window.SpilGames, e = window.self !== window.top, n = null; if (g.isA10()) return window.onkeydown = this.disableKeys, { IS_MASTER: !0, IS_SLAVE: !0, IS_STANDALONE: !0 }; if (t) { var r = document.getElementById("#iframegame"); switch (r) { case "null": n = { IS_MASTER: !0, IS_SLAVE: !0, IS_STANDALONE: !1 }; break; default: n = { IS_MASTER: !0, IS_SLAVE: !1, IS_STANDALONE: !1 } } } else e ? (window.onkeydown = this.disableKeys, this.trackGA(), n = { IS_MASTER: !1, IS_SLAVE: !0, IS_STANDALONE: !1 }) : (window.onkeydown = this.disableKeys, this.trackGA(), n = { IS_MASTER: !0, IS_SLAVE: !0, IS_STANDALONE: !0 }); return n }, g.callConfigar = function (t, e) { var n, r, i = t.site || 500, o = t.channel || 100, a = t.id || null; window.XDomainRequest ? (n = new XDomainRequest, n.onload = function () { e(200, n.responseText) }, n.onerror = function () { e(404, null) }, n.onprogress = function () { }) : window.XMLHttpRequest ? (n = new XMLHttpRequest, n.onreadystatechange = function () { 4 === n.readyState && e(n.status, n.responseText) }) : window.ActiveXObject && (n = new ActiveXObject("Microsoft.XMLHTTP"), n.onreadystatechange = function () { 4 === n.readyState && e(n.status, n.responseText) }), a && (r = ["configs", o, i, a].join("/"), n.open("GET", r, !0), n.timeout = 3e3, n.ontimeout = function () { e(404, null) }, n.send()) }, g.isWrapped = function () { return void 0 !== (window.PhoneGap || window.cordova || window.Cordova) }, g.isArray = Array.isArray || function (t) { return "[object Array]" === Object.prototype.toString.call(t) }, g._getQueryString = function () { return window.location.search }, g._getPortalHost = function () { return window && window.location && window.location.hostname ? window.location.hostname : "unknown" }, g.validateSchema = function (t, e) { for (var n in e) if (e.hasOwnProperty(n)) { if (!t.hasOwnProperty(n)) return { error: "Wrong argument passed: " + n }; if (t.hasOwnProperty(n)) { var r = "object" == typeof t[n] ? t[n].type : t[n]; if (e[n].constructor.name !== r) return { error: "Wrong value type for " + n + ": expected " + t[n] + ", got " + e[n].constructor.name }; var i = t[n] && t[n].values || []; if (-1 === i.indexOf(e[n])) return { error: "Wrong value for " + n + ": expected " + i.join(" or ") + ", got " + e[n] } } } return { error: !1 } }; var m = {}; m.getGameConfig = function () { return f.getGameConfig().catch(function () { return m.getLocalConfig() }) }, m.getBrandingConfig = function (t) { return new Promise(function (e) { return f.getBrandingConfig(t).then(e, function (t) { e(t), window.postMessage(new c({ type: "warning", callbackId: null, data: "log.configar.getBranding.failure" }), "*") }) }) }, m.getLocalConfig = function (t) { t = t && Object.keys(t).length ? t : { portal: {}, game: {}, branding: {} }; var e = { game: { applicationId: t.portal.applicationId || "0", contentarId: t.portal.contentarId || "0", info: t.game.info || {}, settings: t.game.objectSettings || {}, features: { achievements: t.game.achievements || !1, gameSidePanel: t.game.gameSidePanel || !1, highscores: t.game.highscores || !1, recommendedGames: t.game.recommendedGames || !1 } }, user: { authenticated: t.portal.authenticated || !1, username: t.portal.username || "" }, portal: { host: g._getPortalHost(), siteId: t.portal.siteId || 0, channelId: t.portal.channelId || 0, applicationId: t.portal.applicationId || "0" }, branding: t.branding || {} }; return e.branding.logo = e.branding.logo || {}, e.branding.logo.url = e.branding.logo.url || !1, e.branding.logo.image = e.branding.logo.image || !1, e }, m.setupStandaloneMode = function (t, e) { var n = {}, r = { configar: { branding: { main: { label: "main", image: "space.png", url: "#", style: "", width: "202", height: "50", mime: "image/png", type: "png", handler: "newTab", blacklisted: !0 }, logo: { label: "logo", image: "space.png", url: "#", style: "", width: "202", height: "50", mime: "image/png", type: "png", handler: "newTab", blacklisted: !1 }, more_games: { label: "more_games", image: null, url: "#", style: "", width: null, height: null, mime: null, type: null, handler: "newTab", blacklisted: !1 }, splash_screen: { label: "splash_screen", image: "place_holder_string", url: "#", style: "", width: "0", height: "0", mime: "image/png", type: "png", handler: "newTab", blacklisted: !1 } } } }; n.JSLib = { memory: {}, _channels: {}, get: function (t) { return this.memory[t] ? this.memory[t] : !1 }, set: function (t, e) { return this.memory[t] = e, e }, publish: function (t, e) { this._channels[t] && this._channels[t].forEach(function (t) { try { t.fn.call(this, e) } catch (n) { } }) }, subscribe: function (t, e) { if ("function" != typeof e) throw Error("Callback has to be a function"); if ("string" != typeof t) throw Error("Channel name has to be a string"); this._channels[t] || (this._channels[t] = []), this._channels[t].push({ fn: e }) } }, n.Net = { send: function (t, e) { e.call(this, {}) } }, window.SpilGamesBootstrap = [], window.SpilGames = function () { var t = arguments; if (t[0] && "string" == typeof t[0]) n.JSLib.publish(t[0], t[1] || null); else if (t[0] && t[0] instanceof Array) { var e, r, i = []; for (e = 0, r = t[0].length; r > e; e++) i.push(n[t[0][e]]); t[1].apply(this, i) } }, t && t.id ? e.call(this, { branding: r.configar.branding }) : e.call(this, { branding: r.configar.branding }) }, m.getCachedConfig = function () { }, e.prototype.newTab = function (t) { try { /*ih5game.more();*/ parent.moregame(); } catch (e) { } }, e.prototype.displayOnTop = function (t) { if (t === void 0 || t.url === void 0 || "string" != typeof t.url || t.action === void 0 || "function" != typeof t.action) return t.callback !== void 0 || "function" == typeof t.callback ? (t.callback(), void 0) : void 0; var e = document.createElement("div"), n = t.url, r = t.action, i = t.callback; return e.setAttribute("id", "spilgames-splash-screen-sample"), document.body.appendChild(e), e.style.left = "0", e.style.top = "0", e.style.width = "100%", e.style.height = "100%", e.style.position = "absolute", e.style.zIndex = "10000", e.onclick = r, n && (e.style.background = "url('" + n + "') center center no-repeat #FFF"), window.setTimeout(function () { var t = document.getElementById("spilgames-splash-screen-sample"); t.parentNode.removeChild(t), i && i() }, 2e3), e }, n.prototype.get = function (t) { for (var e = this.dataStore, n = t.split("."), r = n.length, i = 0; r - 1 > i; i++) { if (!e[n[i]]) return null; e = e[n[i]] } return e[n[r - 1]] || null }, n.prototype.put = function (t, e) { for (var n = this.dataStore, r = t.split("."), i = r.length, o = 0; i - 1 > o; o++) { var a = r[o]; n[a] || (n[a] = {}), n = n[a] } n[r[i - 1]] = e }, n.prototype.set = function (t, e) { this.put(t, e); var n = Date.parse(new Date); return this.notify({ type: "new", key: t, current: e, previous: null, timestamp: n }), e }, n.prototype.update = function (t, e) { var n, r, i = null; return this.get(t) ? (n = "update", i = this.get(t)) : n = "new", this.put(t, e), r = Date.parse(new Date), this.notify({ type: n, key: t, current: e, previous: i, timestamp: r }), e }, n.prototype.remove = function (t) { if (this.get(t)) { var e, n = this.get(t); return this.put(t, null), e = Date.parse(new Date), this.notify({ type: "remove", key: t, current: null, previous: n, timestamp: e }), !0 } return !1 }, n.prototype._setCache = function (t) { this.dataStore = t }, n.prototype._getCache = function () { return this.dataStore }, n.prototype.notify = function (t) { if (this.IS_MASTER) { var e = new c({ type: "datachange", callbackId: null, data: t }).encode(); return window.postMessage(e, "*"), e } }, r.prototype._performAction = function (t) { var e = new c(t.data || {}), n = this.messenger, r = this.subscribers || {}; if (e && e.type && e.data) switch (e.type) { case "gameEvent": e.data[0] && r[e.data[0]] && r[e.data[0]].length > 0 ? r[e.data[0]].forEach(function (t) { t.call(this), n._postMessage([e.data[0], { origin: "slave" }, null ], null, "gameState") }) : e.data[0] && e.data[1] && "slave" === e.data[1].origin && "function" == typeof SWFtoJS && SWFtoJS({ call: e.data[0], params: {} }); break; case "gameState": e.data[0] && e.data[1] && "slave" === e.data[1].origin && (this.gameState = e.data[0]) } }, r.prototype.on = function (t, e) { this.IS_SLAVE && (this.subscribers[t] || (this.subscribers[t] = []), this.subscribers[t].push(e)) }, r.prototype.emit = function (t) { if (!this.IS_MASTER) throw Error("Only the master environment can emit game events"); if (!this.moduleReady) throw Error("This method cannot be called before the API is loaded"); if (t === this.gameState) throw Error("The game is already in state: `" + t + "`"); this.messenger._postMessage([t, { origin: "master" }, null ], null, "gameEvent") }, i.prototype._setupMasterEvent = function () { this.IS_MASTER && this.messenger.subscribe("gameapi.score", this.submit, this) }, i.prototype.submit = function (t) { if (!this.moduleReady) throw Error("This method cannot be called before the API is loaded"); return this.IS_MASTER ? "function" == typeof SWFtoJS && SWFtoJS({ call: "UPDATE_HIGHSCORE", params: { score: t } }) : (this.messenger._postMessage(t, void 0, "gameapi.score"), this.messenger._postMessage(["log.gameapi.score.submit", { origin: "slave", score: t }, null ], null, "log")), { success: !0, value: t } }, o.prototype.init = function () { this._setupEvents() }, o.prototype._setupEvents = function () { var t = this.messenger; this.isMaster ? (SpilGames(["JSLib"], function (e) { e.subscribe("ad.request.accepted", function (e) { !0 === e && (SpilGames("game.ad.accepted", !0), t._postMessage(!0, void 0, "ad.request.accepted")) }), e.subscribe("ad.complete", function () { t._postMessage("", "", "ad.complete") }) }), this.messenger.subscribe("game.ad.request", this._triggerAd, this)) : (this.messenger.subscribe("ad.request.accepted", this._onAdAccepted, this), this.messenger.subscribe("ad.complete", this._onAdCompleted, this)) }, o.prototype._triggerAd = function () { SpilGames("game.ad.request") }, o.prototype._runCallback = function (t) { this._callbacks[t] && (this._callbacks[t](), this._callbacks[t] = !1) }, o.prototype.request = function (t, e) { var n = this; if ("function" != typeof t) throw Error("pauseGame argument should be a function"); if ("function" != typeof e) throw Error("resumeGame argument should be a function"); if (!this.moduleReady) throw Error("This method cannot be called before the API is loaded"); this._callbacks.pause = t, this._callbacks.resume = e, this.messenger._postMessage(void 0, void 0, "game.ad.request"), this.isMaster || this.messenger._postMessage(["log.gameapi.ad.requested", { origin: "slave" }, null ], null, "log"), this.timeout = setTimeout(function () { n._requestTimeout() }, this.timeoutAfter) }, o.prototype._onAdAccepted = function (t) { var e = this.messenger; this.timeout && clearTimeout(this.timeout), !this.isMaster && t && (e._postMessage(["log.gameapi.ad.start", { origin: "slave" }, null ], null, "log"), this._runCallback("pause")) }, o.prototype._onAdCompleted = function () { var t = this.messenger; this.isMaster || t._postMessage(["log.gameapi.ad.complete", { origin: "slave" }, null ], null, "log"), this._runCallback("resume") }, o.prototype._requestTimeout = function () { this._onAdCompleted() }, a.prototype._setupEvents = function () { this.IS_MASTER && this.messenger.subscribe("gameapi.gameevent", this.emit, this) }, a.prototype._validateEvent = function (t) { var e = !1; return this.events[t] && this.events[t] !== void 0 && (e = !0), e }, a.prototype.emit = function (t, e) { if (!this.moduleReady) throw Error("This method cannot be called before the API is loaded"); this._validateEvent(t) ? this.IS_MASTER ? "function" == typeof SWFtoJS && SWFtoJS({ call: t }) : (this.messenger._postMessage(t, void 0, "gameapi.gameevent"), this.messenger._postMessage(["log.gameapi.gameevent.emit", { origin: "slave", evt: t }, null ], null, "log")) : this.IS_MASTER || this.messenger._postMessage(["log.gameapi.gameevent.emit", { origin: "slave" }, null ], null, "log") }, s.prototype.init = function (t) { t = t || {}, this.data = t.data || this.data; var e = this.data && this.data.game && this.data.game.applicationId ? this.data.game.applicationId : null, n = new Date, r = window.location.hostname; (this.IS_SLAVE || g.isWrapped()) && this.startInternalTracking(e, n, r) }, s.prototype._createEventObject = function (t, e, n) { return { eventCategory: t, eventAction: e, properties: n } }, s.prototype._sendSETEvent = function (t, e, n) { return this.messenger && (this.IS_SLAVE || g.isWrapped()) && this.messenger.post("tracker.event." + t, e, n), e }, s.prototype.trackGamePlay = function (t) { if (!this.gamePlayTracking.started) return !1; var e = this.gamePlayTracking.gid, n = this.gamePlayTracking.timestamp, r = this.gamePlayTracking.host, i = this._createEventObject("game", "gameplay", { applicationId: e, start: n, host: r }); return this._sendSETEvent("express", i, t), i }, s.prototype.trackTimeInGame = function (t) { if (!this.timeInGameTracking.started) return !1; var e = this.timeInGameTracking.gid, n = this.timeInGameTracking.timestamp, r = this._createEventObject("game", "heartbeat", { applicationId: e, start: n }); return this._sendSETEvent("express", r, t), r }, s.prototype.startInternalTracking = function (t, e, n) { var r = this, i = 6e4, o = function (t) { if (!t) throw "Could not save the time in game" }; return this.moduleReady ? t ? (this.gamePlayTracking.gid = t, this.gamePlayTracking.timestamp = Date.parse(e), this.gamePlayTracking.host = n, this.gamePlayTracking.started = !0, this.timeInGameTracking.gid = t, this.timeInGameTracking.timestamp = Date.parse(e), this.timeInGameTracking.started = !0, this.trackGamePlay(function (t) { if (!t) throw "Could not save the game play" }), this.trackTimeInGame(o), setInterval(function () { r.trackTimeInGame(o) }, i), this.gamePlayTracking.started && this.timeInGameTracking.started) : { error: "No application ID defined for this game" } : { error: "This method cannot be called before the API is loaded" } }, u.prototype.init = function (t) { t = t || {}, this.data = t.data || this.data }, u.prototype.getLogo = function (t) { if (!this.moduleReady) return { error: "This method cannot be called before the API is loaded" }; var e = this.IS_MASTER ? "master" : "slave"; this.messenger._postMessage(["log.branding.getlogo", { origin: e }, null ], null, "log"); var n, r, i = { type: { type: "String", values: ["png"] }, width: "Number", height: "Number" }; return n = this._getLink("logo"), t && "object" == typeof t && (r = g.validateSchema(i, t), r.error && (n.error = r.error)), n }, u.prototype.getLink = function (t) { if (!t) return { error: "No link identifier provided" }; var e = this.listLinks(); if (-1 !== e.indexOf(t)) { var n = this.IS_MASTER ? "master" : "slave"; return this.messenger._postMessage(["log.branding.getlink", { origin: n, linkName: t }, null ], null, "log"), this._getLink(t) } return { error: "Invalid option: '" + t + "'", action: function () { } } }, u.prototype._getLink = function (t) { if (!t) return { error: "No link identifier provided" }; var e = this.data && this.data.branding ? this.data.branding : {}; return e && e[t] ? { linkName: t, image: e[t].image || !1, action: this._executeHandler.bind(this, t) } : { error: "Invalid option: '" + t + "'", action: function () { } } }, u.prototype._getGMLink = function (t) { var e = null; if (!t) return { error: "No link identifier provided" }; var n = this.data && this.data.branding ? this.data.branding : {}; return n && n[t] ? (e = this._tagUrl(n[t].url, t), { linkName: t, url: e }) : { error: "Invalid option: '" + t + "'", url: null } }, u.prototype.getLinks = function () { var t = {}, e = this.listLinks(); if (0 === e.length) t = { more_games: { action: function () { } } }; else for (var n = 0; e.length > n; n++) { var r = e[n]; t[r] = this._getLink(r) } return t }, u.prototype._executeHandler = function (t) { var e = this.data && this.data.branding ? this.data.branding : {}, n = e[t], r = n.handler, i = this._tagUrl(n.url, t); if (n.url && n.url.length > 0 && r && this.components[r]) { var o = this.IS_MASTER ? "master" : "slave"; return this.messenger._postMessage(["log.branding.linkAction", { origin: o, linkName: t }, null ], null, "log"), this.components[r]({ url: i }) } return function () { } }, u.prototype.listLinks = function () { var t = [], e = this.data && this.data.branding ? this.data.branding : {}, n = Object.keys(e); return t = n.filter(function (t) { return !e[t].blacklisted }) }, u.prototype.getSplashScreen = function () { var t, e = this.IS_MASTER ? "master" : "slave"; if (this.data && this.data.branding && this.data.branding.splash_screen) { var n = !0; this.data.branding.splash_screen.image || this.data.branding.splash_screen.url || (n = !1), t = { show: n, action: this._getLink("splash_screen").action || function () { } } } else t = { show: !0, action: function () { } }; return this.messenger._postMessage(["log.branding.splashScreen", { origin: e }, null ], null, "log"), t }, u.prototype.displaySplashScreen = function (t) { if ("function" != typeof t) throw Error("argument passed to displaySplashScreen method should be a function"); var e = this.IS_MASTER ? "master" : "slave", n = this._getLink("logo").image; n && this.getSplashScreen().show ? ("master" !== e && this.messenger._postMessage(["log.branding.displaySplashScreen", { origin: e }, null ], null, "log"), this.components.displayOnTop({ url: n, action: this.getSplashScreen().action, callback: t })) : t() }, u.prototype._tagUrl = function (t, e) { var n, r, i, o = this.data && this.data.portal ? this.data.portal : {}, a = this.data && this.data.game ? this.data.game : {}, s = parseInt(o.siteId, 10); if ("string" != typeof t) throw Error("No url specified"); return n = "string" == typeof e ? e : "logo", r = "brandedgames_" + (s > 0 && 500 > s ? "internal" : "external"), i = ["utm_medium=" + r, "utm_campaign=" + a.applicationId, "utm_source=" + o.host, "utm_content=" + n].join("&"), t += t.indexOf("?") > -1 ? "&" : "?", t + i }, c.prototype.encode = function () { var t = ["gameapi", this.type, this.callbackId, this.data ? JSON.stringify(this.data) : ""].join("|"); return t }, l.prototype._postMessage = function (t, e, n) { var r, i; r = g.isArray(t) && "function" == typeof t[t.length - 1] ? this._callbacks.push(t.pop()) - 1 : e, i = new c({ type: n || "jslib", callbackId: r, data: t }).encode(), this._target.postMessage(i, "*") }, l.prototype._callJSLib = function () { SpilGames.apply(SpilGames, g.argsToArray(arguments)) }, l.prototype._setupEventListener = function () { window.addEventListener ? window.addEventListener("message", this._handleMessage.bind(this), !1) : window.attachEvent && window.attachEvent("onmessage", this._handleMessage.bind(this)) }, l.prototype._handleMessage = function (t) { var e, n, r, i, o = this, a = new c(t.data); if (a) if (e = a.type, n = a.callbackId, r = a.data, i = this._callbacks[n] || !1, this.IS_MASTER) switch (e) { case "jslib": "Array" === r.constructor.name && r.push(function (t) { o._postMessage(t, n) }), this._callJSLib.apply(this, r); break; case "ugapi": this._handleUGARequest(t); break; case "datachange": this._postMessage(r, null, "datachange"); break; default: this.publish(e, r) } else this.IS_SLAVE && ("function" == typeof i ? (delete this._callbacks[n], i(r)) : "datachange" === e || "jslib" !== e && this.publish(e, r)); return !1 }, l.prototype._handleUGARequest = function (t) { var e, n, r, i = this, o = new c(t.data); if (o) switch (e = o.data[0], n = o.callbackId, r = o.data[1] ? o.data[1] : null, e) { case "GameAPI.data": i._postMessage(this.dataStore._getCache(), n, "ugapi"); break; case "GameAPI.isReady": i._postMessage({ isready: this.api.isReady }, n, "ugapi") } }, l.prototype.post = function () { var t = g.argsToArray(arguments); return this.IS_SLAVE ? this._postMessage(t) : this._callJSLib.apply(this, t), this }, l.prototype.publish = function (t, e) { return this._channels[t] && this._channels[t].forEach(function (t) { try { t.fn.call(t.ctx, e) } catch (n) { } }), this }, l.prototype.subscribe = function (t, e, n) { if ("function" != typeof e) throw Error("Callback has to be a function"); if ("string" != typeof t) throw Error("Channel name has to be a string"); return this._channels[t] || (this._channels[t] = []), this._channels[t].push({ fn: e, ctx: n }), this }, l.prototype.unsubscribe = function (t, e) { return this._channels[t] && "function" == typeof e && (this._channels[t] = this._channels[t].filter(function (t) { return t.fn !== e })), this }, l.prototype.subscribeOnce = function (t, e, n) { function r(n) { i.unsubscribe(t, r), e.call(this, n) } var i = this; return this.subscribe(t, r, n) }, l.prototype.requestFromParent = function (t, e, n) { if (!this.IS_SLAVE) throw "You are the parent, stop talking to yourself"; e = e || {}, this._postMessage([t, e, n], null, "ugapi") }, d.prototype._setRole = function () { var t = g.getRole(); this.IS_MASTER = t.IS_MASTER, this.IS_SLAVE = t.IS_SLAVE, this.IS_STANDALONE = t.IS_STANDALONE }, d.prototype._getTarget = function () { if (this.IS_STANDALONE) return window; var t = document.getElementById("iframegame"), e = t && t.contentWindow ? t.contentWindow : window.parent; return this.IS_MASTER ? e : window.parent }, d.prototype.loadAPI = function (t, e) { function r(e) { return c.IS_MASTER && (e = i(e)), c.isReady = !0, c.Branding.moduleReady = !0, c.__.EventTracking.moduleReady = !0, c.GameBreak.moduleReady = !0, c.Game.moduleReady = !0, c.Score.moduleReady = !0, c.GameEvent.moduleReady = !0, c.Branding.init({ data: e }), c.__.EventTracking.init({ data: e }), c.GameBreak.init(), c.__.messenger._postMessage(["log.gameapi.loadapi.finish", { origin: p, version: c.version }, null ], null, "log"), t(c) } function i(t) { var e = t.game || {}, n = t.user || {}, r = t.portal || {}, i = t.branding || {}; return m.getLocalConfig({ game: e, user: n, portal: r, branding: i }) } function o() { c.__.messenger.requestFromParent("GameAPI.data", {}, function (t) { r(t) }) } function a() { c.IS_STANDALONE = !0, c.IS_MASTER = !0, c.IS_SLAVE = !0, c.__.dataStore = new n({ isMaster: !0 }), e = e || null, m.setupStandaloneMode(e, function (t) { c.__.dataStore._setCache(i(t)), r(t) }) } function s() { c.__.messenger.requestFromParent("GameAPI.isReady", {}, function (t) { u && clearTimeout(u), t.isready ? o() : 5 > l ? (l++, setTimeout(s, 500)) : o() }) } var u, c = this, p = this.IS_MASTER ? "master" : "slave", l = 0; if ("function" != typeof t) throw Error("argument passed to loadAPI method should be a function"); return !0 === this.isReady ? (window.console && window.console.log && console.log("WARNING: Detected multiple executions of GameAPI.loadAPI(). This method should only be executed once per page load!"), t(c)) : (this.__.messenger._postMessage(["log.gameapi.loadapi.start", { origin: p, version: c.version, spildata: e }, null ], null, "log"), this.IS_STANDALONE ? a() : this.IS_MASTER ? m.getGameConfig().then(function (t) { m.getBrandingConfig(t).then(function (e) { t && !t.isError && (t.branding = e.branding, c.__.dataStore._setCache(i(t))), r(t) }) }) : (u = setTimeout(a, 600), s()), void 0) }; var y = new d(n, l, u, s, o); "function" == typeof define && define.amd && define("GameAPI", y), t.GameAPI = y })(window), function () { "use strict"; function t(t) { t && (t.setTargetValueAtTime || (t.setTargetValueAtTime = t.setTargetAtTime)) } window.hasOwnProperty("AudioContext") && (window.webkitAudioContext = AudioContext, AudioContext.prototype.hasOwnProperty("internal_createGain") || (AudioContext.prototype.internal_createGain = AudioContext.prototype.createGain, AudioContext.prototype.createGain = function () { var e = this.internal_createGain(); return t(e.gain), e }), AudioContext.prototype.hasOwnProperty("internal_createDelay") || (AudioContext.prototype.internal_createDelay = AudioContext.prototype.createDelay, AudioContext.prototype.createDelay = function () { var e = this.internal_createDelay(); return t(e.delayTime), e }), AudioContext.prototype.hasOwnProperty("internal_createBufferSource") || (AudioContext.prototype.internal_createBufferSource = AudioContext.prototype.createBufferSource, AudioContext.prototype.createBufferSource = function () { var e = this.internal_createBufferSource(); return e.noteOn || (e.noteOn = e.start), e.noteGrainOn || (e.noteGrainOn = e.start), e.noteOff || (e.noteOff = e.stop), t(e.playbackRate), e }), AudioContext.prototype.hasOwnProperty("internal_createDynamicsCompressor") || (AudioContext.prototype.internal_createDynamicsCompressor = AudioContext.prototype.createDynamicsCompressor, AudioContext.prototype.createDynamicsCompressor = function () { var e = this.internal_createDynamicsCompressor(); return t(e.threshold), t(e.knee), t(e.ratio), t(e.reduction), t(e.attack), t(e.release), e }), AudioContext.prototype.hasOwnProperty("internal_createBiquadFilter") || (AudioContext.prototype.internal_createBiquadFilter = AudioContext.prototype.createBiquadFilter, AudioContext.prototype.createBiquadFilter = function () { var e = this.internal_createBiquadFilter(); t(e.frequency), t(e.detune), t(e.Q), t(e.gain); for (var n = ["LOWPASS", "HIGHPASS", "BANDPASS", "LOWSHELF", "HIGHSHELF", "PEAKING", "NOTCH", "ALLPASS"], r = 0; n.length > r; ++r) { var i = n[r], o = i.toLowerCase(); e.hasOwnProperty(i) || (e[i] = o) } return e }), AudioContext.prototype.hasOwnProperty("internal_createOscillator") || AudioContext.prototype.hasOwnProperty("createOscillator") && (AudioContext.prototype.internal_createOscillator = AudioContext.prototype.createOscillator, AudioContext.prototype.createOscillator = function () { var e = this.internal_createOscillator(); e.noteOn || (e.noteOn = e.start), e.noteOff || (e.noteOff = e.stop), t(e.frequency), t(e.detune); for (var n = ["SINE", "SQUARE", "SAWTOOTH", "TRIANGLE", "CUSTOM"], r = 0; n.length > r; ++r) { var i = n[r], o = i.toLowerCase(); e.hasOwnProperty(i) || (e[i] = o) } return e.hasOwnProperty("setWaveTable") || (e.setWaveTable = e.setPeriodicTable), e }), AudioContext.prototype.hasOwnProperty("internal_createPanner") || (AudioContext.prototype.internal_createPanner = AudioContext.prototype.createPanner, AudioContext.prototype.createPanner = function () { var t = this.internal_createPanner(), e = { EQUALPOWER: "equalpower", HRTF: "HRTF", LINEAR_DISTANCE: "linear", INVERSE_DISTANCE: "inverse", EXPONENTIAL_DISTANCE: "exponential" }; for (var n in e) { var r = e[n]; t.hasOwnProperty(n) || (t[n] = r) } return t }), AudioContext.prototype.hasOwnProperty("createGainNode") || (AudioContext.prototype.createGainNode = AudioContext.prototype.createGain), AudioContext.prototype.hasOwnProperty("createDelayNode") || (AudioContext.prototype.createDelayNode = AudioContext.prototype.createDelay), AudioContext.prototype.hasOwnProperty("createJavaScriptNode") || (AudioContext.prototype.createJavaScriptNode = AudioContext.prototype.createScriptProcessor), AudioContext.prototype.hasOwnProperty("createWaveTable") || (AudioContext.prototype.createWaveTable = AudioContext.prototype.createPeriodicWave)) }(window);