lila/public/javascripts/fipr.js

1077 lines
35 KiB
JavaScript

// https://github.com/ornicar/fingerprintjs2/commit/9f580f7c79e6246928d54718f598d27adb821054
window.fipr = (function () {
'use strict';
var l = function (e, t) {
(e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]),
(t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]);
var n = [0, 0, 0, 0];
return (
(n[3] += e[3] + t[3]),
(n[2] += n[3] >>> 16),
(n[3] &= 65535),
(n[2] += e[2] + t[2]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[1] += e[1] + t[1]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[0] += e[0] + t[0]),
(n[0] &= 65535),
[(n[0] << 16) | n[1], (n[2] << 16) | n[3]]
);
},
f = function (e, t) {
(e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]]),
(t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]);
var n = [0, 0, 0, 0];
return (
(n[3] += e[3] * t[3]),
(n[2] += n[3] >>> 16),
(n[3] &= 65535),
(n[2] += e[2] * t[3]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[2] += e[3] * t[2]),
(n[1] += n[2] >>> 16),
(n[2] &= 65535),
(n[1] += e[1] * t[3]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[1] += e[2] * t[2]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[1] += e[3] * t[1]),
(n[0] += n[1] >>> 16),
(n[1] &= 65535),
(n[0] += e[0] * t[3] + e[1] * t[2] + e[2] * t[1] + e[3] * t[0]),
(n[0] &= 65535),
[(n[0] << 16) | n[1], (n[2] << 16) | n[3]]
);
},
g = function (e, t) {
return 32 === (t %= 64)
? [e[1], e[0]]
: t < 32
? [(e[0] << t) | (e[1] >>> (32 - t)), (e[1] << t) | (e[0] >>> (32 - t))]
: ((t -= 32), [(e[1] << t) | (e[0] >>> (32 - t)), (e[0] << t) | (e[1] >>> (32 - t))]);
},
h = function (e, t) {
return 0 === (t %= 64) ? e : t < 32 ? [(e[0] << t) | (e[1] >>> (32 - t)), e[1] << t] : [e[1] << (t - 32), 0];
},
m = function (e, t) {
return [e[0] ^ t[0], e[1] ^ t[1]];
},
p = function (e) {
return (
(e = m(e, [0, e[0] >>> 1])),
(e = f(e, [4283543511, 3981806797])),
(e = m(e, [0, e[0] >>> 1])),
(e = f(e, [3301882366, 444984403])),
(e = m(e, [0, e[0] >>> 1]))
);
},
c = {
audio: { timeout: 1e3, excludeIOS11: !0 },
screen: { detectScreenOrientation: !0 },
plugins: { sortPluginsFor: [/palemoon/i], excludeIE: !1 },
excludes: { pixelRatio: !1 },
NOT_AVAILABLE: 'not available',
ERROR: 'error',
EXCLUDED: 'excluded',
},
d = function (e, t) {
if (Array.prototype.forEach && e.forEach === Array.prototype.forEach) e.forEach(t);
else if (e.length === +e.length) for (var n = 0, r = e.length; n < r; n++) t(e[n], n, e);
else for (var a in e) e.hasOwnProperty(a) && t(e[a], a, e);
},
a = function (e, r) {
var a = [];
return null == e
? a
: Array.prototype.map && e.map === Array.prototype.map
? e.map(r)
: (d(e, function (e, t, n) {
a.push(r(e, t, n));
}),
a);
},
n = function (e) {
var t = [window.screen.width, window.screen.height];
return e.screen.detectScreenOrientation && t.sort().reverse(), t;
},
r = function (e) {
if (window.screen.availWidth && window.screen.availHeight) {
var t = [window.screen.availHeight, window.screen.availWidth];
return e.screen.detectScreenOrientation && t.sort().reverse(), t;
}
return e.NOT_AVAILABLE;
},
i = function (e) {
if (null == navigator.plugins) return e.NOT_AVAILABLE;
for (var t = [], n = 0, r = navigator.plugins.length; n < r; n++)
navigator.plugins[n] && t.push(navigator.plugins[n]);
return (
u(e) &&
(t = t.sort(function (e, t) {
return e.name > t.name ? 1 : e.name < t.name ? -1 : 0;
})),
a(t, function (e) {
var t = a(e, function (e) {
return [e.type, e.suffixes];
});
return [e.name, e.description, t];
})
);
},
o = function (n) {
var e = [];
return (
(Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(window, 'ActiveXObject')) ||
'ActiveXObject' in window
? (e = a(
[
'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',
],
function (e) {
try {
return new window.ActiveXObject(e), e;
} catch (t) {
return n.ERROR;
}
}
))
: e.push(n.NOT_AVAILABLE),
navigator.plugins && (e = e.concat(i(n))),
e
);
},
u = function (e) {
for (var t = !1, n = 0, r = e.plugins.sortPluginsFor.length; n < r; n++) {
var a = e.plugins.sortPluginsFor[n];
if (navigator.userAgent.match(a)) {
t = !0;
break;
}
}
return t;
},
s = function (e) {
try {
return !!window.sessionStorage;
} catch (t) {
return e.ERROR;
}
},
A = function (e) {
try {
return !!window.localStorage;
} catch (t) {
return e.ERROR;
}
},
v = function (e) {
try {
return !!window.indexedDB;
} catch (t) {
return e.ERROR;
}
},
x = function (e) {
return navigator.hardwareConcurrency ? navigator.hardwareConcurrency : e.NOT_AVAILABLE;
},
w = function (e) {
return navigator.cpuClass || e.NOT_AVAILABLE;
},
E = function (e) {
return navigator.platform ? navigator.platform : e.NOT_AVAILABLE;
},
t = function () {
var e,
t = 0;
'undefined' != typeof navigator.maxTouchPoints
? (t = navigator.maxTouchPoints)
: 'undefined' != typeof navigator.msMaxTouchPoints && (t = navigator.msMaxTouchPoints);
try {
document.createEvent('TouchEvent'), (e = !0);
} catch (n) {
e = !1;
}
return [t, e, 'ontouchstart' in window];
},
O = function (e) {
var t = [],
n = document.createElement('canvas');
(n.width = 2e3), (n.height = 200), (n.style.display = 'inline');
var r = n.getContext('2d');
return (
r.rect(0, 0, 10, 10),
r.rect(2, 2, 6, 6),
t.push('canvas winding:' + (!1 === r.isPointInPath(5, 5, 'evenodd') ? 'yes' : 'no')),
(r.textBaseline = 'alphabetic'),
(r.fillStyle = '#f60'),
r.fillRect(125, 1, 62, 20),
(r.fillStyle = '#069'),
e.dontUseFakeFontInCanvas ? (r.font = '11pt Arial') : (r.font = '11pt no-real-font-123'),
r.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 2, 15),
(r.fillStyle = 'rgba(102, 204, 0, 0.2)'),
(r.font = '18pt Arial'),
r.fillText('Cwm fjordbank glyphs vext quiz, \ud83d\ude03', 4, 45),
(r.globalCompositeOperation = 'multiply'),
(r.fillStyle = 'rgb(255,0,255)'),
r.beginPath(),
r.arc(50, 50, 50, 0, 2 * Math.PI, !0),
r.closePath(),
r.fill(),
(r.fillStyle = 'rgb(0,255,255)'),
r.beginPath(),
r.arc(100, 50, 50, 0, 2 * Math.PI, !0),
r.closePath(),
r.fill(),
(r.fillStyle = 'rgb(255,255,0)'),
r.beginPath(),
r.arc(75, 100, 50, 0, 2 * Math.PI, !0),
r.closePath(),
r.fill(),
(r.fillStyle = 'rgb(255,0,255)'),
r.arc(75, 75, 75, 0, 2 * Math.PI, !0),
r.arc(75, 75, 25, 0, 2 * Math.PI, !0),
r.fill('evenodd'),
n.toDataURL && t.push('canvas fp:' + n.toDataURL()),
t
);
},
y = function () {
var e = function (e) {
return (
o.clearColor(0, 0, 0, 1),
o.enable(o.DEPTH_TEST),
o.depthFunc(o.LEQUAL),
o.clear(o.COLOR_BUFFER_BIT | o.DEPTH_BUFFER_BIT),
'[' + e[0] + ', ' + e[1] + ']'
);
},
o = I();
if (!o) return null;
var c = [],
t = o.createBuffer();
o.bindBuffer(o.ARRAY_BUFFER, t);
var n = new Float32Array([-0.2, -0.9, 0, 0.4, -0.26, 0, 0, 0.732134444, 0]);
o.bufferData(o.ARRAY_BUFFER, n, o.STATIC_DRAW), (t.itemSize = 3), (t.numItems = 3);
var r = o.createProgram(),
a = o.createShader(o.VERTEX_SHADER);
o.shaderSource(
a,
'attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}'
),
o.compileShader(a);
var i = o.createShader(o.FRAGMENT_SHADER);
o.shaderSource(
i,
'precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}'
),
o.compileShader(i),
o.attachShader(r, a),
o.attachShader(r, i),
o.linkProgram(r),
o.useProgram(r),
(r.vertexPosAttrib = o.getAttribLocation(r, 'attrVertex')),
(r.offsetUniform = o.getUniformLocation(r, 'uniformOffset')),
o.enableVertexAttribArray(r.vertexPosArray),
o.vertexAttribPointer(r.vertexPosAttrib, t.itemSize, o.FLOAT, !1, 0, 0),
o.uniform2f(r.offsetUniform, 1, 1),
o.drawArrays(o.TRIANGLE_STRIP, 0, t.numItems);
try {
c.push(o.canvas.toDataURL());
} catch (s) {}
c.push('extensions:' + (o.getSupportedExtensions() || []).join(';')),
c.push('webgl aliased line width range:' + e(o.getParameter(o.ALIASED_LINE_WIDTH_RANGE))),
c.push('webgl aliased point size range:' + e(o.getParameter(o.ALIASED_POINT_SIZE_RANGE))),
c.push('webgl alpha bits:' + o.getParameter(o.ALPHA_BITS)),
c.push('webgl antialiasing:' + (o.getContextAttributes().antialias ? 'yes' : 'no')),
c.push('webgl blue bits:' + o.getParameter(o.BLUE_BITS)),
c.push('webgl depth bits:' + o.getParameter(o.DEPTH_BITS)),
c.push('webgl green bits:' + o.getParameter(o.GREEN_BITS)),
c.push(
'webgl max anisotropy:' +
(function (e) {
var t =
e.getExtension('EXT_texture_filter_anisotropic') ||
e.getExtension('WEBKIT_EXT_texture_filter_anisotropic') ||
e.getExtension('MOZ_EXT_texture_filter_anisotropic');
if (t) {
var n = e.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
return 0 === n && (n = 2), n;
}
return null;
})(o)
),
c.push('webgl max combined texture image units:' + o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS)),
c.push('webgl max cube map texture size:' + o.getParameter(o.MAX_CUBE_MAP_TEXTURE_SIZE)),
c.push('webgl max fragment uniform vectors:' + o.getParameter(o.MAX_FRAGMENT_UNIFORM_VECTORS)),
c.push('webgl max render buffer size:' + o.getParameter(o.MAX_RENDERBUFFER_SIZE)),
c.push('webgl max texture image units:' + o.getParameter(o.MAX_TEXTURE_IMAGE_UNITS)),
c.push('webgl max texture size:' + o.getParameter(o.MAX_TEXTURE_SIZE)),
c.push('webgl max varying vectors:' + o.getParameter(o.MAX_VARYING_VECTORS)),
c.push('webgl max vertex attribs:' + o.getParameter(o.MAX_VERTEX_ATTRIBS)),
c.push('webgl max vertex texture image units:' + o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)),
c.push('webgl max vertex uniform vectors:' + o.getParameter(o.MAX_VERTEX_UNIFORM_VECTORS)),
c.push('webgl max viewport dims:' + e(o.getParameter(o.MAX_VIEWPORT_DIMS))),
c.push('webgl red bits:' + o.getParameter(o.RED_BITS)),
c.push('webgl renderer:' + o.getParameter(o.RENDERER)),
c.push('webgl shading language version:' + o.getParameter(o.SHADING_LANGUAGE_VERSION)),
c.push('webgl stencil bits:' + o.getParameter(o.STENCIL_BITS)),
c.push('webgl vendor:' + o.getParameter(o.VENDOR)),
c.push('webgl version:' + o.getParameter(o.VERSION));
try {
var u = o.getExtension('WEBGL_debug_renderer_info');
u &&
(c.push('webgl unmasked vendor:' + o.getParameter(u.UNMASKED_VENDOR_WEBGL)),
c.push('webgl unmasked renderer:' + o.getParameter(u.UNMASKED_RENDERER_WEBGL)));
} catch (s) {}
return (
o.getShaderPrecisionFormat &&
d(['FLOAT', 'INT'], function (i) {
d(['VERTEX', 'FRAGMENT'], function (a) {
d(['HIGH', 'MEDIUM', 'LOW'], function (r) {
d(['precision', 'rangeMin', 'rangeMax'], function (e) {
var t = o.getShaderPrecisionFormat(o[a + '_SHADER'], o[r + '_' + i])[e];
'precision' !== e && (e = 'precision ' + e);
var n = [
'webgl ',
a.toLowerCase(),
' shader ',
r.toLowerCase(),
' ',
i.toLowerCase(),
' ',
e,
':',
t,
].join('');
c.push(n);
});
});
});
}),
M(o),
c
);
},
S = function () {
try {
var e = I(),
t = e.getExtension('WEBGL_debug_renderer_info'),
n = e.getParameter(t.UNMASKED_VENDOR_WEBGL) + '~' + e.getParameter(t.UNMASKED_RENDERER_WEBGL);
return M(e), n;
} catch (r) {
return null;
}
},
C = function () {
var e = document.createElement('div');
e.innerHTML = '&nbsp;';
var t = !(e.className = 'adsbox');
try {
document.body.appendChild(e),
(t = 0 === document.getElementsByClassName('adsbox')[0].offsetHeight),
document.body.removeChild(e);
} catch (n) {
t = !1;
}
return t;
},
T = function () {
if ('undefined' != typeof navigator.languages)
try {
if (navigator.languages[0].substr(0, 2) !== navigator.language.substr(0, 2)) return !0;
} catch (e) {
return !0;
}
return !1;
},
b = function () {
return window.screen.width < window.screen.availWidth || window.screen.height < window.screen.availHeight;
},
_ = function () {
var e = navigator.userAgent.toLowerCase(),
t = navigator.oscpu,
n = navigator.platform.toLowerCase(),
r =
0 <= e.indexOf('windows phone')
? 'Windows Phone'
: 0 <= e.indexOf('windows') ||
0 <= e.indexOf('win16') ||
0 <= e.indexOf('win32') ||
0 <= e.indexOf('win64') ||
0 <= e.indexOf('win95') ||
0 <= e.indexOf('win98') ||
0 <= e.indexOf('winnt') ||
0 <= e.indexOf('wow64')
? 'Windows'
: 0 <= e.indexOf('android')
? 'Android'
: 0 <= e.indexOf('linux') || 0 <= e.indexOf('cros') || 0 <= e.indexOf('x11')
? 'Linux'
: 0 <= e.indexOf('iphone') ||
0 <= e.indexOf('ipad') ||
0 <= e.indexOf('ipod') ||
0 <= e.indexOf('crios') ||
0 <= e.indexOf('fxios')
? 'iOS'
: 0 <= e.indexOf('macintosh') || 0 <= e.indexOf('mac_powerpc)')
? 'Mac'
: 'Other';
if (
('ontouchstart' in window || 0 < navigator.maxTouchPoints || 0 < navigator.msMaxTouchPoints) &&
'Windows' !== r &&
'Windows Phone' !== r &&
'Android' !== r &&
'iOS' !== r &&
'Other' !== r &&
-1 === e.indexOf('cros')
)
return !0;
if (void 0 !== t) {
if (0 <= (t = t.toLowerCase()).indexOf('win') && 'Windows' !== r && 'Windows Phone' !== r) return !0;
if (0 <= t.indexOf('linux') && 'Linux' !== r && 'Android' !== r) return !0;
if (0 <= t.indexOf('mac') && 'Mac' !== r && 'iOS' !== r) return !0;
if ((-1 === t.indexOf('win') && -1 === t.indexOf('linux') && -1 === t.indexOf('mac')) != ('Other' === r))
return !0;
}
return (
(0 <= n.indexOf('win') && 'Windows' !== r && 'Windows Phone' !== r) ||
((0 <= n.indexOf('linux') || 0 <= n.indexOf('android') || 0 <= n.indexOf('pike')) &&
'Linux' !== r &&
'Android' !== r) ||
((0 <= n.indexOf('mac') || 0 <= n.indexOf('ipad') || 0 <= n.indexOf('ipod') || 0 <= n.indexOf('iphone')) &&
'Mac' !== r &&
'iOS' !== r) ||
(!(0 <= n.indexOf('arm') && 'Windows Phone' === r) &&
!(0 <= n.indexOf('pike') && 0 <= e.indexOf('opera mini')) &&
((n.indexOf('win') < 0 &&
n.indexOf('linux') < 0 &&
n.indexOf('mac') < 0 &&
n.indexOf('iphone') < 0 &&
n.indexOf('ipad') < 0 &&
n.indexOf('ipod') < 0) !=
('Other' === r) ||
('undefined' == typeof navigator.plugins && 'Windows' !== r && 'Windows Phone' !== r)))
);
},
P = function () {
var e,
t = navigator.userAgent.toLowerCase(),
n = navigator.productSub;
if (0 <= t.indexOf('edge/') || 0 <= t.indexOf('iemobile/')) return !1;
if (0 <= t.indexOf('opera mini')) return !1;
if (
('Chrome' ===
(e =
0 <= t.indexOf('firefox/')
? 'Firefox'
: 0 <= t.indexOf('opera/') || 0 <= t.indexOf(' opr/')
? 'Opera'
: 0 <= t.indexOf('chrome/')
? 'Chrome'
: 0 <= t.indexOf('safari/')
? 0 <= t.indexOf('android 1.') ||
0 <= t.indexOf('android 2.') ||
0 <= t.indexOf('android 3.') ||
0 <= t.indexOf('android 4.')
? 'AOSP'
: 'Safari'
: 0 <= t.indexOf('trident/')
? 'Internet Explorer'
: 'Other') ||
'Safari' === e ||
'Opera' === e) &&
'20030107' !== n
)
return !0;
var r,
a = eval.toString().length;
if (37 === a && 'Safari' !== e && 'Firefox' !== e && 'Other' !== e) return !0;
if (39 === a && 'Internet Explorer' !== e && 'Other' !== e) return !0;
if (33 === a && 'Chrome' !== e && 'AOSP' !== e && 'Opera' !== e && 'Other' !== e) return !0;
try {
throw 'a';
} catch (i) {
try {
i.toSource(), (r = !0);
} catch (o) {
r = !1;
}
}
return r && 'Firefox' !== e && 'Other' !== e;
},
R = function () {
var e = document.createElement('canvas');
return !(!e.getContext || !e.getContext('2d'));
},
D = function () {
if (!R()) return !1;
var e = I(),
t = !!window.WebGLRenderingContext && !!e;
return M(e), t;
},
L = function () {
return (
'Microsoft Internet Explorer' === navigator.appName ||
!('Netscape' !== navigator.appName || !/Trident/.test(navigator.userAgent))
);
},
I = function () {
var e = document.createElement('canvas'),
t = null;
try {
t = e.getContext('webgl') || e.getContext('experimental-webgl');
} catch (n) {}
return (t = t || null);
},
M = function (e) {
var t = e.getExtension('WEBGL_lose_context');
null != t && t.loseContext();
},
k = [
{
key: 'userAgent',
getData: function (e) {
e(navigator.userAgent);
},
},
{
key: 'webdriver',
getData: function (e, t) {
e(null == navigator.webdriver ? t.NOT_AVAILABLE : navigator.webdriver);
},
},
{
key: 'language',
getData: function (e, t) {
e(
navigator.language ||
navigator.userLanguage ||
navigator.browserLanguage ||
navigator.systemLanguage ||
t.NOT_AVAILABLE
);
},
},
{
key: 'colorDepth',
getData: function (e, t) {
e(window.screen.colorDepth || t.NOT_AVAILABLE);
},
},
{
key: 'deviceMemory',
getData: function (e, t) {
e(navigator.deviceMemory || t.NOT_AVAILABLE);
},
},
{
key: 'pixelRatio',
getData: function (e, t) {
e(window.devicePixelRatio || t.NOT_AVAILABLE);
},
},
{
key: 'hardwareConcurrency',
getData: function (e, t) {
e(x(t));
},
},
{
key: 'screenResolution',
getData: function (e, t) {
e(n(t));
},
},
{
key: 'availableScreenResolution',
getData: function (e, t) {
e(r(t));
},
},
{
key: 'timezoneOffset',
getData: function (e) {
e(new Date().getTimezoneOffset());
},
},
{
key: 'timezone',
getData: function (e, t) {
window.Intl && window.Intl.DateTimeFormat
? e(new window.Intl.DateTimeFormat().resolvedOptions().timeZone)
: e(t.NOT_AVAILABLE);
},
},
{
key: 'sessionStorage',
getData: function (e, t) {
e(s(t));
},
},
{
key: 'localStorage',
getData: function (e, t) {
e(A(t));
},
},
{
key: 'indexedDb',
getData: function (e, t) {
e(v(t));
},
},
{
key: 'addBehavior',
getData: function (e) {
e(!(!document.body || !document.body.addBehavior));
},
},
{
key: 'openDatabase',
getData: function (e) {
e(!!window.openDatabase);
},
},
{
key: 'cpuClass',
getData: function (e, t) {
e(w(t));
},
},
{
key: 'platform',
getData: function (e, t) {
e(E(t));
},
},
{
key: 'plugins',
getData: function (e, t) {
L() ? (t.plugins.excludeIE ? e(t.EXCLUDED) : e(o(t))) : e(i(t));
},
},
{
key: 'canvas',
getData: function (e, t) {
R() ? e(O(t)) : e(t.NOT_AVAILABLE);
},
},
{
key: 'webgl',
getData: function (e, t) {
D() ? e(y()) : e(t.NOT_AVAILABLE);
},
},
{
key: 'webglVendorAndRenderer',
getData: function (e) {
D() ? e(S()) : e();
},
},
{
key: 'adBlock',
getData: function (e) {
e(C());
},
},
{
key: 'hasLiedLanguages',
getData: function (e) {
e(T());
},
},
{
key: 'hasLiedResolution',
getData: function (e) {
e(b());
},
},
{
key: 'hasLiedOs',
getData: function (e) {
e(_());
},
},
{
key: 'hasLiedBrowser',
getData: function (e) {
e(P());
},
},
{
key: 'touchSupport',
getData: function (e) {
e(t());
},
},
{
key: 'fonts',
getData: function (e, t) {
var d = ['monospace', 'sans-serif', 'serif'],
l = (l = [
'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',
]).filter(function (e, t) {
return l.indexOf(e) === t;
}),
n = document.getElementsByTagName('body')[0],
a = document.createElement('div'),
f = document.createElement('div'),
r = {},
i = {},
g = function () {
var e = document.createElement('span');
return (
(e.style.position = 'absolute'),
(e.style.left = '-9999px'),
(e.style.fontSize = '72px'),
(e.style.fontStyle = 'normal'),
(e.style.fontWeight = 'normal'),
(e.style.letterSpacing = 'normal'),
(e.style.lineBreak = 'auto'),
(e.style.lineHeight = 'normal'),
(e.style.textTransform = 'none'),
(e.style.textAlign = 'left'),
(e.style.textDecoration = 'none'),
(e.style.textShadow = 'none'),
(e.style.whiteSpace = 'normal'),
(e.style.wordBreak = 'normal'),
(e.style.wordSpacing = 'normal'),
(e.innerHTML = 'mmmmmmmmmmlli'),
e
);
},
o = function (e) {
for (var t = !1, n = 0; n < d.length; n++)
if ((t = e[n].offsetWidth !== r[d[n]] || e[n].offsetHeight !== i[d[n]])) return t;
return t;
},
c = (function () {
for (var e = [], t = 0, n = d.length; t < n; t++) {
var r = g();
(r.style.fontFamily = d[t]), a.appendChild(r), e.push(r);
}
return e;
})();
n.appendChild(a);
for (var u = 0, s = d.length; u < s; u++) (r[d[u]] = c[u].offsetWidth), (i[d[u]] = c[u].offsetHeight);
var h = (function () {
for (var e, t, n, r = {}, a = 0, i = l.length; a < i; a++) {
for (var o = [], c = 0, u = d.length; c < u; c++) {
var s = ((e = l[a]), (t = d[c]), (n = void 0), ((n = g()).style.fontFamily = "'" + e + "'," + t), n);
f.appendChild(s), o.push(s);
}
r[l[a]] = o;
}
return r;
})();
n.appendChild(f);
for (var m = [], p = 0, A = l.length; p < A; p++) o(h[l[p]]) && m.push(l[p]);
n.removeChild(f), n.removeChild(a), e(m);
},
pauseBefore: !0,
},
{
key: 'audio',
getData: function (r, e) {
var t = e.audio;
if (t.excludeIOS11 && navigator.userAgent.match(/OS 11.+Version\/11.+Safari/)) return r(e.EXCLUDED);
var n = window.OfflineAudioContext || window.webkitOfflineAudioContext;
if (null == n) return r(e.NOT_AVAILABLE);
var a = new n(1, 44100, 44100),
i = a.createOscillator();
(i.type = 'triangle'), i.frequency.setValueAtTime(1e4, a.currentTime);
var o = a.createDynamicsCompressor();
d(
[
['threshold', -50],
['knee', 40],
['ratio', 12],
['reduction', -20],
['attack', 0],
['release', 0.25],
],
function (e) {
o[e[0]] !== undefined &&
'function' == typeof o[e[0]].setValueAtTime &&
o[e[0]].setValueAtTime(e[1], a.currentTime);
}
),
i.connect(o),
o.connect(a.destination),
i.start(0),
a.startRendering();
var c = setTimeout(function () {
return (
console.warn(
'Audio fingerprint timed out. Please report bug at https://github.com/Valve/fingerprintjs2 with your user agent: "' +
navigator.userAgent +
'".'
),
(a.oncomplete = function () {}),
(a = null),
r('audioTimeout')
);
}, t.timeout);
a.oncomplete = function (e) {
var t;
try {
clearTimeout(c),
(t = e.renderedBuffer
.getChannelData(0)
.slice(4500, 5e3)
.reduce(function (e, t) {
return e + Math.abs(t);
}, 0)
.toString()),
i.disconnect(),
o.disconnect();
} catch (n) {
return void r(n);
}
r(t);
};
},
},
],
e = {
get: function (r) {
var a = {
data: [],
addPreprocessedComponent: function (e, t) {
a.data.push({ key: e, value: t });
},
},
i = -1,
o = function (e) {
if (k.length <= (i += 1)) r(a.data);
else {
var t = k[i];
if (c.excludes[t.key]) o(!1);
else {
if (!e && t.pauseBefore)
return (
--i,
void setTimeout(function () {
o(!0);
}, 1)
);
try {
t.getData(function (e) {
a.addPreprocessedComponent(t.key, e), o(!1);
}, c);
} catch (n) {
a.addPreprocessedComponent(t.key, String(n)), o(!1);
}
}
}
};
o(!1);
},
x64hash128: function (e, t) {
t = t || 0;
for (
var n = (e = e || '').length % 16,
r = e.length - n,
a = [0, t],
i = [0, t],
o = [0, 0],
c = [0, 0],
u = [2277735313, 289559509],
s = [1291169091, 658871167],
d = 0;
d < r;
d += 16
)
(o = [
(255 & e.charCodeAt(d + 4)) |
((255 & e.charCodeAt(d + 5)) << 8) |
((255 & e.charCodeAt(d + 6)) << 16) |
((255 & e.charCodeAt(d + 7)) << 24),
(255 & e.charCodeAt(d)) |
((255 & e.charCodeAt(d + 1)) << 8) |
((255 & e.charCodeAt(d + 2)) << 16) |
((255 & e.charCodeAt(d + 3)) << 24),
]),
(c = [
(255 & e.charCodeAt(d + 12)) |
((255 & e.charCodeAt(d + 13)) << 8) |
((255 & e.charCodeAt(d + 14)) << 16) |
((255 & e.charCodeAt(d + 15)) << 24),
(255 & e.charCodeAt(d + 8)) |
((255 & e.charCodeAt(d + 9)) << 8) |
((255 & e.charCodeAt(d + 10)) << 16) |
((255 & e.charCodeAt(d + 11)) << 24),
]),
(o = f(o, u)),
(o = g(o, 31)),
(o = f(o, s)),
(a = m(a, o)),
(a = g(a, 27)),
(a = l(a, i)),
(a = l(f(a, [0, 5]), [0, 1390208809])),
(c = f(c, s)),
(c = g(c, 33)),
(c = f(c, u)),
(i = m(i, c)),
(i = g(i, 31)),
(i = l(i, a)),
(i = l(f(i, [0, 5]), [0, 944331445]));
switch (((o = [0, 0]), (c = [0, 0]), n)) {
case 15:
c = m(c, h([0, e.charCodeAt(d + 14)], 48));
case 14:
c = m(c, h([0, e.charCodeAt(d + 13)], 40));
case 13:
c = m(c, h([0, e.charCodeAt(d + 12)], 32));
case 12:
c = m(c, h([0, e.charCodeAt(d + 11)], 24));
case 11:
c = m(c, h([0, e.charCodeAt(d + 10)], 16));
case 10:
c = m(c, h([0, e.charCodeAt(d + 9)], 8));
case 9:
(c = m(c, [0, e.charCodeAt(d + 8)])), (c = f(c, s)), (c = g(c, 33)), (c = f(c, u)), (i = m(i, c));
case 8:
o = m(o, h([0, e.charCodeAt(d + 7)], 56));
case 7:
o = m(o, h([0, e.charCodeAt(d + 6)], 48));
case 6:
o = m(o, h([0, e.charCodeAt(d + 5)], 40));
case 5:
o = m(o, h([0, e.charCodeAt(d + 4)], 32));
case 4:
o = m(o, h([0, e.charCodeAt(d + 3)], 24));
case 3:
o = m(o, h([0, e.charCodeAt(d + 2)], 16));
case 2:
o = m(o, h([0, e.charCodeAt(d + 1)], 8));
case 1:
(o = m(o, [0, e.charCodeAt(d)])), (o = f(o, u)), (o = g(o, 31)), (o = f(o, s)), (a = m(a, o));
}
return (
(a = m(a, [0, e.length])),
(i = m(i, [0, e.length])),
(a = l(a, i)),
(i = l(i, a)),
(a = p(a)),
(i = p(i)),
(a = l(a, i)),
(i = l(i, a)),
('00000000' + (a[0] >>> 0).toString(16)).slice(-8) +
('00000000' + (a[1] >>> 0).toString(16)).slice(-8) +
('00000000' + (i[0] >>> 0).toString(16)).slice(-8) +
('00000000' + (i[1] >>> 0).toString(16)).slice(-8)
);
},
};
return e;
})();
lichess.load.then(() =>
setTimeout(() => {
const t = performance.now(),
storage = lichess.storage.make('fipr'),
send = hash => {
storage.set(hash);
const $i = $('#signup-fp-input');
if ($i.length) $i.val(hash);
else
fetch('/auth/set-fp/' + hash + '/' + Math.round(performance.now() - t), {
method: 'post',
credentials: 'same-origin',
});
};
if (storage.get()) send(storage.get());
else fipr.get(c => send(fipr.x64hash128(c.map(x => x.value).join(''), 31)));
}, 1000)
);