{"version":3,"file":"inline.js","mappings":"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","sources":["webpack://l2it-widget/./node_modules/charenc/charenc.js","webpack://l2it-widget/./node_modules/crypt/crypt.js","webpack://l2it-widget/./node_modules/howler/dist/howler.js","webpack://l2it-widget/./node_modules/is-buffer/index.js","webpack://l2it-widget/./node_modules/md5/md5.js","webpack://l2it-widget/./node_modules/ua-parser-js/src/ua-parser.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/rng.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/regex.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/validate.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/v1.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/parse.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/v35.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/md5.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/v3.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/v4.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/sha1.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/v5.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/nil.js","webpack://l2it-widget/./node_modules/uuid/dist/esm-browser/version.js","webpack://l2it-widget/./src/js/analytics.js","webpack://l2it-widget/./src/js/player.js","webpack://l2it-widget/webpack/bootstrap","webpack://l2it-widget/webpack/runtime/amd options","webpack://l2it-widget/webpack/runtime/define property getters","webpack://l2it-widget/webpack/runtime/global","webpack://l2it-widget/webpack/runtime/hasOwnProperty shorthand","webpack://l2it-widget/webpack/runtime/make namespace object","webpack://l2it-widget/./src/js/inline.js"],"sourcesContent":["var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","/*!\n * howler.js v2.2.3\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Create the global controller. All contained methods and properties apply\n * to all sounds that are currently playing or will be in the future.\n */\n var HowlerGlobal = function() {\n this.init();\n };\n HowlerGlobal.prototype = {\n /**\n * Initialize the global Howler object.\n * @return {Howler}\n */\n init: function() {\n var self = this || Howler;\n\n // Create a global ID counter.\n self._counter = 1000;\n\n // Pool of unlocked HTML5 Audio objects.\n self._html5AudioPool = [];\n self.html5PoolSize = 10;\n\n // Internal properties.\n self._codecs = {};\n self._howls = [];\n self._muted = false;\n self._volume = 1;\n self._canPlayEvent = 'canplaythrough';\n self._navigator = (typeof window !== 'undefined' && window.navigator) ? window.navigator : null;\n\n // Public properties.\n self.masterGain = null;\n self.noAudio = false;\n self.usingWebAudio = true;\n self.autoSuspend = true;\n self.ctx = null;\n\n // Set to false to disable the auto audio unlocker.\n self.autoUnlock = true;\n\n // Setup the various state values for global tracking.\n self._setup();\n\n return self;\n },\n\n /**\n * Get/set the global volume for all sounds.\n * @param {Float} vol Volume from 0.0 to 1.0.\n * @return {Howler/Float} Returns self or current volume.\n */\n volume: function(vol) {\n var self = this || Howler;\n vol = parseFloat(vol);\n\n // If we don't have an AudioContext created yet, run the setup.\n if (!self.ctx) {\n setupAudioContext();\n }\n\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n self._volume = vol;\n\n // Don't update any of the nodes if we are muted.\n if (self._muted) {\n return self;\n }\n\n // When using Web Audio, we just need to adjust the master gain.\n if (self.usingWebAudio) {\n self.masterGain.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n }\n\n // Loop through and change volume for all HTML5 audio nodes.\n for (var i=0; i=0; i--) {\n self._howls[i].unload();\n }\n\n // Create a new AudioContext to make sure it is fully reset.\n if (self.usingWebAudio && self.ctx && typeof self.ctx.close !== 'undefined') {\n self.ctx.close();\n self.ctx = null;\n setupAudioContext();\n }\n\n return self;\n },\n\n /**\n * Check for codec support of specific extension.\n * @param {String} ext Audio file extention.\n * @return {Boolean}\n */\n codecs: function(ext) {\n return (this || Howler)._codecs[ext.replace(/^x-/, '')];\n },\n\n /**\n * Setup various state values for global tracking.\n * @return {Howler}\n */\n _setup: function() {\n var self = this || Howler;\n\n // Keeps track of the suspend/resume state of the AudioContext.\n self.state = self.ctx ? self.ctx.state || 'suspended' : 'suspended';\n\n // Automatically begin the 30-second suspend process\n self._autoSuspend();\n\n // Check if audio is available.\n if (!self.usingWebAudio) {\n // No audio is available on this system if noAudio is set to true.\n if (typeof Audio !== 'undefined') {\n try {\n var test = new Audio();\n\n // Check if the canplaythrough event is available.\n if (typeof test.oncanplaythrough === 'undefined') {\n self._canPlayEvent = 'canplay';\n }\n } catch(e) {\n self.noAudio = true;\n }\n } else {\n self.noAudio = true;\n }\n }\n\n // Test to make sure audio isn't disabled in Internet Explorer.\n try {\n var test = new Audio();\n if (test.muted) {\n self.noAudio = true;\n }\n } catch (e) {}\n\n // Check for supported codecs.\n if (!self.noAudio) {\n self._setupCodecs();\n }\n\n return self;\n },\n\n /**\n * Check for browser support for various codecs and cache the results.\n * @return {Howler}\n */\n _setupCodecs: function() {\n var self = this || Howler;\n var audioTest = null;\n\n // Must wrap in a try/catch because IE11 in server mode throws an error.\n try {\n audioTest = (typeof Audio !== 'undefined') ? new Audio() : null;\n } catch (err) {\n return self;\n }\n\n if (!audioTest || typeof audioTest.canPlayType !== 'function') {\n return self;\n }\n\n var mpegTest = audioTest.canPlayType('audio/mpeg;').replace(/^no$/, '');\n\n // Opera version <33 has mixed MP3 support, so we need to check for and block it.\n var ua = self._navigator ? self._navigator.userAgent : '';\n var checkOpera = ua.match(/OPR\\/([0-6].)/g);\n var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);\n var checkSafari = ua.indexOf('Safari') !== -1 && ua.indexOf('Chrome') === -1;\n var safariVersion = ua.match(/Version\\/(.*?) /);\n var isOldSafari = (checkSafari && safariVersion && parseInt(safariVersion[1], 10) < 15);\n\n self._codecs = {\n mp3: !!(!isOldOpera && (mpegTest || audioTest.canPlayType('audio/mp3;').replace(/^no$/, ''))),\n mpeg: !!mpegTest,\n opus: !!audioTest.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, ''),\n ogg: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n oga: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n wav: !!(audioTest.canPlayType('audio/wav; codecs=\"1\"') || audioTest.canPlayType('audio/wav')).replace(/^no$/, ''),\n aac: !!audioTest.canPlayType('audio/aac;').replace(/^no$/, ''),\n caf: !!audioTest.canPlayType('audio/x-caf;').replace(/^no$/, ''),\n m4a: !!(audioTest.canPlayType('audio/x-m4a;') || audioTest.canPlayType('audio/m4a;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n m4b: !!(audioTest.canPlayType('audio/x-m4b;') || audioTest.canPlayType('audio/m4b;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n mp4: !!(audioTest.canPlayType('audio/x-mp4;') || audioTest.canPlayType('audio/mp4;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n weba: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n webm: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n dolby: !!audioTest.canPlayType('audio/mp4; codecs=\"ec-3\"').replace(/^no$/, ''),\n flac: !!(audioTest.canPlayType('audio/x-flac;') || audioTest.canPlayType('audio/flac;')).replace(/^no$/, '')\n };\n\n return self;\n },\n\n /**\n * Some browsers/devices will only allow audio to be played after a user interaction.\n * Attempt to automatically unlock audio on the first user interaction.\n * Concept from: http://paulbakaus.com/tutorials/html5/web-audio-on-ios/\n * @return {Howler}\n */\n _unlockAudio: function() {\n var self = this || Howler;\n\n // Only run this if Web Audio is supported and it hasn't already been unlocked.\n if (self._audioUnlocked || !self.ctx) {\n return;\n }\n\n self._audioUnlocked = false;\n self.autoUnlock = false;\n\n // Some mobile devices/platforms have distortion issues when opening/closing tabs and/or web views.\n // Bugs in the browser (especially Mobile Safari) can cause the sampleRate to change from 44100 to 48000.\n // By calling Howler.unload(), we create a new AudioContext with the correct sampleRate.\n if (!self._mobileUnloaded && self.ctx.sampleRate !== 44100) {\n self._mobileUnloaded = true;\n self.unload();\n }\n\n // Scratch buffer for enabling iOS to dispose of web audio buffers correctly, as per:\n // http://stackoverflow.com/questions/24119684\n self._scratchBuffer = self.ctx.createBuffer(1, 1, 22050);\n\n // Call this method on touch start to create and play a buffer,\n // then check if the audio actually played to determine if\n // audio has now been unlocked on iOS, Android, etc.\n var unlock = function(e) {\n // Create a pool of unlocked HTML5 Audio objects that can\n // be used for playing sounds without user interaction. HTML5\n // Audio objects must be individually unlocked, as opposed\n // to the WebAudio API which only needs a single activation.\n // This must occur before WebAudio setup or the source.onended\n // event will not fire.\n while (self._html5AudioPool.length < self.html5PoolSize) {\n try {\n var audioNode = new Audio();\n\n // Mark this Audio object as unlocked to ensure it can get returned\n // to the unlocked pool when released.\n audioNode._unlocked = true;\n\n // Add the audio node to the pool.\n self._releaseHtml5Audio(audioNode);\n } catch (e) {\n self.noAudio = true;\n break;\n }\n }\n\n // Loop through any assigned audio nodes and unlock them.\n for (var i=0; i= 55.\n if (typeof self.ctx.resume === 'function') {\n self.ctx.resume();\n }\n\n // Setup a timeout to check that we are unlocked on the next event loop.\n source.onended = function() {\n source.disconnect(0);\n\n // Update the unlocked state and prevent this check from happening again.\n self._audioUnlocked = true;\n\n // Remove the touch start listener.\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n\n // Let all sounds know that audio has been unlocked.\n for (var i=0; i 0 ? sound._seek : self._sprite[sprite][0] / 1000);\n var duration = Math.max(0, ((self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000) - seek);\n var timeout = (duration * 1000) / Math.abs(sound._rate);\n var start = self._sprite[sprite][0] / 1000;\n var stop = (self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000;\n sound._sprite = sprite;\n\n // Mark the sound as ended instantly so that this async playback\n // doesn't get grabbed by another call to play while this one waits to start.\n sound._ended = false;\n\n // Update the parameters of the sound.\n var setParams = function() {\n sound._paused = false;\n sound._seek = seek;\n sound._start = start;\n sound._stop = stop;\n sound._loop = !!(sound._loop || self._sprite[sprite][2]);\n };\n\n // End the sound instantly if seek is at the end.\n if (seek >= stop) {\n self._ended(sound);\n return;\n }\n\n // Begin the actual playback.\n var node = sound._node;\n if (self._webAudio) {\n // Fire this when the sound is ready to play to begin Web Audio playback.\n var playWebAudio = function() {\n self._playLock = false;\n setParams();\n self._refreshBuffer(sound);\n\n // Setup the playback params.\n var vol = (sound._muted || self._muted) ? 0 : sound._volume;\n node.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n sound._playStart = Howler.ctx.currentTime;\n\n // Play the sound using the supported method.\n if (typeof node.bufferSource.start === 'undefined') {\n sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);\n } else {\n sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);\n }\n\n // Start a new timer if none is present.\n if (timeout !== Infinity) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n if (!internal) {\n setTimeout(function() {\n self._emit('play', sound._id);\n self._loadQueue();\n }, 0);\n }\n };\n\n if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {\n playWebAudio();\n } else {\n self._playLock = true;\n\n // Wait for the audio context to resume before playing.\n self.once('resume', playWebAudio);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n } else {\n // Fire this when the sound is ready to play to begin HTML5 Audio playback.\n var playHtml5 = function() {\n node.currentTime = seek;\n node.muted = sound._muted || self._muted || Howler._muted || node.muted;\n node.volume = sound._volume * Howler.volume();\n node.playbackRate = sound._rate;\n\n // Some browsers will throw an error if this is called without user interaction.\n try {\n var play = node.play();\n\n // Support older browsers that don't support promises, and thus don't have this issue.\n if (play && typeof Promise !== 'undefined' && (play instanceof Promise || typeof play.then === 'function')) {\n // Implements a lock to prevent DOMException: The play() request was interrupted by a call to pause().\n self._playLock = true;\n\n // Set param values immediately.\n setParams();\n\n // Releases the lock and executes queued actions.\n play\n .then(function() {\n self._playLock = false;\n node._unlocked = true;\n if (!internal) {\n self._emit('play', sound._id);\n } else {\n self._loadQueue();\n }\n })\n .catch(function() {\n self._playLock = false;\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n\n // Reset the ended and paused values.\n sound._ended = true;\n sound._paused = true;\n });\n } else if (!internal) {\n self._playLock = false;\n setParams();\n self._emit('play', sound._id);\n }\n\n // Setting rate before playing won't work in IE, so we set it again here.\n node.playbackRate = sound._rate;\n\n // If the node is still paused, then we can assume there was a playback issue.\n if (node.paused) {\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n return;\n }\n\n // Setup the end timer on sprites or listen for the ended event.\n if (sprite !== '__default' || sound._loop) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n } else {\n self._endTimers[sound._id] = function() {\n // Fire ended on this audio node.\n self._ended(sound);\n\n // Clear this listener.\n node.removeEventListener('ended', self._endTimers[sound._id], false);\n };\n node.addEventListener('ended', self._endTimers[sound._id], false);\n }\n } catch (err) {\n self._emit('playerror', sound._id, err);\n }\n };\n\n // If this is streaming audio, make sure the src is set and load again.\n if (node.src === 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA') {\n node.src = self._src;\n node.load();\n }\n\n // Play immediately if ready, or wait for the 'canplaythrough'e vent.\n var loadedNoReadyState = (window && window.ejecta) || (!node.readyState && Howler._navigator.isCocoonJS);\n if (node.readyState >= 3 || loadedNoReadyState) {\n playHtml5();\n } else {\n self._playLock = true;\n self._state = 'loading';\n\n var listener = function() {\n self._state = 'loaded';\n \n // Begin playback.\n playHtml5();\n\n // Clear this listener.\n node.removeEventListener(Howler._canPlayEvent, listener, false);\n };\n node.addEventListener(Howler._canPlayEvent, listener, false);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n }\n\n return sound._id;\n },\n\n /**\n * Pause playback and save current position.\n * @param {Number} id The sound ID (empty to pause all in group).\n * @return {Howl}\n */\n pause: function(id) {\n var self = this;\n\n // If the sound hasn't loaded or a play() promise is pending, add it to the load queue to pause when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'pause',\n action: function() {\n self.pause(id);\n }\n });\n\n return self;\n }\n\n // If no id is passed, get all ID's to be paused.\n var ids = self._getSoundIds(id);\n\n for (var i=0; i Returns the group's volume value.\n * volume(id) -> Returns the sound id's current volume.\n * volume(vol) -> Sets the volume of all sounds in this Howl group.\n * volume(vol, id) -> Sets the volume of passed sound id.\n * @return {Howl/Number} Returns self or current volume.\n */\n volume: function() {\n var self = this;\n var args = arguments;\n var vol, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the value of the groups' volume.\n return self._volume;\n } else if (args.length === 1 || args.length === 2 && typeof args[1] === 'undefined') {\n // First check if this is an ID, and if not, assume it is a new volume.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n vol = parseFloat(args[0]);\n }\n } else if (args.length >= 2) {\n vol = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the volume or return the current volume.\n var sound;\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n // If the sound hasn't loaded, add it to the load queue to change volume when capable.\n if (self._state !== 'loaded'|| self._playLock) {\n self._queue.push({\n event: 'volume',\n action: function() {\n self.volume.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group volume.\n if (typeof id === 'undefined') {\n self._volume = vol;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i 0) ? len / steps : len);\n var lastTick = Date.now();\n\n // Store the value being faded to.\n sound._fadeTo = to;\n\n // Update the volume value on each interval tick.\n sound._interval = setInterval(function() {\n // Update the volume based on the time since the last tick.\n var tick = (Date.now() - lastTick) / len;\n lastTick = Date.now();\n vol += diff * tick;\n\n // Round to within 2 decimal points.\n vol = Math.round(vol * 100) / 100;\n\n // Make sure the volume is in the right bounds.\n if (diff < 0) {\n vol = Math.max(to, vol);\n } else {\n vol = Math.min(to, vol);\n }\n\n // Change the volume.\n if (self._webAudio) {\n sound._volume = vol;\n } else {\n self.volume(vol, sound._id, true);\n }\n\n // Set the group's volume.\n if (isGroup) {\n self._volume = vol;\n }\n\n // When the fade is complete, stop it and fire event.\n if ((to < from && vol <= to) || (to > from && vol >= to)) {\n clearInterval(sound._interval);\n sound._interval = null;\n sound._fadeTo = null;\n self.volume(to, sound._id);\n self._emit('fade', sound._id);\n }\n }, stepLen);\n },\n\n /**\n * Internal method that stops the currently playing fade when\n * a new fade starts, volume is changed or the sound is stopped.\n * @param {Number} id The sound id.\n * @return {Howl}\n */\n _stopFade: function(id) {\n var self = this;\n var sound = self._soundById(id);\n\n if (sound && sound._interval) {\n if (self._webAudio) {\n sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime);\n }\n\n clearInterval(sound._interval);\n sound._interval = null;\n self.volume(sound._fadeTo, id);\n sound._fadeTo = null;\n self._emit('fade', id);\n }\n\n return self;\n },\n\n /**\n * Get/set the loop parameter on a sound. This method can optionally take 0, 1 or 2 arguments.\n * loop() -> Returns the group's loop value.\n * loop(id) -> Returns the sound id's loop value.\n * loop(loop) -> Sets the loop value for all sounds in this Howl group.\n * loop(loop, id) -> Sets the loop value of passed sound id.\n * @return {Howl/Boolean} Returns self or current loop value.\n */\n loop: function() {\n var self = this;\n var args = arguments;\n var loop, id, sound;\n\n // Determine the values for loop and id.\n if (args.length === 0) {\n // Return the grou's loop value.\n return self._loop;\n } else if (args.length === 1) {\n if (typeof args[0] === 'boolean') {\n loop = args[0];\n self._loop = loop;\n } else {\n // Return this sound's loop value.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._loop : false;\n }\n } else if (args.length === 2) {\n loop = args[0];\n id = parseInt(args[1], 10);\n }\n\n // If no id is passed, get all ID's to be looped.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current playback rate.\n * rate(id) -> Returns the sound id's current playback rate.\n * rate(rate) -> Sets the playback rate of all sounds in this Howl group.\n * rate(rate, id) -> Sets the playback rate of passed sound id.\n * @return {Howl/Number} Returns self or the current playback rate.\n */\n rate: function() {\n var self = this;\n var args = arguments;\n var rate, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current rate of the first node.\n id = self._sounds[0]._id;\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new rate value.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n rate = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n rate = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the playback rate or return the current value.\n var sound;\n if (typeof rate === 'number') {\n // If the sound hasn't loaded, add it to the load queue to change playback rate when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'rate',\n action: function() {\n self.rate.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group rate.\n if (typeof id === 'undefined') {\n self._rate = rate;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current seek position.\n * seek(id) -> Returns the sound id's current seek position.\n * seek(seek) -> Sets the seek position of the first sound node.\n * seek(seek, id) -> Sets the seek position of passed sound id.\n * @return {Howl/Number} Returns self or the current seek position.\n */\n seek: function() {\n var self = this;\n var args = arguments;\n var seek, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current position of the first node.\n if (self._sounds.length) {\n id = self._sounds[0]._id;\n }\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new seek position.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else if (self._sounds.length) {\n id = self._sounds[0]._id;\n seek = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n seek = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // If there is no ID, bail out.\n if (typeof id === 'undefined') {\n return 0;\n }\n\n // If the sound hasn't loaded, add it to the load queue to seek when capable.\n if (typeof seek === 'number' && (self._state !== 'loaded' || self._playLock)) {\n self._queue.push({\n event: 'seek',\n action: function() {\n self.seek.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Get the sound.\n var sound = self._soundById(id);\n\n if (sound) {\n if (typeof seek === 'number' && seek >= 0) {\n // Pause the sound and update position for restarting playback.\n var playing = self.playing(id);\n if (playing) {\n self.pause(id, true);\n }\n\n // Move the position of the track and cancel timer.\n sound._seek = seek;\n sound._ended = false;\n self._clearTimer(id);\n\n // Update the seek position for HTML5 Audio.\n if (!self._webAudio && sound._node && !isNaN(sound._node.duration)) {\n sound._node.currentTime = seek;\n }\n\n // Seek and emit when ready.\n var seekAndEmit = function() {\n // Restart the playback if the sound was playing.\n if (playing) {\n self.play(id, true);\n }\n\n self._emit('seek', id);\n };\n\n // Wait for the play lock to be unset before emitting (HTML5 Audio).\n if (playing && !self._webAudio) {\n var emitSeek = function() {\n if (!self._playLock) {\n seekAndEmit();\n } else {\n setTimeout(emitSeek, 0);\n }\n };\n setTimeout(emitSeek, 0);\n } else {\n seekAndEmit();\n }\n } else {\n if (self._webAudio) {\n var realTime = self.playing(id) ? Howler.ctx.currentTime - sound._playStart : 0;\n var rateSeek = sound._rateSeek ? sound._rateSeek - sound._seek : 0;\n return sound._seek + (rateSeek + realTime * Math.abs(sound._rate));\n } else {\n return sound._node.currentTime;\n }\n }\n }\n\n return self;\n },\n\n /**\n * Check if a specific sound is currently playing or not (if id is provided), or check if at least one of the sounds in the group is playing or not.\n * @param {Number} id The sound id to check. If none is passed, the whole sound group is checked.\n * @return {Boolean} True if playing and false if not.\n */\n playing: function(id) {\n var self = this;\n\n // Check the passed sound ID (if any).\n if (typeof id === 'number') {\n var sound = self._soundById(id);\n return sound ? !sound._paused : false;\n }\n\n // Otherwise, loop through all sounds and check if any are playing.\n for (var i=0; i= 0) {\n Howler._howls.splice(index, 1);\n }\n\n // Delete this sound from the cache (if no other Howl is using it).\n var remCache = true;\n for (i=0; i= 0) {\n remCache = false;\n break;\n }\n }\n\n if (cache && remCache) {\n delete cache[self._src];\n }\n\n // Clear global errors.\n Howler.noAudio = false;\n\n // Clear out `self`.\n self._state = 'unloaded';\n self._sounds = [];\n self = null;\n\n return null;\n },\n\n /**\n * Listen to a custom event.\n * @param {String} event Event name.\n * @param {Function} fn Listener to call.\n * @param {Number} id (optional) Only listen to events for this sound.\n * @param {Number} once (INTERNAL) Marks event to fire only once.\n * @return {Howl}\n */\n on: function(event, fn, id, once) {\n var self = this;\n var events = self['_on' + event];\n\n if (typeof fn === 'function') {\n events.push(once ? {id: id, fn: fn, once: once} : {id: id, fn: fn});\n }\n\n return self;\n },\n\n /**\n * Remove a custom event. Call without parameters to remove all events.\n * @param {String} event Event name.\n * @param {Function} fn Listener to remove. Leave empty to remove all.\n * @param {Number} id (optional) Only remove events for this sound.\n * @return {Howl}\n */\n off: function(event, fn, id) {\n var self = this;\n var events = self['_on' + event];\n var i = 0;\n\n // Allow passing just an event and ID.\n if (typeof fn === 'number') {\n id = fn;\n fn = null;\n }\n\n if (fn || id) {\n // Loop through event store and remove the passed function.\n for (i=0; i=0; i--) {\n // Only fire the listener if the correct ID is used.\n if (!events[i].id || events[i].id === id || event === 'load') {\n setTimeout(function(fn) {\n fn.call(this, id, msg);\n }.bind(self, events[i].fn), 0);\n\n // If this event was setup with `once`, remove it.\n if (events[i].once) {\n self.off(event, events[i].fn, events[i].id);\n }\n }\n }\n\n // Pass the event type into load queue so that it can continue stepping.\n self._loadQueue(event);\n\n return self;\n },\n\n /**\n * Queue of actions initiated before the sound has loaded.\n * These will be called in sequence, with the next only firing\n * after the previous has finished executing (even if async like play).\n * @return {Howl}\n */\n _loadQueue: function(event) {\n var self = this;\n\n if (self._queue.length > 0) {\n var task = self._queue[0];\n\n // Remove this task if a matching event was passed.\n if (task.event === event) {\n self._queue.shift();\n self._loadQueue();\n }\n\n // Run the task if no event type is passed.\n if (!event) {\n task.action();\n }\n }\n\n return self;\n },\n\n /**\n * Fired when playback ends at the end of the duration.\n * @param {Sound} sound The sound object to work with.\n * @return {Howl}\n */\n _ended: function(sound) {\n var self = this;\n var sprite = sound._sprite;\n\n // If we are using IE and there was network latency we may be clipping\n // audio before it completes playing. Lets check the node to make sure it\n // believes it has completed, before ending the playback.\n if (!self._webAudio && sound._node && !sound._node.paused && !sound._node.ended && sound._node.currentTime < sound._stop) {\n setTimeout(self._ended.bind(self, sound), 100);\n return self;\n }\n\n // Should this sound loop?\n var loop = !!(sound._loop || self._sprite[sprite][2]);\n\n // Fire the ended event.\n self._emit('end', sound._id);\n\n // Restart the playback for HTML5 Audio loop.\n if (!self._webAudio && loop) {\n self.stop(sound._id, true).play(sound._id);\n }\n\n // Restart this timer if on a Web Audio loop.\n if (self._webAudio && loop) {\n self._emit('play', sound._id);\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n sound._playStart = Howler.ctx.currentTime;\n\n var timeout = ((sound._stop - sound._start) * 1000) / Math.abs(sound._rate);\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n // Mark the node as paused.\n if (self._webAudio && !loop) {\n sound._paused = true;\n sound._ended = true;\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n self._clearTimer(sound._id);\n\n // Clean up the buffer source.\n self._cleanBuffer(sound._node);\n\n // Attempt to auto-suspend AudioContext if no sounds are still playing.\n Howler._autoSuspend();\n }\n\n // When using a sprite, end the track.\n if (!self._webAudio && !loop) {\n self.stop(sound._id, true);\n }\n\n return self;\n },\n\n /**\n * Clear the end timer for a sound playback.\n * @param {Number} id The sound ID.\n * @return {Howl}\n */\n _clearTimer: function(id) {\n var self = this;\n\n if (self._endTimers[id]) {\n // Clear the timeout or remove the ended listener.\n if (typeof self._endTimers[id] !== 'function') {\n clearTimeout(self._endTimers[id]);\n } else {\n var sound = self._soundById(id);\n if (sound && sound._node) {\n sound._node.removeEventListener('ended', self._endTimers[id], false);\n }\n }\n\n delete self._endTimers[id];\n }\n\n return self;\n },\n\n /**\n * Return the sound identified by this ID, or return null.\n * @param {Number} id Sound ID\n * @return {Object} Sound object or null.\n */\n _soundById: function(id) {\n var self = this;\n\n // Loop through all sounds and find the one with this ID.\n for (var i=0; i=0; i--) {\n if (cnt <= limit) {\n return;\n }\n\n if (self._sounds[i]._ended) {\n // Disconnect the audio source when using Web Audio.\n if (self._webAudio && self._sounds[i]._node) {\n self._sounds[i]._node.disconnect(0);\n }\n\n // Remove sounds until we have the pool size.\n self._sounds.splice(i, 1);\n cnt--;\n }\n }\n },\n\n /**\n * Get all ID's from the sounds pool.\n * @param {Number} id Only return one ID if one is passed.\n * @return {Array} Array of IDs.\n */\n _getSoundIds: function(id) {\n var self = this;\n\n if (typeof id === 'undefined') {\n var ids = [];\n for (var i=0; i= 0;\n\n if (Howler._scratchBuffer && node.bufferSource) {\n node.bufferSource.onended = null;\n node.bufferSource.disconnect(0);\n if (isIOS) {\n try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}\n }\n }\n node.bufferSource = null;\n\n return self;\n },\n\n /**\n * Set the source to a 0-second silence to stop any downloading (except in IE).\n * @param {Object} node Audio node to clear.\n */\n _clearSound: function(node) {\n var checkIE = /MSIE |Trident\\//.test(Howler._navigator && Howler._navigator.userAgent);\n if (!checkIE) {\n node.src = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA';\n }\n }\n };\n\n /** Single Sound Methods **/\n /***************************************************************************/\n\n /**\n * Setup the sound object, which each node attached to a Howl group is contained in.\n * @param {Object} howl The Howl parent group.\n */\n var Sound = function(howl) {\n this._parent = howl;\n this.init();\n };\n Sound.prototype = {\n /**\n * Initialize a new Sound object.\n * @return {Sound}\n */\n init: function() {\n var self = this;\n var parent = self._parent;\n\n // Setup the default parameters.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a unique ID for this sound.\n self._id = ++Howler._counter;\n\n // Add itself to the parent's pool.\n parent._sounds.push(self);\n\n // Create the new node.\n self.create();\n\n return self;\n },\n\n /**\n * Create and setup a new sound object, whether HTML5 Audio or Web Audio.\n * @return {Sound}\n */\n create: function() {\n var self = this;\n var parent = self._parent;\n var volume = (Howler._muted || self._muted || self._parent._muted) ? 0 : self._volume;\n\n if (parent._webAudio) {\n // Create the gain node for controlling volume (the source will connect to this).\n self._node = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n self._node.gain.setValueAtTime(volume, Howler.ctx.currentTime);\n self._node.paused = true;\n self._node.connect(Howler.masterGain);\n } else if (!Howler.noAudio) {\n // Get an unlocked Audio object from the pool.\n self._node = Howler._obtainHtml5Audio();\n\n // Listen for errors (http://dev.w3.org/html5/spec-author-view/spec.html#mediaerror).\n self._errorFn = self._errorListener.bind(self);\n self._node.addEventListener('error', self._errorFn, false);\n\n // Listen for 'canplaythrough' event to let us know the sound is ready.\n self._loadFn = self._loadListener.bind(self);\n self._node.addEventListener(Howler._canPlayEvent, self._loadFn, false);\n\n // Listen for the 'ended' event on the sound to account for edge-case where\n // a finite sound has a duration of Infinity.\n self._endFn = self._endListener.bind(self);\n self._node.addEventListener('ended', self._endFn, false);\n\n // Setup the new audio node.\n self._node.src = parent._src;\n self._node.preload = parent._preload === true ? 'auto' : parent._preload;\n self._node.volume = volume * Howler.volume();\n\n // Begin loading the source.\n self._node.load();\n }\n\n return self;\n },\n\n /**\n * Reset the parameters of this sound to the original state (for recycle).\n * @return {Sound}\n */\n reset: function() {\n var self = this;\n var parent = self._parent;\n\n // Reset all of the parameters of this sound.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._rateSeek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a new ID so that it isn't confused with the previous sound.\n self._id = ++Howler._counter;\n\n return self;\n },\n\n /**\n * HTML5 Audio error listener callback.\n */\n _errorListener: function() {\n var self = this;\n\n // Fire an error event and pass back the code.\n self._parent._emit('loaderror', self._id, self._node.error ? self._node.error.code : 0);\n\n // Clear the event listener.\n self._node.removeEventListener('error', self._errorFn, false);\n },\n\n /**\n * HTML5 Audio canplaythrough listener callback.\n */\n _loadListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Setup a sprite if none is defined.\n if (Object.keys(parent._sprite).length === 0) {\n parent._sprite = {__default: [0, parent._duration * 1000]};\n }\n\n if (parent._state !== 'loaded') {\n parent._state = 'loaded';\n parent._emit('load');\n parent._loadQueue();\n }\n\n // Clear the event listener.\n self._node.removeEventListener(Howler._canPlayEvent, self._loadFn, false);\n },\n\n /**\n * HTML5 Audio ended listener callback.\n */\n _endListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Only handle the `ended`` event if the duration is Infinity.\n if (parent._duration === Infinity) {\n // Update the parent duration to match the real audio duration.\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Update the sprite that corresponds to the real duration.\n if (parent._sprite.__default[1] === Infinity) {\n parent._sprite.__default[1] = parent._duration * 1000;\n }\n\n // Run the regular ended method.\n parent._ended(self);\n }\n\n // Clear the event listener since the duration is now correct.\n self._node.removeEventListener('ended', self._endFn, false);\n }\n };\n\n /** Helper Methods **/\n /***************************************************************************/\n\n var cache = {};\n\n /**\n * Buffer a sound from URL, Data URI or cache and decode to audio source (Web Audio API).\n * @param {Howl} self\n */\n var loadBuffer = function(self) {\n var url = self._src;\n\n // Check if the buffer has already been cached and use it instead.\n if (cache[url]) {\n // Set the duration from the cache.\n self._duration = cache[url].duration;\n\n // Load the sound into this Howl.\n loadSound(self);\n\n return;\n }\n\n if (/^data:[^;]+;base64,/.test(url)) {\n // Decode the base64 data URI without XHR, since some browsers don't support it.\n var data = atob(url.split(',')[1]);\n var dataView = new Uint8Array(data.length);\n for (var i=0; i 0) {\n cache[self._src] = buffer;\n loadSound(self, buffer);\n } else {\n error();\n }\n };\n\n // Decode the buffer into an audio source.\n if (typeof Promise !== 'undefined' && Howler.ctx.decodeAudioData.length === 1) {\n Howler.ctx.decodeAudioData(arraybuffer).then(success).catch(error);\n } else {\n Howler.ctx.decodeAudioData(arraybuffer, success, error);\n }\n }\n\n /**\n * Sound is now loaded, so finish setting everything up and fire the loaded event.\n * @param {Howl} self\n * @param {Object} buffer The decoded buffer sound source.\n */\n var loadSound = function(self, buffer) {\n // Set the duration.\n if (buffer && !self._duration) {\n self._duration = buffer.duration;\n }\n\n // Setup a sprite if none is defined.\n if (Object.keys(self._sprite).length === 0) {\n self._sprite = {__default: [0, self._duration * 1000]};\n }\n\n // Fire the loaded event.\n if (self._state !== 'loaded') {\n self._state = 'loaded';\n self._emit('load');\n self._loadQueue();\n }\n };\n\n /**\n * Setup the audio context when available, or switch to HTML5 Audio mode.\n */\n var setupAudioContext = function() {\n // If we have already detected that Web Audio isn't supported, don't run this step again.\n if (!Howler.usingWebAudio) {\n return;\n }\n\n // Check if we are using Web Audio and setup the AudioContext if we are.\n try {\n if (typeof AudioContext !== 'undefined') {\n Howler.ctx = new AudioContext();\n } else if (typeof webkitAudioContext !== 'undefined') {\n Howler.ctx = new webkitAudioContext();\n } else {\n Howler.usingWebAudio = false;\n }\n } catch(e) {\n Howler.usingWebAudio = false;\n }\n\n // If the audio context creation still failed, set using web audio to false.\n if (!Howler.ctx) {\n Howler.usingWebAudio = false;\n }\n\n // Check if a webview is being used on iOS8 or earlier (rather than the browser).\n // If it is, disable Web Audio as it causes crashing.\n var iOS = (/iP(hone|od|ad)/.test(Howler._navigator && Howler._navigator.platform));\n var appVersion = Howler._navigator && Howler._navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var version = appVersion ? parseInt(appVersion[1], 10) : null;\n if (iOS && version && version < 9) {\n var safari = /safari/.test(Howler._navigator && Howler._navigator.userAgent.toLowerCase());\n if (Howler._navigator && !safari) {\n Howler.usingWebAudio = false;\n }\n }\n\n // Create and expose the master GainNode when using Web Audio (useful for plugins or advanced usage).\n if (Howler.usingWebAudio) {\n Howler.masterGain = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n Howler.masterGain.gain.setValueAtTime(Howler._muted ? 0 : Howler._volume, Howler.ctx.currentTime);\n Howler.masterGain.connect(Howler.ctx.destination);\n }\n\n // Re-run the setup on Howler.\n Howler._setup();\n };\n\n // Add support for AMD (Asynchronous Module Definition) libraries such as require.js.\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return {\n Howler: Howler,\n Howl: Howl\n };\n });\n }\n\n // Add support for CommonJS libraries such as browserify.\n if (typeof exports !== 'undefined') {\n exports.Howler = Howler;\n exports.Howl = Howl;\n }\n\n // Add to global in Node.js (for testing, etc).\n if (typeof global !== 'undefined') {\n global.HowlerGlobal = HowlerGlobal;\n global.Howler = Howler;\n global.Howl = Howl;\n global.Sound = Sound;\n } else if (typeof window !== 'undefined') { // Define globally in case AMD is not available or unused.\n window.HowlerGlobal = HowlerGlobal;\n window.Howler = Howler;\n window.Howl = Howl;\n window.Sound = Sound;\n }\n})();\n\n\n/*!\n * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.\n * \n * howler.js v2.2.3\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n // Setup default properties.\n HowlerGlobal.prototype._pos = [0, 0, 0];\n HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0];\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Helper method to update the stereo panning position of all current Howls.\n * Future Howls will not use this value unless explicitly set.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @return {Howler/Number} Self or current stereo panning value.\n */\n HowlerGlobal.prototype.stereo = function(pan) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Loop through all Howls and update their stereo panning.\n for (var i=self._howls.length-1; i>=0; i--) {\n self._howls[i].stereo(pan);\n }\n\n return self;\n };\n\n /**\n * Get/set the position of the listener in 3D cartesian space. Sounds using\n * 3D position will be relative to the listener's position.\n * @param {Number} x The x-position of the listener.\n * @param {Number} y The y-position of the listener.\n * @param {Number} z The z-position of the listener.\n * @return {Howler/Array} Self or current listener position.\n */\n HowlerGlobal.prototype.pos = function(x, y, z) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n y = (typeof y !== 'number') ? self._pos[1] : y;\n z = (typeof z !== 'number') ? self._pos[2] : z;\n\n if (typeof x === 'number') {\n self._pos = [x, y, z];\n\n if (typeof self.ctx.listener.positionX !== 'undefined') {\n self.ctx.listener.positionX.setTargetAtTime(self._pos[0], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionY.setTargetAtTime(self._pos[1], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionZ.setTargetAtTime(self._pos[2], Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setPosition(self._pos[0], self._pos[1], self._pos[2]);\n }\n } else {\n return self._pos;\n }\n\n return self;\n };\n\n /**\n * Get/set the direction the listener is pointing in the 3D cartesian space.\n * A front and up vector must be provided. The front is the direction the\n * face of the listener is pointing, and up is the direction the top of the\n * listener is pointing. Thus, these values are expected to be at right angles\n * from each other.\n * @param {Number} x The x-orientation of the listener.\n * @param {Number} y The y-orientation of the listener.\n * @param {Number} z The z-orientation of the listener.\n * @param {Number} xUp The x-orientation of the top of the listener.\n * @param {Number} yUp The y-orientation of the top of the listener.\n * @param {Number} zUp The z-orientation of the top of the listener.\n * @return {Howler/Array} Returns self or the current orientation vectors.\n */\n HowlerGlobal.prototype.orientation = function(x, y, z, xUp, yUp, zUp) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n var or = self._orientation;\n y = (typeof y !== 'number') ? or[1] : y;\n z = (typeof z !== 'number') ? or[2] : z;\n xUp = (typeof xUp !== 'number') ? or[3] : xUp;\n yUp = (typeof yUp !== 'number') ? or[4] : yUp;\n zUp = (typeof zUp !== 'number') ? or[5] : zUp;\n\n if (typeof x === 'number') {\n self._orientation = [x, y, z, xUp, yUp, zUp];\n\n if (typeof self.ctx.listener.forwardX !== 'undefined') {\n self.ctx.listener.forwardX.setTargetAtTime(x, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardY.setTargetAtTime(y, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardZ.setTargetAtTime(z, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upX.setTargetAtTime(xUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upY.setTargetAtTime(yUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upZ.setTargetAtTime(zUp, Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setOrientation(x, y, z, xUp, yUp, zUp);\n }\n } else {\n return or;\n }\n\n return self;\n };\n\n /** Group Methods **/\n /***************************************************************************/\n\n /**\n * Add new properties to the core init.\n * @param {Function} _super Core init method.\n * @return {Howl}\n */\n Howl.prototype.init = (function(_super) {\n return function(o) {\n var self = this;\n\n // Setup user-defined default properties.\n self._orientation = o.orientation || [1, 0, 0];\n self._stereo = o.stereo || null;\n self._pos = o.pos || null;\n self._pannerAttr = {\n coneInnerAngle: typeof o.coneInnerAngle !== 'undefined' ? o.coneInnerAngle : 360,\n coneOuterAngle: typeof o.coneOuterAngle !== 'undefined' ? o.coneOuterAngle : 360,\n coneOuterGain: typeof o.coneOuterGain !== 'undefined' ? o.coneOuterGain : 0,\n distanceModel: typeof o.distanceModel !== 'undefined' ? o.distanceModel : 'inverse',\n maxDistance: typeof o.maxDistance !== 'undefined' ? o.maxDistance : 10000,\n panningModel: typeof o.panningModel !== 'undefined' ? o.panningModel : 'HRTF',\n refDistance: typeof o.refDistance !== 'undefined' ? o.refDistance : 1,\n rolloffFactor: typeof o.rolloffFactor !== 'undefined' ? o.rolloffFactor : 1\n };\n\n // Setup event listeners.\n self._onstereo = o.onstereo ? [{fn: o.onstereo}] : [];\n self._onpos = o.onpos ? [{fn: o.onpos}] : [];\n self._onorientation = o.onorientation ? [{fn: o.onorientation}] : [];\n\n // Complete initilization with howler.js core's init function.\n return _super.call(this, o);\n };\n })(Howl.prototype.init);\n\n /**\n * Get/set the stereo panning of the audio source for this sound or all in the group.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @param {Number} id (optional) The sound ID. If none is passed, all in group will be updated.\n * @return {Howl/Number} Returns self or the current stereo panning value.\n */\n Howl.prototype.stereo = function(pan, id) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // If the sound hasn't loaded, add it to the load queue to change stereo pan when capable.\n if (self._state !== 'loaded') {\n self._queue.push({\n event: 'stereo',\n action: function() {\n self.stereo(pan, id);\n }\n });\n\n return self;\n }\n\n // Check for PannerStereoNode support and fallback to PannerNode if it doesn't exist.\n var pannerType = (typeof Howler.ctx.createStereoPanner === 'undefined') ? 'spatial' : 'stereo';\n\n // Setup the group's stereo panning if no ID is passed.\n if (typeof id === 'undefined') {\n // Return the group's stereo panning if no parameters are passed.\n if (typeof pan === 'number') {\n self._stereo = pan;\n self._pos = [pan, 0, 0];\n } else {\n return self._stereo;\n }\n }\n\n // Change the streo panning of one or all sounds in group.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the group's values.\n * pannerAttr(id) -> Returns the sound id's values.\n * pannerAttr(o) -> Set's the values of all sounds in this Howl group.\n * pannerAttr(o, id) -> Set's the values of passed sound id.\n *\n * Attributes:\n * coneInnerAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * inside of which there will be no volume reduction.\n * coneOuterAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * outside of which the volume will be reduced to a constant value of `coneOuterGain`.\n * coneOuterGain - (0 by default) A parameter for directional audio sources, this is the gain outside of the\n * `coneOuterAngle`. It is a linear value in the range `[0, 1]`.\n * distanceModel - ('inverse' by default) Determines algorithm used to reduce volume as audio moves away from\n * listener. Can be `linear`, `inverse` or `exponential.\n * maxDistance - (10000 by default) The maximum distance between source and listener, after which the volume\n * will not be reduced any further.\n * refDistance - (1 by default) A reference distance for reducing volume as source moves further from the listener.\n * This is simply a variable of the distance model and has a different effect depending on which model\n * is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance.\n * rolloffFactor - (1 by default) How quickly the volume reduces as source moves from listener. This is simply a\n * variable of the distance model and can be in the range of `[0, 1]` with `linear` and `[0, ∞]`\n * with `inverse` and `exponential`.\n * panningModel - ('HRTF' by default) Determines which spatialization algorithm is used to position audio.\n * Can be `HRTF` or `equalpower`.\n *\n * @return {Howl/Object} Returns self or current panner attributes.\n */\n Howl.prototype.pannerAttr = function() {\n var self = this;\n var args = arguments;\n var o, id, sound;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the group's panner attribute values.\n return self._pannerAttr;\n } else if (args.length === 1) {\n if (typeof args[0] === 'object') {\n o = args[0];\n\n // Set the grou's panner attribute values.\n if (typeof id === 'undefined') {\n if (!o.pannerAttr) {\n o.pannerAttr = {\n coneInnerAngle: o.coneInnerAngle,\n coneOuterAngle: o.coneOuterAngle,\n coneOuterGain: o.coneOuterGain,\n distanceModel: o.distanceModel,\n maxDistance: o.maxDistance,\n refDistance: o.refDistance,\n rolloffFactor: o.rolloffFactor,\n panningModel: o.panningModel\n };\n }\n\n self._pannerAttr = {\n coneInnerAngle: typeof o.pannerAttr.coneInnerAngle !== 'undefined' ? o.pannerAttr.coneInnerAngle : self._coneInnerAngle,\n coneOuterAngle: typeof o.pannerAttr.coneOuterAngle !== 'undefined' ? o.pannerAttr.coneOuterAngle : self._coneOuterAngle,\n coneOuterGain: typeof o.pannerAttr.coneOuterGain !== 'undefined' ? o.pannerAttr.coneOuterGain : self._coneOuterGain,\n distanceModel: typeof o.pannerAttr.distanceModel !== 'undefined' ? o.pannerAttr.distanceModel : self._distanceModel,\n maxDistance: typeof o.pannerAttr.maxDistance !== 'undefined' ? o.pannerAttr.maxDistance : self._maxDistance,\n refDistance: typeof o.pannerAttr.refDistance !== 'undefined' ? o.pannerAttr.refDistance : self._refDistance,\n rolloffFactor: typeof o.pannerAttr.rolloffFactor !== 'undefined' ? o.pannerAttr.rolloffFactor : self._rolloffFactor,\n panningModel: typeof o.pannerAttr.panningModel !== 'undefined' ? o.pannerAttr.panningModel : self._panningModel\n };\n }\n } else {\n // Return this sound's panner attribute values.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._pannerAttr : self._pannerAttr;\n }\n } else if (args.length === 2) {\n o = args[0];\n id = parseInt(args[1], 10);\n }\n\n // Update the values of the specified sounds.\n var ids = self._getSoundIds(id);\n for (var i=0; i\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.35\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.35',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 350;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n VIERA = 'Viera',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /ios;fbsv\\/([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","var parser = require('ua-parser-js');\nvar md5 = require('md5');\nconst { v4: uuidv4 } = require('uuid');\n\nconst BEACON_API_URL=process.env.BEACON_API_URL;\n\nexport var Analytics = function(orgId, integrationId, url, contentId){\n\n this.orgId = orgId;\n this.integrationId = integrationId;\n this.contentId = contentId ? contentId : md5(url);\n\n var ua = new parser();\n var result = ua.getResult();\n\n this.device = result.device.type;\n this.browser = result.browser.name;\n this.os = result.os.name;\n this.user_agent = result.ua;\n\n this.ip = \"\";\n this.country = \"\";\n\n try {\n\n if(localStorage.getItem('l2it_user_token')){\n\n this.user_token = (localStorage.getItem('l2it_user_token'));\n \n } else {\n \n const l2it_user_token = uuidv4();\n \n localStorage.setItem('l2it_user_token', l2it_user_token);\n \n this.user_token = (l2it_user_token);\n \n this.record('NEW_USER').then(()=>{});\n \n }\n\n } catch (e) {\n\n this.user_token = uuidv4();\n\n }\n\n}\n\nAnalytics.prototype = {\n\n setUserToken: function(userToken){\n\n this.user_token = userToken;\n\n },\n\n fetchCountry: async function(){\n\n var locationReq = await fetch(\"https://ipgeolocation.abstractapi.com/v1/?api_key=7c4a5e0655ac45fb8d2cef66ee0ac9f9\");\n var location = await locationReq.json();\n \n this.ip = location.ip_address;\n this.country = location.country;\n\n },\n\n record: async function(name, payload){\n\n if (!this.user_token) return;\n\n if(\"\"==this.ip){\n\n await this.fetchCountry();\n\n }\n\n var myHeaders = new Headers();\n myHeaders.append(\"Content-Type\", \"application/json\");\n \n var raw = JSON.stringify({\n \"timestamp\": new Date().toISOString(),\n \"org_id\": this.orgId,\n \"integration_id\": this.integrationId,\n \"content_id\": this.contentId,\n \"event_name\": name,\n \"user_token\": this.user_token,\n \"ip\": this.ip,\n \"country\": this.country,\n \"device\": this.device,\n \"browser\": this.browser,\n \"operating_system\": this.os,\n \"user_agent\": this.user_agent,\n 'payload': payload\n });\n \n var requestOptions = {\n method: 'POST',\n headers: myHeaders,\n body: raw,\n redirect: 'follow'\n };\n \n await fetch(`${BEACON_API_URL}/record`, requestOptions);\n\n }\n\n}","const {Howl, Howler} = require('howler');\nconst { v4: uuidv4 } = require('uuid');\n\nexport var Player = function(){\n\n this.sound = null;\n this.audio_url = null;\n this.onPlayCallback = null;\n this.onPauseCallback = null;\n this.onStepCallback = null;\n this.onEndCallback = null;\n this.session_id = uuidv4();\n\n}\n\nPlayer.prototype = {\n\n getAudioURL: function(){\n\n return this.audio_url;\n\n },\n\n setAudioURL: function(audio_url){\n\n this.audio_url = audio_url;\n\n },\n\n getSessionId: function(){\n\n return this.session_id;\n\n },\n\n play: function(){\n\n var self = this;\n\n if(null == self.audio_url){\n\n return;\n\n }\n\n if(null == self.sound){\n\n self.initAudio();\n\n }\n\n self.sound.play();\n\n },\n\n initAudio: function(){\n\n var self = this;\n \n self.sound = new Howl({\n src: [self.audio_url],\n html5: true,\n onplay: function() {\n \n requestAnimationFrame(self.step.bind(self));\n\n if(self.onPlayCallback){\n\n self.onPlayCallback(self.sound.duration());\n\n }\n\n },\n onpause: function() {\n \n if(self.onPlayCallback){\n\n self.onPauseCallback(self.sound.duration());\n\n }\n\n },\n onseek: function() {\n requestAnimationFrame(self.step.bind(self));\n },\n onend: function() {\n \n if(self.onEndCallback){\n\n self.onEndCallback();\n\n }\n\n }\n });\n\n\n },\n\n getDuration: function(){\n\n return this.sound.duration();\n\n },\n\n switchAudio: function(){\n\n var self = this;\n\n var seek = 0;\n\n var isPlaying = self.sound.playing();\n\n if(isPlaying){\n self.sound.pause();\n }\n\n seek = self.sound.seek();\n\n self.sound = new Howl({\n src: [self.audio_url],\n html5: true,\n onplay: function() {\n \n requestAnimationFrame(self.step.bind(self));\n\n if(self.onPlayCallback){\n\n self.onPlayCallback(self.sound.duration());\n\n }\n\n },\n onpause: function() {\n \n if(self.onPlayCallback){\n\n self.onPauseCallback(self.sound.duration());\n\n }\n\n },\n onseek: function() {\n requestAnimationFrame(self.step.bind(self));\n },\n onend: function() {\n \n if(self.onEndCallback){\n\n self.onEndCallback();\n\n }\n\n }\n });\n\n self.sound.seek(seek);\n\n if(isPlaying){\n self.sound.play();\n }\n\n },\n\n pause: function(){\n\n this.sound.pause();\n\n },\n\n getProgress: function(){\n\n return Math.round(this.sound.seek());\n\n },\n\n seek: function(per) {\n\n if(null == this.sound){\n\n return;\n\n }\n \n this.sound.seek(per);\n \n },\n\n step: function() {\n\n var self = this;\n\n var seek = this.sound.seek() || 0;\n\n var time = self.formatTime(Math.round(seek));\n\n var progress = (((seek / this.sound.duration()) * 100) || 0) + '%';\n\n if(this.onStepCallback){\n\n this.onStepCallback(time, progress, seek);\n\n }\n \n // If the sound is still playing, continue stepping.\n if (this.sound.playing()) {\n requestAnimationFrame(self.step.bind(self));\n }\n\n },\n\n onStep: function(callback){\n\n this.onStepCallback = callback;\n\n },\n\n onEnd: function(callback){\n\n this.onEndCallback = callback;\n\n },\n\n onPlay: function(callback){\n\n this.onPlayCallback = callback;\n\n },\n\n onPause: function(callback){\n\n this.onPauseCallback = callback;\n\n },\n\n rate: function(rate){\n\n if(null == this.sound){\n return;\n }\n\n this.sound.rate(rate);\n\n },\n\n formatTime: function(secs) {\n\n var duration = Math.round(this.sound.duration());\n var timeLeft = duration - secs;\n\n var minutes = Math.floor(timeLeft / 60) || 0;\n\n var seconds = (timeLeft - minutes * 60) || 0;\n \n return '- ' + minutes + ':' + (seconds < 10 ? '0' : '') + seconds;\n\n } \n\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const { Player } = require('./player');\nconst { Analytics } = require('./analytics');\nconst { v4: uuidv4 } = require('uuid');\n\nconst queryString = window.location.search;\nconst urlParams = new URLSearchParams(queryString);\n\nconst API_URL = process.env.WIDGET_API_URL;\n\nconst wrapper = document.querySelector('#wrapper');\nconst playBtn = document.querySelector('#play-btn');\nconst playBtnBg = document.querySelector('#play-btn-bg');\nconst pauseBtn = document.querySelector('#pause-btn');\nconst pauseBtnBg = document.querySelector('#pause-btn-bg');\nconst progressBar = document.querySelector('#progress');\nconst timer = document.querySelector(\"#timer\");\nconst spinner = document.querySelector('#spinner');\nconst rateSwitcher = document.querySelector('#rate');\nconst title = document.querySelector('#title');\nconst download = document.querySelector('#download');\nconst branding = document.querySelector('#branding');\n\nconst url = urlParams.get('url');\nconst orgId = urlParams.get('org_id');\nconst integrationId = urlParams.get('integration_id');\nconst hasPaywall = urlParams.get('has_paywall');\nconst contentId = urlParams.get('content_id');\n\nvar getOrgHash = function (orgId) {\n\n let hash = 0;\n\n orgId.split('').forEach(function (item, index) {\n hash = hash + item.charCodeAt();\n });\n\n return hash;\n}\n\n// Rollout partially\n// const shouldServeV2 = (\n// ['ugSCv92ekW', '1p0xY4y4mz'].includes(orgId)\n// || [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50].includes(getOrgHash(orgId) % 100) \n// );\n\nlet widgetV2URL = process.env.WIDGET_V2_URL;\n\nif (true) {\n // 100% V2 widget rollout\n\n console.debug('DEBUG', 'V2 Player')\n\n let script = document.createElement('script');\n script.setAttribute('src', `${widgetV2URL}/audioplayer.js`);\n\n document.head.appendChild(script);\n\n let webComponent = document.createElement('l2it-audio-player');\n webComponent.setAttribute('org_id', orgId);\n webComponent.setAttribute('integration_id', integrationId);\n webComponent.setAttribute('url', url);\n webComponent.setAttribute('has_paywall', hasPaywall);\n webComponent.setAttribute('content_id', contentId);\n document.body.appendChild(webComponent);\n\n} else {\n\n console.debug('DEBUG', 'V1 Player')\n\n const analytics = new Analytics(orgId, integrationId, url, contentId);\n\n let pageContent;\n \n window.addEventListener('message', event => {\n \n pageContent = event.data;\n \n });\n \n const player = new Player();\n \n let progressTracker;\n \n function downloadAudio(url) {\n var link = document.createElement(\"a\");\n link.href = url;\n link.download = url.slice(url.lastIndexOf('/') + 1);\n link.click();\n }\n \n download.addEventListener('click', async function(event) {\n \n event.preventDefault();\n \n if (null == player.getAudioURL()) {\n \n var interval = setIntervalAndExecute(async () => {\n \n let result = await fetch(`${API_URL}/organisation/${orgId}/integration/${integrationId}/audio/${encodeURIComponent(url)}`,{\n method: 'POST',\n body: JSON.stringify({\n page_content: pageContent,\n has_paywall: hasPaywall\n })\n });\n \n const response = await result.json();\n \n if (!response.success) {\n return;\n }\n \n if(\"COMPLETED\" === response.data.full_audio_status) {\n \n downloadAudio(response.data.full_audio_url)\n clearInterval(interval);\n \n }\n \n }, 1500);\n \n return; \n }\n \n downloadAudio(player.getAudioURL())\n \n });\n \n playBtn.addEventListener('click', async function(event){\n \n if(null==player.getAudioURL()){\n \n playBtn.style.display = \"none\";\n spinner.style.display = \"block\";\n \n const body = {\n page_content: pageContent,\n has_paywall: hasPaywall,\n }\n \n if (contentId) {\n body.contentId = contentId\n }\n \n let result = await fetch(`${API_URL}/organisation/${orgId}/integration/${integrationId}/audio/${encodeURIComponent(url)}`,{\n method: 'POST',\n body: JSON.stringify(body)\n });\n \n spinner.style.display = \"none\";\n playBtn.style.display = \"block\";\n \n const response = await result.json();\n \n if (!response.success) {\n return;\n }\n \n if(\"COMPLETED\" === response.data.full_audio_status){\n \n player.setAudioURL(response.data.full_audio_url);\n player.play();\n \n playBtn.style.display = \"none\";\n pauseBtn.style.display = \"block\";\n \n return;\n \n }\n \n player.setAudioURL(response.data.short_audio_url);\n \n setTimeout(async function(){\n \n const body = {\n page_content: pageContent,\n has_paywall: hasPaywall,\n }\n \n if (contentId) {\n body.contentId = contentId\n }\n \n let result = await fetch(`${API_URL}/organisation/${orgId}/integration/${integrationId}/audio/${encodeURIComponent(url)}`,{\n method: 'POST',\n body: JSON.stringify(body)\n });\n \n const response = await result.json();\n \n if (!response.success) {\n return;\n }\n \n if(\"COMPLETED\" === response.data.full_audio_status){\n \n player.setAudioURL(response.data.full_audio_url)\n player.switchAudio();\n \n }\n \n }, 60000);\n \n }\n \n player.play();\n \n playBtn.style.display = \"none\";\n pauseBtn.style.display = \"block\";\n \n });\n \n pauseBtn.addEventListener('click', function(event){\n \n if(progressTracker){\n clearInterval(progressTracker);\n }\n \n player.pause();\n \n playBtn.style.display = \"block\";\n pauseBtn.style.display = \"none\";\n \n \n });\n \n rateSwitcher.addEventListener('change', function(event){\n \n player.rate(event.target.value);\n \n });\n \n progressBar.addEventListener('input', function(event){\n \n player.seek(event.target.value);\n \n });\n \n player.onStep(function(time, progress, seek){\n \n timer.innerHTML = time;\n progressBar.value = seek;\n \n \n });\n \n player.onPlay(function(duration){\n \n progressBar.setAttribute('max', duration);\n \n analytics.record('PLAYED',{\n session_id: player.session_id,\n }).then(()=>{});\n \n progressTracker = setInterval(async function(){\n \n analytics.record('PROGRESS',{\n session_id: player.session_id,\n seek: player.getProgress()\n }).then(()=>{});\n \n }, 15000);\n \n \n });\n \n player.onPause(function(){\n \n if(progressTracker){\n clearInterval(progressTracker);\n }\n \n });\n \n player.onEnd(function(){\n \n if(progressTracker){\n clearInterval(progressTracker);\n }\n \n playBtn.style.display = \"block\";\n pauseBtn.style.display = \"none\";\n \n });\n \n \n window.onload = async (event) => {\n \n analytics.record('IMPRESSION').then(()=>{});\n \n const result = await fetch(`${API_URL}/organisation/${orgId}/integration/${integrationId}`);\n const response = await result.json();\n \n let audioPlayerSettings = response.data.audio_player_settings;\n let color = response.data.audio_player_settings.color;\n \n playBtnBg.style.fill = color;\n pauseBtnBg.style.fill = color;\n \n if (audioPlayerSettings.download_button) {\n download.style.display = 'inline-block';\n }\n \n if (audioPlayerSettings.remove_branding) {\n branding.style.display = 'none';\n }\n \n document.querySelectorAll('.spinner > div').forEach(el => el.style.backgroundColor = color);\n document.querySelector('.progress').style.color = color;\n \n title.innerHTML = audioPlayerSettings.title;\n \n wrapper.style.color = audioPlayerSettings.text_color;\n wrapper.style.display = \"flex\";\n \n }\n \n window.addEventListener(\"beforeunload\", function (e) {\n \n if(progressTracker){\n clearInterval(progressTracker);\n }\n \n return null;\n \n });\n\n}\n\nfunction setIntervalAndExecute(fn, t) {\n fn();\n return(setInterval(fn, t));\n}"],"names":["charenc","utf8","stringToBytes","str","bin","unescape","encodeURIComponent","bytesToString","bytes","decodeURIComponent","escape","i","length","push","charCodeAt","String","fromCharCode","join","module","exports","base64map","crypt","rotl","n","b","rotr","endian","constructor","Number","randomBytes","Math","floor","random","bytesToWords","words","wordsToBytes","bytesToHex","hex","toString","hexToBytes","c","parseInt","substr","bytesToBase64","base64","triplet","j","charAt","base64ToBytes","replace","imod4","indexOf","pow","HowlerGlobal","this","init","prototype","self","Howler","_counter","_html5AudioPool","html5PoolSize","_codecs","_howls","_muted","_volume","_canPlayEvent","_navigator","window","navigator","masterGain","noAudio","usingWebAudio","autoSuspend","ctx","autoUnlock","_setup","volume","vol","parseFloat","setupAudioContext","gain","setValueAtTime","currentTime","_webAudio","ids","_getSoundIds","sound","_soundById","_node","mute","muted","stop","unload","close","codecs","ext","state","_autoSuspend","Audio","oncanplaythrough","e","_setupCodecs","audioTest","err","canPlayType","mpegTest","ua","userAgent","checkOpera","match","isOldOpera","split","checkSafari","safariVersion","isOldSafari","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","m4b","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","unlock","audioNode","_unlocked","_releaseHtml5Audio","load","_autoResume","source","createBufferSource","buffer","connect","destination","start","noteOn","resume","onended","disconnect","document","removeEventListener","_emit","addEventListener","_obtainHtml5Audio","pop","testPlay","play","Promise","then","catch","console","warn","audio","suspend","_sounds","_paused","_suspendTimer","clearTimeout","setTimeout","handleSuspension","_resumeAfterSuspend","Howl","o","src","error","_autoplay","autoplay","_format","format","_html5","html5","_loop","loop","_pool","pool","_preload","preload","_rate","rate","_sprite","sprite","_src","undefined","_xhr","method","xhr","headers","withCredentials","_duration","_state","_endTimers","_queue","_playLock","_onend","onend","fn","_onfade","onfade","_onload","onload","_onloaderror","onloaderror","_onplayerror","onplayerror","_onpause","onpause","_onplay","onplay","_onstop","onstop","_onmute","onmute","_onvolume","onvolume","_onrate","onrate","_onseek","onseek","_onunlock","onunlock","_onresume","event","action","url","exec","toLowerCase","location","protocol","slice","Sound","loadBuffer","internal","id","num","_ended","_id","_inactiveSound","soundId","_loadQueue","seek","max","_seek","duration","timeout","abs","setParams","_start","_stop","node","playWebAudio","_refreshBuffer","_playStart","bufferSource","noteGrainOn","Infinity","bind","once","_clearTimer","playHtml5","playbackRate","paused","loadedNoReadyState","ejecta","readyState","isCocoonJS","listener","pause","_rateSeek","_stopFade","noteOff","_cleanBuffer","isNaN","arguments","_clearSound","_interval","args","apply","fade","from","to","len","min","end","linearRampToValueAtTime","_startFadeInterval","isGroup","diff","steps","stepLen","lastTick","Date","now","_fadeTo","setInterval","tick","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","realTime","rateSeek","seekAndEmit","emitSeek","sounds","_errorFn","_loadFn","_endFn","index","splice","remCache","cache","on","events","off","isId","keys","Object","Array","isArray","msg","call","task","shift","ended","_drain","reset","limit","cnt","_panner","isIOS","vendor","test","howl","_parent","parent","create","createGain","createGainNode","_errorListener","_loadListener","_endListener","code","ceil","__default","loadSound","data","atob","dataView","Uint8Array","decodeAudioData","XMLHttpRequest","open","responseType","forEach","key","setRequestHeader","status","response","onerror","safeXhrSend","send","arraybuffer","success","AudioContext","webkitAudioContext","iOS","platform","appVersion","version","safari","g","_super","_pos","_orientation","stereo","pan","pos","x","y","z","positionX","setTargetAtTime","positionY","positionZ","setPosition","orientation","xUp","yUp","zUp","or","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","_stereo","_pannerAttr","coneInnerAngle","coneOuterAngle","coneOuterGain","distanceModel","maxDistance","panningModel","refDistance","rolloffFactor","_onstereo","onstereo","_onpos","onpos","_onorientation","onorientation","pannerType","createStereoPanner","setupPanner","orientationX","orientationY","orientationZ","pannerAttr","_coneInnerAngle","_coneOuterAngle","_coneOuterGain","_distanceModel","_maxDistance","_refDistance","_rolloffFactor","_panningModel","pa","panner","type","createPanner","isBuffer","obj","readFloatLE","isSlowBuffer","_isBuffer","md5","message","options","encoding","m","l","a","d","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","s","t","_blocksize","_digestsize","Error","digestbytes","asBytes","asString","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","arr","enums","toUpperCase","has","str1","str2","lowerize","trim","substring","rgxMapper","arrays","k","p","q","matches","regex","props","strMapper","map","windowsVersionMap","regexes","browser","cpu","device","engine","EDGE","os","UAParser","extensions","getResult","_ua","_uach","userAgentData","_rgxmap","mergedRegexes","concat","extend","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","standalone","maxTouchPoints","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","$","jQuery","Zepto","parser","get","set","result","prop","getRandomValues","rnds8","rng","crypto","msCrypto","uuid","byteToHex","offset","TypeError","_nodeId","_clockseq","_lastMSecs","_lastNSecs","buf","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","v","name","hashfunc","generateUUID","value","namespace","DNS","URL","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","md5ff","md5gg","md5hh","md5ii","v35","input","output","length32","hexTab","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","rnds","f","ROTL","K","H","N","M","_i","_i2","W","_t","_t2","T","v4","uuidv4","Analytics","orgId","integrationId","contentId","user_agent","ip","country","localStorage","getItem","user_token","l2it_user_token","setItem","record","setUserToken","userToken","fetchCountry","async","locationReq","fetch","json","ip_address","payload","myHeaders","Headers","append","requestOptions","body","JSON","stringify","toISOString","redirect","Player","audio_url","onPlayCallback","onPauseCallback","onStepCallback","onEndCallback","session_id","getAudioURL","setAudioURL","getSessionId","initAudio","requestAnimationFrame","step","getDuration","switchAudio","isPlaying","getProgress","per","time","formatTime","progress","onStep","callback","onEnd","onPlay","onPause","secs","timeLeft","minutes","seconds","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","definition","defineProperty","enumerable","globalThis","Function","hasOwnProperty","r","Symbol","toStringTag","queryString","search","urlParams","URLSearchParams","querySelector","hasPaywall","debug","script","createElement","setAttribute","head","appendChild","webComponent"],"sourceRoot":""}