function Ja() { function lb() { (new Ka).getFingerprint(La, function(a) { if (mb()) JS.onSuccess(a) }) } function Nb(a, c) { var b = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), d = [], e; c = c || b.length; for (e = 0; e < a; e++) d[e] = b[0 | Math.random() * c]; return d.join("") } function Ob(a) { for (var c = "", b = a.length - 1; 0 <= b; b--) c += a.charAt(b); return c } function D(a, c, b, d, e, f, g) { a = a + (b ^ (c | ~d)) + e + g; return (a << f | a >>> 32 - f) + c } function E(a, c, b, d, e, f, g) { a = a + (c ^ b ^ d) + e + g; return (a << f | a >>> 32 - f) + c } function F(a, c, b, d, e, f, g) { a = a + (c & d | b & ~d) + e + g; return (a << f | a >>> 32 - f) + c } function G(a, c, b, d, e, f, g) { a = a + (c & b | ~c & d) + e + g; return (a << f | a >>> 32 - f) + c } function Pb(a) { return 4294967296 * (a - (a | 0)) | 0 } function O(a, c) { "object" === typeof a && (c = a, a = void 0); if (!(this instanceof O)) return (new O(a,c)).getResult(); var b = a || (Z && Z.navigator && Z.navigator.userAgent ? Z.navigator.userAgent : "") , d = c ? V.extend(Qb, c) : Qb; this.getBrowser = function() { var a = { name: void 0, version: void 0 }; R.rgx.call(a, b, d.browser); a.major = V.major(a.version); return a } ; this.getCPU = function() { var a = { architecture: void 0 }; R.rgx.call(a, b, d.cpu); return a } ; this.getDevice = function() { var a = { vendor: void 0, model: void 0, type: void 0 }; R.rgx.call(a, b, d.device); return a } ; this.getEngine = function() { var a = { name: void 0, version: void 0 }; R.rgx.call(a, b, d.engine); return a } ; this.getOS = function() { var a = { name: void 0, version: void 0 }; R.rgx.call(a, b, d.os); return a } ; this.getResult = function() { return { ua: this.getUA(), browser: this.getBrowser(), engine: this.getEngine(), os: this.getOS(), device: this.getDevice(), cpu: this.getCPU() } } ; this.getUA = function() { return b } ; this.setUA = function(a) { b = a; return this } ; return this } function Rb(a) { return null != /[\\\"<>\.;]/.exec(a) && "undefined" != typeof encodeURIComponent ? encodeURIComponent(a) : a } function ga(a, c) { if (Sb) { var b = c ? "visible" : "hidden"; ha && W(a) ? W(a).style.visibility = b : Tb("#" + a, "visibility:" + b) } } function Tb(a, c, b, d) { if (!p.ie || !p.mac) { var e = v.getElementsByTagName("head")[0]; e && (b = b && "string" == typeof b ? b : "screen", d && (nb = aa = null), aa && nb == b || (d = v.createElement("style"), d.setAttribute("type", "text/css"), d.setAttribute("media", b), aa = e.appendChild(d), p.ie && p.win && "undefined" != typeof v.styleSheets && 0 < v.styleSheets.length && (aa = v.styleSheets[v.styleSheets.length - 1]), nb = b), p.ie && p.win ? aa && "object" == typeof aa.addRule && aa.addRule(a, c) : aa && "undefined" != typeof v.createTextNode && aa.appendChild(v.createTextNode(a + " {" + c + "}"))) } } function Ma(a) { var c = p.pv; a = a.split("."); a[0] = parseInt(a[0], 10); a[1] = parseInt(a[1], 10) || 0; a[2] = parseInt(a[2], 10) || 0; return c[0] > a[0] || c[0] == a[0] && c[1] > a[1] || c[0] == a[0] && c[1] == a[1] && c[2] >= a[2] ? !0 : !1 } function W(a) { var c = null; try { c = v.getElementById(a) } catch (b) {} return c } function Ub(a) { var c = W(a); c && "OBJECT" == c.nodeName && (p.ie && p.win ? (c.style.display = "none", function d() { if (4 == c.readyState) { var e = W(a); if (e) { for (var f in e) "function" == typeof e[f] && (e[f] = null); e.parentNode.removeChild(e) } } else setTimeout(d, 10) }()) : c.parentNode.removeChild(c)) } function ob(a, c, b) { var d, e = W(b); if (p.wk && 312 > p.wk) return d; if (e) if ("undefined" == typeof a.id && (a.id = b), p.ie && p.win) { var f = "", g; for (g in a) a[g] != Object.prototype[g] && ("data" == g.toLowerCase() ? c.movie = a[g] : "styleclass" == g.toLowerCase() ? f += ' class\x3d"' + a[g] + '"' : "classid" != g.toLowerCase() && (f += " " + g + '\x3d"' + a[g] + '"')); g = ""; for (var h in c) c[h] != Object.prototype[h] && (g += '\x3cparam name\x3d"' + h + '" value\x3d"' + c[h] + '" /\x3e'); e.outerHTML = '\x3cobject classid\x3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + "\x3e" + g + "\x3c/object\x3e"; Na[Na.length] = a.id; d = W(a.id) } else { h = v.createElement("object"); h.setAttribute("type", "application/x-shockwave-flash"); for (var A in a) a[A] != Object.prototype[A] && ("styleclass" == A.toLowerCase() ? h.setAttribute("class", a[A]) : "classid" != A.toLowerCase() && h.setAttribute(A, a[A])); for (f in c) c[f] != Object.prototype[f] && "movie" != f.toLowerCase() && (a = h, g = f, A = c[f], b = v.createElement("param"), b.setAttribute("name", g), b.setAttribute("value", A), a.appendChild(b)); e.parentNode.replaceChild(h, e); d = h } return d } function pb(a) { var c = v.createElement("div"); if (p.win && p.ie) c.innerHTML = a.innerHTML; else if (a = a.getElementsByTagName("object")[0]) if (a = a.childNodes) for (var b = a.length, d = 0; d < b; d++) 1 == a[d].nodeType && "PARAM" == a[d].nodeName || 8 == a[d].nodeType || c.appendChild(a[d].cloneNode(!0)); return c } function Ac(a) { if (p.ie && p.win && 4 != a.readyState) { var c = v.createElement("div"); a.parentNode.insertBefore(c, a); c.parentNode.replaceChild(pb(a), c); a.style.display = "none"; (function d() { 4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(d, 10) } )() } else a.parentNode.replaceChild(pb(a), a) } function qb(a, c, b, d) { Oa = !0; rb = d || null; Vb = { success: !1, id: b }; var e = W(b); if (e) { "OBJECT" == e.nodeName ? (wa = pb(e), Pa = null) : (wa = e, Pa = b); a.id = "SWFObjectExprInst"; if ("undefined" == typeof a.width || !/%$/.test(a.width) && 310 > parseInt(a.width, 10)) a.width = "310"; if ("undefined" == typeof a.height || !/%$/.test(a.height) && 137 > parseInt(a.height, 10)) a.height = "137"; v.title = v.title.slice(0, 47) + " - Flash Player Installation"; d = p.ie && p.win ? "ActiveX" : "PlugIn"; d = "MMredirectURL\x3d" + S.location.toString().replace(/&/g, "%26") + "\x26MMplayerType\x3d" + d + "\x26MMdoctitle\x3d" + v.title; c.flashvars = "undefined" != typeof c.flashvars ? c.flashvars + ("\x26" + d) : d; p.ie && p.win && 4 != e.readyState && (d = v.createElement("div"), b += "SWFObjectNew", d.setAttribute("id", b), e.parentNode.insertBefore(d, e), e.style.display = "none", function g() { 4 == e.readyState ? e.parentNode.removeChild(e) : setTimeout(g, 10) }()); ob(a, c, b) } } function sb() { return !Oa && Ma("6.0.65") && (p.win || p.mac) && !(p.wk && 312 > p.wk) } function tb(a) { var c = null; (a = W(a)) && "OBJECT" == a.nodeName && ("undefined" != typeof a.SetVariable ? c = a : (a = a.getElementsByTagName("object")[0]) && (c = a)); return c } function ub() { var a = da.length; if (0 < a) for (var c = 0; c < a; c++) { var b = da[c].id , d = da[c].callbackFn , e = { success: !1, id: b }; if (0 < p.pv[0]) { var f = W(b); if (f) if (!Ma(da[c].swfVersion) || p.wk && 312 > p.wk) if (da[c].expressInstall && sb()) { e = {}; e.data = da[c].expressInstall; e.width = f.getAttribute("width") || "0"; e.height = f.getAttribute("height") || "0"; f.getAttribute("class") && (e.styleclass = f.getAttribute("class")); f.getAttribute("align") && (e.align = f.getAttribute("align")); for (var g = {}, f = f.getElementsByTagName("param"), h = f.length, A = 0; A < h; A++) "movie" != f[A].getAttribute("name").toLowerCase() && (g[f[A].getAttribute("name")] = f[A].getAttribute("value")); qb(e, g, b, d) } else Ac(f), d && d(e); else ga(b, !0), d && (e.success = !0, e.ref = tb(b), d(e)) } else ga(b, !0), d && ((b = tb(b)) && "undefined" != typeof b.SetVariable && (e.success = !0, e.ref = b), d(e)) } } function Wb(a) { if ("undefined" != typeof S.addEventListener) S.addEventListener("load", a, !1); else if ("undefined" != typeof v.addEventListener) v.addEventListener("load", a, !1); else if ("undefined" != typeof S.attachEvent) { var c = S; c.attachEvent("onload", a); ma[ma.length] = [c, "onload", a] } else if ("function" == typeof S.onload) { var b = S.onload; S.onload = function() { b(); a() } } else S.onload = a } function Xb(a) { ha ? a() : Qa[Qa.length] = a } function na() { if (!ha) { try { var a = v.getElementsByTagName("body")[0].appendChild(v.createElement("span")); a.parentNode.removeChild(a) } catch (b) { return } ha = !0; for (var a = Qa.length, c = 0; c < a; c++) Qa[c]() } } function Ra(a) { if (!a) return ""; if (Bc(a)) return a.replace(/\s/g, ""); -1 != a.indexOf("://") && (a = a.substr(a.indexOf("://") + 3)); var c = "com net org gov edu mil biz name info mobi pro travel museum int areo post rec".split(" ") , b = a.split("."); if (1 >= b.length || !isNaN(b[b.length - 1])) return a; for (a = 0; a < c.length && c[a] != b[b.length - 1]; ) a++; if (a != c.length) return "." + b[b.length - 2] + "." + b[b.length - 1]; for (a = 0; a < c.length && c[a] != b[b.length - 2]; ) a++; return a == c.length ? b[b.length - 2] + "." + b[b.length - 1] : "." + b[b.length - 3] + "." + b[b.length - 2] + "." + b[b.length - 1] } function Sa() { function a() { throw Error("'new Fingerprint()' is deprecated, see https://github.com/Valve/fingerprintjs2#upgrade-guide-from-182-to-200"); } function c() { var a = document.createElement("canvas") , c = null; try { c = a.getContext("webgl") || a.getContext("experimental-webgl") } catch (q) {} c || (c = null); return c } function b() { if (!d()) return !1; var a = c(); return !!window.WebGLRenderingContext && !!a } function d() { var a = document.createElement("canvas"); return !(!a.getContext || !a.getContext("2d")) } function e() { var a = navigator.userAgent.toLowerCase() , c = navigator.productSub , a = 0 <= a.indexOf("firefox") ? "Firefox" : 0 <= a.indexOf("opera") || 0 <= a.indexOf("opr") ? "Opera" : 0 <= a.indexOf("chrome") ? "Chrome" : 0 <= a.indexOf("safari") ? "Safari" : 0 <= a.indexOf("trident") ? "Internet Explorer" : "Other"; if (("Chrome" === a || "Safari" === a || "Opera" === a) && "20030107" !== c) return !0; c = eval.toString().length; if (37 === c && "Safari" !== a && "Firefox" !== a && "Other" !== a || 39 === c && "Internet Explorer" !== a && "Other" !== a || 33 === c && "Chrome" !== a && "Opera" !== a && "Other" !== a) return !0; var b; try { throw "a"; } catch (oa) { try { oa.toSource(), b = !0 } catch (Yb) { b = !1 } } return b && "Firefox" !== a && "Other" !== a } function f() { var a = navigator.userAgent.toLowerCase() , c = navigator.oscpu , b = navigator.platform.toLowerCase() , a = 0 <= a.indexOf("windows phone") ? "Windows Phone" : 0 <= a.indexOf("win") ? "Windows" : 0 <= a.indexOf("android") ? "Android" : 0 <= a.indexOf("linux") || 0 <= a.indexOf("cros") ? "Linux" : 0 <= a.indexOf("iphone") || 0 <= a.indexOf("ipad") ? "iOS" : 0 <= a.indexOf("mac") ? "Mac" : "Other"; return ("ontouchstart"in window || 0 < navigator.maxTouchPoints || 0 < navigator.msMaxTouchPoints) && "Windows Phone" !== a && "Android" !== a && "iOS" !== a && "Other" !== a || "undefined" !== typeof c && (c = c.toLowerCase(), 0 <= c.indexOf("win") && "Windows" !== a && "Windows Phone" !== a || 0 <= c.indexOf("linux") && "Linux" !== a && "Android" !== a || 0 <= c.indexOf("mac") && "Mac" !== a && "iOS" !== a || (-1 === c.indexOf("win") && -1 === c.indexOf("linux") && -1 === c.indexOf("mac")) !== ("Other" === a)) ? !0 : 0 <= b.indexOf("win") && "Windows" !== a && "Windows Phone" !== a || (0 <= b.indexOf("linux") || 0 <= b.indexOf("android") || 0 <= b.indexOf("pike")) && "Linux" !== a && "Android" !== a || (0 <= b.indexOf("mac") || 0 <= b.indexOf("ipad") || 0 <= b.indexOf("ipod") || 0 <= b.indexOf("iphone")) && "Mac" !== a && "iOS" !== a || (0 > b.indexOf("win") && 0 > b.indexOf("linux") && 0 > b.indexOf("mac") && 0 > b.indexOf("iphone") && 0 > b.indexOf("ipad")) !== ("Other" === a) ? !0 : "undefined" === typeof navigator.plugins && "Windows" !== a && "Windows Phone" !== a } function g() { if ("undefined" !== typeof navigator.languages) try { if (navigator.languages[0].substr(0, 2) !== navigator.language.substr(0, 2)) return !0 } catch (k) { return !0 } return !1 } function h() { function a(a) { b.clearColor(0, 0, 0, 1); b.enable(b.DEPTH_TEST); b.depthFunc(b.LEQUAL); b.clear(b.COLOR_BUFFER_BIT | b.DEPTH_BUFFER_BIT); return "[" + a[0] + ", " + a[1] + "]" } var b; b = c(); if (!b) return null; var d = [] , e = b.createBuffer(); b.bindBuffer(b.ARRAY_BUFFER, e); var f = new Float32Array([-.2, -.9, 0, .4, -.26, 0, 0, .732134444, 0]); b.bufferData(b.ARRAY_BUFFER, f, b.STATIC_DRAW); e.itemSize = 3; e.numItems = 3; var f = b.createProgram() , g = b.createShader(b.VERTEX_SHADER); b.shaderSource(g, "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate\x3dattrVertex+uniformOffset;gl_Position\x3dvec4(attrVertex,0,1);}"); b.compileShader(g); var r = b.createShader(b.FRAGMENT_SHADER); b.shaderSource(r, "precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor\x3dvec4(varyinTexCoordinate,0,1);}"); b.compileShader(r); b.attachShader(f, g); b.attachShader(f, r); b.linkProgram(f); b.useProgram(f); f.vertexPosAttrib = b.getAttribLocation(f, "attrVertex"); f.offsetUniform = b.getUniformLocation(f, "uniformOffset"); b.enableVertexAttribArray(f.vertexPosArray); b.vertexAttribPointer(f.vertexPosAttrib, e.itemSize, b.FLOAT, !1, 0, 0); b.uniform2f(f.offsetUniform, 1, 1); b.drawArrays(b.TRIANGLE_STRIP, 0, e.numItems); try { d.push(b.canvas.toDataURL()) } catch (Cc) {} d.push("extensions:" + (b.getSupportedExtensions() || []).join(";")); d.push("webgl aliased line width range:" + a(b.getParameter(b.ALIASED_LINE_WIDTH_RANGE))); d.push("webgl aliased point size range:" + a(b.getParameter(b.ALIASED_POINT_SIZE_RANGE))); d.push("webgl alpha bits:" + b.getParameter(b.ALPHA_BITS)); d.push("webgl antialiasing:" + (b.getContextAttributes().antialias ? "yes" : "no")); d.push("webgl blue bits:" + b.getParameter(b.BLUE_BITS)); d.push("webgl depth bits:" + b.getParameter(b.DEPTH_BITS)); d.push("webgl green bits:" + b.getParameter(b.GREEN_BITS)); d.push("webgl max anisotropy:" + function(a) { var b = a.getExtension("EXT_texture_filter_anisotropic") || a.getExtension("WEBKIT_EXT_texture_filter_anisotropic") || a.getExtension("MOZ_EXT_texture_filter_anisotropic"); return b ? (a = a.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT), 0 === a && (a = 2), a) : null }(b)); d.push("webgl max combined texture image units:" + b.getParameter(b.MAX_COMBINED_TEXTURE_IMAGE_UNITS)); d.push("webgl max cube map texture size:" + b.getParameter(b.MAX_CUBE_MAP_TEXTURE_SIZE)); d.push("webgl max fragment uniform vectors:" + b.getParameter(b.MAX_FRAGMENT_UNIFORM_VECTORS)); d.push("webgl max render buffer size:" + b.getParameter(b.MAX_RENDERBUFFER_SIZE)); d.push("webgl max texture image units:" + b.getParameter(b.MAX_TEXTURE_IMAGE_UNITS)); d.push("webgl max texture size:" + b.getParameter(b.MAX_TEXTURE_SIZE)); d.push("webgl max varying vectors:" + b.getParameter(b.MAX_VARYING_VECTORS)); d.push("webgl max vertex attribs:" + b.getParameter(b.MAX_VERTEX_ATTRIBS)); d.push("webgl max vertex texture image units:" + b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)); d.push("webgl max vertex uniform vectors:" + b.getParameter(b.MAX_VERTEX_UNIFORM_VECTORS)); d.push("webgl max viewport dims:" + a(b.getParameter(b.MAX_VIEWPORT_DIMS))); d.push("webgl red bits:" + b.getParameter(b.RED_BITS)); d.push("webgl renderer:" + b.getParameter(b.RENDERER)); d.push("webgl shading language version:" + b.getParameter(b.SHADING_LANGUAGE_VERSION)); d.push("webgl stencil bits:" + b.getParameter(b.STENCIL_BITS)); d.push("webgl vendor:" + b.getParameter(b.VENDOR)); d.push("webgl version:" + b.getParameter(b.VERSION)); try { var n = b.getExtension("WEBGL_debug_renderer_info"); n && (d.push("webgl unmasked vendor:" + b.getParameter(n.UNMASKED_VENDOR_WEBGL)), d.push("webgl unmasked renderer:" + b.getParameter(n.UNMASKED_RENDERER_WEBGL))) } catch (Cc) {} if (!b.getShaderPrecisionFormat) return d; w(["FLOAT", "INT"], function(a) { w(["VERTEX", "FRAGMENT"], function(c) { w(["HIGH", "MEDIUM", "LOW"], function(e) { w(["precision", "rangeMin", "rangeMax"], function(k) { var q = b.getShaderPrecisionFormat(b[c + "_SHADER"], b[e + "_" + a])[k]; "precision" !== k && (k = "precision " + k); k = ["webgl ", c.toLowerCase(), " shader ", e.toLowerCase(), " ", a.toLowerCase(), " ", k, ":", q].join(""); d.push(k) }) }) }) }); return d } function A(a) { if (null == navigator.plugins) return a.NOT_AVAILABLE; for (var b = [], c = 0, d = navigator.plugins.length; c < d; c++) navigator.plugins[c] && b.push(navigator.plugins[c]); for (var c = !1, d = 0, e = a.plugins.sortPluginsFor.length; d < e; d++) if (navigator.userAgent.match(a.plugins.sortPluginsFor[d])) { c = !0; break } c && (b = b.sort(function(a, b) { return a.name > b.name ? 1 : a.name < b.name ? -1 : 0 })); return m(b, function(a) { var b = m(a, function(a) { return [a.type, a.suffixes] }); return [a.name, a.description, b] }) } function m(a, b) { var c = []; if (null == a) return c; if (Array.prototype.map && a.map === Array.prototype.map) return a.map(b); w(a, function(a, d, e) { c.push(b(a, d, e)) }); return c } function w(a, b) { if (Array.prototype.forEach && a.forEach === Array.prototype.forEach) a.forEach(b); else if (a.length === +a.length) for (var c = 0, d = a.length; c < d; c++) b(a[c], c, a); else for (c in a) a.hasOwnProperty(c) && b(a[c], c, a) } function r(a, b) { a = a || ""; b = b || 0; for (var c = a.length % 16, d = a.length - c, e = [0, b], k = [0, b], f, l, g = [2277735313, 289559509], r = [1291169091, 658871167], h = 0; h < d; h += 16) f = [a.charCodeAt(h + 4) & 255 | (a.charCodeAt(h + 5) & 255) << 8 | (a.charCodeAt(h + 6) & 255) << 16 | (a.charCodeAt(h + 7) & 255) << 24, a.charCodeAt(h) & 255 | (a.charCodeAt(h + 1) & 255) << 8 | (a.charCodeAt(h + 2) & 255) << 16 | (a.charCodeAt(h + 3) & 255) << 24], l = [a.charCodeAt(h + 12) & 255 | (a.charCodeAt(h + 13) & 255) << 8 | (a.charCodeAt(h + 14) & 255) << 16 | (a.charCodeAt(h + 15) & 255) << 24, a.charCodeAt(h + 8) & 255 | (a.charCodeAt(h + 9) & 255) << 8 | (a.charCodeAt(h + 10) & 255) << 16 | (a.charCodeAt(h + 11) & 255) << 24], f = z(f, g), f = Q(f, 31), f = z(f, r), e = n(e, f), e = Q(e, 27), e = p(e, k), e = p(z(e, [0, 5]), [0, 1390208809]), l = z(l, r), l = Q(l, 33), l = z(l, g), k = n(k, l), k = Q(k, 31), k = p(k, e), k = p(z(k, [0, 5]), [0, 944331445]); f = [0, 0]; l = [0, 0]; switch (c) { case 15: l = n(l, y([0, a.charCodeAt(h + 14)], 48)); case 14: l = n(l, y([0, a.charCodeAt(h + 13)], 40)); case 13: l = n(l, y([0, a.charCodeAt(h + 12)], 32)); case 12: l = n(l, y([0, a.charCodeAt(h + 11)], 24)); case 11: l = n(l, y([0, a.charCodeAt(h + 10)], 16)); case 10: l = n(l, y([0, a.charCodeAt(h + 9)], 8)); case 9: l = n(l, [0, a.charCodeAt(h + 8)]), l = z(l, r), l = Q(l, 33), l = z(l, g), k = n(k, l); case 8: f = n(f, y([0, a.charCodeAt(h + 7)], 56)); case 7: f = n(f, y([0, a.charCodeAt(h + 6)], 48)); case 6: f = n(f, y([0, a.charCodeAt(h + 5)], 40)); case 5: f = n(f, y([0, a.charCodeAt(h + 4)], 32)); case 4: f = n(f, y([0, a.charCodeAt(h + 3)], 24)); case 3: f = n(f, y([0, a.charCodeAt(h + 2)], 16)); case 2: f = n(f, y([0, a.charCodeAt(h + 1)], 8)); case 1: f = n(f, [0, a.charCodeAt(h)]), f = z(f, g), f = Q(f, 31), f = z(f, r), e = n(e, f) } e = n(e, [0, a.length]); k = n(k, [0, a.length]); e = p(e, k); k = p(k, e); e = u(e); k = u(k); e = p(e, k); k = p(k, e); return ("00000000" + (e[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (e[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (k[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (k[1] >>> 0).toString(16)).slice(-8) } function u(a) { a = n(a, [0, a[0] >>> 1]); a = z(a, [4283543511, 3981806797]); a = n(a, [0, a[0] >>> 1]); a = z(a, [3301882366, 444984403]); return a = n(a, [0, a[0] >>> 1]) } function n(a, b) { return [a[0] ^ b[0], a[1] ^ b[1]] } function y(a, b) { b %= 64; return 0 === b ? a : 32 > b ? [a[0] << b | a[1] >>> 32 - b, a[1] << b] : [a[1] << b - 32, 0] } function Q(a, b) { b %= 64; if (32 === b) return [a[1], a[0]]; if (32 > b) return [a[0] << b | a[1] >>> 32 - b, a[1] << b | a[0] >>> 32 - b]; b -= 32; return [a[1] << b | a[0] >>> 32 - b, a[0] << b | a[1] >>> 32 - b] } function z(a, b) { a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535]; b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535]; var c = [0, 0, 0, 0]; c[3] += a[3] * b[3]; c[2] += c[3] >>> 16; c[3] &= 65535; c[2] += a[2] * b[3]; c[1] += c[2] >>> 16; c[2] &= 65535; c[2] += a[3] * b[2]; c[1] += c[2] >>> 16; c[2] &= 65535; c[1] += a[1] * b[3]; c[0] += c[1] >>> 16; c[1] &= 65535; c[1] += a[2] * b[2]; c[0] += c[1] >>> 16; c[1] &= 65535; c[1] += a[3] * b[1]; c[0] += c[1] >>> 16; c[1] &= 65535; c[0] += a[0] * b[3] + a[1] * b[2] + a[2] * b[1] + a[3] * b[0]; c[0] &= 65535; return [c[0] << 16 | c[1], c[2] << 16 | c[3]] } function p(a, b) { a = [a[0] >>> 16, a[0] & 65535, a[1] >>> 16, a[1] & 65535]; b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535]; var c = [0, 0, 0, 0]; c[3] += a[3] + b[3]; c[2] += c[3] >>> 16; c[3] &= 65535; c[2] += a[2] + b[2]; c[1] += c[2] >>> 16; c[2] &= 65535; c[1] += a[1] + b[1]; c[0] += c[1] >>> 16; c[1] &= 65535; c[0] += a[0] + b[0]; c[0] &= 65535; return [c[0] << 16 | c[1], c[2] << 16 | c[3]] } var v = { preprocessor: null, audio: { timeout: 1E3, excludeIOS11: !0 }, fonts: { swfContainerId: "fingerprintjs2", swfPath: "flash/compiled/FontList.swf", userDefinedFonts: [], extendedJsFonts: !1 }, screen: { detectScreenOrientation: !0 }, plugins: { sortPluginsFor: [/palemoon/i], excludeIE: !1 }, extraComponents: [], excludes: { enumerateDevices: !0, doNotTrack: !0, fontsFlash: !0 }, NOT_AVAILABLE: "not available", ERROR: "error", EXCLUDED: "excluded" } , t = [{ key: "userAgent", getData: function(a) { a(navigator.userAgent) } }, { key: "webdriver", getData: function(a, b) { a(null == navigator.webdriver ? b.NOT_AVAILABLE : navigator.webdriver) } }, { key: "language", getData: function(a, b) { a(navigator.language || navigator.userLanguage || navigator.browserLanguage || navigator.systemLanguage || b.NOT_AVAILABLE) } }, { key: "colorDepth", getData: function(a, b) { a(window.screen.colorDepth || b.NOT_AVAILABLE) } }, { key: "deviceMemory", getData: function(a, b) { a(navigator.deviceMemory || b.NOT_AVAILABLE) } }, { key: "devicePixelRatio", getData: function(a, b) { a(window.devicePixelRatio || b.NOT_AVAILABLE) } }, { key: "hardwareConcurrency", getData: function(a, b) { a(navigator.hardwareConcurrency ? navigator.hardwareConcurrency : b.NOT_AVAILABLE) } }, { key: "screenResolution", getData: function(a, b) { var c = [window.screen.width, window.screen.height]; b.screen.detectScreenOrientation && c.sort().reverse(); a(c) } }, { key: "availableScreenResolution", getData: function(a, b) { var c; window.screen.availWidth && window.screen.availHeight ? (c = [window.screen.availHeight, window.screen.availWidth], b.screen.detectScreenOrientation && c.sort().reverse()) : c = b.NOT_AVAILABLE; a(c) } }, { key: "timezoneOffset", getData: function(a) { a((new Date).getTimezoneOffset()) } }, { key: "timezone", getData: function(a, b) { window.Intl && window.Intl.DateTimeFormat ? a((new window.Intl.DateTimeFormat).resolvedOptions().timeZone) : a(b.NOT_AVAILABLE) } }, { key: "sessionStorage", getData: function(a, b) { var c; try { c = !!window.sessionStorage } catch (oa) { c = b.ERROR } a(c) } }, { key: "localStorage", getData: function(a, b) { var c; try { c = !!window.localStorage } catch (oa) { c = b.ERROR } a(c) } }, { key: "indexedDb", getData: function(a, b) { var c; try { c = !!window.indexedDB } catch (oa) { c = b.ERROR } a(c) } }, { key: "addBehavior", getData: function(a) { a(!(!document.body || !document.body.addBehavior)) } }, { key: "openDatabase", getData: function(a) { a(!!window.openDatabase) } }, { key: "cpuClass", getData: function(a, b) { a(navigator.cpuClass || b.NOT_AVAILABLE) } }, { key: "navigatorPlatform", getData: function(a, b) { a(navigator.platform ? navigator.platform : b.NOT_AVAILABLE) } }, { key: "doNotTrack", getData: function(a, b) { a(navigator.doNotTrack ? navigator.doNotTrack : navigator.msDoNotTrack ? navigator.msDoNotTrack : window.doNotTrack ? window.doNotTrack : b.NOT_AVAILABLE) } }, { key: "plugins", getData: function(a, b) { if ("Microsoft Internet Explorer" === navigator.appName || "Netscape" === navigator.appName && /Trident/.test(navigator.userAgent)) if (b.plugins.excludeIE) a(b.EXCLUDED); else { var c = []; Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(window, "ActiveXObject") || "ActiveXObject"in window ? c = m("AcroPDF.PDF;Adodb.Stream;AgControl.AgControl;DevalVRXCtrl.DevalVRXCtrl.1;MacromediaFlashPaper.MacromediaFlashPaper;Msxml2.DOMDocument;Msxml2.XMLHTTP;PDF.PdfCtrl;QuickTime.QuickTime;QuickTimeCheckObject.QuickTimeCheck.1;RealPlayer;RealPlayer.RealPlayer(tm) ActiveX Control (32-bit);RealVideo.RealVideo(tm) ActiveX Control (32-bit);Scripting.Dictionary;SWCtl.SWCtl;Shell.UIHelper;ShockwaveFlash.ShockwaveFlash;Skype.Detection;TDCCtl.TDCCtl;WMPlayer.OCX;rmocx.RealPlayer G2 Control;rmocx.RealPlayer G2 Control.1".split(";"), function(a) { try { return new window.ActiveXObject(a), a } catch (Yb) { return b.ERROR } }) : c.push(b.NOT_AVAILABLE); navigator.plugins && (c = c.concat(A(b))); a(c) } else a(A(b)) } }, { key: "canvas", getData: function(a, b) { if (d()) { var c = [] , e = document.createElement("canvas"); e.width = 2E3; e.height = 200; e.style.display = "inline"; var f = e.getContext("2d"); f.rect(0, 0, 10, 10); f.rect(2, 2, 6, 6); c.push("canvas winding:" + (!1 === f.isPointInPath(5, 5, "evenodd") ? "yes" : "no")); f.textBaseline = "alphabetic"; f.fillStyle = "#f60"; f.fillRect(125, 1, 62, 20); f.fillStyle = "#069"; f.font = b.dontUseFakeFontInCanvas ? "11pt Arial" : "11pt no-real-font-123"; f.fillText("Cwm fjordbank glyphs vext quiz, \ud83d\ude03", 2, 15); f.fillStyle = "rgba(102, 204, 0, 0.2)"; f.font = "18pt Arial"; f.fillText("Cwm fjordbank glyphs vext quiz, \ud83d\ude03", 4, 45); f.globalCompositeOperation = "multiply"; f.fillStyle = "rgb(255,0,255)"; f.beginPath(); f.arc(50, 50, 50, 0, 2 * Math.PI, !0); f.closePath(); f.fill(); f.fillStyle = "rgb(0,255,255)"; f.beginPath(); f.arc(100, 50, 50, 0, 2 * Math.PI, !0); f.closePath(); f.fill(); f.fillStyle = "rgb(255,255,0)"; f.beginPath(); f.arc(75, 100, 50, 0, 2 * Math.PI, !0); f.closePath(); f.fill(); f.fillStyle = "rgb(255,0,255)"; f.arc(75, 75, 75, 0, 2 * Math.PI, !0); f.arc(75, 75, 25, 0, 2 * Math.PI, !0); f.fill("evenodd"); e.toDataURL && c.push("canvas fp:" + e.toDataURL()); a(c) } else a(b.NOT_AVAILABLE) } }, { key: "webgl", getData: function(a, c) { b() ? a(h()) : a(c.NOT_AVAILABLE) } }, { key: "webglVendorAndRenderer", getData: function(a) { if (b()) { var d; try { var e = c() , f = e.getExtension("WEBGL_debug_renderer_info"); d = e.getParameter(f.UNMASKED_VENDOR_WEBGL) + "~" + e.getParameter(f.UNMASKED_RENDERER_WEBGL) } catch (Yb) { d = null } a(d) } else a() } }, { key: "adBlock", getData: function(a) { var b = document.createElement("div"); b.innerHTML = "\x26nbsp;"; b.className = "adsbox"; var c = !1; try { document.body.appendChild(b), c = 0 === document.getElementsByClassName("adsbox")[0].offsetHeight, document.body.removeChild(b) } catch (oa) { c = !1 } a(c) } }, { key: "hasLiedLanguages", getData: function(a) { a(g()) } }, { key: "hasLiedResolution", getData: function(a) { a(window.screen.width < window.screen.availWidth || window.screen.height < window.screen.availHeight) } }, { key: "hasLiedOs", getData: function(a) { a(f()) } }, { key: "hasLiedBrowser", getData: function(a) { a(e()) } }, { key: "touchSupport", getData: function(a) { var b = 0, c; "undefined" !== typeof navigator.maxTouchPoints ? b = navigator.maxTouchPoints : "undefined" !== typeof navigator.msMaxTouchPoints && (b = navigator.msMaxTouchPoints); try { document.createEvent("TouchEvent"), c = !0 } catch (oa) { c = !1 } a([b, c, "ontouchstart"in window]) } }, { key: "fonts", getData: function(a, b) { function c() { var a = document.createElement("span"); a.style.position = "absolute"; a.style.left = "-9999px"; a.style.fontSize = "72px"; a.style.fontStyle = "normal"; a.style.fontWeight = "normal"; a.style.letterSpacing = "normal"; a.style.lineBreak = "auto"; a.style.lineHeight = "normal"; a.style.textTransform = "none"; a.style.textAlign = "left"; a.style.textDecoration = "none"; a.style.textShadow = "none"; a.style.whiteSpace = "normal"; a.style.wordBreak = "normal"; a.style.wordSpacing = "normal"; a.innerHTML = "mmmmmmmmmmlli"; return a } var d = ["monospace", "sans-serif", "serif"] , e = "Andale Mono;Arial;Arial Black;Arial Hebrew;Arial MT;Arial Narrow;Arial Rounded MT Bold;Arial Unicode MS;Bitstream Vera Sans Mono;Book Antiqua;Bookman Old Style;Calibri;Cambria;Cambria Math;Century;Century Gothic;Century Schoolbook;Comic Sans;Comic Sans MS;Consolas;Courier;Courier New;Geneva;Georgia;Helvetica;Helvetica Neue;Impact;Lucida Bright;Lucida Calligraphy;Lucida Console;Lucida Fax;LUCIDA GRANDE;Lucida Handwriting;Lucida Sans;Lucida Sans Typewriter;Lucida Sans Unicode;Microsoft Sans Serif;Monaco;Monotype Corsiva;MS Gothic;MS Outlook;MS PGothic;MS Reference Sans Serif;MS Sans Serif;MS Serif;MYRIAD;MYRIAD PRO;Palatino;Palatino Linotype;Segoe Print;Segoe Script;Segoe UI;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Tahoma;Times;Times New Roman;Times New Roman PS;Trebuchet MS;Verdana;Wingdings;Wingdings 2;Wingdings 3".split(";"); b.fonts.extendedJsFonts && (e = e.concat("Abadi MT Condensed Light;Academy Engraved LET;ADOBE CASLON PRO;Adobe Garamond;ADOBE GARAMOND PRO;Agency FB;Aharoni;Albertus Extra Bold;Albertus Medium;Algerian;Amazone BT;American Typewriter;American Typewriter Condensed;AmerType Md BT;Andalus;Angsana New;AngsanaUPC;Antique Olive;Aparajita;Apple Chancery;Apple Color Emoji;Apple SD Gothic Neo;Arabic Typesetting;ARCHER;ARNO PRO;Arrus BT;Aurora Cn BT;AvantGarde Bk BT;AvantGarde Md BT;AVENIR;Ayuthaya;Bandy;Bangla Sangam MN;Bank Gothic;BankGothic Md BT;Baskerville;Baskerville Old Face;Batang;BatangChe;Bauer Bodoni;Bauhaus 93;Bazooka;Bell MT;Bembo;Benguiat Bk BT;Berlin Sans FB;Berlin Sans FB Demi;Bernard MT Condensed;BernhardFashion BT;BernhardMod BT;Big Caslon;BinnerD;Blackadder ITC;BlairMdITC TT;Bodoni 72;Bodoni 72 Oldstyle;Bodoni 72 Smallcaps;Bodoni MT;Bodoni MT Black;Bodoni MT Condensed;Bodoni MT Poster Compressed;Bookshelf Symbol 7;Boulder;Bradley Hand;Bradley Hand ITC;Bremen Bd BT;Britannic Bold;Broadway;Browallia New;BrowalliaUPC;Brush Script MT;Californian FB;Calisto MT;Calligrapher;Candara;CaslonOpnface BT;Castellar;Centaur;Cezanne;CG Omega;CG Times;Chalkboard;Chalkboard SE;Chalkduster;Charlesworth;Charter Bd BT;Charter BT;Chaucer;ChelthmITC Bk BT;Chiller;Clarendon;Clarendon Condensed;CloisterBlack BT;Cochin;Colonna MT;Constantia;Cooper Black;Copperplate;Copperplate Gothic;Copperplate Gothic Bold;Copperplate Gothic Light;CopperplGoth Bd BT;Corbel;Cordia New;CordiaUPC;Cornerstone;Coronet;Cuckoo;Curlz MT;DaunPenh;Dauphin;David;DB LCD Temp;DELICIOUS;Denmark;DFKai-SB;Didot;DilleniaUPC;DIN;DokChampa;Dotum;DotumChe;Ebrima;Edwardian Script ITC;Elephant;English 111 Vivace BT;Engravers MT;EngraversGothic BT;Eras Bold ITC;Eras Demi ITC;Eras Light ITC;Eras Medium ITC;EucrosiaUPC;Euphemia;Euphemia UCAS;EUROSTILE;Exotc350 Bd BT;FangSong;Felix Titling;Fixedsys;FONTIN;Footlight MT Light;Forte;FrankRuehl;Fransiscan;Freefrm721 Blk BT;FreesiaUPC;Freestyle Script;French Script MT;FrnkGothITC Bk BT;Fruitger;FRUTIGER;Futura;Futura Bk BT;Futura Lt BT;Futura Md BT;Futura ZBlk BT;FuturaBlack BT;Gabriola;Galliard BT;Gautami;Geeza Pro;Geometr231 BT;Geometr231 Hv BT;Geometr231 Lt BT;GeoSlab 703 Lt BT;GeoSlab 703 XBd BT;Gigi;Gill Sans;Gill Sans MT;Gill Sans MT Condensed;Gill Sans MT Ext Condensed Bold;Gill Sans Ultra Bold;Gill Sans Ultra Bold Condensed;Gisha;Gloucester MT Extra Condensed;GOTHAM;GOTHAM BOLD;Goudy Old Style;Goudy Stout;GoudyHandtooled BT;GoudyOLSt BT;Gujarati Sangam MN;Gulim;GulimChe;Gungsuh;GungsuhChe;Gurmukhi MN;Haettenschweiler;Harlow Solid Italic;Harrington;Heather;Heiti SC;Heiti TC;HELV;Herald;High Tower Text;Hiragino Kaku Gothic ProN;Hiragino Mincho ProN;Hoefler Text;Humanst 521 Cn BT;Humanst521 BT;Humanst521 Lt BT;Imprint MT Shadow;Incised901 Bd BT;Incised901 BT;Incised901 Lt BT;INCONSOLATA;Informal Roman;Informal011 BT;INTERSTATE;IrisUPC;Iskoola Pota;JasmineUPC;Jazz LET;Jenson;Jester;Jokerman;Juice ITC;Kabel Bk BT;Kabel Ult BT;Kailasa;KaiTi;Kalinga;Kannada Sangam MN;Kartika;Kaufmann Bd BT;Kaufmann BT;Khmer UI;KodchiangUPC;Kokila;Korinna BT;Kristen ITC;Krungthep;Kunstler Script;Lao UI;Latha;Leelawadee;Letter Gothic;Levenim MT;LilyUPC;Lithograph;Lithograph Light;Long Island;Lydian BT;Magneto;Maiandra GD;Malayalam Sangam MN;Malgun Gothic;Mangal;Marigold;Marion;Marker Felt;Market;Marlett;Matisse ITC;Matura MT Script Capitals;Meiryo;Meiryo UI;Microsoft Himalaya;Microsoft JhengHei;Microsoft New Tai Lue;Microsoft PhagsPa;Microsoft Tai Le;Microsoft Uighur;Microsoft YaHei;Microsoft Yi Baiti;MingLiU;MingLiU_HKSCS;MingLiU_HKSCS-ExtB;MingLiU-ExtB;Minion;Minion Pro;Miriam;Miriam Fixed;Mistral;Modern;Modern No. 20;Mona Lisa Solid ITC TT;Mongolian Baiti;MONO;MoolBoran;Mrs Eaves;MS LineDraw;MS Mincho;MS PMincho;MS Reference Specialty;MS UI Gothic;MT Extra;MUSEO;MV Boli;Nadeem;Narkisim;NEVIS;News Gothic;News GothicMT;NewsGoth BT;Niagara Engraved;Niagara Solid;Noteworthy;NSimSun;Nyala;OCR A Extended;Old Century;Old English Text MT;Onyx;Onyx BT;OPTIMA;Oriya Sangam MN;OSAKA;OzHandicraft BT;Palace Script MT;Papyrus;Parchment;Party LET;Pegasus;Perpetua;Perpetua Titling MT;PetitaBold;Pickwick;Plantagenet Cherokee;Playbill;PMingLiU;PMingLiU-ExtB;Poor Richard;Poster;PosterBodoni BT;PRINCETOWN LET;Pristina;PTBarnum BT;Pythagoras;Raavi;Rage Italic;Ravie;Ribbon131 Bd BT;Rockwell;Rockwell Condensed;Rockwell Extra Bold;Rod;Roman;Sakkal Majalla;Santa Fe LET;Savoye LET;Sceptre;Script;Script MT Bold;SCRIPTINA;Serifa;Serifa BT;Serifa Th BT;ShelleyVolante BT;Sherwood;Shonar Bangla;Showcard Gothic;Shruti;Signboard;SILKSCREEN;SimHei;Simplified Arabic;Simplified Arabic Fixed;SimSun;SimSun-ExtB;Sinhala Sangam MN;Sketch Rockwell;Skia;Small Fonts;Snap ITC;Snell Roundhand;Socket;Souvenir Lt BT;Staccato222 BT;Steamer;Stencil;Storybook;Styllo;Subway;Swis721 BlkEx BT;Swiss911 XCm BT;Sylfaen;Synchro LET;System;Tamil Sangam MN;Technical;Teletype;Telugu Sangam MN;Tempus Sans ITC;Terminal;Thonburi;Traditional Arabic;Trajan;TRAJAN PRO;Tristan;Tubular;Tunga;Tw Cen MT;Tw Cen MT Condensed;Tw Cen MT Condensed Extra Bold;TypoUpright BT;Unicorn;Univers;Univers CE 55 Medium;Univers Condensed;Utsaah;Vagabond;Vani;Vijaya;Viner Hand ITC;VisualUI;Vivaldi;Vladimir Script;Vrinda;Westminster;WHITNEY;Wide Latin;ZapfEllipt BT;ZapfHumnst BT;ZapfHumnst Dm BT;Zapfino;Zurich BlkEx BT;Zurich Ex BT;ZWAdobeF".split(";"))); for (var e = e.concat(b.fonts.userDefinedFonts), e = e.filter(function(a, b) { return e.indexOf(a) === b }), f = document.getElementsByTagName("body")[0], g = document.createElement("div"), k = document.createElement("div"), r = {}, h = {}, l = [], n = 0, u = d.length; n < u; n++) { var y = c(); y.style.fontFamily = d[n]; g.appendChild(y); l.push(y) } f.appendChild(g); n = 0; for (u = d.length; n < u; n++) r[d[n]] = l[n].offsetWidth, h[d[n]] = l[n].offsetHeight; l = {}; n = 0; for (u = e.length; n < u; n++) { for (var y = [], t = 0, Q = d.length; t < Q; t++) { var z; z = e[n]; var A = d[t] , m = c(); m.style.fontFamily = "'" + z + "'," + A; z = m; k.appendChild(z); y.push(z) } l[e[n]] = y } f.appendChild(k); n = []; u = 0; for (y = e.length; u < y; u++) { t = l[e[u]]; Q = !1; for (z = 0; z < d.length && !(Q = t[z].offsetWidth !== r[d[z]] || t[z].offsetHeight !== h[d[z]]); z++) ; Q && n.push(e[u]) } f.removeChild(k); f.removeChild(g); a(n) }, pauseBefore: !0 }, { key: "fontsFlash", getData: function(a, b) { if ("undefined" === typeof window.swfobject) return a("swf object not loaded"); if (!window.swfobject.hasFlashPlayerVersion("9.0.0")) return a("flash not installed"); if (!b.fonts.swfPath) return a("missing options.fonts.swfPath"); window.___fp_swf_loaded = function(b) { a(b) } ; var c = b.fonts.swfContainerId , d = document.createElement("div"); d.setAttribute("id", (void 0).fonts.swfContainerId); document.body.appendChild(d); window.swfobject.embedSWF(b.fonts.swfPath, c, "1", "1", "9.0.0", !1, { onReady: "___fp_swf_loaded" }, { allowScriptAccess: "always", menu: "false" }, {}) }, pauseBefore: !0 }, { key: "audio", getData: function(a, b) { var c = b.audio; if (c.excludeIOS11 && navigator.userAgent.match(/OS 11.+Version\/11.+Safari/)) return a(b.EXCLUDED); var d = window.OfflineAudioContext || window.webkitOfflineAudioContext; if (null == d) return a(b.NOT_AVAILABLE); var e = new d(1,44100,44100) , f = e.createOscillator(); f.type = "triangle"; f.frequency.setValueAtTime(1E4, e.currentTime); var g = e.createDynamicsCompressor(); w([["threshold", -50], ["knee", 40], ["ratio", 12], ["reduction", -20], ["attack", 0], ["release", .25]], function(a) { void 0 !== g[a[0]] && "function" === typeof g[a[0]].setValueAtTime && g[a[0]].setValueAtTime(a[1], e.currentTime) }); f.connect(g); g.connect(e.destination); f.start(0); e.startRendering(); var k = setTimeout(function() { console.warn('Audio fingerprint timed out. Please report bug at https://github.com/Valve/fingerprintjs2 with your user agent: "' + navigator.userAgent + '".'); e.oncomplete = function() {} ; e = null; return a("audioTimeout") }, c.timeout); e.oncomplete = function(b) { var c; try { clearTimeout(k), c = b.renderedBuffer.getChannelData(0).slice(4500, 5E3).reduce(function(a, b) { return a + Math.abs(b) }, 0).toString(), f.disconnect(), g.disconnect() } catch (vb) { a(vb); return } a(c) } } }, { key: "enumerateDevices", getData: function(a, b) { if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) return a(b.NOT_AVAILABLE); navigator.mediaDevices.enumerateDevices().then(function(b) { a(b.map(function(a) { return "id\x3d" + a.deviceId + ";gid\x3d" + a.groupId + ";" + a.kind + ";" + a.label })) }) } }]; a.get = function(a, b) { function c(d) { r += 1; if (r >= a.components.length) b(g.data); else { var e = a.components[r]; if (a.excludes[e.key]) c(!1); else if (!d && e.pauseBefore) --r, setTimeout(function() { c(!0) }, 1); else try { e.getData(function(a) { g.addPreprocessedComponent(e.key, a); c(!1) }, a) } catch (vb) { g.addPreprocessedComponent(e.key, String(vb)), c(!1) } } } b ? a || (a = {}) : (b = a, a = {}); var d = a; if (null != v) { var e, f; for (f in v) e = v[f], null == e || Object.prototype.hasOwnProperty.call(d, f) || (d[f] = e) } a.components = a.extraComponents.concat(t); var g = { data: [], addPreprocessedComponent: function(b, c) { "function" === typeof a.preprocessor && (c = a.preprocessor(b, c)); g.data.push({ key: b, value: c }) } } , r = -1; c(!1) } ; a.getPromise = function(b) { return new Promise(function(c) { a.get(b, c) } ) } ; a.getV18 = function(b, c) { null == c && (c = b, b = {}); return a.get(b, function(a) { for (var d = [], e = 0; e < a.length; e++) { var f = a[e]; f.value === (b.NOT_AVAILABLE || "not available") ? d.push({ key: f.key, value: "unknown" }) : "plugins" === f.key ? d.push({ key: "plugins", value: m(f.value, function(a) { var b = m(a[2], function(a) { return a.join ? a.join("~") : a }).join(","); return [a[0], a[1], b].join("::") }) }) : -1 !== ["canvas", "webgl"].indexOf(f.key) ? d.push({ key: f.key, value: f.value.join("~") }) : -1 !== ["sessionStorage", "localStorage", "indexedDb", "addBehavior", "openDatabase"].indexOf(f.key) ? f.value && d.push({ key: f.key, value: 1 }) : f.value ? d.push(f.value.join ? { key: f.key, value: f.value.join(";") } : f) : d.push({ key: f.key, value: f.value }) } a = r(m(d, function(a) { return a.value }).join("~~~"), 31); c(a, d) }) } ; a.x64hash128 = r; a.VERSION = "2.1.0"; return a } function Zb(a) { for (var c = [], b = 0; b < 8 * a.length; b += 8) c[b >> 5] |= (a.charCodeAt(b / 8) & 255) << b % 32; a = 8 * a.length; c[a >> 5] |= 128 << a % 32; c[(a + 64 >>> 9 << 4) + 14] = a; a = 1732584193; for (var b = -271733879, d = -1732584194, e = 271733878, f = 0; f < c.length; f += 16) { var g = a , h = b , A = d , m = e; a = C(a, b, d, e, c[f + 0], 7, -680876936); e = C(e, a, b, d, c[f + 1], 12, -389564586); d = C(d, e, a, b, c[f + 2], 17, 606105819); b = C(b, d, e, a, c[f + 3], 22, -1044525330); a = C(a, b, d, e, c[f + 4], 7, -176418897); e = C(e, a, b, d, c[f + 5], 12, 1200080426); d = C(d, e, a, b, c[f + 6], 17, -1473231341); b = C(b, d, e, a, c[f + 7], 22, -45705983); a = C(a, b, d, e, c[f + 8], 7, 1770035416); e = C(e, a, b, d, c[f + 9], 12, -1958414417); d = C(d, e, a, b, c[f + 10], 17, -42063); b = C(b, d, e, a, c[f + 11], 22, -1990404162); a = C(a, b, d, e, c[f + 12], 7, 1804603682); e = C(e, a, b, d, c[f + 13], 12, -40341101); d = C(d, e, a, b, c[f + 14], 17, -1502002290); b = C(b, d, e, a, c[f + 15], 22, 1236535329); a = H(a, b, d, e, c[f + 1], 5, -165796510); e = H(e, a, b, d, c[f + 6], 9, -1069501632); d = H(d, e, a, b, c[f + 11], 14, 643717713); b = H(b, d, e, a, c[f + 0], 20, -373897302); a = H(a, b, d, e, c[f + 5], 5, -701558691); e = H(e, a, b, d, c[f + 10], 9, 38016083); d = H(d, e, a, b, c[f + 15], 14, -660478335); b = H(b, d, e, a, c[f + 4], 20, -405537848); a = H(a, b, d, e, c[f + 9], 5, 568446438); e = H(e, a, b, d, c[f + 14], 9, -1019803690); d = H(d, e, a, b, c[f + 3], 14, -187363961); b = H(b, d, e, a, c[f + 8], 20, 1163531501); a = H(a, b, d, e, c[f + 13], 5, -1444681467); e = H(e, a, b, d, c[f + 2], 9, -51403784); d = H(d, e, a, b, c[f + 7], 14, 1735328473); b = H(b, d, e, a, c[f + 12], 20, -1926607734); a = I(a, b, d, e, c[f + 5], 4, -378558); e = I(e, a, b, d, c[f + 8], 11, -2022574463); d = I(d, e, a, b, c[f + 11], 16, 1839030562); b = I(b, d, e, a, c[f + 14], 23, -35309556); a = I(a, b, d, e, c[f + 1], 4, -1530992060); e = I(e, a, b, d, c[f + 4], 11, 1272893353); d = I(d, e, a, b, c[f + 7], 16, -155497632); b = I(b, d, e, a, c[f + 10], 23, -1094730640); a = I(a, b, d, e, c[f + 13], 4, 681279174); e = I(e, a, b, d, c[f + 0], 11, -358537222); d = I(d, e, a, b, c[f + 3], 16, -722521979); b = I(b, d, e, a, c[f + 6], 23, 76029189); a = I(a, b, d, e, c[f + 9], 4, -640364487); e = I(e, a, b, d, c[f + 12], 11, -421815835); d = I(d, e, a, b, c[f + 15], 16, 530742520); b = I(b, d, e, a, c[f + 2], 23, -995338651); a = J(a, b, d, e, c[f + 0], 6, -198630844); e = J(e, a, b, d, c[f + 7], 10, 1126891415); d = J(d, e, a, b, c[f + 14], 15, -1416354905); b = J(b, d, e, a, c[f + 5], 21, -57434055); a = J(a, b, d, e, c[f + 12], 6, 1700485571); e = J(e, a, b, d, c[f + 3], 10, -1894986606); d = J(d, e, a, b, c[f + 10], 15, -1051523); b = J(b, d, e, a, c[f + 1], 21, -2054922799); a = J(a, b, d, e, c[f + 8], 6, 1873313359); e = J(e, a, b, d, c[f + 15], 10, -30611744); d = J(d, e, a, b, c[f + 6], 15, -1560198380); b = J(b, d, e, a, c[f + 13], 21, 1309151649); a = J(a, b, d, e, c[f + 4], 6, -145523070); e = J(e, a, b, d, c[f + 11], 10, -1120210379); d = J(d, e, a, b, c[f + 2], 15, 718787259); b = J(b, d, e, a, c[f + 9], 21, -343485551); a = B(a, g); b = B(b, h); d = B(d, A); e = B(e, m) } c = [a, b, d, e]; a = ""; for (b = 0; b < 4 * c.length; b++) a += "0123456789abcdef".charAt(c[b >> 2] >> b % 4 * 8 + 4 & 15) + "0123456789abcdef".charAt(c[b >> 2] >> b % 4 * 8 & 15); return a } function C(a, c, b, d, e, f, g) { return B(Ta(B(B(a, c & b | ~c & d), B(e, g)), f), c) } function H(a, c, b, d, e, f, g) { return B(Ta(B(B(a, c & d | b & ~d), B(e, g)), f), c) } function I(a, c, b, d, e, f, g) { return B(Ta(B(B(a, c ^ b ^ d), B(e, g)), f), c) } function J(a, c, b, d, e, f, g) { return B(Ta(B(B(a, b ^ (c | ~d)), B(e, g)), f), c) } function B(a, c) { var b = (a & 65535) + (c & 65535); return (a >> 16) + (c >> 16) + (b >> 16) << 16 | b & 65535 } function Ta(a, c) { return a << c | a >>> 32 - c } function Ua(a) { try { var c, b, d, e = document.cookie.split(";"); for (c = 0; c < e.length; c++) if (b = e[c].substr(0, e[c].indexOf("\x3d")), d = e[c].substr(e[c].indexOf("\x3d") + 1), b = b.replace(/^\s+|\s+$/g, ""), a = a.replace(/^\s+|\s+$/g, ""), b == a) return unescape(d) } catch (f) {} } function Va(a, c, b, d, e, f) { var g = new Date; g.setTime(g.getTime()); -1 != b ? (b *= 864E5, g = new Date(g.getTime() + b), cookieString = a + "\x3d" + escape(c) + (b ? ";expires\x3d" + g.toGMTString() : "") + (d ? ";path\x3d" + d : "") + (e ? ";domain\x3d" + e : "") + (f ? ";secure" : "")) : (g = -1, cookieString = a + "\x3d" + escape(c) + (b ? ";expires\x3d" + g : "") + (d ? ";path\x3d" + d : "") + (e ? ";domain\x3d" + e : "") + (f ? ";secure" : "")); document.cookie = cookieString } function Bc(a) { a = a.replace(/\s/g, ""); if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(a)) { a = a.split("."); if (0 == parseInt(parseFloat(a[0])) || 0 == parseInt(parseFloat(a[3]))) return !1; for (var c = 0; c < a.length; c++) if (255 < parseInt(parseFloat(a[c]))) return !1; return !0 } return !1 } function mb() { return void 0 !== window.SDKElement && "" !== window.SDKElement ? !0 : !1 } function Va(a, c, b, d) { try { var e = new Date; e.setTime(e.getTime() + 864E5 * Number(b)); document.cookie = 1 == d ? a + "\x3d" + c + "; path\x3d/;expires \x3d " + e.toGMTString() + ";domain\x3d" + Ra(window.location.host.split(":")[0]) + ";secure\x3d" + d : a + "\x3d" + c + "; path\x3d/;expires \x3d " + e.toGMTString() + ";domain\x3d" + Ra(window.location.host.split(":")[0]) } catch (f) {} } function $b() { return ("ontouchstart"in window || 0 < navigator.maxTouchPoints || 0 < navigator.msMaxTouchPoints) && navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) ? "WAP" : "WEB" } function Ka() { this.dfpCache = new evercookie } "undefined" !== typeof window && "function" === typeof define && define.amd ? define(Sa) : "undefined" !== typeof module && module.exports ? module.exports = Sa() : this.exports ? this.exports = Sa() : this.Fingerprint2 = Sa(); var ac = { now: function() { return (new Date).getTime() }, rand: function() { return Math.random().toString().substr(2) }, removeElem: function(a) { var c = a.parentNode; if (c) try { c.removeChild(a) } catch (b) {} }, parseData: function(a) { var c = ""; if ("string" === typeof a) c = a; else if ("object" === typeof a) for (var b in a) c += "\x26" + b + "\x3d" + encodeURIComponent(a[b]); c += "\x26_time\x3d" + this.now(); return c = c.substr(1) }, getJSON: function(a, c, b) { c = document.createElement("script"); c.type = "text/javascript"; c.src = a; c.id = "id_callbackFunction"; window.callbackFunction = function(a) { window.callbackFunction = void 0; var c = document.getElementById("id_callbackFunction"); c && ac.removeElem(c); b(a) } ; var d = document.getElementsByTagName("head"); !d || !d[0] || document.getElementById("id_callbackFunction") && -1 != a.indexOf("getFinger") || d[0].appendChild(c) } }; "object" != typeof JSON && (JSON = {}); (function() { function a(a) { return 10 > a ? "0" + a : a } function c() { return this.valueOf() } function b(a) { return u.lastIndex = 0, u.test(a) ? '"' + a.replace(u, function(a) { var b = g[a]; return "string" == typeof b ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + a + '"' } function d(a, c) { var g, r, n, u, k, l = e, q = c[a]; switch (q && "object" == typeof q && "function" == typeof q.toJSON && (q = q.toJSON(a)), "function" == typeof h && (q = h.call(c, a, q)), typeof q) { case "string": return b(q); case "number": return isFinite(q) ? String(q) : "null"; case "boolean": case "null": return String(q); case "object": if (!q) return "null"; if (e += f, k = [], "[object Array]" === Object.prototype.toString.apply(q)) { u = q.length; for (g = 0; u > g; g += 1) k[g] = d(g, q) || "null"; return n = 0 === k.length ? "[]" : e ? "[\n" + e + k.join(",\n" + e) + "\n" + l + "]" : "[" + k.join(",") + "]", e = l, n } if (h && "object" == typeof h) for (u = h.length, g = 0; u > g; g += 1) "string" == typeof h[g] && (r = h[g], n = d(r, q), n && k.push(b(r) + (e ? ": " : ":") + n)); else for (r in q) Object.prototype.hasOwnProperty.call(q, r) && (n = d(r, q), n && k.push(b(r) + (e ? ": " : ":") + n)); return n = 0 === k.length ? "{}" : e ? "{\n" + e + k.join(",\n" + e) + "\n" + l + "}" : "{" + k.join(",") + "}", e = l, n } } var e, f, g, h, m = /^[\],:{}\s]*$/, p = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, w = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, r = /(?:^|:|,)(?:\s*\[)+/g, u = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, n = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; "function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function() { return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + a(this.getUTCMonth() + 1) + "-" + a(this.getUTCDate()) + "T" + a(this.getUTCHours()) + ":" + a(this.getUTCMinutes()) + ":" + a(this.getUTCSeconds()) + "Z" : null } , Boolean.prototype.toJSON = c, Number.prototype.toJSON = c, String.prototype.toJSON = c); "function" != typeof JSON.stringify && (g = { "\b": "\\b", " ": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, JSON.stringify = function(a, b, c) { var g; if (e = "", f = "", "number" == typeof c) for (g = 0; c > g; g += 1) f += " "; else "string" == typeof c && (f = c); if (h = b, b && "function" != typeof b && ("object" != typeof b || "number" != typeof b.length)) throw Error("JSON.stringify"); return d("", { "": a }) } ); "function" != typeof JSON.parse && (JSON.parse = function(a, b) { function c(a, d) { var e, f, g = a[d]; if (g && "object" == typeof g) for (e in g) Object.prototype.hasOwnProperty.call(g, e) && (f = c(g, e), void 0 !== f ? g[e] = f : delete g[e]); return b.call(a, d, g) } var d; if (a = String(a), n.lastIndex = 0, n.test(a) && (a = a.replace(n, function(a) { return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) })), m.test(a.replace(p, "@").replace(w, "]").replace(r, ""))) return d = eval("(" + a + ")"), "function" == typeof b ? c({ "": d }, "") : d; throw new SyntaxError("JSON.parse"); } ) } )(); Array.prototype.indexOf || (Array.prototype.indexOf = function(a, c) { var b; if (null == this) throw new TypeError("'this' is null or undefined"); var d = Object(this) , e = d.length >>> 0; if (0 === e) return -1; b = +c || 0; Infinity === Math.abs(b) && (b = 0); if (b >= e) return -1; for (b = Math.max(0 <= b ? b : e - Math.abs(b), 0); b < e; ) { if (b in d && d[b] === a) return b; b++ } return -1 } ); var Wa, S = window, v = document, ea = navigator, bc = !1, Qa = [function() { if (bc) { var a = v.getElementsByTagName("body")[0] , c = v.createElement("object"); c.setAttribute("type", "application/x-shockwave-flash"); var b = a.appendChild(c); if (b) { var d = 0; (function f() { if ("undefined" != typeof b.GetVariable) { var g = b.GetVariable("$version"); g && (g = g.split(" ")[1].split(","), p.pv = [parseInt(g[0], 10), parseInt(g[1], 10), parseInt(g[2], 10)]) } else if (10 > d) { d++; setTimeout(f, 10); return } a.removeChild(c); b = null; ub() } )() } else ub() } else ub() } ], da = [], Na = [], ma = [], wa, Pa, rb, Vb, ha = !1, Oa = !1, aa, nb, Sb = !0, p, Dc = "undefined" != typeof v.getElementById && "undefined" != typeof v.getElementsByTagName && "undefined" != typeof v.createElement, Xa = ea.userAgent.toLowerCase(), Ya = ea.platform.toLowerCase(), Ec = Ya ? /win/.test(Ya) : /win/.test(Xa), Fc = Ya ? /mac/.test(Ya) : /mac/.test(Xa), Gc = /webkit/.test(Xa) ? parseFloat(Xa.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : !1, wb = !+"\v1", xa = [0, 0, 0], P = null; if ("undefined" != typeof ea.plugins && "object" == typeof ea.plugins["Shockwave Flash"]) !(P = ea.plugins["Shockwave Flash"].description) || "undefined" != typeof ea.mimeTypes && ea.mimeTypes["application/x-shockwave-flash"] && !ea.mimeTypes["application/x-shockwave-flash"].enabledPlugin || (bc = !0, wb = !1, P = P.replace(/^.*\s+(\S+\s+\S+$)/, "$1"), xa[0] = parseInt(P.replace(/^(.*)\..*$/, "$1"), 10), xa[1] = parseInt(P.replace(/^.*\.(.*)\s.*$/, "$1"), 10), xa[2] = /[a-zA-Z]/.test(P) ? parseInt(P.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0); else if ("undefined" != typeof S.ActiveXObject) try { if (P = (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version")) wb = !0, P = P.split(" ")[1].split(","), xa = [parseInt(P[0], 10), parseInt(P[1], 10), parseInt(P[2], 10)] } catch (a) {} p = { w3: Dc, pv: xa, wk: Gc, ie: wb, win: Ec, mac: Fc }; p.w3 && (("undefined" != typeof v.readyState && "complete" == v.readyState || "undefined" == typeof v.readyState && (v.getElementsByTagName("body")[0] || v.body)) && na(), ha || ("undefined" != typeof v.addEventListener && v.addEventListener("DOMContentLoaded", na, !1), p.ie && p.win && (v.attachEvent("onreadystatechange", function c() { "complete" == v.readyState && (v.detachEvent("onreadystatechange", c), na()) }), S == top && function b() { if (!ha) { try { v.documentElement.doScroll("left") } catch (d) { setTimeout(b, 0); return } na() } }()), p.wk && function c() { ha || (/loaded|complete/.test(v.readyState) ? na() : setTimeout(c, 0)) }(), Wb(na))); p.ie && p.win && window.attachEvent("onunload", function() { for (var a = ma.length, c = 0; c < a; c++) ma[c][0].detachEvent(ma[c][1], ma[c][2]); a = Na.length; for (c = 0; c < a; c++) Ub(Na[c]); for (var b in p) p[b] = null; p = null; for (var d in Wa) Wa[d] = null; Wa = null }); Wa = { registerObject: function(a, c, b, d) { if (p.w3 && a && c) { var e = {}; e.id = a; e.swfVersion = c; e.expressInstall = b; e.callbackFn = d; da[da.length] = e; ga(a, !1) } else d && d({ success: !1, id: a }) }, getObjectById: function(a) { if (p.w3) return tb(a) }, embedSWF: function(a, c, b, d, e, f, g, h, m, pa) { var A = { success: !1, id: c }; p.w3 && !(p.wk && 312 > p.wk) && a && c && b && d && e ? (ga(c, !1), Xb(function() { b += ""; d += ""; var r = {}; if (m && "object" === typeof m) for (var u in m) r[u] = m[u]; r.data = a; r.width = b; r.height = d; u = {}; if (h && "object" === typeof h) for (var n in h) u[n] = h[n]; if (g && "object" === typeof g) for (var y in g) u.flashvars = "undefined" != typeof u.flashvars ? u.flashvars + ("\x26" + y + "\x3d" + g[y]) : y + "\x3d" + g[y]; if (Ma(e)) n = ob(r, u, c), r.id == c && ga(c, !0), A.success = !0, A.ref = n; else { if (f && sb()) { r.data = f; qb(r, u, c, pa); return } ga(c, !0) } pa && pa(A) })) : pa && pa(A) }, switchOffAutoHideShow: function() { Sb = !1 }, ua: p, getFlashPlayerVersion: function() { return { major: p.pv[0], minor: p.pv[1], release: p.pv[2] } }, hasFlashPlayerVersion: Ma, createSWF: function(a, c, b) { if (p.w3) return ob(a, c, b) }, showExpressInstall: function(a, c, b, d) { p.w3 && sb() && qb(a, c, b, d) }, removeSWF: function(a) { p.w3 && Ub(a) }, createCSS: function(a, c, b, d) { p.w3 && Tb(a, c, b, d) }, addDomLoadEvent: Xb, addLoadEvent: Wb, getQueryParamValue: function(a) { var c = v.location.search || v.location.hash; if (c) { /\?/.test(c) && (c = c.split("?")[1]); if (null == a) return Rb(c); for (var c = c.split("\x26"), b = 0; b < c.length; b++) if (c[b].substring(0, c[b].indexOf("\x3d")) == a) return Rb(c[b].substring(c[b].indexOf("\x3d") + 1)) } return "" }, expressInstallCallback: function() { if (Oa) { var a = W("SWFObjectExprInst"); a && wa && (a.parentNode.replaceChild(wa, a), Pa && (ga(Pa, !0), p.ie && p.win && (wa.style.display = "block")), rb && rb(Vb)); Oa = !1 } } }; try { var x = window , K = x.document , xb = x.globalStorage , Hc = x.swfobject; try { var yb = x.localStorage } catch (a) {} try { var zb = x.sessionStorage } catch (a) {} var ya, Za, cc = { history: !1, java: !1, tests: 2, silverlight: !1, domain: Ra(x.location.host.split(":")[0]), baseurl: "", asseturi: "/assets", authPath: !1 }; x._evercookie_flash_var = function(a) { ya = a; (a = K.getElementById("myswf")) && a.parentNode && a.parentNode.removeChild(a) } ; x.evercookie = x.Evercookie = function(a) { a = a || {}; var c = {}, b; for (b in cc) { var d = a[b]; c[b] = "undefined" !== typeof d ? d : cc[b] } "function" === typeof c.domain && (c.domain = c.domain(x)); var e = c.tests , f = c.domain , g = this; this._ec = {}; this.get = function(a, b, c) { g._evercookie(a, b, void 0, void 0, c) } ; this.set = function(a, b) { g._evercookie(a, function() {}, b) } ; this._evercookie = function(a, b, c, d, f) { void 0 === g._evercookie && (g = this); void 0 === d && (d = 0); 0 === d && (g.evercookie_database_storage(a, c), g.evercookie_indexdb_storage(a, c), g._ec.userData = g.evercookie_userdata(a, c), g._ec.localData = g.evercookie_local_storage(a, c), g._ec.globalData = g.evercookie_global_storage(a, c), g._ec.sessionData = g.evercookie_session_storage(a, c)); if (void 0 !== c) ("undefined" === typeof ya || "undefined" === typeof Za) && d++ < e && setTimeout(function() { g._evercookie(a, b, c, d, f) }, 300); else if ((x.openDatabase && "undefined" === typeof g._ec.dbData || ("indexedDB"in x || (x.indexedDB = x.indexedDB || x.mozIndexedDB || x.webkitIndexedDB || x.msIndexedDB)) && ("undefined" === typeof g._ec.idbData || "" === g._ec.idbData) || "undefined" === typeof ya || "undefined" === typeof g._ec.etagData || "undefined" === typeof g._ec.cacheData || "undefined" === typeof g._ec.javaData || K.createElement("canvas").getContext && ("undefined" === typeof g._ec.pngData || "" === g._ec.pngData) || "undefined" === typeof Za) && d++ < e) setTimeout(function() { g._evercookie(a, b, c, d, f) }, 20); else { g._ec.lsoData = g.getFromStr(a, ya); ya = void 0; g._ec.slData = g.getFromStr(a, Za); Za = void 0; var n = g._ec, r = [], h = 0, u, k; g._ec = {}; for (k in n) n[k] && "null" !== n[k] && "undefined" !== n[k] && (r[n[k]] = void 0 === r[n[k]] ? 1 : r[n[k]] + 1); for (k in r) r[k] > h && (h = r[k], u = k); void 0 === u || void 0 !== f && 1 === f || g.set(a, u); "function" === typeof b && b(u, n) } } ; this.evercookie_userdata = function(a, b) { try { var c = this.createElem("div", "userdata_el", 1); if (c.addBehavior) if (c.style.behavior = "url(#default#userData)", void 0 !== b) c.setAttribute(a, b), c.save(a); else return c.load(a), c.getAttribute(a) } catch (y) {} } ; this.evercookie_local_storage = function(a, b) { try { if (yb) if (void 0 !== b) yb.setItem(a, b); else return yb.getItem(a) } catch (n) {} } ; this.evercookie_database_storage = function(a, b) { try { if (x.openDatabase) { var c = x.openDatabase("sqlite_evercookie", "", "evercookie", 1048576); void 0 !== b ? c.transaction(function(c) { c.executeSql("CREATE TABLE IF NOT EXISTS cache(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, value TEXT NOT NULL, UNIQUE (name))", [], function() {}, function() {}); c.executeSql("INSERT OR REPLACE INTO cache(name, value) VALUES(?, ?)", [a, b], function() {}, function() {}) }) : c.transaction(function(b) { b.executeSql("SELECT value FROM cache WHERE name\x3d?", [a], function(a, b) { g._ec.dbData = 1 <= b.rows.length ? b.rows.item(0).value : "" }, function() {}) }) } } catch (y) {} } ; this.evercookie_indexdb_storage = function(a, b) { try { if ("indexedDB"in x || (indexedDB = x.indexedDB || x.mozIndexedDB || x.webkitIndexedDB || x.msIndexedDB, IDBTransaction = x.IDBTransaction || x.webkitIDBTransaction || x.msIDBTransaction, IDBKeyRange = x.IDBKeyRange || x.webkitIDBKeyRange || x.msIDBKeyRange), indexedDB) { var c = indexedDB.open("idb_evercookie", 1); c.onerror = function() {} ; c.onupgradeneeded = function(a) { a.target.result.createObjectStore("evercookie", { keyPath: "name", unique: !1 }) } ; c.onsuccess = void 0 !== b ? function(c) { c = c.target.result; c.objectStoreNames.contains("evercookie") && c.transaction(["evercookie"], "readwrite").objectStore("evercookie").put({ name: a, value: b }); c.close() } : function(b) { b = b.target.result; if (b.objectStoreNames.contains("evercookie")) { var c = b.transaction(["evercookie"]).objectStore("evercookie").get(a); c.onsuccess = function() { g._ec.idbData = void 0 === c.result ? void 0 : c.result.value } } else g._ec.idbData = void 0; b.close() } } } catch (y) {} } ; this.evercookie_session_storage = function(a, b) { try { if (zb) if (void 0 !== b) zb.setItem(a, b); else return zb.getItem(a) } catch (n) {} } ; this.evercookie_global_storage = function(a, b) { if (xb) { var c = this.getHost(); try { if (void 0 !== b) xb[c][a] = b; else return xb[c][a] } catch (y) {} } } ; this.encode = function(a) { var b = "", c, d, e, f, g, h, r = 0; for (a = this._utf8_encode(a); r < a.length; ) c = a.charCodeAt(r++), d = a.charCodeAt(r++), e = a.charCodeAt(r++), f = c >> 2, c = (c & 3) << 4 | d >> 4, g = (d & 15) << 2 | e >> 6, h = e & 63, isNaN(d) ? g = h = 64 : isNaN(e) && (h = 64), b = b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(f) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(c) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(g) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(h); return b } ; this.decode = function(a) { var b = "", c, d, e, f, g, h = 0; for (a = a.replace(/[^A-Za-z0-9\+\/\=]/g, ""); h < a.length; ) c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(a.charAt(h++)), d = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(a.charAt(h++)), f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(a.charAt(h++)), g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".indexOf(a.charAt(h++)), c = c << 2 | d >> 4, d = (d & 15) << 4 | f >> 2, e = (f & 3) << 6 | g, b += String.fromCharCode(c), 64 !== f && (b += String.fromCharCode(d)), 64 !== g && (b += String.fromCharCode(e)); return b = this._utf8_decode(b) } ; this._utf8_encode = function(a) { a = a.replace(/\r\n/g, "\n"); for (var b = "", c = 0, d = a.length, e; c < d; c++) e = a.charCodeAt(c), 128 > e ? b += String.fromCharCode(e) : (127 < e && 2048 > e ? b += String.fromCharCode(e >> 6 | 192) : (b += String.fromCharCode(e >> 12 | 224), b += String.fromCharCode(e >> 6 & 63 | 128)), b += String.fromCharCode(e & 63 | 128)); return b } ; this._utf8_decode = function(a) { for (var b = "", c = 0, d = a.length, e, f, g; c < d; ) e = a.charCodeAt(c), 128 > e ? (b += String.fromCharCode(e), c += 1) : 191 < e && 224 > e ? (f = a.charCodeAt(c + 1), b += String.fromCharCode((e & 31) << 6 | f & 63), c += 2) : (f = a.charCodeAt(c + 1), g = a.charCodeAt(c + 2), b += String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63), c += 3); return b } ; this.createElem = function(a, b, c) { a = void 0 !== b && K.getElementById(b) ? K.getElementById(b) : K.createElement(a); a.style.visibility = "hidden"; a.style.position = "absolute"; b && a.setAttribute("id", b); c && K.body.appendChild(a); return a } ; var h = this.waitForSwf = function(a) { void 0 === a ? a = 0 : a++; a < e && "undefined" === typeof Hc && setTimeout(function() { h(a) }, 300) } ; this.evercookie_cookie = function(a, b) { if (void 0 !== b) K.cookie = a + "\x3d" + b + "; expires\x3dTue, 31 Dec 2030 00:00:00 UTC; path\x3d/; domain\x3d" + f; else return this.getFromStr(a, K.cookie) } ; this.getFromStr = function(a, b) { if ("string" === typeof b) { var c = a + "\x3d", d = b.split(/[;&]/), e, f; for (e = 0; e < d.length; e++) { for (f = d[e]; " " === f.charAt(0); ) f = f.substring(1, f.length); if (0 === f.indexOf(c)) return f.substring(c.length, f.length) } } } ; this.getHost = function() { return Ra(x.location.host.split(":")[0]) } ; this.toHex = function(a) { for (var b = "", c = a.length, d = 0, e; d < c; ) { for (e = a.charCodeAt(d++).toString(16); 2 > e.length; ) e = "0" + e; b += e } return b } ; this.fromHex = function(a) { for (var b = "", c = a.length, d; 0 <= c; ) d = c - 2, b = String.fromCharCode("0x" + a.substring(d, c)) + b, c = d; return b } ; var m = this.createElem("a", "_ec_rgb_link"), p, w; try { p = 1, w = K.createElement("style"), w.styleSheet ? w.styleSheet.innerHTML = "#_ec_rgb_link:visited{display:none;color:#FF0000}" : w.innerHTML ? w.innerHTML = "#_ec_rgb_link:visited{display:none;color:#FF0000}" : w.appendChild(K.createTextNode("#_ec_rgb_link:visited{display:none;color:#FF0000}")) } catch (r) { p = 0 } this._getRGB = function(a, b) { if (b && 0 === p) return -1; m.href = a; m.innerHTML = a; K.body.appendChild(w); K.body.appendChild(m); var c; if (K.defaultView) { if (null == K.defaultView.getComputedStyle(m, null)) return -1; c = K.defaultView.getComputedStyle(m, null).getPropertyValue("color") } else c = m.currentStyle.color; return c } } } catch (a) {} var Z = "object" === typeof window ? window : this , V = { extend: function(a, c) { var b = {}, d; for (d in a) b[d] = c[d] && 0 === c[d].length % 2 ? c[d].concat(a[d]) : a[d]; return b }, has: function(a, c) { return "string" === typeof a ? -1 !== c.toLowerCase().indexOf(a.toLowerCase()) : !1 }, lowerize: function(a) { return a.toLowerCase() }, major: function(a) { return "string" === typeof a ? a.replace(/[^\d\.]/g, "").split(".")[0] : void 0 }, trim: function(a) { return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") } } , R = { rgx: function(a, c) { for (var b = 0, d, e, f, g, h, m; b < c.length && !h; ) { var p = c[b] , w = c[b + 1]; for (d = e = 0; d < p.length && !h; ) if (h = p[d++].exec(a)) for (f = 0; f < w.length; f++) m = h[++e], g = w[f], "object" === typeof g && 0 < g.length ? 2 == g.length ? this[g[0]] = "function" == typeof g[1] ? g[1].call(this, m) : g[1] : 3 == g.length ? this[g[0]] = "function" !== typeof g[1] || g[1].exec && g[1].test ? m ? m.replace(g[1], g[2]) : void 0 : m ? g[1].call(this, m, g[2]) : void 0 : 4 == g.length && (this[g[0]] = m ? g[3].call(this, m.replace(g[1], g[2])) : void 0) : this[g] = m ? m : void 0; b += 2 } }, str: function(a, c) { for (var b in c) if ("object" === typeof c[b] && 0 < c[b].length) for (var d = 0; d < c[b].length; d++) { if (V.has(c[b][d], a)) return "?" === b ? void 0 : b } else if (V.has(c[b], a)) return "?" === b ? void 0 : b; return a } } , qa = { browser: { oldsafari: { version: { "1.0": "/8", "1.2": "/1", "1.3": "/3", "2.0": "/412", "2.0.2": "/416", "2.0.3": "/417", "2.0.4": "/419", "?": "/" } } }, device: { amazon: { model: { "Fire Phone": ["SD", "KF"] } }, sprint: { model: { "Evo Shift 4G": "7373KT" }, vendor: { HTC: "APA", Sprint: "Sprint" } } }, os: { windows: { version: { ME: "4.90", "NT 3.11": "NT3.51", "NT 4.0": "NT4.0", 2E3: "NT 5.0", XP: ["NT 5.1", "NT 5.2"], Vista: "NT 6.0", 7: "NT 6.1", 8: "NT 6.2", "8.1": "NT 6.3", 10: ["NT 6.4", "NT 10.0"], RT: "ARM" } } } } , Qb = { browser: [[/(opera\smini)\/([\w\.-]+)/i, /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, /(opera).+version\/([\w\.]+)/i, /(opera)[\/\s]+([\w\.]+)/i], ["name", "version"], [/(opios)[\/\s]+([\w\.]+)/i], [["name", "Opera Mini"], "version"], [/\s(opr)\/([\w\.]+)/i], [["name", "Opera"], "version"], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i, /(?:ms|\()(ie)\s([\w\.]+)/i, /(rekonq)\/([\w\.]*)/i, /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i], ["name", "version"], [/(konqueror)\/([\w\.]+)/i], [["name", "Konqueror"], "version"], [/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i], [["name", "IE"], "version"], [/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i], [["name", "Edge"], "version"], [/(yabrowser)\/([\w\.]+)/i], [["name", "Yandex"], "version"], [/(puffin)\/([\w\.]+)/i], [["name", "Puffin"], "version"], [/(focus)\/([\w\.]+)/i], [["name", "Firefox Focus"], "version"], [/(opt)\/([\w\.]+)/i], [["name", "Opera Touch"], "version"], [/((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i], [["name", "UCBrowser"], "version"], [/(comodo_dragon)\/([\w\.]+)/i], [["name", /_/g, " "], "version"], [/(windowswechat qbcore)\/([\w\.]+)/i], [["name", "WeChat(Win) Desktop"], "version"], [/(micromessenger)\/([\w\.]+)/i], [["name", "WeChat"], "version"], [/(brave)\/([\w\.]+)/i], [["name", "Brave"], "version"], [/(qqbrowserlite)\/([\w\.]+)/i], ["name", "version"], [/(QQ)\/([\d\.]+)/i], ["name", "version"], [/m?(qqbrowser)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(BIDUBrowser)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(2345Explorer)[\/\s]?([\w\.]+)/i], ["name", "version"], [/(MetaSr)[\/\s]?([\w\.]+)/i], ["name"], [/(LBBROWSER)/i], ["name"], [/xiaomi\/miuibrowser\/([\w\.]+)/i], ["version", ["name", "MIUI Browser"]], [/;fbav\/([\w\.]+);/i], ["version", ["name", "Facebook"]], [/safari\s(line)\/([\w\.]+)/i, /android.+(line)\/([\w\.]+)\/iab/i], ["name", "version"], [/headlesschrome(?:\/([\w\.]+)|\s)/i], ["version", ["name", "Chrome Headless"]], [/\swv\).+(chrome)\/([\w\.]+)/i], [["name", /(.+)/, "$1 WebView"], "version"], [/((?:oculus|samsung)browser)\/([\w\.]+)/i], [["name", /(.+(?:g|us))(.+)/, "$1 $2"], "version"], [/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i], ["version", ["name", "Android Browser"]], [/(sailfishbrowser)\/([\w\.]+)/i], [["name", "Sailfish Browser"], "version"], [/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i], ["name", "version"], [/(dolfin)\/([\w\.]+)/i], [["name", "Dolphin"], "version"], [/((?:android.+)crmo|crios)\/([\w\.]+)/i], [["name", "Chrome"], "version"], [/(coast)\/([\w\.]+)/i], [["name", "Opera Coast"], "version"], [/fxios\/([\w\.-]+)/i], ["version", ["name", "Firefox"]], [/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i], ["version", ["name", "Mobile Safari"]], [/version\/([\w\.]+).+?(mobile\s?safari|safari)/i], ["version", "name"], [/webkit.+?(gsa)\/([\w\.]+).+?(mobile\s?safari|safari)(\/[\w\.]+)/i], [["name", "GSA"], "version"], [/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i], ["name", ["version", R.str, qa.browser.oldsafari.version]], [/(webkit|khtml)\/([\w\.]+)/i], ["name", "version"], [/(navigator|netscape)\/([\w\.-]+)/i], [["name", "Netscape"], "version"], [/(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i, /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i, /(links)\s\(([\w\.]+)/i, /(gobrowser)\/?([\w\.]*)/i, /(ice\s?browser)\/v?([\w\._]+)/i, /(mosaic)[\/\s]([\w\.]+)/i], ["name", "version"]], cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i], [["architecture", "amd64"]], [/(ia32(?=;))/i], [["architecture", V.lowerize]], [/((?:i[346]|x)86)[;\)]/i], [["architecture", "ia32"]], [/windows\s(ce|mobile);\sppc;/i], [["architecture", "arm"]], [/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i], [["architecture", /ower/, "", V.lowerize]], [/(sun4\w)[;\)]/i], [["architecture", "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+[;l]))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i], [["architecture", V.lowerize]]], device: [[/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i], ["model", "vendor", ["type", "tablet"]], [/applecoremedia\/[\w\.]+ \((ipad)/], ["model", ["vendor", "Apple"], ["type", "tablet"]], [/(apple\s{0,1}tv)/i], [["model", "Apple TV"], ["vendor", "Apple"]], [/(archos)\s(gamepad2?)/i, /(hp).+(touchpad)/i, /(hp).+(tablet)/i, /(kindle)\/([\w\.]+)/i, /\s(nook)[\w\s]+build\/(\w+)/i, /(dell)\s(strea[kpr\s\d]*[\dko])/i], ["vendor", "model", ["type", "tablet"]], [/(kf[A-z]+)\sbuild\/.+silk\//i], ["model", ["vendor", "Amazon"], ["type", "tablet"]], [/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i], [["model", R.str, qa.device.amazon.model], ["vendor", "Amazon"], ["type", "mobile"]], [/android.+aft([bms])\sbuild/i], ["model", ["vendor", "Amazon"], ["type", "smarttv"]], [/\((ip[honed|\s\w*]+);.+(apple)/i], ["model", "vendor", ["type", "mobile"]], [/\((ip[honed|\s\w*]+);/i], ["model", ["vendor", "Apple"], ["type", "mobile"]], [/(blackberry)[\s-]?(\w+)/i, /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i, /(hp)\s([\w\s]+\w)/i, /(asus)-?(\w+)/i], ["vendor", "model", ["type", "mobile"]], [/\(bb10;\s(\w+)/i], ["model", ["vendor", "BlackBerry"], ["type", "mobile"]], [/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i], ["model", ["vendor", "Asus"], ["type", "tablet"]], [/(sony)\s(tablet\s[ps])\sbuild\//i, /(sony)?(?:sgp.+)\sbuild\//i], [["vendor", "Sony"], ["model", "Xperia Tablet"], ["type", "tablet"]], [/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i], ["model", ["vendor", "Sony"], ["type", "mobile"]], [/\s(ouya)\s/i, /(nintendo)\s([wids3u]+)/i], ["vendor", "model", ["type", "console"]], [/android.+;\s(shield)\sbuild/i], ["model", ["vendor", "Nvidia"], ["type", "console"]], [/(playstation\s[34portablevi]+)/i], ["model", ["vendor", "Sony"], ["type", "console"]], [/(sprint\s(\w+))/i], [["vendor", R.str, qa.device.sprint.vendor], ["model", R.str, qa.device.sprint.model], ["type", "mobile"]], [/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, /(zte)-(\w*)/i, /(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i], ["vendor", ["model", /_/g, " "], ["type", "mobile"]], [/(nexus\s9)/i], ["model", ["vendor", "HTC"], ["type", "tablet"]], [/d\/huawei([\w\s-]+)[;\)]/i, /(nexus\s6p)/i], ["model", ["vendor", "Huawei"], ["type", "mobile"]], [/(microsoft);\s(lumia[\s\w]+)/i], ["vendor", "model", ["type", "mobile"]], [/[\s\(;](xbox(?:\sone)?)[\s\);]/i], ["model", ["vendor", "Microsoft"], ["type", "console"]], [/(kin\.[onetw]{3})/i], [["model", /\./g, " "], ["vendor", "Microsoft"], ["type", "mobile"]], [/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i, /mot[\s-]?(\w*)/i, /(XT\d{3,4}) build\//i, /(nexus\s6)/i], ["model", ["vendor", "Motorola"], ["type", "mobile"]], [/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i], ["model", ["vendor", "Motorola"], ["type", "tablet"]], [/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i], [["vendor", V.trim], ["model", V.trim], ["type", "smarttv"]], [/hbbtv.+maple;(\d+)/i], [["model", /^/, "SmartTV"], ["vendor", "Samsung"], ["type", "smarttv"]], [/\(dtv[\);].+(aquos)/i], ["model", ["vendor", "Sharp"], ["type", "smarttv"]], [/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i, /((SM-T\w+))/i], [["vendor", "Samsung"], "model", ["type", "tablet"]], [/smart-tv.+(samsung)/i], ["vendor", ["type", "smarttv"], "model"], [/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i, /(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i, /sec-((sgh\w+))/i], [["vendor", "Samsung"], "model", ["type", "mobile"]], [/sie-(\w*)/i], ["model", ["vendor", "Siemens"], ["type", "mobile"]], [/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]*)/i], [["vendor", "Nokia"], "model", ["type", "mobile"]], [/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i], ["model", ["vendor", "Acer"], ["type", "tablet"]], [/android.+([vl]k\-?\d{3})\s+build/i], ["model", ["vendor", "LG"], ["type", "tablet"]], [/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i], [["vendor", "LG"], "model", ["type", "tablet"]], [/(lg) netcast\.tv/i], ["vendor", "model", ["type", "smarttv"]], [/(nexus\s[45])/i, /lg[e;\s\/-]+(\w*)/i, /android.+lg(\-?[\d\w]+)\s+build/i], ["model", ["vendor", "LG"], ["type", "mobile"]], [/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i], ["vendor", "model", ["type", "tablet"]], [/android.+(ideatab[a-z0-9\-\s]+)/i], ["model", ["vendor", "Lenovo"], ["type", "tablet"]], [/(lenovo)[_\s-]?([\w-]+)/i], ["vendor", "model", ["type", "mobile"]], [/linux;.+((jolla));/i], ["vendor", "model", ["type", "mobile"]], [/((pebble))app\/[\d\.]+\s/i], ["vendor", "model", ["type", "wearable"]], [/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i], ["vendor", "model", ["type", "mobile"]], [/crkey/i], [["model", "Chromecast"], ["vendor", "Google"]], [/android.+;\s(glass)\s\d/i], ["model", ["vendor", "Google"], ["type", "wearable"]], [/android.+;\s(pixel c)[\s)]/i], ["model", ["vendor", "Google"], ["type", "tablet"]], [/android.+;\s(pixel( [23])?( xl)?)[\s)]/i], ["model", ["vendor", "Google"], ["type", "mobile"]], [/android.+;\s(\w+)\s+build\/hm\1/i, /android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, /android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i, /android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i], [["model", /_/g, " "], ["vendor", "Xiaomi"], ["type", "mobile"]], [/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i], [["model", /_/g, " "], ["vendor", "Xiaomi"], ["type", "tablet"]], [/android.+;\s(m[1-5]\snote)\sbuild/i], ["model", ["vendor", "Meizu"], ["type", "mobile"]], [/(mz)-([\w-]{2,})/i], [["vendor", "Meizu"], "model", ["type", "mobile"]], [/android.+a000(1)\s+build/i, /android.+oneplus\s(a\d{4})\s+build/i], ["model", ["vendor", "OnePlus"], ["type", "mobile"]], [/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i], ["model", ["vendor", "RCA"], ["type", "tablet"]], [/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i], ["model", ["vendor", "Dell"], ["type", "tablet"]], [/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i], ["model", ["vendor", "Verizon"], ["type", "tablet"]], [/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i], [["vendor", "Barnes \x26 Noble"], "model", ["type", "tablet"]], [/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i], ["model", ["vendor", "NuVision"], ["type", "tablet"]], [/android.+;\s(k88)\sbuild/i], ["model", ["vendor", "ZTE"], ["type", "tablet"]], [/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i], ["model", ["vendor", "Swiss"], ["type", "mobile"]], [/android.+[;\/]\s*(zur\d{3})\s+build/i], ["model", ["vendor", "Swiss"], ["type", "tablet"]], [/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i], ["model", ["vendor", "Zeki"], ["type", "tablet"]], [/(android).+[;\/]\s+([YR]\d{2})\s+build/i, /android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i], [["vendor", "Dragon Touch"], "model", ["type", "tablet"]], [/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i], ["model", ["vendor", "Insignia"], ["type", "tablet"]], [/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i], ["model", ["vendor", "NextBook"], ["type", "tablet"]], [/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i], [["vendor", "Voice"], "model", ["type", "mobile"]], [/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i], [["vendor", "LvTel"], "model", ["type", "mobile"]], [/android.+;\s(PH-1)\s/i], ["model", ["vendor", "Essential"], ["type", "mobile"]], [/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i], ["model", ["vendor", "Envizen"], ["type", "tablet"]], [/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i], ["model", ["vendor", "MachSpeed"], ["type", "tablet"]], [/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/android.+[;\/]\s*TU_(1491)\s+build/i], ["model", ["vendor", "Rotor"], ["type", "tablet"]], [/android.+(KS(.+))\s+build/i], ["model", ["vendor", "Amazon"], ["type", "tablet"]], [/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i], ["vendor", "model", ["type", "tablet"]], [/\s(tablet|tab)[;\/]/i, /\s(mobile)(?:[;\/]|\ssafari)/i], [["type", V.lowerize], "vendor", "model"], [/[\s\/\(](smart-?tv)[;\)]/i], [["type", "smarttv"]], [/(android[\w\.\s\-]{0,9});.+build/i], ["model", ["vendor", "Generic"]]], engine: [[/windows.+\sedge\/([\w\.]+)/i], ["version", ["name", "EdgeHTML"]], [/webkit\/537\.36.+chrome\/(?!27)/i], [["name", "Blink"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, /(icab)[\/\s]([23]\.[\d\.]+)/i], ["name", "version"], [/rv\:([\w\.]{1,9}).+(gecko)/i], ["version", "name"]], os: [[/microsoft\s(windows)\s(vista|xp)/i], ["name", "version"], [/(windows)\snt\s6\.2;\s(arm)/i, /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i], ["name", ["version", R.str, qa.os.windows.version]], [/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i], [["name", "Windows"], ["version", R.str, qa.os.windows.version]], [/\((bb)(10);/i], [["name", "BlackBerry"], "version"], [/(blackberry)\w*\/?([\w\.]*)/i, /(tizen)[\/\s]([\w\.]+)/i, /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i], ["name", "version"], [/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i], [["name", "Symbian"], "version"], [/\((series40);/i], ["name"], [/mozilla.+\(mobile;.+gecko.+firefox/i], [["name", "Firefox OS"], "version"], [/(nintendo|playstation)\s([wids34portablevu]+)/i, /(mint)[\/\s\(]?(\w*)/i, /(mageia|vectorlinux)[;\s]/i, /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i, /(hurd|linux)\s?([\w\.]*)/i, /(gnu)\s?([\w\.]*)/i], ["name", "version"], [/(cros)\s[\w]+\s([\w\.]+\w)/i], [["name", "Chromium OS"], "version"], [/(sunos)\s?([\w\.\d]*)/i], [["name", "Solaris"], "version"], [/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i], ["name", "version"], [/(haiku)\s(\w+)/i], ["name", "version"], [/cfnetwork\/.+darwin/i, /ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i], [["version", /_/g, "."], ["name", "iOS"]], [/(mac\sos\sx)\s?([\w\s\.]*)/i, /(macintosh|mac(?=_powerpc)\s)/i], [["name", "Mac OS"], ["version", /_/g, "."]], [/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, /(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i, /(unix)\s?([\w\.]*)/i], ["name", "version"]] }; O.VERSION = "0.7.20"; O.BROWSER = { NAME: "name", MAJOR: "major", VERSION: "version" }; O.CPU = { ARCHITECTURE: "architecture" }; O.DEVICE = { MODEL: "model", VENDOR: "vendor", TYPE: "type", CONSOLE: "console", MOBILE: "mobile", SMARTTV: "smarttv", TABLET: "tablet", WEARABLE: "wearable", EMBEDDED: "embedded" }; O.ENGINE = { NAME: "name", VERSION: "version" }; O.OS = { NAME: "name", VERSION: "version" }; "undefined" !== typeof exports ? ("undefined" !== typeof module && module.exports && (exports = module.exports = O), exports.UAParser = O) : "function" === typeof define && define.amd ? define(function() { return O }) : Z && (Z.UAParser = O); var ra = Z && (Z.jQuery || Z.Zepto); if ("undefined" !== typeof ra && !ra.ua) { var $a = new O; ra.ua = $a.getResult(); ra.ua.get = function() { return $a.getUA() } ; ra.ua.set = function(a) { $a.setUA(a); a = $a.getResult(); for (var c in a) ra.ua[c] = a[c] } } var Ab; if (!(Ab = M)) { var za = Math , ab = {} , bb = ab.lib = {} , dc = function() {} , Aa = bb.Base = { extend: function(a) { dc.prototype = this; var c = new dc; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function() { c.$super.init.apply(this, arguments) } ); c.init.prototype = c; c.$super = this; return c }, create: function() { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function() {}, mixIn: function(a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function() { return this.init.prototype.extend(this) } } , Ba = bb.WordArray = Aa.extend({ init: function(a, c) { a = this.words = a || []; this.sigBytes = void 0 != c ? c : 4 * a.length }, toString: function(a) { return (a || Ic).stringify(this) }, concat: function(a) { var c = this.words , b = a.words , d = this.sigBytes; a = a.sigBytes; this.clamp(); if (d % 4) for (var e = 0; e < a; e++) c[d + e >>> 2] |= (b[e >>> 2] >>> 24 - e % 4 * 8 & 255) << 24 - (d + e) % 4 * 8; else if (65535 < b.length) for (e = 0; e < a; e += 4) c[d + e >>> 2] = b[e >>> 2]; else c.push.apply(c, b); this.sigBytes += a; return this }, clamp: function() { var a = this.words , c = this.sigBytes; a[c >>> 2] &= 4294967295 << 32 - c % 4 * 8; a.length = za.ceil(c / 4) }, clone: function() { var a = Aa.clone.call(this); a.words = this.words.slice(0); return a }, random: function(a) { for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * za.random() | 0); return new Ba.init(c,a) } }) , Bb = ab.enc = {} , Ic = Bb.Hex = { stringify: function(a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) { var e = c[d >>> 2] >>> 24 - d % 4 * 8 & 255; b.push((e >>> 4).toString(16)); b.push((e & 15).toString(16)) } return b.join("") }, parse: function(a) { for (var c = a.length, b = [], d = 0; d < c; d += 2) b[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - d % 8 * 4; return new Ba.init(b,c / 2) } } , ec = Bb.Latin1 = { stringify: function(a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) b.push(String.fromCharCode(c[d >>> 2] >>> 24 - d % 4 * 8 & 255)); return b.join("") }, parse: function(a) { for (var c = a.length, b = [], d = 0; d < c; d++) b[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - d % 4 * 8; return new Ba.init(b,c) } } , Jc = Bb.Utf8 = { stringify: function(a) { try { return decodeURIComponent(escape(ec.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function(a) { return ec.parse(unescape(encodeURIComponent(a))) } } , fc = bb.BufferedBlockAlgorithm = Aa.extend({ reset: function() { this._data = new Ba.init; this._nDataBytes = 0 }, _append: function(a) { "string" == typeof a && (a = Jc.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function(a) { var c = this._data , b = c.words , d = c.sigBytes , e = this.blockSize , f = d / (4 * e) , f = a ? za.ceil(f) : za.max((f | 0) - this._minBufferSize, 0); a = f * e; d = za.min(4 * a, d); if (a) { for (var g = 0; g < a; g += e) this._doProcessBlock(b, g); g = b.splice(0, a); c.sigBytes -= d } return new Ba.init(g,d) }, clone: function() { var a = Aa.clone.call(this); a._data = this._data.clone(); return a }, _minBufferSize: 0 }); bb.Hasher = fc.extend({ cfg: Aa.extend(), init: function(a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function() { fc.reset.call(this); this._doReset() }, update: function(a) { this._append(a); this._process(); return this }, finalize: function(a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function(a) { return function(c, b) { return (new a.init(b)).finalize(c) } }, _createHmacHelper: function(a) { return function(c, b) { return (new Kc.HMAC.init(a,b)).finalize(c) } } }); var Kc = ab.algo = {}; Ab = ab } for (var M = Ab, cb = Math, db = M, ia = db.lib, Lc = ia.WordArray, eb = ia.Hasher, ia = db.algo, gc = [], hc = [], fb = 2, Ca = 0; 64 > Ca; ) { var sa; a: { sa = fb; for (var Mc = cb.sqrt(sa), Cb = 2; Cb <= Mc; Cb++) if (!(sa % Cb)) { sa = !1; break a } sa = !0 } sa && (8 > Ca && (gc[Ca] = Pb(cb.pow(fb, .5))), hc[Ca] = Pb(cb.pow(fb, 1 / 3)), Ca++); fb++ } var ja = [] , ia = ia.SHA256 = eb.extend({ _doReset: function() { this._hash = new Lc.init(gc.slice(0)) }, _doProcessBlock: function(a, c) { for (var b = this._hash.words, d = b[0], e = b[1], f = b[2], g = b[3], h = b[4], m = b[5], p = b[6], w = b[7], r = 0; 64 > r; r++) { if (16 > r) ja[r] = a[c + r] | 0; else { var u = ja[r - 15] , n = ja[r - 2]; ja[r] = ((u << 25 | u >>> 7) ^ (u << 14 | u >>> 18) ^ u >>> 3) + ja[r - 7] + ((n << 15 | n >>> 17) ^ (n << 13 | n >>> 19) ^ n >>> 10) + ja[r - 16] } u = w + ((h << 26 | h >>> 6) ^ (h << 21 | h >>> 11) ^ (h << 7 | h >>> 25)) + (h & m ^ ~h & p) + hc[r] + ja[r]; n = ((d << 30 | d >>> 2) ^ (d << 19 | d >>> 13) ^ (d << 10 | d >>> 22)) + (d & e ^ d & f ^ e & f); w = p; p = m; m = h; h = g + u | 0; g = f; f = e; e = d; d = u + n | 0 } b[0] = b[0] + d | 0; b[1] = b[1] + e | 0; b[2] = b[2] + f | 0; b[3] = b[3] + g | 0; b[4] = b[4] + h | 0; b[5] = b[5] + m | 0; b[6] = b[6] + p | 0; b[7] = b[7] + w | 0 }, _doFinalize: function() { var a = this._data , c = a.words , b = 8 * this._nDataBytes , d = 8 * a.sigBytes; c[d >>> 5] |= 128 << 24 - d % 32; c[(d + 64 >>> 9 << 4) + 14] = cb.floor(b / 4294967296); c[(d + 64 >>> 9 << 4) + 15] = b; a.sigBytes = 4 * c.length; this._process(); return this._hash }, clone: function() { var a = eb.clone.call(this); a._hash = this._hash.clone(); return a } }); db.SHA256 = eb._createHelper(ia); db.HmacSHA256 = eb._createHmacHelper(ia); var ic = M , Nc = ic.lib.WordArray; ic.enc.Base64 = { stringify: function(a) { var c = a.words , b = a.sigBytes , d = this._map; a.clamp(); a = []; for (var e = 0; e < b; e += 3) for (var f = (c[e >>> 2] >>> 24 - e % 4 * 8 & 255) << 16 | (c[e + 1 >>> 2] >>> 24 - (e + 1) % 4 * 8 & 255) << 8 | c[e + 2 >>> 2] >>> 24 - (e + 2) % 4 * 8 & 255, g = 0; 4 > g && e + .75 * g < b; g++) a.push(d.charAt(f >>> 6 * (3 - g) & 63)); if (c = d.charAt(64)) for (; a.length % 4; ) a.push(c); return a.join("") }, parse: function(a) { var c = a.length , b = this._map , d = b.charAt(64); d && (d = a.indexOf(d), -1 != d && (c = d)); for (var d = [], e = 0, f = 0; f < c; f++) if (f % 4) { var g = b.indexOf(a.charAt(f - 1)) << f % 4 * 2 , h = b.indexOf(a.charAt(f)) >>> 6 - f % 4 * 2; d[e >>> 2] |= (g | h) << 24 - e % 4 * 8; e++ } return Nc.create(d, e) }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" }; for (var Db = Math, gb = M, ka = gb.lib, Oc = ka.WordArray, hb = ka.Hasher, ka = gb.algo, m = [], ib = 0; 64 > ib; ib++) m[ib] = 4294967296 * Db.abs(Db.sin(ib + 1)) | 0; ka = ka.MD5 = hb.extend({ _doReset: function() { this._hash = new Oc.init([1732584193, 4023233417, 2562383102, 271733878]) }, _doProcessBlock: function(a, c) { for (var b = 0; 16 > b; b++) { var d = c + b , e = a[d]; a[d] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360 } var b = this._hash.words , d = a[c + 0] , e = a[c + 1] , f = a[c + 2] , g = a[c + 3] , h = a[c + 4] , p = a[c + 5] , v = a[c + 6] , w = a[c + 7] , r = a[c + 8] , u = a[c + 9] , n = a[c + 10] , y = a[c + 11] , x = a[c + 12] , z = a[c + 13] , B = a[c + 14] , C = a[c + 15] , t = b[0] , k = b[1] , l = b[2] , q = b[3] , t = G(t, k, l, q, d, 7, m[0]) , q = G(q, t, k, l, e, 12, m[1]) , l = G(l, q, t, k, f, 17, m[2]) , k = G(k, l, q, t, g, 22, m[3]) , t = G(t, k, l, q, h, 7, m[4]) , q = G(q, t, k, l, p, 12, m[5]) , l = G(l, q, t, k, v, 17, m[6]) , k = G(k, l, q, t, w, 22, m[7]) , t = G(t, k, l, q, r, 7, m[8]) , q = G(q, t, k, l, u, 12, m[9]) , l = G(l, q, t, k, n, 17, m[10]) , k = G(k, l, q, t, y, 22, m[11]) , t = G(t, k, l, q, x, 7, m[12]) , q = G(q, t, k, l, z, 12, m[13]) , l = G(l, q, t, k, B, 17, m[14]) , k = G(k, l, q, t, C, 22, m[15]) , t = F(t, k, l, q, e, 5, m[16]) , q = F(q, t, k, l, v, 9, m[17]) , l = F(l, q, t, k, y, 14, m[18]) , k = F(k, l, q, t, d, 20, m[19]) , t = F(t, k, l, q, p, 5, m[20]) , q = F(q, t, k, l, n, 9, m[21]) , l = F(l, q, t, k, C, 14, m[22]) , k = F(k, l, q, t, h, 20, m[23]) , t = F(t, k, l, q, u, 5, m[24]) , q = F(q, t, k, l, B, 9, m[25]) , l = F(l, q, t, k, g, 14, m[26]) , k = F(k, l, q, t, r, 20, m[27]) , t = F(t, k, l, q, z, 5, m[28]) , q = F(q, t, k, l, f, 9, m[29]) , l = F(l, q, t, k, w, 14, m[30]) , k = F(k, l, q, t, x, 20, m[31]) , t = E(t, k, l, q, p, 4, m[32]) , q = E(q, t, k, l, r, 11, m[33]) , l = E(l, q, t, k, y, 16, m[34]) , k = E(k, l, q, t, B, 23, m[35]) , t = E(t, k, l, q, e, 4, m[36]) , q = E(q, t, k, l, h, 11, m[37]) , l = E(l, q, t, k, w, 16, m[38]) , k = E(k, l, q, t, n, 23, m[39]) , t = E(t, k, l, q, z, 4, m[40]) , q = E(q, t, k, l, d, 11, m[41]) , l = E(l, q, t, k, g, 16, m[42]) , k = E(k, l, q, t, v, 23, m[43]) , t = E(t, k, l, q, u, 4, m[44]) , q = E(q, t, k, l, x, 11, m[45]) , l = E(l, q, t, k, C, 16, m[46]) , k = E(k, l, q, t, f, 23, m[47]) , t = D(t, k, l, q, d, 6, m[48]) , q = D(q, t, k, l, w, 10, m[49]) , l = D(l, q, t, k, B, 15, m[50]) , k = D(k, l, q, t, p, 21, m[51]) , t = D(t, k, l, q, x, 6, m[52]) , q = D(q, t, k, l, g, 10, m[53]) , l = D(l, q, t, k, n, 15, m[54]) , k = D(k, l, q, t, e, 21, m[55]) , t = D(t, k, l, q, r, 6, m[56]) , q = D(q, t, k, l, C, 10, m[57]) , l = D(l, q, t, k, v, 15, m[58]) , k = D(k, l, q, t, z, 21, m[59]) , t = D(t, k, l, q, h, 6, m[60]) , q = D(q, t, k, l, y, 10, m[61]) , l = D(l, q, t, k, f, 15, m[62]) , k = D(k, l, q, t, u, 21, m[63]); b[0] = b[0] + t | 0; b[1] = b[1] + k | 0; b[2] = b[2] + l | 0; b[3] = b[3] + q | 0 }, _doFinalize: function() { var a = this._data , c = a.words , b = 8 * this._nDataBytes , d = 8 * a.sigBytes; c[d >>> 5] |= 128 << 24 - d % 32; var e = Db.floor(b / 4294967296); c[(d + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360; c[(d + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360; a.sigBytes = 4 * (c.length + 1); this._process(); a = this._hash; c = a.words; for (b = 0; 4 > b; b++) d = c[b], c[b] = (d << 8 | d >>> 24) & 16711935 | (d << 24 | d >>> 8) & 4278255360; return a }, clone: function() { var a = hb.clone.call(this); a._hash = this._hash.clone(); return a } }); gb.MD5 = hb._createHelper(ka); gb.HmacMD5 = hb._createHmacHelper(ka); var Eb = M , Da = Eb.lib , jc = Da.Base , Pc = Da.WordArray , Da = Eb.algo , Qc = Da.EvpKDF = jc.extend({ cfg: jc.extend({ keySize: 4, hasher: Da.MD5, iterations: 1 }), init: function(a) { this.cfg = this.cfg.extend(a) }, compute: function(a, c) { for (var b = this.cfg, d = b.hasher.create(), e = Pc.create(), f = e.words, g = b.keySize, b = b.iterations; f.length < g; ) { h && d.update(h); var h = d.update(a).finalize(c); d.reset(); for (var m = 1; m < b; m++) h = d.finalize(h), d.reset(); e.concat(h) } e.sigBytes = 4 * g; return e } }); Eb.EvpKDF = function(a, c, b) { return Qc.create(b).compute(a, c) } ; if (!M.lib.Cipher) { var ba = M , X = ba.lib , Ea = X.Base , Fa = X.WordArray , kc = X.BufferedBlockAlgorithm , lc = ba.enc.Base64 , Rc = ba.algo.EvpKDF , jb = X.Cipher = kc.extend({ cfg: Ea.extend(), createEncryptor: function(a, c) { return this.create(this._ENC_XFORM_MODE, a, c) }, createDecryptor: function(a, c) { return this.create(this._DEC_XFORM_MODE, a, c) }, init: function(a, c, b) { this.cfg = this.cfg.extend(b); this._xformMode = a; this._key = c; this.reset() }, reset: function() { kc.reset.call(this); this._doReset() }, process: function(a) { this._append(a); return this._process() }, finalize: function(a) { a && this._append(a); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function(a) { return { encrypt: function(c, b, d) { return ("string" == typeof b ? mc : ta).encrypt(a, c, b, d) }, decrypt: function(c, b, d) { return ("string" == typeof b ? mc : ta).decrypt(a, c, b, d) } } } }); X.StreamCipher = jb.extend({ _doFinalize: function() { return this._process(!0) }, blockSize: 1 }); var Ga = ba.mode = {} , nc = function(a, c, b) { var d = this._iv; d ? this._iv = void 0 : d = this._prevBlock; for (var e = 0; e < b; e++) a[c + e] ^= d[e] } , la = (X.BlockCipherMode = Ea.extend({ createEncryptor: function(a, c) { return this.Encryptor.create(a, c) }, createDecryptor: function(a, c) { return this.Decryptor.create(a, c) }, init: function(a, c) { this._cipher = a; this._iv = c } })).extend(); la.Encryptor = la.extend({ processBlock: function(a, c) { var b = this._cipher , d = b.blockSize; nc.call(this, a, c, d); b.encryptBlock(a, c); this._prevBlock = a.slice(c, c + d) } }); la.Decryptor = la.extend({ processBlock: function(a, c) { var b = this._cipher , d = b.blockSize , e = a.slice(c, c + d); b.decryptBlock(a, c); nc.call(this, a, c, d); this._prevBlock = e } }); Ga = Ga.CBC = la; la = (ba.pad = {}).Pkcs7 = { pad: function(a, c) { for (var b = 4 * c, b = b - a.sigBytes % b, d = b << 24 | b << 16 | b << 8 | b, e = [], f = 0; f < b; f += 4) e.push(d); b = Fa.create(e, b); a.concat(b) }, unpad: function(a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; X.BlockCipher = jb.extend({ cfg: jb.cfg.extend({ mode: Ga, padding: la }), reset: function() { jb.reset.call(this); var a = this.cfg , c = a.iv , a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var b = a.createEncryptor; else b = a.createDecryptor, this._minBufferSize = 1; this._mode = b.call(a, this, c && c.words) }, _doProcessBlock: function(a, c) { this._mode.processBlock(a, c) }, _doFinalize: function() { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var c = this._process(!0) } else c = this._process(!0), a.unpad(c); return c }, blockSize: 4 }); var Fb = X.CipherParams = Ea.extend({ init: function(a) { this.mixIn(a) }, toString: function(a) { return (a || this.formatter).stringify(this) } }) , Ga = (ba.format = {}).OpenSSL = { stringify: function(a) { var c = a.ciphertext; a = a.salt; return (a ? Fa.create([1398893684, 1701076831]).concat(a).concat(c) : c).toString(lc) }, parse: function(a) { a = lc.parse(a); var c = a.words; if (1398893684 == c[0] && 1701076831 == c[1]) { var b = Fa.create(c.slice(2, 4)); c.splice(0, 4); a.sigBytes -= 16 } return Fb.create({ ciphertext: a, salt: b }) } } , ta = X.SerializableCipher = Ea.extend({ cfg: Ea.extend({ format: Ga }), encrypt: function(a, c, b, d) { d = this.cfg.extend(d); var e = a.createEncryptor(b, d); c = e.finalize(c); e = e.cfg; return Fb.create({ ciphertext: c, key: b, iv: e.iv, algorithm: a, mode: e.mode, padding: e.padding, blockSize: a.blockSize, formatter: d.format }) }, decrypt: function(a, c, b, d) { d = this.cfg.extend(d); c = this._parse(c, d.format); return a.createDecryptor(b, d).finalize(c.ciphertext) }, _parse: function(a, c) { return "string" == typeof a ? c.parse(a, this) : a } }) , ba = (ba.kdf = {}).OpenSSL = { execute: function(a, c, b, d) { d || (d = Fa.random(8)); a = Rc.create({ keySize: c + b }).compute(a, d); b = Fa.create(a.words.slice(c), 4 * b); a.sigBytes = 4 * c; return Fb.create({ key: a, iv: b, salt: d }) } } , mc = X.PasswordBasedCipher = ta.extend({ cfg: ta.cfg.extend({ kdf: ba }), encrypt: function(a, c, b, d) { d = this.cfg.extend(d); b = d.kdf.execute(b, a.keySize, a.ivSize); d.iv = b.iv; a = ta.encrypt.call(this, a, c, b.key, d); a.mixIn(b); return a }, decrypt: function(a, c, b, d) { d = this.cfg.extend(d); c = this._parse(c, d.format); b = d.kdf.execute(b, a.keySize, a.ivSize, c.salt); d.iv = b.iv; return ta.decrypt.call(this, a, c, b.key, d) } }) } for (var Gb = M, oc = Gb.lib.BlockCipher, Hb = Gb.algo, N = [], pc = [], qc = [], rc = [], sc = [], tc = [], Ib = [], Jb = [], Kb = [], Lb = [], Y = [], ca = 0; 256 > ca; ca++) Y[ca] = 128 > ca ? ca << 1 : ca << 1 ^ 283; for (var T = 0, fa = 0, ca = 0; 256 > ca; ca++) { var U = fa ^ fa << 1 ^ fa << 2 ^ fa << 3 ^ fa << 4 , U = U >>> 8 ^ U & 255 ^ 99; N[T] = U; pc[U] = T; var kb = Y[T] , uc = Y[kb] , vc = Y[uc] , L = 257 * Y[U] ^ 16843008 * U; qc[T] = L << 24 | L >>> 8; rc[T] = L << 16 | L >>> 16; sc[T] = L << 8 | L >>> 24; tc[T] = L; L = 16843009 * vc ^ 65537 * uc ^ 257 * kb ^ 16843008 * T; Ib[U] = L << 24 | L >>> 8; Jb[U] = L << 16 | L >>> 16; Kb[U] = L << 8 | L >>> 24; Lb[U] = L; T ? (T = kb ^ Y[Y[Y[vc ^ kb]]], fa ^= Y[Y[fa]]) : T = fa = 1 } var Sc = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54] , Hb = Hb.AES = oc.extend({ _doReset: function() { for (var a = this._key, c = a.words, b = a.sigBytes / 4, a = 4 * ((this._nRounds = b + 6) + 1), d = this._keySchedule = [], e = 0; e < a; e++) if (e < b) d[e] = c[e]; else { var f = d[e - 1]; e % b ? 6 < b && 4 == e % b && (f = N[f >>> 24] << 24 | N[f >>> 16 & 255] << 16 | N[f >>> 8 & 255] << 8 | N[f & 255]) : (f = f << 8 | f >>> 24, f = N[f >>> 24] << 24 | N[f >>> 16 & 255] << 16 | N[f >>> 8 & 255] << 8 | N[f & 255], f ^= Sc[e / b | 0] << 24); d[e] = d[e - b] ^ f } c = this._invKeySchedule = []; for (b = 0; b < a; b++) e = a - b, f = b % 4 ? d[e] : d[e - 4], c[b] = 4 > b || 4 >= e ? f : Ib[N[f >>> 24]] ^ Jb[N[f >>> 16 & 255]] ^ Kb[N[f >>> 8 & 255]] ^ Lb[N[f & 255]] }, encryptBlock: function(a, c) { this._doCryptBlock(a, c, this._keySchedule, qc, rc, sc, tc, N) }, decryptBlock: function(a, c) { var b = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = b; this._doCryptBlock(a, c, this._invKeySchedule, Ib, Jb, Kb, Lb, pc); b = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = b }, _doCryptBlock: function(a, c, b, d, e, f, g, h) { for (var m = this._nRounds, p = a[c] ^ b[0], w = a[c + 1] ^ b[1], r = a[c + 2] ^ b[2], u = a[c + 3] ^ b[3], n = 4, v = 1; v < m; v++) var x = d[p >>> 24] ^ e[w >>> 16 & 255] ^ f[r >>> 8 & 255] ^ g[u & 255] ^ b[n++] , z = d[w >>> 24] ^ e[r >>> 16 & 255] ^ f[u >>> 8 & 255] ^ g[p & 255] ^ b[n++] , B = d[r >>> 24] ^ e[u >>> 16 & 255] ^ f[p >>> 8 & 255] ^ g[w & 255] ^ b[n++] , u = d[u >>> 24] ^ e[p >>> 16 & 255] ^ f[w >>> 8 & 255] ^ g[r & 255] ^ b[n++] , p = x , w = z , r = B; x = (h[p >>> 24] << 24 | h[w >>> 16 & 255] << 16 | h[r >>> 8 & 255] << 8 | h[u & 255]) ^ b[n++]; z = (h[w >>> 24] << 24 | h[r >>> 16 & 255] << 16 | h[u >>> 8 & 255] << 8 | h[p & 255]) ^ b[n++]; B = (h[r >>> 24] << 24 | h[u >>> 16 & 255] << 16 | h[p >>> 8 & 255] << 8 | h[w & 255]) ^ b[n++]; u = (h[u >>> 24] << 24 | h[p >>> 16 & 255] << 16 | h[w >>> 8 & 255] << 8 | h[r & 255]) ^ b[n++]; a[c] = x; a[c + 1] = z; a[c + 2] = B; a[c + 3] = u }, keySize: 8 }); Gb.AES = oc._createHelper(Hb); "function" !== typeof String.prototype.trim && (String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, "") } ); "function" != typeof Array.prototype.map && (Array.prototype.map = function(a, c) { var b = []; if ("function" === typeof a) for (var d = 0, e = this.length; d < e; d++) b.push(a.call(c, this[d], d, this)); return b } ); void 0 != Ua("fp_ver") && Va("fp_ver", "", -1, !1); var ua = 0; try { localStorage.length || (localStorage.x = 1, localStorage.removeItem("x")) } catch (a) { ua = navigator.cookieEnabled ? 1 : 0 } try { var wc = window.RequestFileSystem || window.webkitRequestFileSystem; wc && wc(0, 0, function() {}, function() { ua = 1 }); try { "storage"in navigator && "estimate"in navigator.storage && navigator.storage.estimate().then(function(a) { 12E7 > a.quota && (ua = 1) }) } catch (a) {} "MozAppearance"in document.documentElement.style && (navigator.serviceWorker || (ua = 1)); window.indexedDB || !window.PointerEvent && !window.MSPointerEvent || (ua = 1) } catch (a) {} Ka.prototype = { constructor: Ka(), sortElements: function(a) { a.sort(function(a, b) { var c, e; if ("object" === typeof a && "object" === typeof b && a && b) return c = a.key, e = b.key, c === e ? 0 : typeof c === typeof e ? c < e ? -1 : 1 : typeof c < typeof e ? -1 : 1; throw "error"; }) }, calcHash: function(a) { for (var c = "", b = 0; b < a.length; b++) c += a[b].key + a[b].value; try { var d = Ob(c) , e = d.length; a = ""; a = 0 == d.length % 2 ? d.substring(e / 2, e) + d.substring(0, e / 2) : d.substring(e / 2 + 1, e) + d.charAt(e / 2) + d.substring(0, e / 2); for (var f = Ob(a), g = f.length, h = f.split(""), d = 0; d < parseInt(g / 2); d++) if (0 == d % 2) { var m = f.charAt(d); h[d] = h[g - 1 - d]; h[g - 1 - d] = m } var p = h.join("") , w = p.length , r = 0 == w % 3 ? parseInt(w / 3) : parseInt(w / 3) + 1; if (3 > w) c = p; else var u = p.substring(0, 1 * r) , n = p.substring(1 * r, 2 * r) , v = p.substring(2 * r, w) , c = n + v + u } catch (Q) {} return c = M.SHA256(c).toString(M.enc.Base64) }, getSendString: function(a) { for (var c = "", b = 0; b < a.length; b++) c += a[b].key + "\x3d" + a[b].value + "\x26"; return c.substring(0, c.length - 1) }, getCrossKey: function() { var a = [] , c = { Linux: "colorDepth pixelRatio timezoneOffset cpuClass navigatorPlatform touchSupport fontsHash webglVendorAndRenderer".split(" "), Win32: "colorDepth resolution timezoneOffset navigatorPlatform webglVendorAndRenderer touchSupport".split(" "), Win64: "colorDepth screenResolution timezoneOffset navigatorPlatform webglVendorAndRenderer touchSupport".split(" "), MacIntel: "colorDepth screenResolution pixelRatio timezoneOffset navigatorPlatform touchSupport".split(" "), iPhone: "canvasHash colorDepth timezoneOffset cpuClass navigatorPlatform touchSupport screenResolution pixelRatio fontsHash webglVendorAndRenderer".split(" ") }; /Linux|linux/g.test(navigator.platform) && (a = c.Linux); navigator.platform && c[navigator.platform] && (a = c[navigator.platform]); return a }, setMoreInfo: function(a) { a.push({ key: "javaEnabled", value: navigator.javaEnabled() ? "1" : "0" }); for (var c = navigator.mimeTypes, b = "", d = 0; d < c.length; d++) b += c[d].type + "#"; a.push({ key: "mimeTypesHash", value: Zb(b.substr(0, b.length - 1)) }); a.push({ key: "cookieEnabled", value: navigator.cookieEnabled ? "1" : "0" }); c = 0; 0 <= navigator.userAgent.toString().indexOf("MSIE") || window.ActiveXObject || "ActiveXObject"in window ? (b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), c = Number(b.GetVariable("$version").split(" ")[1].replace(/,/g, ".").replace(/^(d+.d+).*$/, "$1"))) : navigator.plugins && 0 < navigator.plugins.length && (b = navigator.plugins["Shockwave Flash"]) && (flashArr = b.description.split(" "), c = flashArr[2] + " " + flashArr[3]); a.push({ key: "flashVersion", value: c }); a.push({ key: "doNotTrack", value: navigator.doNotTrack || navigator.msDoNotTrack || window.doNotTrack || "unknown" }); c = new UAParser; c.setUA(navigator.userAgent); c = c.getResult(); a.push({ key: "browserName", value: c.browser.name }); a.push({ key: "browserVersion", value: c.browser.version }); a.push({ key: "os", value: c.os.name }); a.push({ key: "osVersion", value: c.os.version }); a.push({ key: "browserEngine", value: c.engine.name }); a.push({ key: "browserEngineVersion", value: c.engine.version }); a.push({ key: "deviceType", value: c.device.type }); a.push({ key: "deviceVendor", value: c.device.vendor }) }, getCollectElements: function(a, c) { var b = this , d = {}; a.fpExcludes && (d.excludes = a.fpExcludes); d.extraComponents = [{ key: "localCode", getData: function(a) { var b = 0 , c = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if ("function" == typeof c) { try { var d = new c({ iceServers: [] }); d.createDataChannel("", { reliable: !1 }) } catch (pa) { if (2 != b) { b = 1; a(); return } } var e = !1; d.onicecandidate = function(c) { var d = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ , f = []; "complete" != c.target.iceGatheringState || e || (e = !0, c.target.localDescription.sdp.split("\n").forEach(function(a) { (a = d.exec(a)) && "127.0.0.1" != a[1] && "0.0.0.0" != a[1] && -1 === f.indexOf(a[1]) && f.push(a[1]) }), 2 != b && (b = 1, a(0 < f.length ? f.sort()[0] : ""))) } ; d.onaddstream = function(a) { remoteVideo.src = window.URL.createObjectURL(a.stream) } ; d.createOffer(function(a) { d.setLocalDescription(a, function() {}, function() {}) }, function() {}, {}); setTimeout(function() { 0 == b && (b = 2, a()) }, 500) } else a() } }, { key: "isIncognito", getData: function(a) { a(ua) } }, { key: "isRiskBrowser", getData: function(a) { var b; b = /PhantomJS/.test(navigator.userAgent) || window.callPhantom || window._phantom || /HeadlessChrome/.test(navigator.userAgent) || 0 == navigator.plugins.length || "" == navigator.languages ? 1 : void 0; if (!b) { b = 0; var c = ["selenium", "webdriver", "driver"]; try { b = util.inAttrs(window, "_Selenium_IDE_Recorder,_selenium,callSelenium,__nightmare") || util.inAttrs(window.document, "__driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_function,__webdriver_script_fn"); for (var d in window.document) "$" === d[0] && d.match("^\\$[a-z]dc_") && window.document[d].cache_ && (b = 1); for (d = 0; d < c.length; d++) window.document.documentElement.getAttribute(c[d]) && (b = 1) } catch (A) {} try { window.external && window.external.toString() && -1 !== window.external.toString().indexOf("Sequentum") && (b = 1) } catch (A) { b = 0 } } a(b) } }]; Fingerprint2.get(d, function(d) { var e = d.map(function(a) { return a.value }); b.setMoreInfo(d); a.extendFields && (d = d.concat(a.extendFields)); for (var g = [], h = ["fonts", "webgl", "plugins", "canvas"], m = b.getCrossKey(), p = [], v = 0; v < d.length; v++) { var r = d[v] , u = r.key.replace(RegExp("%", "gm"), "") , n = r.value; void 0 !== n && "" !== n && ("platform" == u && (u = "navigatorPlatform"), r.value instanceof Array && (-1 != h.indexOf(u) ? (u += "Hash", n = Zb(n.join("#"))) : n = n.toString().replace(RegExp("%", "gm"), "")), -1 != m.indexOf(u) && p.push(n), g.push({ key: u, value: n })) } d = Fingerprint2.x64hash128(p.join(""), 31).substring(0, 16) + Fingerprint2.x64hash128(e.join(""), 31).substring(16); g.push({ key: "WAP" == $b() ? "wapSmartID" : "webSmartID", value: d }); b.dfpCache.get("CHFIT_CACHE", function(a) { a && g.push({ key: "cookieCode", value: a }); g.push({ key: "custID", value: "fanbit.com" }); g.push({ key: "platform", value: $b() }); b.sortElements(g); a = b.calcHash(g); g.push({ key: "hashCode", value: a }); g.push({ key: "algID", value: "ZuFNKbPgR9" }); g.push({ key: "deviceId", value: "" }); g.push({ key: "timestamp", value: (new Date).getTime() }); "function" == typeof c && c(g) }) }) }, collectionSDKElements: function(a, c) { var b = this , d = {}; a.fpExcludes && (d.excludes = a.fpExcludes); Fingerprint2.get(d, function(d) { for (var e = d.map(function(a) { return a.value }), g = [], h = b.getCrossKey(), m = [], p = 0; p < d.length; p++) { var v = d[p] , r = v.key.replace(RegExp("%", "gm"), "") , v = v.value; -1 != h.indexOf(r) && m.push(v) } try { a.extendFields && (g = g.concat(a.extendFields)) } catch (u) {} d = Fingerprint2.x64hash128(m.join(""), 31).substring(0, 16) + Fingerprint2.x64hash128(e.join(""), 31).substring(16); g.push({ key: "wapSmartID", value: d }); g.push({ key: "custID", value: "fanbit.com" }); g.push({ key: "platform", value: "WEB" }); b.dfpCache.get("CHFIT_CACHE", function(a) { a && g.push({ key: "cookieCode", value: a }); b.sortElements(g); a = b.calcHash(g); g.push({ key: "hashCode", value: a }); g.push({ key: "algID", value: "ZuFNKbPgR9" }); g.push({ key: "deviceId", value: "" }); g.push({ key: "timestamp", value: (new Date).getTime() }); "function" == typeof c && c(g) }) }) }, storeCache: function(a) { if (typeof a == 'string') { a =JSON.parse(a); } for (var c in a) "dfp" == c ? Ua("CHFIT_DEVICEID") != a[c] && Va("CHFIT_DEVICEID", a[c], 1E3, !1) : "exp" == c ? Va("CHFIT_EXPIRATION", a[c], 1E3, !1) : "cookieCode" == c && this.dfpCache.set("CHFIT_CACHE", a[c]) }, getEncryptKey: function() { var a = Nb(16, 16) , c = Nb(16, 16); return a + c }, sendGenerateInfo: function(a, c) { var b = this , d = b.getSendString(a) , e = b.getEncryptKey() , f = encodeURIComponent , g = e.substring(0, 16) , h = e.substring(16) , g = M.enc.Utf8.parse(g) , h = M.enc.Utf8.parse(h) , d = M.AES.encrypt(d, g, { iv: h, mode: M.mode.CBC }).toString() , f = f(d); ac.getJSON("https://microspot.chainupcloud.com/security-microspot/public/generate/jsonp?bsk\x3d" + e + "\x26inputItem\x3d" + f, null, function(a) { b.storeCache(a); "function" == typeof c && c(a) }) }, getFingerprint: function(a, c) { var b = this , d = Ua("CHFIT_DEVICEID") , e = Ua("CHFIT_EXPIRATION"); d && null != d && "" != d && e && null != e && "" != e && 9E5 < e - (new Date).getTime() ? "function" == typeof c && c(JSON.stringify({ dfp: d, exp: e })) : mb() ? this.collectionSDKElements(a, function(a) { b.sendGenerateInfo(a, c) }) : this.getCollectElements(a, function(a) { b.sendGenerateInfo(a, c) }) }, getFingerprintBySDK: function(a) { a = "string" === typeof a ? JSON.parse(a) : a; var c = {}, b = [], d; for (d in a) "platform" != d && "custID" != d && "timestamp" != d && b.push({ key: d, value: a[d] }); c.extendFields = b; c.fpExcludes = { webgl: !0, plugins: !0, webglVendorAndRenderer: !0, canvas: !0, enumerateDevices: !0, pixelRatio: !0, doNotTrack: !0, fontsFlash: !0 }; this.getFingerprint(c, function(a) { JS.onSuccess(a) }) } }; var La = {}; if (mb()) { var xc = "string" === typeof window.SDKElement ? JSON.parse(window.SDKElement) : window.SDKElement, yc = [], va; for (va in xc) "platform" != va && "custID" != va && "timestamp" != va && yc.push({ key: va, value: xc[va] }); La.extendFields = yc; La.fpExcludes = { webgl: !0, plugins: !0, webglVendorAndRenderer: !0, canvas: !0, enumerateDevices: !0, pixelRatio: !0, doNotTrack: !0, fontsFlash: !0 } } else La.extendFields = []; var Ha = [] , Mb = !1 , zc = !1; if ("function" !== typeof lb) throw new TypeError("callback for docReady(fn) must be a function"); if (Mb) setTimeout(function() { lb(void 0) }, 1); else { Ha.push({ fn: lb, ctx: void 0 }); var Ia = function() { if (!Mb) { Mb = !0; for (var a = 0; a < Ha.length; a++) Ha[a].fn.call(window, Ha[a].ctx); Ha = [] } }; "complete" === document.readyState ? setTimeout(Ia, 1) : zc || (document.addEventListener ? (document.addEventListener("DOMContentLoaded", Ia, !1), window.addEventListener("load", Ia, !1)) : (document.attachEvent("onreadystatechange", function() { "complete" === document.readyState && Ia() }), window.attachEvent("onload", Ia)), zc = !0) } return Ka } "undefined" !== typeof window && "function" === typeof define && define.amd ? define(Ja) : "undefined" !== typeof module && module.exports ? module.exports = Ja() : this.exports ? this.exports = Ja() : this.BSDeviceFingerprint = Ja();