diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a801d57..88530f47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Unreleased +* Update our fork of [UAParser.js](https://github.com/faisalman/ua-parser-js) from v0.7.7 to v0.7.10. This will improve the resolution of user agent strings to device and OS information. + ### 2.12.1 (April 21, 2016) * Silence console warnings for various UTM property keys with undefined values. diff --git a/amplitude.js b/amplitude.js index 70f3d2ce..f5dbd139 100644 --- a/amplitude.js +++ b/amplitude.js @@ -3591,7 +3591,7 @@ module.exports = Revenue; /* global define */ /** - * UAParser.js v0.7.7 + * UAParser.js v0.7.10 * Lightweight JavaScript-based User-Agent string parser * https://github.com/faisalman/ua-parser-js * @@ -3608,7 +3608,7 @@ module.exports = Revenue; ///////////// - var LIBVERSION = '0.7.7', + var LIBVERSION = '0.7.10', EMPTY = '', UNKNOWN = '?', FUNC_TYPE = 'function', @@ -3637,12 +3637,15 @@ module.exports = Revenue; var util = { extend : function (regexes, extensions) { - for (var i in extensions) { - if ("browser cpu device engine os".indexOf(i) !== -1 && extensions[i].length % 2 === 0) { - regexes[i] = extensions[i].concat(regexes[i]); + var margedRegexes = {}; + for (var i in regexes) { + if (extensions[i] && extensions[i].length % 2 === 0) { + margedRegexes[i] = extensions[i].concat(regexes[i]); + } else { + margedRegexes[i] = regexes[i]; } } - return regexes; + return margedRegexes; }, has : function (str1, str2) { if (typeof str1 === "string") { @@ -3681,11 +3684,13 @@ module.exports = Revenue; if (typeof result === UNDEF_TYPE) { result = {}; for (p in props) { - q = props[p]; - if (typeof q === OBJ_TYPE) { - result[q[0]] = undefined; - } else { - result[q] = undefined; + if (props.hasOwnProperty(p)){ + q = props[p]; + if (typeof q === OBJ_TYPE) { + result[q[0]] = undefined; + } else { + result[q] = undefined; + } } } } @@ -3830,8 +3835,10 @@ module.exports = Revenue; /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet /(opera).+version\/([\w\.]+)/i, // Opera > 9.80 /(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80 + ], [NAME, VERSION], [ - ], [[NAME, mapper.str, maps.browser.name], VERSION], [ + /(OPiOS)[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0 + ], [[NAME, 'Opera Mini'], VERSION], [ /\s(opr)\/([\w\.]+)/i // Opera Webkit ], [[NAME, 'Opera'], VERSION], [ @@ -3848,14 +3855,16 @@ module.exports = Revenue; // Webkit/KHTML based /(rekonq)\/([\w\.]+)*/i, // Rekonq - /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i - // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron - ], [[NAME, mapper.str, maps.browser.name], VERSION], [ + /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i + // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS + ], [NAME, VERSION], [ - /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i, // IE11 - /(Edge)\/((\d+)?[\w\.]+)/i // IE12 + /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11 ], [[NAME, 'IE'], VERSION], [ + /(edge)\/((\d+)?[\w\.]+)/i // Microsoft Edge + ], [NAME, VERSION], [ + /(yabrowser)\/([\w\.]+)/i // Yandex ], [[NAME, 'Yandex'], VERSION], [ @@ -3868,10 +3877,16 @@ module.exports = Revenue; /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i, // Chrome/OmniWeb/Arora/Tizen/Nokia - /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i - // UCBrowser/QQBrowser + /(qqbrowser)[\/\s]?([\w\.]+)/i + // QQBrowser ], [NAME, VERSION], [ + /(uc\s?browser)[\/\s]?([\w\.]+)/i, + /ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i, + /JUC.+(ucweb)[\/\s]?([\w\.]+)/i + // UCBrowser + ], [[NAME, 'UCBrowser'], VERSION], [ + /(dolfin)\/([\w\.]+)/i // Dolphin ], [[NAME, 'Dolphin'], VERSION], [ @@ -3884,6 +3899,9 @@ module.exports = Revenue; /FBAV\/([\w\.]+);/i // Facebook App for iOS ], [VERSION, [NAME, 'Facebook']], [ + /fxios\/([\w\.-]+)/i // Firefox for iOS + ], [VERSION, [NAME, 'Firefox']], [ + /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari ], [VERSION, [NAME, 'Mobile Safari']], [ @@ -3911,8 +3929,8 @@ module.exports = Revenue; /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla // Other - /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i, - // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir /(links)\s\(([\w\.]+)/i, // Links /(gobrowser)\/?([\w\.]+)*/i, // GoBrowser /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser @@ -4110,7 +4128,7 @@ module.exports = Revenue; /android.+;\s(shield)\sbuild/i // Nvidia ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [ - /(playstation\s[3portablevi]+)/i // Playstation + /(playstation\s[34portablevi]+)/i // Playstation ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [ /(sprint\s(\w+))/i // Sprint Phones @@ -4124,7 +4142,7 @@ module.exports = Revenue; /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i // Alcatel/GeeksPhone/Huawei/Lenovo/Nexian/Panasonic/Sony ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [ - + /(nexus\s9)/i // HTC Nexus 9 ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [ @@ -4136,7 +4154,8 @@ module.exports = Revenue; // Motorola /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i, /mot[\s-]?(\w+)*/i, - /(XT\d{3,4}) build\//i + /(XT\d{3,4}) build\//i, + /(nexus\s[6])/i ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [ /android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [ @@ -4188,7 +4207,8 @@ module.exports = Revenue; /android.+(mi[\s\-_]*(?:one|one[\s_]plus)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [ - /(mobile|tablet);.+rv\:.+gecko\//i // Unidentifiable + /\s(tablet)[;\/\s]/i, // Unidentifiable Tablet + /\s(mobile)[;\/\s]/i // Unidentifiable Mobile ], [[TYPE, util.lowerize], VENDOR, MODEL] /*////////////////////////// @@ -4244,7 +4264,7 @@ module.exports = Revenue; ], [VENDOR, MODEL, [TYPE, MOBILE]], [ /(i-STYLE2.1)/i // i-mobile i-STYLE 2.1 ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [ - + /(mobiistar touch LAI 512)/i // mobiistar touch LAI 512 ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [ @@ -4256,6 +4276,9 @@ module.exports = Revenue; engine : [[ + /windows.+\sedge\/([\w\.]+)/i // EdgeHTML + ], [VERSION, [NAME, 'EdgeHTML']], [ + /(presto)\/([\w\.]+)/i, // Presto /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links @@ -4282,7 +4305,7 @@ module.exports = Revenue; ], [[NAME, 'BlackBerry'], VERSION], [ /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry /(tizen)[\/\s]([\w\.]+)/i, // Tizen - /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i, + /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i, // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki /linux;.+(sailfish);/i // Sailfish OS ], [NAME, VERSION], [ @@ -4294,12 +4317,12 @@ module.exports = Revenue; ], [[NAME, 'Firefox OS'], VERSION], [ // Console - /(nintendo|playstation)\s([wids3portablevu]+)/i, // Nintendo/Playstation + /(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation // GNU/Linux based /(mint)[\/\s\(]?(\w+)*/i, // Mint /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux - /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i, + /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i, // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux @@ -4323,6 +4346,9 @@ module.exports = Revenue; /(ipad)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS ], [[NAME, 'iPad'], [VERSION, /_/g, '.']], [ + /(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i // iOS + ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [ + /(mac\sos\sx)\s?([\w\s\.]+\w)*/i, /(macintosh|mac(?=_powerpc)\s)/i // Mac OS ], [[NAME, 'Mac'], [VERSION, /_/g, '.']], [ @@ -4387,7 +4413,6 @@ module.exports = Revenue; ua = uastring; return this; }; - this.setUA(ua); return this; }; @@ -4436,7 +4461,7 @@ module.exports = Revenue; } else { // requirejs env (optional) if (typeof(define) === FUNC_TYPE && define.amd) { - define(function () { + define("ua-parser-js", [], function () { return UAParser; }); } else { @@ -4446,7 +4471,7 @@ module.exports = Revenue; } // jQuery/Zepto specific (optional) - // Note: + // Note: // In AMD env the global scope should be kept clean, but jQuery is an exception. // jQuery always exports to global scope, unless jQuery.noConflict(true) is used, // and we should catch that. @@ -4466,7 +4491,7 @@ module.exports = Revenue; }; } -})(this); +})(typeof window === 'object' ? window : this); }, {}], 16: [function(require, module, exports) { diff --git a/amplitude.min.js b/amplitude.min.js index 74fc4341..68f029d3 100644 --- a/amplitude.min.js +++ b/amplitude.min.js @@ -1,3 +1,3 @@ (function umd(require){if("object"==typeof exports){module.exports=require("1")}else if("function"==typeof define&&define.amd){define(function(){return require("1")})}else{this["amplitude"]=require("1")}})(function outer(modules,cache,entries){var global=function(){return this}();function require(name,jumped){if(cache[name])return cache[name].exports;if(modules[name])return call(name,require);throw new Error('cannot find module "'+name+'"')}function call(id,require){var m=cache[id]={exports:{}};var mod=modules[id];var name=mod[2];var fn=mod[0];fn.call(m.exports,function(req){var dep=modules[id][1][req];return require(dep?dep:req)},m,m.exports,outer,modules,cache,entries);if(name)cache[name]=cache[id];return cache[id].exports}for(var id in entries){if(entries[id]){global[entries[id]]=require(id)}else{require(id)}}require.duo=true;require.cache=cache;require.modules=modules;return require}({1:[function(require,module,exports){var Amplitude=require("./amplitude");var old=window.amplitude||{};var instance=new Amplitude;instance._q=old._q||[];module.exports=instance},{"./amplitude":2}],2:[function(require,module,exports){var Constants=require("./constants");var cookieStorage=require("./cookiestorage");var getUtmData=require("./utm");var Identify=require("./identify");var JSON=require("json");var localStorage=require("./localstorage");var md5=require("JavaScript-MD5");var object=require("object");var Request=require("./xhr");var Revenue=require("./revenue");var type=require("./type");var UAParser=require("ua-parser-js");var utils=require("./utils");var UUID=require("./uuid");var version=require("./version");var DEFAULT_OPTIONS=require("./options");var Amplitude=function Amplitude(){this._unsentEvents=[];this._unsentIdentifys=[];this._ua=new UAParser(navigator.userAgent).getResult();this.options=object.merge({},DEFAULT_OPTIONS);this.cookieStorage=(new cookieStorage).getStorage();this._q=[];this._sending=false;this._updateScheduled=false;this._eventId=0;this._identifyId=0;this._lastEventTime=null;this._newSession=false;this._sequenceNumber=0;this._sessionId=null};Amplitude.prototype.Identify=Identify;Amplitude.prototype.Revenue=Revenue;Amplitude.prototype.init=function init(apiKey,opt_userId,opt_config,opt_callback){if(type(apiKey)!=="string"||utils.isEmptyString(apiKey)){utils.log("Invalid apiKey. Please re-initialize with a valid apiKey");return}try{this.options.apiKey=apiKey;_parseConfig(this.options,opt_config);this.cookieStorage.options({expirationDays:this.options.cookieExpiration,domain:this.options.domain});this.options.domain=this.cookieStorage.options().domain;_upgradeCookeData(this);_loadCookieData(this);this.options.deviceId=type(opt_config)==="object"&&type(opt_config.deviceId)==="string"&&!utils.isEmptyString(opt_config.deviceId)&&opt_config.deviceId||this.options.deviceId||UUID()+"R";this.options.userId=type(opt_userId)==="string"&&!utils.isEmptyString(opt_userId)&&opt_userId||this.options.userId||null;var now=(new Date).getTime();if(!this._sessionId||!this._lastEventTime||now-this._lastEventTime>this.options.sessionTimeout){this._newSession=true;this._sessionId=now}this._lastEventTime=now;_saveCookieData(this);if(this.options.saveEvents){this._unsentEvents=this._loadSavedUnsentEvents(this.options.unsentKey);this._unsentIdentifys=this._loadSavedUnsentEvents(this.options.unsentIdentifyKey);for(var i=0;i0){options[key]=inputValue}};for(var key in config){if(config.hasOwnProperty(key)){parseValidateAndLoad(key)}}};Amplitude.prototype.runQueuedFunctions=function(){for(var i=0;i=this.options.eventUploadThreshold){this.sendEvents(callback);return true}if(!this._updateScheduled){this._updateScheduled=true;setTimeout(function(){this._updateScheduled=false;this.sendEvents()}.bind(this),this.options.eventUploadPeriodMillis)}return false};Amplitude.prototype._getFromStorage=function _getFromStorage(storage,key){return storage.getItem(key)};Amplitude.prototype._setInStorage=function _setInStorage(storage,key,value){storage.setItem(key,value)};var _upgradeCookeData=function _upgradeCookeData(scope){var cookieData=scope.cookieStorage.get(scope.options.cookieName);if(type(cookieData)==="object"&&cookieData.deviceId&&cookieData.sessionId&&cookieData.lastEventTime){return}var _getAndRemoveFromLocalStorage=function _getAndRemoveFromLocalStorage(key){var value=localStorage.getItem(key);localStorage.removeItem(key);return value};var apiKeySuffix=type(scope.options.apiKey)==="string"&&"_"+scope.options.apiKey.slice(0,6)||"";var localStorageDeviceId=_getAndRemoveFromLocalStorage(Constants.DEVICE_ID+apiKeySuffix);var localStorageUserId=_getAndRemoveFromLocalStorage(Constants.USER_ID+apiKeySuffix);var localStorageOptOut=_getAndRemoveFromLocalStorage(Constants.OPT_OUT+apiKeySuffix);if(localStorageOptOut!==null&&localStorageOptOut!==undefined){localStorageOptOut=String(localStorageOptOut)==="true"}var localStorageSessionId=parseInt(_getAndRemoveFromLocalStorage(Constants.SESSION_ID));var localStorageLastEventTime=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_EVENT_TIME));var localStorageEventId=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_EVENT_ID));var localStorageIdentifyId=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_IDENTIFY_ID));var localStorageSequenceNumber=parseInt(_getAndRemoveFromLocalStorage(Constants.LAST_SEQUENCE_NUMBER));var _getFromCookie=function _getFromCookie(key){return type(cookieData)==="object"&&cookieData[key]};scope.options.deviceId=_getFromCookie("deviceId")||localStorageDeviceId;scope.options.userId=_getFromCookie("userId")||localStorageUserId;scope._sessionId=_getFromCookie("sessionId")||localStorageSessionId||scope._sessionId;scope._lastEventTime=_getFromCookie("lastEventTime")||localStorageLastEventTime||scope._lastEventTime;scope._eventId=_getFromCookie("eventId")||localStorageEventId||scope._eventId;scope._identifyId=_getFromCookie("identifyId")||localStorageIdentifyId||scope._identifyId;scope._sequenceNumber=_getFromCookie("sequenceNumber")||localStorageSequenceNumber||scope._sequenceNumber;scope.options.optOut=localStorageOptOut||false;if(cookieData&&cookieData.optOut!==undefined&&cookieData.optOut!==null){scope.options.optOut=String(cookieData.optOut)==="true"}_saveCookieData(scope)};var _loadCookieData=function _loadCookieData(scope){var cookieData=scope.cookieStorage.get(scope.options.cookieName);if(type(cookieData)==="object"){if(cookieData.deviceId){scope.options.deviceId=cookieData.deviceId}if(cookieData.userId){scope.options.userId=cookieData.userId}if(cookieData.optOut!==null&&cookieData.optOut!==undefined){scope.options.optOut=cookieData.optOut}if(cookieData.sessionId){scope._sessionId=parseInt(cookieData.sessionId)}if(cookieData.lastEventTime){scope._lastEventTime=parseInt(cookieData.lastEventTime)}if(cookieData.eventId){scope._eventId=parseInt(cookieData.eventId)}if(cookieData.identifyId){scope._identifyId=parseInt(cookieData.identifyId)}if(cookieData.sequenceNumber){scope._sequenceNumber=parseInt(cookieData.sequenceNumber)}}};var _saveCookieData=function _saveCookieData(scope){scope.cookieStorage.set(scope.options.cookieName,{deviceId:scope.options.deviceId,userId:scope.options.userId,optOut:scope.options.optOut,sessionId:scope._sessionId,lastEventTime:scope._lastEventTime,eventId:scope._eventId,identifyId:scope._identifyId,sequenceNumber:scope._sequenceNumber})};Amplitude.prototype._initUtmData=function _initUtmData(queryParams,cookieParams){queryParams=queryParams||location.search;cookieParams=cookieParams||this.cookieStorage.get("__utmz");var utmProperties=getUtmData(cookieParams,queryParams);_sendUserPropertiesOncePerSession(this,Constants.UTM_PROPERTIES,utmProperties)};var _sendUserPropertiesOncePerSession=function _sendUserPropertiesOncePerSession(scope,storageKey,userProperties){if(type(userProperties)!=="object"||Object.keys(userProperties).length===0){return}var identify=new Identify;for(var key in userProperties){if(userProperties.hasOwnProperty(key)){identify.setOnce("initial_"+key,userProperties[key])}}var hasSessionStorage=utils.sessionStorageEnabled();if(hasSessionStorage&&!scope._getFromStorage(sessionStorage,storageKey)||!hasSessionStorage){for(var property in userProperties){if(userProperties.hasOwnProperty(property)){identify.set(property,userProperties[property])}}if(hasSessionStorage){scope._setInStorage(sessionStorage,storageKey,JSON.stringify(userProperties))}}scope.identify(identify)};Amplitude.prototype._getReferrer=function _getReferrer(){return document.referrer};Amplitude.prototype._getReferringDomain=function _getReferringDomain(referrer){if(utils.isEmptyString(referrer)){return null}var parts=referrer.split("/");if(parts.length>=3){return parts[2]}return null};Amplitude.prototype._saveReferrer=function _saveReferrer(referrer){if(utils.isEmptyString(referrer)){return}var referrerInfo={referrer:referrer,referring_domain:this._getReferringDomain(referrer)};_sendUserPropertiesOncePerSession(this,Constants.REFERRER,referrerInfo)};Amplitude.prototype.saveEvents=function saveEvents(){try{this._setInStorage(localStorage,this.options.unsentKey,JSON.stringify(this._unsentEvents))}catch(e){}try{this._setInStorage(localStorage,this.options.unsentIdentifyKey,JSON.stringify(this._unsentIdentifys))}catch(e){}};Amplitude.prototype.setDomain=function setDomain(domain){if(!utils.validateInput(domain,"domain","string")){return}try{this.cookieStorage.options({domain:domain});this.options.domain=this.cookieStorage.options().domain;_loadCookieData(this);_saveCookieData(this)}catch(e){utils.log(e)}};Amplitude.prototype.setUserId=function setUserId(userId){try{this.options.userId=userId!==undefined&&userId!==null&&""+userId||null;_saveCookieData(this)}catch(e){utils.log(e)}};Amplitude.prototype.setGroup=function(groupType,groupName){if(!this._apiKeySet("setGroup()")||!utils.validateInput(groupType,"groupType","string")||utils.isEmptyString(groupType)){return}var groups={};groups[groupType]=groupName;var identify=(new Identify).set(groupType,groupName);this._logEvent(Constants.IDENTIFY_EVENT,null,null,identify.userPropertiesOperations,groups,null)};Amplitude.prototype.setOptOut=function setOptOut(enable){if(!utils.validateInput(enable,"enable","boolean")){return}try{this.options.optOut=enable;_saveCookieData(this)}catch(e){utils.log(e)}};Amplitude.prototype.regenerateDeviceId=function regenerateDeviceId(){this.setDeviceId(UUID()+"R")};Amplitude.prototype.setDeviceId=function setDeviceId(deviceId){if(!utils.validateInput(deviceId,"deviceId","string")){return}try{if(!utils.isEmptyString(deviceId)){this.options.deviceId=""+deviceId;_saveCookieData(this)}}catch(e){utils.log(e)}};Amplitude.prototype.setUserProperties=function setUserProperties(userProperties){if(!this._apiKeySet("setUserProperties()")||!utils.validateInput(userProperties,"userProperties","object")){return}var identify=new Identify;for(var property in userProperties){if(userProperties.hasOwnProperty(property)){identify.set(property,userProperties[property])}}this.identify(identify)};Amplitude.prototype.clearUserProperties=function clearUserProperties(){if(!this._apiKeySet("clearUserProperties()")){return}var identify=new Identify;identify.clearAll();this.identify(identify)};var _convertProxyObjectToRealObject=function _convertProxyObjectToRealObject(instance,proxy){for(var i=0;i0){return this._logEvent(Constants.IDENTIFY_EVENT,null,null,identify_obj.userPropertiesOperations,null,opt_callback)}}else{utils.log("Invalid identify input type. Expected Identify object but saw "+type(identify_obj))}if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}};Amplitude.prototype.setVersionName=function setVersionName(versionName){if(!utils.validateInput(versionName,"versionName","string")){return}this.options.versionName=versionName};Amplitude.prototype._logEvent=function _logEvent(eventType,eventProperties,apiProperties,userProperties,groups,callback){_loadCookieData(this);if(!eventType||this.options.optOut){if(type(callback)==="function"){callback(0,"No request sent")}return}try{var eventId;if(eventType===Constants.IDENTIFY_EVENT){eventId=this.nextIdentifyId()}else{eventId=this.nextEventId()}var sequenceNumber=this.nextSequenceNumber();var eventTime=(new Date).getTime();if(!this._sessionId||!this._lastEventTime||eventTime-this._lastEventTime>this.options.sessionTimeout){this._sessionId=eventTime}this._lastEventTime=eventTime;_saveCookieData(this);userProperties=userProperties||{};apiProperties=apiProperties||{};eventProperties=eventProperties||{};groups=groups||{};var event={device_id:this.options.deviceId,user_id:this.options.userId,timestamp:eventTime,event_id:eventId,session_id:this._sessionId||-1,event_type:eventType,version_name:this.options.versionName||null,platform:this.options.platform,os_name:this._ua.browser.name||null,os_version:this._ua.browser.major||null,device_model:this._ua.os.name||null,language:this.options.language,api_properties:apiProperties,event_properties:utils.truncate(utils.validateProperties(eventProperties)),user_properties:utils.truncate(utils.validateProperties(userProperties)),uuid:UUID(),library:{name:"amplitude-js",version:version},sequence_number:sequenceNumber,groups:utils.truncate(utils.validateGroups(groups))};if(eventType===Constants.IDENTIFY_EVENT){this._unsentIdentifys.push(event);this._limitEventsQueued(this._unsentIdentifys)}else{this._unsentEvents.push(event);this._limitEventsQueued(this._unsentEvents)}if(this.options.saveEvents){this.saveEvents()}if(!this._sendEventsIfReady(callback)&&type(callback)==="function"){callback(0,"No request sent")}return eventId}catch(e){utils.log(e)}};Amplitude.prototype._limitEventsQueued=function _limitEventsQueued(queue){if(queue.length>this.options.savedMaxCount){queue.splice(0,queue.length-this.options.savedMaxCount)}};Amplitude.prototype.logEvent=function logEvent(eventType,eventProperties,opt_callback){if(!this._apiKeySet("logEvent()")||!utils.validateInput(eventType,"eventType","string")||utils.isEmptyString(eventType)){if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}return-1}return this._logEvent(eventType,eventProperties,null,null,null,opt_callback)};Amplitude.prototype.logEventWithGroups=function(eventType,eventProperties,groups,opt_callback){if(!this._apiKeySet("logEventWithGroup()")||!utils.validateInput(eventType,"eventType","string")){if(type(opt_callback)==="function"){opt_callback(0,"No request sent")}return-1}return this._logEvent(eventType,eventProperties,null,null,groups,opt_callback)};var _isNumber=function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n)};Amplitude.prototype.logRevenueV2=function logRevenueV2(revenue_obj){if(!this._apiKeySet("logRevenueV2()")){return}if(type(revenue_obj)==="object"&&revenue_obj.hasOwnProperty("_q")){revenue_obj=_convertProxyObjectToRealObject(new Revenue,revenue_obj)}if(revenue_obj instanceof Revenue){if(revenue_obj&&revenue_obj._isValidRevenue()){return this.logEvent(Constants.REVENUE_EVENT,revenue_obj._toJSONObject())}}else{utils.log("Invalid revenue input type. Expected Revenue object but saw "+type(revenue_obj))}};Amplitude.prototype.logRevenue=function logRevenue(price,quantity,product){if(!this._apiKeySet("logRevenue()")||!_isNumber(price)||quantity!==undefined&&!_isNumber(quantity)){return-1}return this._logEvent(Constants.REVENUE_EVENT,{},{productId:product,special:"revenue_amount",quantity:quantity||1,price:price},null,null,null)};Amplitude.prototype.removeEvents=function removeEvents(maxEventId,maxIdentifyId){_removeEvents(this,"_unsentEvents",maxEventId);_removeEvents(this,"_unsentIdentifys",maxIdentifyId)};var _removeEvents=function _removeEvents(scope,eventQueue,maxId){if(maxId<0){return}var filteredEvents=[];for(var i=0;imaxId){filteredEvents.push(scope[eventQueue][i])}}scope[eventQueue]=filteredEvents};Amplitude.prototype.sendEvents=function sendEvents(callback){if(!this._apiKeySet("sendEvents()")||this._sending||this.options.optOut||this._unsentCount()===0){if(type(callback)==="function"){callback(0,"No request sent")}return}this._sending=true;var url=("https:"===window.location.protocol?"https":"http")+"://"+this.options.apiEndpoint+"/";var numEvents=Math.min(this._unsentCount(),this.options.uploadBatchSize);var mergedEvents=this._mergeEventsAndIdentifys(numEvents);var maxEventId=mergedEvents.maxEventId;var maxIdentifyId=mergedEvents.maxIdentifyId;var events=JSON.stringify(mergedEvents.eventsToSend);var uploadTime=(new Date).getTime();var data={client:this.options.apiKey,e:events,v:Constants.API_VERSION,upload_time:uploadTime,checksum:md5(Constants.API_VERSION+this.options.apiKey+events+uploadTime)};var scope=this;new Request(url,data).send(function(status,response){scope._sending=false;try{if(status===200&&response==="success"){scope.removeEvents(maxEventId,maxIdentifyId);if(scope.options.saveEvents){scope.saveEvents()}if(!scope._sendEventsIfReady(callback)&&type(callback)==="function"){callback(status,response)}}else if(status===413){if(scope.options.uploadBatchSize===1){scope.removeEvents(maxEventId,maxIdentifyId)}scope.options.uploadBatchSize=Math.ceil(numEvents/2);scope.sendEvents(callback)}else if(type(callback)==="function"){callback(status,response)}}catch(e){}})};Amplitude.prototype._mergeEventsAndIdentifys=function _mergeEventsAndIdentifys(numEvents){var eventsToSend=[];var eventIndex=0;var maxEventId=-1;var identifyIndex=0;var maxIdentifyId=-1;while(eventsToSend.length=this._unsentIdentifys.length;var noEvents=eventIndex>=this._unsentEvents.length;if(noEvents&&noIdentifys){utils.log("Merging Events and Identifys, less events and identifys than expected");break}else if(noIdentifys){event=this._unsentEvents[eventIndex++];maxEventId=event.event_id}else if(noEvents){event=this._unsentIdentifys[identifyIndex++];maxIdentifyId=event.event_id}else{if(!("sequence_number"in this._unsentEvents[eventIndex])||this._unsentEvents[eventIndex].sequence_number>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+Base64._keyStr.charAt(enc1)+Base64._keyStr.charAt(enc2)+Base64._keyStr.charAt(enc3)+Base64._keyStr.charAt(enc4)}return output},decode:function(input){try{if(window.btoa&&window.atob){return decodeURIComponent(escape(window.atob(input)))}}catch(e){}return Base64._decode(input)},_decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}output=UTF8.decode(output);return output}};module.exports=Base64},{"./utf8":22}],22:[function(require,module,exports){var UTF8={encode:function(s){var utftext="";for(var n=0;n127&&c<2048){utftext+=String.fromCharCode(c>>6|192);utftext+=String.fromCharCode(c&63|128)}else{utftext+=String.fromCharCode(c>>12|224);utftext+=String.fromCharCode(c>>6&63|128);utftext+=String.fromCharCode(c&63|128)}}return utftext},decode:function(utftext){var s="";var i=0;var c=0,c1=0,c2=0;while(i191&&c<224){c1=utftext.charCodeAt(i+1);s+=String.fromCharCode((c&31)<<6|c1&63);i+=2}else{c1=utftext.charCodeAt(i+1);c2=utftext.charCodeAt(i+2);s+=String.fromCharCode((c&15)<<12|(c1&63)<<6|c2&63);i+=3}}return s}};module.exports=UTF8},{}],7:[function(require,module,exports){var json=window.JSON||{};var stringify=json.stringify;var parse=json.parse;module.exports=parse&&stringify?JSON:require("json-fallback")},{"json-fallback":23}],23:[function(require,module,exports){(function(){"use strict";var JSON=module.exports={};function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var cx,escapable,gap,indent,meta,rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;iconstants.MAX_STRING_LENGTH?value.substring(0,constants.MAX_STRING_LENGTH):value}return value};var validateInput=function validateInput(input,name,expectedType){if(type(input)!==expectedType){log("Invalid "+name+" input type. Expected "+expectedType+" but received "+type(input));return false}return true};var validateProperties=function validateProperties(properties){var propsType=type(properties);if(propsType!=="object"){log("Error: invalid event properties format. Expecting Javascript object, received "+propsType+", ignoring");return{}}var copy={};for(var property in properties){if(!properties.hasOwnProperty(property)){continue}var key=property;var keyType=type(key);if(keyType!=="string"){key=String(key);log("WARNING: Non-string property key, received type "+keyType+', coercing to string "'+key+'"')}var value=validatePropertyValue(key,properties[property]);if(value===null){continue}copy[key]=value}return copy};var invalidValueTypes=["null","nan","undefined","function","arguments","regexp","element"];var validatePropertyValue=function validatePropertyValue(key,value){var valueType=type(value);if(invalidValueTypes.indexOf(valueType)!==-1){log('WARNING: Property key "'+key+'" with invalid value type '+valueType+", ignoring");value=null}else if(valueType==="error"){value=String(value);log('WARNING: Property key "'+key+'" with value type error, coercing to '+value)}else if(valueType==="array"){var arrayCopy=[];for(var i=0;i0){if(!this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll")}return this}this.userPropertiesOperations[AMP_OP_CLEAR_ALL]="-";return this};Identify.prototype.prepend=function(property,value){this._addOperation(AMP_OP_PREPEND,property,value);return this};Identify.prototype.set=function(property,value){this._addOperation(AMP_OP_SET,property,value);return this};Identify.prototype.setOnce=function(property,value){this._addOperation(AMP_OP_SET_ONCE,property,value);return this};Identify.prototype.unset=function(property){this._addOperation(AMP_OP_UNSET,property,"-");return this};Identify.prototype._addOperation=function(operation,property,value){if(this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("This identify already contains a $clearAll operation, skipping operation "+operation);return}if(this.properties.indexOf(property)!==-1){utils.log('User property "'+property+'" already used in this identify, skipping operation '+operation);return}if(!this.userPropertiesOperations.hasOwnProperty(operation)){this.userPropertiesOperations[operation]={}}this.userPropertiesOperations[operation][property]=value;this.properties.push(property)};module.exports=Identify},{"./type":13,"./utils":15}],9:[function(require,module,exports){(function($){"use strict";function safe_add(x,y){var lsw=(x&65535)+(y&65535),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function bit_rol(num,cnt){return num<>>32-cnt}function md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)}function md5_ff(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)}function md5_gg(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)}function md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)}function md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)}function binl_md5(x,len){x[len>>5]|=128<>>9<<4)+14]=len;var i,olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878;for(i=0;i>5]>>>i%32&255)}return output}function rstr2binl(input){var i,output=[];output[(input.length>>2)-1]=undefined;for(i=0;i>5]|=(input.charCodeAt(i/8)&255)<16){bkey=binl_md5(bkey,key.length*8)}for(i=0;i<16;i+=1){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}hash=binl_md5(ipad.concat(rstr2binl(data)),512+data.length*8);return binl2rstr(binl_md5(opad.concat(hash),512+128))}function rstr2hex(input){var hex_tab="0123456789abcdef",output="",x,i;for(i=0;i>>4&15)+hex_tab.charAt(x&15)}return output}function str2rstr_utf8(input){return unescape(encodeURIComponent(input))}function raw_md5(s){return rstr_md5(str2rstr_utf8(s))}function hex_md5(s){return rstr2hex(raw_md5(s))}function raw_hmac_md5(k,d){return rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d))}function hex_hmac_md5(k,d){return rstr2hex(raw_hmac_md5(k,d))}function md5(string,key,raw){if(!key){if(!raw){return hex_md5(string)}return raw_md5(string)}if(!raw){return hex_hmac_md5(key,string)}return raw_hmac_md5(key,string)}if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=md5}exports.md5=md5}else{if(typeof define==="function"&&define.amd){define(function(){return md5})}else{$.md5=md5}}})(this)},{}],10:[function(require,module,exports){var has=Object.prototype.hasOwnProperty;exports.keys=Object.keys||function(obj){var keys=[];for(var key in obj){if(has.call(obj,key)){keys.push(key)}}return keys};exports.values=function(obj){var vals=[];for(var key in obj){if(has.call(obj,key)){vals.push(obj[key])}}return vals};exports.merge=function(a,b){for(var key in b){if(has.call(b,key)){a[key]=b[key]}}return a};exports.length=function(obj){return exports.keys(obj).length};exports.isEmpty=function(obj){return 0==exports.length(obj)}},{}],11:[function(require,module,exports){var querystring=require("querystring");var Request=function(url,data){this.url=url;this.data=data||{}};Request.prototype.send=function(callback){var isIE=window.XDomainRequest?true:false;if(isIE){var xdr=new window.XDomainRequest;xdr.open("POST",this.url,true);xdr.onload=function(){callback(200,xdr.responseText)};xdr.onerror=function(){if(xdr.responseText==="Request Entity Too Large"){callback(413,xdr.responseText)}else{callback(500,xdr.responseText)}};xdr.ontimeout=function(){};xdr.onprogress=function(){};xdr.send(querystring.stringify(this.data))}else{var xhr=new XMLHttpRequest;xhr.open("POST",this.url,true);xhr.onreadystatechange=function(){if(xhr.readyState===4){callback(xhr.status,xhr.responseText)}};xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");xhr.send(querystring.stringify(this.data))}};module.exports=Request},{querystring:25}],25:[function(require,module,exports){var encode=encodeURIComponent;var decode=decodeURIComponent;var trim=require("trim");var type=require("type");exports.parse=function(str){if("string"!=typeof str)return{};str=trim(str);if(""==str)return{};if("?"==str.charAt(0))str=str.slice(1);var obj={};var pairs=str.split("&");for(var i=0;i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,uuid)};module.exports=uuid},{}],17:[function(require,module,exports){module.exports="2.12.1"},{}],18:[function(require,module,exports){var language=require("./language");module.exports={apiEndpoint:"api.amplitude.com",cookieExpiration:365*10,cookieName:"amplitude_id",domain:"",includeReferrer:false,includeUtm:false,language:language.language,optOut:false,platform:"Web",savedMaxCount:1e3,saveEvents:true,sessionTimeout:30*60*1e3,unsentKey:"amplitude_unsent",unsentIdentifyKey:"amplitude_unsent_identify",uploadBatchSize:100,batchEvents:false,eventUploadThreshold:30,eventUploadPeriodMillis:30*1e3}},{"./language":28}],28:[function(require,module,exports){var getLanguage=function(){return navigator&&(navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage)||undefined};module.exports={language:getLanguage()}},{}]},{},{1:""})); \ No newline at end of file +return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}})()},{}],21:[function(require,module,exports){var parse=require("url").parse;module.exports=domain;var regexp=/[a-z0-9][a-z0-9\-]*[a-z0-9]\.[a-z\.]{2,6}$/i;function domain(url){var host=parse(url).hostname;var match=host.match(regexp);return match?match[0]:""}},{url:24}],24:[function(require,module,exports){exports.parse=function(url){var a=document.createElement("a");a.href=url;return{href:a.href,host:a.host||location.host,port:"0"===a.port||""===a.port?port(a.protocol):a.port,hash:a.hash,hostname:a.hostname||location.hostname,pathname:a.pathname.charAt(0)!="/"?"/"+a.pathname:a.pathname,protocol:!a.protocol||":"==a.protocol?location.protocol:a.protocol,search:a.search,query:a.search.slice(1)}};exports.isAbsolute=function(url){return 0==url.indexOf("//")||!!~url.indexOf("://")};exports.isRelative=function(url){return!exports.isAbsolute(url)};exports.isCrossDomain=function(url){url=exports.parse(url);var location=exports.parse(window.location.href);return url.hostname!==location.hostname||url.port!==location.port||url.protocol!==location.protocol};function port(protocol){switch(protocol){case"http:":return 80;case"https:":return 443;default:return location.port}}},{}],15:[function(require,module,exports){var constants=require("./constants");var type=require("./type");var log=function log(s){try{console.log("[Amplitude] "+s)}catch(e){}};var isEmptyString=function isEmptyString(str){return!str||str.length===0};var sessionStorageEnabled=function sessionStorageEnabled(){try{if(window.sessionStorage){return true}}catch(e){}return false};var truncate=function truncate(value){if(type(value)==="array"){for(var i=0;iconstants.MAX_STRING_LENGTH?value.substring(0,constants.MAX_STRING_LENGTH):value}return value};var validateInput=function validateInput(input,name,expectedType){if(type(input)!==expectedType){log("Invalid "+name+" input type. Expected "+expectedType+" but received "+type(input));return false}return true};var validateProperties=function validateProperties(properties){var propsType=type(properties);if(propsType!=="object"){log("Error: invalid event properties format. Expecting Javascript object, received "+propsType+", ignoring");return{}}var copy={};for(var property in properties){if(!properties.hasOwnProperty(property)){continue}var key=property;var keyType=type(key);if(keyType!=="string"){key=String(key);log("WARNING: Non-string property key, received type "+keyType+', coercing to string "'+key+'"')}var value=validatePropertyValue(key,properties[property]);if(value===null){continue}copy[key]=value}return copy};var invalidValueTypes=["null","nan","undefined","function","arguments","regexp","element"];var validatePropertyValue=function validatePropertyValue(key,value){var valueType=type(value);if(invalidValueTypes.indexOf(valueType)!==-1){log('WARNING: Property key "'+key+'" with invalid value type '+valueType+", ignoring");value=null}else if(valueType==="error"){value=String(value);log('WARNING: Property key "'+key+'" with value type error, coercing to '+value)}else if(valueType==="array"){var arrayCopy=[];for(var i=0;i0){if(!this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll")}return this}this.userPropertiesOperations[AMP_OP_CLEAR_ALL]="-";return this};Identify.prototype.prepend=function(property,value){this._addOperation(AMP_OP_PREPEND,property,value);return this};Identify.prototype.set=function(property,value){this._addOperation(AMP_OP_SET,property,value);return this};Identify.prototype.setOnce=function(property,value){this._addOperation(AMP_OP_SET_ONCE,property,value);return this};Identify.prototype.unset=function(property){this._addOperation(AMP_OP_UNSET,property,"-");return this};Identify.prototype._addOperation=function(operation,property,value){if(this.userPropertiesOperations.hasOwnProperty(AMP_OP_CLEAR_ALL)){utils.log("This identify already contains a $clearAll operation, skipping operation "+operation);return}if(this.properties.indexOf(property)!==-1){utils.log('User property "'+property+'" already used in this identify, skipping operation '+operation);return}if(!this.userPropertiesOperations.hasOwnProperty(operation)){this.userPropertiesOperations[operation]={}}this.userPropertiesOperations[operation][property]=value;this.properties.push(property)};module.exports=Identify},{"./type":13,"./utils":15}],9:[function(require,module,exports){(function($){"use strict";function safe_add(x,y){var lsw=(x&65535)+(y&65535),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function bit_rol(num,cnt){return num<>>32-cnt}function md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)}function md5_ff(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)}function md5_gg(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)}function md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)}function md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)}function binl_md5(x,len){x[len>>5]|=128<>>9<<4)+14]=len;var i,olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878;for(i=0;i>5]>>>i%32&255)}return output}function rstr2binl(input){var i,output=[];output[(input.length>>2)-1]=undefined;for(i=0;i>5]|=(input.charCodeAt(i/8)&255)<16){bkey=binl_md5(bkey,key.length*8)}for(i=0;i<16;i+=1){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}hash=binl_md5(ipad.concat(rstr2binl(data)),512+data.length*8);return binl2rstr(binl_md5(opad.concat(hash),512+128))}function rstr2hex(input){var hex_tab="0123456789abcdef",output="",x,i;for(i=0;i>>4&15)+hex_tab.charAt(x&15)}return output}function str2rstr_utf8(input){return unescape(encodeURIComponent(input))}function raw_md5(s){return rstr_md5(str2rstr_utf8(s))}function hex_md5(s){return rstr2hex(raw_md5(s))}function raw_hmac_md5(k,d){return rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d))}function hex_hmac_md5(k,d){return rstr2hex(raw_hmac_md5(k,d))}function md5(string,key,raw){if(!key){if(!raw){return hex_md5(string)}return raw_md5(string)}if(!raw){return hex_hmac_md5(key,string)}return raw_hmac_md5(key,string)}if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=md5}exports.md5=md5}else{if(typeof define==="function"&&define.amd){define(function(){return md5})}else{$.md5=md5}}})(this)},{}],10:[function(require,module,exports){var has=Object.prototype.hasOwnProperty;exports.keys=Object.keys||function(obj){var keys=[];for(var key in obj){if(has.call(obj,key)){keys.push(key)}}return keys};exports.values=function(obj){var vals=[];for(var key in obj){if(has.call(obj,key)){vals.push(obj[key])}}return vals};exports.merge=function(a,b){for(var key in b){if(has.call(b,key)){a[key]=b[key]}}return a};exports.length=function(obj){return exports.keys(obj).length};exports.isEmpty=function(obj){return 0==exports.length(obj)}},{}],11:[function(require,module,exports){var querystring=require("querystring");var Request=function(url,data){this.url=url;this.data=data||{}};Request.prototype.send=function(callback){var isIE=window.XDomainRequest?true:false;if(isIE){var xdr=new window.XDomainRequest;xdr.open("POST",this.url,true);xdr.onload=function(){callback(200,xdr.responseText)};xdr.onerror=function(){if(xdr.responseText==="Request Entity Too Large"){callback(413,xdr.responseText)}else{callback(500,xdr.responseText)}};xdr.ontimeout=function(){};xdr.onprogress=function(){};xdr.send(querystring.stringify(this.data))}else{var xhr=new XMLHttpRequest;xhr.open("POST",this.url,true);xhr.onreadystatechange=function(){if(xhr.readyState===4){callback(xhr.status,xhr.responseText)}};xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");xhr.send(querystring.stringify(this.data))}};module.exports=Request},{querystring:25}],25:[function(require,module,exports){var encode=encodeURIComponent;var decode=decodeURIComponent;var trim=require("trim");var type=require("type");exports.parse=function(str){if("string"!=typeof str)return{};str=trim(str);if(""==str)return{};if("?"==str.charAt(0))str=str.slice(1);var obj={};var pairs=str.split("&");for(var i=0;i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,uuid)};module.exports=uuid},{}],17:[function(require,module,exports){module.exports="2.12.1"},{}],18:[function(require,module,exports){var language=require("./language");module.exports={apiEndpoint:"api.amplitude.com",cookieExpiration:365*10,cookieName:"amplitude_id",domain:"",includeReferrer:false,includeUtm:false,language:language.language,optOut:false,platform:"Web",savedMaxCount:1e3,saveEvents:true,sessionTimeout:30*60*1e3,unsentKey:"amplitude_unsent",unsentIdentifyKey:"amplitude_unsent_identify",uploadBatchSize:100,batchEvents:false,eventUploadThreshold:30,eventUploadPeriodMillis:30*1e3}},{"./language":28}],28:[function(require,module,exports){var getLanguage=function(){return navigator&&(navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage)||undefined};module.exports={language:getLanguage()}},{}]},{},{1:""})); \ No newline at end of file diff --git a/component.json b/component.json index 9a448b0f..86773560 100644 --- a/component.json +++ b/component.json @@ -9,7 +9,7 @@ "amplitude" ], "dependencies": { - "amplitude/ua-parser-js": "407f34a", + "amplitude/ua-parser-js": "fbdb1dc", "amplitude/JavaScript-MD5": "2350ea9", "component/object": "0.0.3", "component/querystring": "1.3.0", diff --git a/test/ua-parser.js b/test/ua-parser.js index 78bfb4d6..221795e7 100644 --- a/test/ua-parser.js +++ b/test/ua-parser.js @@ -22,25 +22,6 @@ var browsers = [ ["(device unknown) - Android - Puffin 2.9174AT (AT=android tablet)","Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT","Chrome","11","Linux","x86_64"], ["(device unknown) - Android 4.1 - AppleWebKit 534.30","Mozilla/5.0 (Linux; U; Android 4.1; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30","Android Browser","4","Android","4.1"], ["(device unknown) - Android 4.2 - Safari 535.19","Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/MR1) AppleWebKit/535.19 (KHTML, like Gecko) Version/4.2 Safari/535.19","Android Browser","4","Android","4.2"], -["3230 - SymbianOS 7.0s","Nokia3230/2.0 (5.0614.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0",undefined,undefined,"Symbian","7.0s"], -["5700 - SymbianOS 9.2 - Safari 413","Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia5700/3.27; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413","Safari",undefined,"Symbian","9.2"], -["6120 Classic - SymbianOS 9.2 - Safari 413","Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.70; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413","Safari",undefined,"Symbian","9.2"], -["6230","Nokia6230/2.0 (04.44) Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["6230i","Nokia6230i/2.0 (03.80) Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["6600 Smartphone - Symbian OS - Opera 6.20","Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 6600;452) Opera 6.20 [en-US]","Opera","6","Symbian",undefined], -["6630 - SymbianOS 8.0","Nokia6630/1.0 (2.39.15) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,"Symbian","8.0"], -["6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Sprint","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800 ","IE Mobile","7","Windows","CE"], -["6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Verizon","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) XV6800 ","IE Mobile","7","Windows","CE"], -["7100","BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103",undefined,undefined,"BlackBerry","4.1.0"], -["7250","Nokia7250/1.0 (3.14) Profile/MIDP-1.0 Configuration/CLDC-1.0",undefined,undefined,undefined,undefined], -["8300 Bold","BlackBerry8300/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/107 UP.Link/6.2.3.15.0",undefined,undefined,"BlackBerry","4.2.2"], -["8320 Curve","BlackBerry8320/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/100",undefined,undefined,"BlackBerry","4.2.2"], -["8330","BlackBerry8330/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/105",undefined,undefined,"BlackBerry","4.3.0"], -["9000","BlackBerry9000/4.6.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102",undefined,undefined,"BlackBerry","4.6.0.167"], -["9500","Mozilla/4.0 (compatible; MSIE 5.0; Series80/2.0 Nokia9500/4.51 Profile/MIDP-2.0 Configuration/CLDC-1.1)","IE","5",undefined,undefined], -["9530 Storm","BlackBerry9530/4.7.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102 UP.Link/6.3.1.20.0",undefined,undefined,"BlackBerry","4.7.0.167"], -["9700","BlackBerry9700/5.0.0.351 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/123",undefined,undefined,"BlackBerry","5.0.0.351"], -["9800 Torch - Safari 534.1","Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1 (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1","Mobile Safari","6","BlackBerry",undefined], ["Acer Iconia - Android - 3.0.1 - AppleWebKit 534.13","Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Android Browser","4","Android","3.0.1"], ["Adobe Application Manager 2.0","Adobe Application Manager 2.0",undefined,undefined,undefined,undefined], ["Android - 3.0.1 - Mobile Safari 523.12 - Motorola Xoom","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Android Browser","3","Android","3.0"], @@ -59,7 +40,6 @@ var browsers = [ ["Android 2.2 - Samsung Galaxy - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], ["Android 4.0.3 - Mobile Safari 534.30 - HTC Sensation","Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","Android Browser","4","Android","4.0.3"], ["Android 4.0.3 - Mobile Safari 534.30 - Samsung Galaxy S II","Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","Android Browser","4","Android","4.0.3"], -["Android 4.0.4 - Opera 12.00","Opera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1205181138; U; pl) Presto/2.10.254 Version/12.00","Opera Mobile","12","Android","4.0.4"], ["Android 4.1.2 - Chrome 30.0","Mozilla/5.0 (Linux; Android 4.1.2; SHV-E250S Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36","Chrome Mobile",undefined,"Android","4.1.2"], ["Android 4.2 - Firefox 19.0","Mozilla/5.0 (Android 4.2; rv:19.0) Gecko/20121129 Firefox/19.0","Firefox","19","Android","4.2"], ["Android 4.3 - AppleWebKit/536.23","Mozilla/5.0 (Linux; U; Android 4.3; en-us; sdk Build/MR1) AppleWebKit/536.23 (KHTML, like Gecko) Version/4.3 Mobile Safari/536.23","Android Browser","4","Android","4.3"], @@ -73,26 +53,6 @@ var browsers = [ ["Apple iPad 1 - iOS 4_2_1 - Safari 533","Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5","Mobile Safari","5","iPad","4.2.1"], ["Apple iPad 2 - iOS 4_3 - Safari 533","Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5","Mobile Safari","5","iPad","4.3"], ["Apple iPad 2 - iOS 6_0 - Safari 6 (8536.25)","Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25","Mobile Safari","6","iPad","6.0"], -["Arora 0.11.0","Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Arora/0.11.0 Safari/533.3 ","Arora","0","OS/2",undefined], -["Arora 0.11.1 - WebKit","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.10.1","Arora","0","Linux",undefined], -["Arora 0.6.0 - (Vista)","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.6 (Change: )","Arora","0","Windows","Vista"], -["Arora 0.8.0 - (Windows)","Mozilla/5.0 (Windows; U; ; en-NZ) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.8.0","Arora","0",undefined,undefined], -["Arora/0.10.2 (BSD/Haiku)","Mozilla/5.0 (Unknown; U; UNIX BSD/SYSV system; C -) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.10.2","Arora","0","Linux",undefined], -["Ask Jeeves/Teoma","Mozilla/2.0 (compatible; Ask Jeeves/Teoma)",undefined,undefined,undefined,undefined], -["Avant Browser - MSIE 7 (Win XP)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)","Avant ",undefined,"Windows","XP"], -["Avant Browser 1.2","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Avant ","1",undefined,undefined], -["Bahamas - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], -["Baiduspider ","Baiduspider ( http://www.baidu.com/search/spider.htm)","Baidu","spider","Linux","spider.htm"], -["Barnes & Noble Nook Color - (Masked: IDs as: OS_X 10_5_7) - Safari 530.17","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17","Safari","4","Mac","10.5.7"], -["Beamrise - (Win 7) - Webkit 535.8","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Beamrise/17.2.0.9 Chrome/17.0.939.0 Safari/535.8","Chrome","17","Windows","7"], -["Bing Bot 2.0 (renamed Msnbot)","Mozilla/5.0 (compatible; bingbot/2.0 http://www.bing.com/bingbot.htm)",undefined,undefined,undefined,undefined], -["BlackBerry (Google WAP)","BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)",undefined,undefined,"BlackBerry","4.0.0"], -["Bloglines 3.1","Bloglines/3.1 (http://www.bloglines.com)",undefined,undefined,undefined,undefined], -["Bolt 2.8 (webkit 534.6) (Sony Ericsson K800i)","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.800) AppleWebKit/534.6 (KHTML, like Gecko) Version/5.0 Safari/534.6.3","BOLT","2","Windows","XP"], -["C6-01 - Symbian 3 - Safari 525","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC6-01/011.010; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.2 3gpp-gba","WebKit","525","Symbian","3"], -["C7 - Symbian 3 - Safari 525","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC7-00/012.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba","WebKit","525","Symbian","3"], -["Camino 2.2.1 (Firefox 4.0.1) (OS X 10.6 Intel)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1","Camino","2","Mac","10.6"], -["Camino 2.2a1pre (Firefox 4.0.1) (OS X 10.6 Intel)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Camino/2.2a1pre","Camino","2","Mac","10.6"], ["Chrome 10.0.601.0 (Win 7)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Chrome","10","Windows","7"], ["Chrome 10.0.613.0 (64 bit)","Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Chrome/10.0.613.0 Safari/534.15","Chrome","10","Linux","x86_64"], ["Chrome 10.0.613.0 (Ubuntu 32 bit)","Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.613.0 Chrome/10.0.613.0 Safari/534.15","Chromium","10","Linux","10.10"], @@ -151,42 +111,10 @@ var browsers = [ ["Chrome 9.0.597.15 (OS X 10_6_5 Intel)","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.15 Safari/534.13","Chrome","9","Mac","10.6.5"], ["Chrome 9.0.601.0 (Vista)","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Chrome","9","Windows","Vista"], ["Chrome 9.1.0.0 (Ubuntu 64 bit)","Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/9.1.0.0 Safari/540.0","Chrome","9","Linux","10.10"], -["Chromium 25.0.1364 (Ubuntu 32 bit)","Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22","Chromium","25","Linux","Chromium"], -["Chromium 36.0.1985.125 (64 bit)","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.125 Safari/537.36","Chrome","36","Linux","x86_64"], -["Chromium 39.0.2166.2 (32 bit)","Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2166.2 Safari/537.36","Chrome","39","Linux","i686"], -["Chromium 41.0.2227.0 (64 bit)","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36","Chrome","41","Linux","x86_64"], -["Desire - Android 2.1 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.1"], -["Dillo 3.0","Mozilla/4.0 (compatible; Dillo 3.0)","Dillo","3",undefined,undefined], -["DoCoMo 2.0","DoCoMo/2.0 SH901iC(c100;TB;W24H12)",undefined,undefined,undefined,undefined], -["Download Demon","Download Demon/3.5.0.11",undefined,undefined,undefined,undefined], ["Dream - Android 1.5 - Mobile Safari 525","HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], ["Droid - Android 2.0 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.0"], ["Droid V2.2 - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], -["E50 - SymbianOS 9.1 - Safari 413 es50","Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es50","Safari",undefined,"Symbian","9.1"], -["E6-00 - SymbianOS 3 - Safari 533.4","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE6-00/021.002; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.16 Mobile Safari/533.4 3gpp-gba","NokiaBrowser","7","Symbian","3"], -["E63 - SymbianOS 9.2 - UCWEB 8.8 (webkit)","UCWEB/8.8 (SymbianOS/9.2; U; en-US; NokiaE63) AppleWebKit/534.1 UCBrowser/8.8.0.245 Mobile","UCBrowser","8","Symbian","9.2"], -["E65 - SymbianOS 9.1 - Safari 413 es65","Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es65","Safari",undefined,"Symbian","9.1"], -["E7 - Symbian 3 - Safari 525","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE7-00/010.016; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba","WebKit","525","Symbian","3"], -["E70 - SymbianOS 9.1 - Safari 413 es70","Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es70","Safari",undefined,"Symbian","9.1"], -["E90 - SymbianOS 9.2 - Safari 413","Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0","Safari",undefined,"Symbian","9.2"], -["e900 - Opera/Netfront","SEC-SGHE900/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1378; nl; U; ssr)","Opera Mini","2",undefined,undefined], -["ELinks 0.12~pre5-4","ELinks/0.12~pre5-4",undefined,undefined,undefined,undefined], -["ELinks 0.4.3 (NetBSD)","ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)","Links","0","Linux","3.0.2PATCH"], -["Elinks 0.4pre5","ELinks (0.4pre5; Linux 2.6.10-ac7 i686; 80x33)","Links","0","Linux","2.6.10"], -["ELinks 0.9.3 (Kanotix)","ELinks/0.9.3 (textmode; Linux 2.6.9-kanotix-8 i686; 127x41)",undefined,undefined,"Linux","2.6.9"], -["Email Wolf","EmailWolf 1.00",undefined,undefined,undefined,undefined], -["EMobile 7.11 (MSIE 6 - Win CE)","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) ","IE Mobile","7","Windows","CE"], -["Epiphany - WebKit (528.5)","Mozilla/5.0 (X11; U; Linux i686; en-us) AppleWebKit/528.5 (KHTML, like Gecko, Safari/528.5 ) lt-GtkLauncher","Safari",undefined,"Linux","i686"], -["Epiphany 1.2 - Gecko","Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Epiphany/1.2.5","Epiphany","1","Linux",undefined], -["Epiphany 1.4 - Gecko (Ubuntu)","Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)","Epiphany","1","Linux",undefined], -["Epiphany 2.30.0 (OpenBSD)","Mozilla/5.0 (X11; U; OpenBSD arm; en-us) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 Epiphany/2.30.0","Epiphany","2","Linux","arm"], -["EudoraWeb 2.1 (PalmOS)","Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2.1","IE","5","PalmOS","3.0"], -["everyfeed spider 2.0","everyfeed-spider/2.0 (http://www.everyfeed.com)",undefined,undefined,undefined,undefined], -["Evo - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], -["Exabot 3.0","Mozilla/5.0 (compatible; Exabot/3.0; http://www.exabot.com/go/robot) ",undefined,undefined,undefined,undefined], ["Facebook Scraper 1.0","facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)",undefined,undefined,undefined,undefined], -["FAST-WebCrawler 3.8","FAST-WebCrawler/3.8 (crawler at trd dot overture dot com; http://www.alltheweb.com/help/webmaster/crawler)",undefined,undefined,undefined,undefined], -["Firebird 0.6 (SunOs)","Mozilla/5.0 (X11; U; SunOS sun4m; en-US; rv:1.4b) Gecko/20030517 Mozilla Firebird/0.6","Firebird","0","Solaris","sun4"], ["Firefox 0.8","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8","Firefox","0","Linux","i686"], ["Firefox 0.9 (OS X Mach)","Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0 ","Firefox","3","Mac","Mach"], ["Firefox 10.0.1 (64 bit)","Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1","Firefox","10","Linux","x86_64"], @@ -263,20 +191,11 @@ var browsers = [ ["Firefox 7.0a1 (64 bit)","Mozilla/5.0 (X11; Linux x86_64; rv:7.0a1) Gecko/20110623 Firefox/7.0a1","Firefox","7","Linux","x86_64"], ["Firefox 8.0 (32 bit)","Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0","Firefox","8","Linux","i686"], ["Firefox 9.0 (OS X 10.6 Intel)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0","Firefox","9","Mac","10.6"], -["Firefox Fennec 1.0.a1 (Linux arm)","Mozilla/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1","Fennec","1","Linux","armv61"], -["Firefox Fennec 10.0.1 (Maemo arm)","Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1","Fennec","10","Linux","armv7l"], -["Firefox Fennec 2.0.1 (Maemo arm)","Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1","Fennec","2","Linux","armv7l"], -["Fusic LX550","LG-LX550 AU-MIC-LX550/2.0 MMP/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["Gaisbot 3.0","Gaisbot/3.0 (robot@gais.cs.ccu.edu.tw; http://gais.cs.ccu.edu.tw/robot.php)",undefined,undefined,undefined,undefined], ["Galaxy (Verizon) - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], ["Galaxy - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], ["Galaxy - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], ["Galaxy S 3 (SPH-L710) - Android 4.3 - Chrome 32.0.1700.99","Mozilla/5.0 (Linux; Android 4.3; SPH-L710 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36","Chrome Mobile",undefined,"Android","4.3"], ["Galaxy S II - Android 4.0.3 - Mobile Safari 534.30","Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","Android Browser","4","Android","4.0.3"], -["Galeon 1.3","Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Galeon/1.3.14",undefined,undefined,"Linux",undefined], -["Galeon 1.3.15 (FreeBSD)","Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.15","Mozilla","5","Linux","i386"], -["Galeon 2.0.6 (Gentoo)","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080716 (Gentoo) Galeon/2.0.6","Mozilla","5","Linux",undefined], -["Galeon 2.0.6 (Ubuntu)","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Galeon/2.0.6 (Ubuntu 2.0.6-2)",undefined,undefined,"Linux","2.0.6-2"], ["Google AdsBot 1.0","AdsBot-Google ( http://www.google.com/adsbot.html)",undefined,undefined,undefined,undefined], ["Google Feed Fetcher","FeedFetcher-Google; ( http://www.google.com/feedfetcher.html)",undefined,undefined,undefined,undefined], ["Google Toolbar 4.0 (XP - MSIE 6)","Mozilla/4.0 (compatible; GoogleToolbar 4.0.1019.5266-big; Windows XP 5.1; MSIE 6.0.2900.2180)","IE","6","Windows"," X"], @@ -290,29 +209,8 @@ var browsers = [ ["Googlebot-Mobile 2.1 (ID: SAMSUNG-SGH-E250)","SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; http://www.google.com/bot.html)",undefined,undefined,undefined,undefined], ["Googlebot-News","Googlebot-News",undefined,undefined,undefined,undefined], ["Googlebot-Video","Googlebot-Video/1.0",undefined,undefined,undefined,undefined], -["Gregarius 0.5.2","Gregarius/0.5.2 ( http://devlog.gregarius.net/docs/ua)",undefined,undefined,undefined,undefined], -["Grub-Client","grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)",undefined,undefined,undefined,undefined], -["Grub-Client","grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)",undefined,undefined,undefined,undefined], -["GT-P7100 tablet - Android 3.0.1 - AppleWebKit 534.13","Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Android Browser","4","Android","3.0.1"], -["gulperbot","Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu/~maxim/cgi-bin/Link/GulperBot)",undefined,undefined,undefined,undefined], ["Hero - Android 1.5 - Mobile Safari 525.20","Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], -["HP Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40.1","Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0","Safari",undefined,"Linux",undefined], ["HTMLParser (1.60)","HTMLParser/1.6",undefined,undefined,undefined,undefined], -["Iceape (SeaMonkey) 1.1.9 (Debian)","Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.8.1.13) Gecko/20080313 Iceape/1.1.9 (Debian-1.1.9-5)","Iceape","1","Linux","1.1.9-5"], -["Iceape (SeaMonkey) 2.0.8 (Debian)","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.13) Gecko/20100916 Iceape/2.0.8","Iceape","2","Linux","x86_64"], -["Iceweasel (Firefox) 14.0.1","Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1","Iceweasel","14","Linux","i686"], -["Iceweasel (Firefox) 15.02 (Debian)","Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.02","Iceweasel","15","Linux","Iceweasel"], -["Iceweasel (Firefox) 19.0.2 (Debian 64)","Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 Iceweasel/19.0.2","Iceweasel","19","Linux","x86_64"], -["Iceweasel (Firefox) 3.6.3 (Debian)","Mozilla/5.0 (X11; U; Linux i686; pt-PT; rv:1.9.2.3) Gecko/20100402 Iceweasel/3.6.3 (like Firefox/3.6.3) GTB7.0","Iceweasel","3","Linux","i686"], -["Iceweasel (Firefox) 5.0 (Debian 64)","Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 Iceweasel/5.0","Iceweasel","5","Linux","x86_64"], -["Iceweasel (Firefox) 6.0a2 (Debian 32)","Mozilla/5.0 (X11; Linux i686; rv:6.0a2) Gecko/20110615 Firefox/6.0a2 Iceweasel/6.0a2","Iceweasel","6","Linux","i686"], -["Iconia Tablet - Android - 3.0.1 - AppleWebKit 534.13","Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Android Browser","4","Android","3.0.1"], -["IEMobile 10.0 - WinPhone OS 8.0 - ARM","Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch) ","IE Mobile","10","Windows Phone","8.0"], -["IEMobile 6.12 (Win CE) (with zune id)","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)","IE Mobile","6","Windows","CE"], -["IEMobile 7.0 (MSIE 7.0) - WinPhone OS 7.0 - Asus Galaxy","Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6","IE Mobile","7","Windows Phone","7.0"], -["IEMobile 7.5 (MSIE 9 - WP7.5)","Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)","IE Mobile","9","Windows Phone","7.5"], -["IEMobile 9.0 - WinPhone OS 7.5","Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)","IE Mobile","9","Windows Phone","7.5"], -["Incredible - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], ["iOS 1.0 - iPhone - Safari 419.3","Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420 (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3","Mobile Safari","3","Mac",undefined], ["iOS 2.0 - iPhone - Safari 525.200","Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200","Mobile Safari","3","iPhone","2.0"], ["iOS 2.2.1 - iPod - Safari 525.20","Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20","Mobile Safari","3","iPhone","2.2.1"], @@ -340,195 +238,12 @@ var browsers = [ ["iPod Touch - iOS 2.2.1 - Safari 525.20","Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20","Mobile Safari","3","iPhone","2.2.1"], ["iPod Touch - iOS 3_1_1 - Safari 528.16","Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7C145","WebKit","528","iPhone","3.1.1"], ["iPod Touch - iOS 7_1 - Safari 7.0/537.51.2","Mozilla/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D167 Safari/123E71C","Mobile Safari","7","iPhone","7.1"], -["iTunes 4.2 (OS X 10.2 PPC)","iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)",undefined,undefined,"Mac","10.2"], -["iTunes 4.2 (OS X 10.2 PPC)","iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)",undefined,undefined,"Mac","10.2"], -["iTunes 9.0.2 (Windows)","iTunes/9.0.2 (Windows; N)",undefined,undefined,undefined,undefined], -["iTunes 9.0.3 (OS X 10_6_2)","iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)",undefined,undefined,"Mac","10.6.2"], -["Java 1.6.0_13","Java/1.6.0_13",undefined,undefined,undefined,undefined], -["Jet","SAMSUNG-S8000/S8000XXIF3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 FirePHP/0.3","Jasmine","1",undefined,undefined], -["K310iv","SonyEricssonK310iv/R4DA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0","NetFront","3",undefined,undefined], -["K550i","SonyEricssonK550i/R1JD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["K610i","SonyEricssonK610i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["K750i","SonyEricssonK750i/R1CA Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["K800 - Opera 9.8","Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823/1428; U; en) Presto/2.2.0","Opera Mini","5",undefined,undefined], -["K800i","SonyEricssonK800i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0","NetFront","3",undefined,undefined], -["K810i","SonyEricssonK810i/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["Kindle 2.0 - Linux","Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)","Kindle","2","Linux","2.6.22"], -["Kindle 3.0 - AppleWebKit 528.5 - Linux","Mozilla/5.0 (Linux U; en-US) AppleWebKit/528.5 (KHTML, like Gecko, Safari/528.5 ) Version/4.0 Kindle/3.0 (screen 600x800; rotate)","Kindle","3","Linux","U"], -["Kindle Fire - Android 4.0.3 - Silk 2.1 (AppleWebKit 535.19)","Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true","Silk","2","Android","4.0.3"], -["Kindle Fire - Silk/2.1 (AppleWebKit 535.19) - Android","Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true","Silk","2","Android","4.0.3"], -["Konqueror 3 rc4 - khtml","Konqueror/3.0-rc4; (Konqueror/3.0-rc4; i686 Linux;;datecode)","Konqueror","3","Linux",undefined], -["Konqueror 3.3 - khtml (Gentoo)","Mozilla/5.0 (compatible; Konqueror/3.3; Linux 2.6.8-gentoo-r3; X11;","Konqueror","3","Linux","r3"], -["Konqueror 3.5 - khtml (Debian)","Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.30-7.dmz.1-liquorix-686; X11) KHTML/3.5.10 (like Gecko) (Debian package 4:3.5.10.dfsg.1-1 b1)","Konqueror","3","Linux","package"], -["Konqueror 3.5 - khtml (NetBSD 4.0)","Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD 4.0_RC3; X11) KHTML/3.5.7 (like Gecko)","Konqueror","3","Linux","4.0_RC3"], -["Konqueror 3.5.1 - khtml (SunOS)","Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.1 (like Gecko)","Konqueror","3","Solaris",undefined], -["Konqueror 3.5.6 - khtml (Kubuntu)","Mozilla/5.0 (compatible; Konqueror/3.5; Linux; en_US) KHTML/3.5.6 (like Gecko) (Kubuntu)","Konqueror","3","Linux",undefined], -["Konqueror 4.1 - khtml (DragonFly)","Mozilla/5.0 (compatible; Konqueror/4.1; DragonFly) KHTML/4.1.4 (like Gecko)","Konqueror","4","Linux",undefined], -["Konqueror 4.1 - khtml (OpenBSD)","Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)","Konqueror","4","Linux",undefined], -["Konqueror 4.3 - khtml (Slackware 13)","Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.4 (like Gecko) Slackware/13.0","Konqueror","4","Linux","13.0"], -["Konqueror 4.3.1 - khtml (Fedora 11)","Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.1 (like Gecko) Fedora/4.3.1-3.fc11","Konqueror","4","Linux","4.3.1-3.fc11"], -["Konqueror 4.4.3 - khtml (Fedora 12)","Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.1 (like Gecko) Fedora/4.4.1-1.fc12","Konqueror","4","Linux","4.4.1-1.fc12"], -["Konqueror 4.4.3 - khtml (Kubuntu)","Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu","Konqueror","4","Linux",undefined], -["Konqueror 4.4.3 - khtml (Kubuntu)","Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu","Konqueror","4","Linux",undefined], -["Konqueror 4.5 (Win XP - KDE native)","Mozilla/5.0 (compatible; Konqueror/4.5; Windows) KHTML/4.5.4 (like Gecko)","Konqueror","4",undefined,undefined], -["Konqueror 4.5.4 - khtml (FreeBSD)","Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)","Konqueror","4","Linux",undefined], -["Konqueror 4.5.4 - khtml (NetBSD 5.0.2)","Mozilla/5.0 (compatible; Konqueror/4.5; NetBSD 5.0.2; X11; amd64; en_US) KHTML/4.5.4 (like Gecko)","Konqueror","4","Linux","5.0.2"], -["Konqueror 4.8.4 - khtml (Debian)","Mozilla/5.0 (X11; Linux 3.8-6.dmz.1-liquorix-686) KHTML/4.8.4 (like Gecko) Konqueror/4.8","Konqueror","4","Linux","3.8"], -["Konqueror 4.9 - khtml","Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9","Konqueror","4","Linux",undefined], -["L7","MOT-L7v/08.B7.5DR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",undefined,undefined,undefined,undefined], -["Legend - Android 2.1 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.1"], -["libwww-perl 5.820","libwww-perl/5.820",undefined,undefined,undefined,undefined], -["Links 0.9.1","Links/0.9.1 (Linux 2.4.24; i386;)",undefined,undefined,"Linux","2.4.24"], -["Links 2.1 (FreeBSD)","Links (2.1pre15; FreeBSD 5.3-RELEASE i386; 196x84)","Links","2","Linux","5.3"], -["Links 2.1","Links (2.1pre15; Linux 2.4.26 i686; 158x61)","Links","2","Linux","2.4.26"], -["Links 2.3pre1","Links (2.3pre1; Linux 2.6.38-8-generic x86_64; 170x48)","Links","2","Linux","2.6.38"], -["Links 2.8.7","Lynx/2.8.7dev.4 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8d","Lynx","2",undefined,undefined], -["Linux - Fennec 2.0.1 (686 on x86_64)","Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1","Fennec","2","Linux","i686"], -["Lumia 620 ARM - Windows Phone OS 8.0 - IEMobile 10.0","Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)","IE Mobile","10","Windows Phone","8.0"], -["Lynx 2.8.5rel.1","Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/0.8.12","Lynx","2","Linux","TLS"], -["Maemo - Fennec 2.0.1 (arm)","Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1","Fennec","2","Linux","armv7l"], -["Magic - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3","Android Browser","3","Android","1.5"], -["Maxthon 2.0 (Trident/MSIE) (Win 7)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Maxthon 2.0)","Maxthon","2","Windows","7"], -["Maxthon 3.0.8.2 (Webkit) (Vista)","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Maxthon/3.0.8.2 Safari/533.1","Maxthon","3","Windows","Vista"], -["Maxthon 4.0.0.2000 (Webkit) (Win7 64 bit)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML like Gecko) Maxthon/4.0.0.2000 Chrome/22.0.1229.79 Safari/537.1","Maxthon","4","Windows","7"], -["MDA Pro - Win CE","Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; MDA Pro/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1)","IE","4","Windows","CE"], -["Midori 0.1.10 (Webkit 531)","Midori/0.1.10 (X11; Linux i686; U; en-us) WebKit/(531).(2) ","Midori","0","Linux","i686"], -["Milestone - Android 2.0 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.0"], -["Milestone Android 2.0.1 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.0.1"], -["Minefield (Firefox Nightly) 4.0b2pre","Mozilla/5.0 (X11; Linux x86_64; en-US; rv:2.0b2pre) Gecko/20100712 Minefield/4.0b2pre","Mozilla","5","Linux","x86_64"], -["Minefield (Firefox nightly) 4.0b4pre (Win 7)","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre","Mozilla","5","Windows","7"], -["Minimo 0.016 (Win CE)","Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/20060610 Minimo/0.016","Minimo","0","Windows","CE 5.1"], -["Minimo 0.020 (Linux)","Mozilla/5.0 (X11; U; Linux armv6l; rv 1.8.1.5pre) Gecko/20070619 Minimo/0.020","Minimo","0","Linux","armv6l"], -["Minimo 0.025 (Linux arm)","Mozilla/5.0 (X11; U; Linux arm7tdmi; rv:1.8.1.11) Gecko/20071130 Minimo/0.025","Minimo","0","Linux","arm7tdmi"], -["Mobile Safari 530.17 (Android)","Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.0"], -["Moment - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; en-us; SPH-M900 Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], ["Motorola Xoom - Android 3.0.1 - Mobile Safari 523.12","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Android Browser","3","Android","3.0"], -["Mozilla 1.6 (Debian)","Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7",undefined,undefined,"Linux","1.6-7"], -["Mozilla 1.7 (FreeBSD)","Mozilla/5.0 (X11; U; FreeBSD; i386; en-US; rv:1.7) Gecko",undefined,undefined,"Linux",undefined], -["Mozilla 1.9.0 (Debian)","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092814 (Debian-3.0.1-1)","Mozilla","5","Linux","3.0.1-1"], -["Mozilla 1.9a3pre","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko/20070330","Mozilla","5","Linux","i686"], -["MS URL Control","Microsoft URL Control - 6.00.8862",undefined,undefined,undefined,undefined], -["MSIE 10 - compat mode (Win 7 64)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)","IE","7","Windows","7"], -["MSIE 10 - standard mode (Win 7 64)","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)","IE","10","Windows","7"], -["MSIE 10.6 - (Win 7 32)","Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0","IE","10","Windows","7"], -["MSIE 11.0 (compatibility mode IE 7)- (Win 8.1 32)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)","IE","7","Windows","8.1"], -["MSIE 11.0 - (Win 7 64)","Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko","IE","11","Windows","7"], -["MSIE 11.0 - (Win 8.1 32)","Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko","IE","11","Windows","8.1"], -["MSIE 5.15 (OS 9)","Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)","IE","5",undefined,undefined], -["MSIE 5.5 (Win 2000)","Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )","IE","5","Windows","2000"], -["MSIE 5.5 (Win ME)","Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)","IE","5","Windows","98"], -["MSIE 6 (Win XP)","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)","IE","6","Windows","XP"], -["MSIE 7 (Vista)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)","IE","7","Windows","Vista"], -["MSIE 8 - compat mode (Vista)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)","IE","7","Windows","Vista"], -["MSIE 8 - standard mode (Vista)","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)","IE","8","Windows","Vista"], -["MSIE 8 - standard mode (Win 7)","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)","IE","8","Windows","7"], -["MSIE 8 - standard mode (Win XP)","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)","IE","8","Windows","XP"], -["MSIE 9 - compat mode (Vista)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)","IE","7","Windows","Vista"], -["MSIE 9 - standard mode (NT 6.2 32 Win 8)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/5.0)","IE","9","Windows","8"], -["MSIE 9 - standard mode (NT 6.2 64 Win 8)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/5.0)","IE","9","Windows","8"], -["MSIE 9 - standard mode (Win 7)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)","IE","9","Windows","7"], -["MSIE 9 - standard mode (with Zune plugin) (NT 6.1 Win 7)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)","IE","9","Windows","7"], -["Msnbot 0.11 (beta version)","msnbot/0.11 ( http://search.msn.com/msnbot.htm)",undefined,undefined,"Linux",".msn.com"], -["Msnbot 1.0 (current version)","msnbot/1.0 ( http://search.msn.com/msnbot.htm)",undefined,undefined,"Linux",".msn.com"], -["Msnbot 1.1","msnbot/1.1 ( http://search.msn.com/msnbot.htm)",undefined,undefined,"Linux",".msn.com"], -["Msnbot-Media 1.1","msnbot-media/1.1 ( http://search.msn.com/msnbot.htm)",undefined,undefined,"Linux",".msn.com"], -["Multizilla 1.6 (Win XP)","Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a",undefined,undefined,"Windows"," X"], -["N70","NokiaN70-1/5.0609.2.0.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0",undefined,undefined,undefined,undefined], -["N73 (Service)","NokiaN73-1/3.0649.0.0.1 Series60/3.0 Profile/MIDP2.0 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["N73 - SymbianOS 9.1 - Safari 413","Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413","Safari",undefined,"Symbian","9.1"], -["N8 - Symbian 3 - Safari 525","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba","WebKit","525","Symbian","3"], -["N80 - SymbianOS 9.1 - Safari 413","Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413","Safari",undefined,"Symbian","9.1"], -["N9 - MeeGo - Safari 534.13","Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13","NokiaBrowser","8","MeeGo",undefined], -["N93 - SymbianOS 9.1 - Safari 413","Mozilla/5.0 (SymbianOS/9.1; U; de) AppleWebKit/413 (KHTML, like Gecko) Safari/413","Safari",undefined,"Symbian","9.1"], -["N95 - SymbianOS 9.2 - Safari 413","Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/10.0.018; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.3.0.0.0","Safari",undefined,"Symbian","9.2"], -["N950 - MeeGo - Safari 534.13","Mozilla/5.0 (MeeGo; NokiaN950-00/00) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13","NokiaBrowser","8","MeeGo",undefined], -["N97 - SymbianOS 9.4 - WicKed 7.1.12344","Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344","WebKit","525","Symbian","9.4"], -["Namoroka 3.6.15 (Firefox) (NetBSD)","Mozilla/5.0 (X11; U; NetBSD amd64; en-US; rv:1.9.2.15) Gecko/20110308 Namoroka/3.6.15","Mozilla","5","Linux","amd64"], -["NEC n410i i-Mode","portalmmm/2.0 N410i(c20;TB) ",undefined,undefined,undefined,undefined], -["Net Positive 2.1","Mozilla/3.0 (compatible; NetPositive/2.1.1; BeOS)",undefined,undefined,"BeOS",undefined], -["NetFront 3.0 (PalmOS)","Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.0","NetFront","3","PalmOS","sony"], -["Netscape 2.02 (Win 95)","Mozilla/2.02E (Win95; U)",undefined,undefined,"Windows","95"], -["Netscape 3.01 gold (Win 95)","Mozilla/3.01Gold (Win95; I)",undefined,undefined,"Windows","95"], -["Netscape 4.77 (Irix)","Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)",undefined,undefined,undefined,undefined], -["Netscape 4.8 (SunOS)","Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)",undefined,undefined,"Solaris",undefined], -["Netscape 4.8 (Win XP)","Mozilla/4.8 [en] (Windows NT 5.1; U)",undefined,undefined,"Windows","XP"], -["Netscape 7.1 (Win 98)","Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)","Netscape","7","Windows","98"], -["NetSurf 1.2 (NetBSD)","NetSurf/1.2 (NetBSD; amd64)","NetSurf","1",undefined,undefined], ["Nexus 5 - Android 4.4 - AppleWebKit/536.23","Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36","Chrome Mobile",undefined,"Android","4.4"], ["Nexus 7 - Android 4.4.4 - AppleWebKit/537.36","Mozilla/5.0 (Linux; Android 4.4.4; Nexus 7 Build/KTU84P) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.135 Safari/537.36","Chrome","36","Android","4.4.4"], ["Nexus One - Android 2.1 - Mobile Safari 530.17","Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17","Android Browser","4","Android","2.1"], ["Nexus One - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], -["Nokia (6100) WAP","Nokia6100/1.0 (04.01) Profile/MIDP-1.0 Configuration/CLDC-1.0",undefined,undefined,undefined,undefined], -["Nokia 6630","Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1",undefined,undefined,"Symbian","8.0"], -["Nook 2 (limited data)","nook browser/1.0",undefined,undefined,undefined,undefined], -["Nook Color - Android - IDs as: OS_X 10_5_7 - Safari 530.17","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17","Safari","4","Mac","10.5.7"], -["Nook Tablet - Android 2.3.4 - Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1","Android Browser","4","Android","2.3.4"], -["Novarra-Vision 6.9","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 MG(Novarra-Vision/6.9)","Firefox","1","Linux","i686"], -["Offline Explorer 2.5","Offline Explorer/2.5",undefined,undefined,undefined,undefined], -["Omniweb 563.15 (OS X PPC)","Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.15","OmniWeb","563","Mac",undefined], -["Omniweb 622.8.0 (OS X 10_5_6 Intel)","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0","OmniWeb","622","Mac","10.5.6"], -["Omniweb 622.8.0 (OS X Intel)","Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941","OmniWeb","622","Mac",undefined], -["Opera 10.00 Mobi - SymbOS","Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00","Opera Mobile","10","Symbian",undefined], -["Opera 10.10 (id as 9.8) (Server 2003)","Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10","Opera","10","Windows","XP"], -["Opera 10.10 (id as 9.8)","Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.10","Opera","10","Linux","i686"], -["Opera 10.61 (id as 9.8) (OS X Intel)","Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.61","Opera","10","Mac",undefined], -["Opera 10.61 Mini 5.1 (J2ME/MIDP)","Opera/10.61 (J2ME/MIDP; Opera Mini/5.1.21219/19.999; en-US; rv:1.9.3a5) WebKit/534.5 Presto/2.6.30","Opera Mini","5",undefined,undefined], -["Opera 11.00 (id as 9.8) (OS X Intel)","Opera/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto/2.7.62 Version/11.00","Opera","11","Mac","10.4.11"], -["Opera 11.00 (id as 9.8)","Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00","Opera","11","Linux","x86_64"], -["Opera 11.01 (id as 9.8) (Win 7)","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.7.62 Version/11.01","Opera","11","Windows","7"], -["Opera 11.10 (id as 9.8) (Win XP)","Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10","Opera","11","Windows","XP"], -["Opera 11.1010 Mini 7.5.33361 (Android)","Opera/9.80 (Android; Opera Mini/7.5.33361/31.1543; U; en) Presto/2.8.119 Version/11.1010","Opera Mini","7","Android",undefined], -["Opera 11.52 (id as 9.8) (OS X Intel)","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52","Opera","11","Mac","10.6.8"], -["Opera 12.00 (id as 9.8) (Win 7)","Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00","Opera","12","Windows","7"], -["Opera 12.10 (FreeBSD)","Opera/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto/2.12.388 Version/12.10","Opera","12","Linux","8.1"], -["Opera 12.14 (id as 9.8) (Win Vista)","Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14","Opera","12","Windows","Vista"], -["Opera 12.16 (id as 9.8) (Win 7)","Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16","Opera","12","Windows","7"], -["Opera 12.16 (id as 9.8, last presto)","Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16","Opera","12","Linux","i686"], -["Opera 14.0.1116.4 (Webkit 537.36) (Win 7)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.12 Safari/537.36 OPR/14.0.1116.4","Opera","14","Windows","7"], -["Opera 15.0.1147.24 (Webkit 537.36) (Win 7)","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24 (Edition Next)","Opera","15","Windows","7"], -["Opera 18.0.1284.49 (Webkit 537.36) (Win 8)","Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49","Opera","18","Windows","8.1"], -["Opera 19.0.1326.56 (Webkit 537.36) (Win 7)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.56","Opera","19","Windows","7"], -["Opera 20.0.1387.91 (Webkit 537.36) (Win 7 64 bit)","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 OPR/20.0.1387.91","Opera","20","Windows","7"], -["Opera 20.0.1396 (Webkit 537.36)","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172","Opera","20","Linux","x86_64"], -["Opera 7.23","MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23","Opera","7","Linux",undefined], -["Opera 7.5 (Win ME)","Opera/7.50 (Windows ME; U) [en]","Opera","7","Windows"," M"], -["Opera 7.5 (Win XP)","Opera/7.50 (Windows XP; U)","Opera","7","Windows"," X"], -["Opera 7.51 (Win XP)","Opera/7.51 (Windows NT 5.1; U) [en]","Opera","7","Windows","XP"], -["Opera 8.0 (Win 2000)","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0","Opera","8","Windows","2000"], -["Opera 9.0 (OS X PPC)","Opera/9.0 (Macintosh; PPC Mac OS X; U; en)","Opera","9","Mac",undefined], -["Opera 9.20 (OS X Intel)","Opera/9.20 (Macintosh; Intel Mac OS X; U; en)","Opera","9","Mac",undefined], -["Opera 9.25 - (Vista)","Opera/9.25 (Windows NT 6.0; U; en)","Opera","9","Windows","Vista"], -["Opera 9.51 beta (Windows)","Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)","Opera","9",undefined,undefined], -["Opera 9.60 Mini 4.1 beta (Windows)","Opera/9.60 (J2ME/MIDP; Opera Mini/4.1.11320/608; U; en) Presto/2.2.0","Opera Mini","4",undefined,undefined], -["Opera 9.60 Mini 4.2 J2ME/MIDP","Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14320/554; U; cs) Presto/2.2.0","Opera Mini","4",undefined,undefined], -["Opera 9.64 (Linux Mint)","Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1","Opera","9","Linux",undefined], -["Opera 9.64 (OS X PPC)","Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1","Opera","9","Mac",undefined], -["P900 - Opera 8.0 Mini","Opera/8.01 (J2ME/MIDP; Opera Mini/1.0.1479/HiFi; SonyEricsson P900; no; U; ssr)","Opera Mini","1",undefined,undefined], -["Palm WebOS 1.3 - Safari 525","Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0","Safari","1","webOS","1.3"], -["PalmSource hspr-H102 - Palm Treo 650","Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320","Blazer","4","Windows","98"], -["Peach 1.01","Peach/1.01 (Ubuntu 8.04 LTS; U; en)",undefined,undefined,"Linux","8.04"], -["Phoenix 0.2 (NT 4.0)","Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021001 Phoenix/0.2","Phoenix","0","Windows","NT 4.0"], -["Playbook (tablet) - OS 2.1.0 - Safari 536.2+","Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+","Safari","7","RIM Tablet OS","2.1.0"], -["Playstation 3 (1.10)","Mozilla/5.0 (PLAYSTATION 3; 1.10)",undefined,undefined,"Linux","3"], -["Playstation 3 (2.00)","Mozilla/5.0 (PLAYSTATION 3; 2.00)",undefined,undefined,"Linux","3"], -["Polaris 6.01","POLARIS/6.01 (BREW 3.1.5; U; en-us; LG; LX265; POLARIS/6.01/WAP) MMP/2.0 profile/MIDP-2.1 Configuration/CLDC-1.1","POLARIS","6",undefined,undefined], -["Pre3 - webOS 2.2.4 - wOSBrowser 221.56","Mozilla/5.0 (Linux; webOS/2.2.4; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) webOSBrowser/221.56 Safari/534.6 Pre/3.0 ","Safari",undefined,"webOS","2.2.4"], -["PSP (2.00)","Mozilla/4.0 (PSP (PlayStation Portable); 2.00)",undefined,undefined,"Linux","Portable"], -["Puffin 2.9174AP - Android - (AP=Android Phone)","Mozilla/5.0 (X11; U; Linux x86_64; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AP","Chrome","11","Linux","x86_64"], -["Puffin 2.9174AT - Android - (AT=Android Tablet)","Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT","Chrome","11","Linux","x86_64"], -["Puffin 3.9174IP - iOS 6_1 - (IP=iphone)","Mozilla/5.0 (iPod; U; CPU iPhone OS 6_1 like Mac OS X; en-HK) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IP Mobile ","Chrome","11","iPhone","6.1"], -["Puffin 3.9174IT -(says Linux) - (IT=iOS tablet)","Mozilla/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IT ","Chrome","11","Linux","x86_64"], -["Puffin2.0.5603M - Linux - (M=mobile)","Mozilla/5.0 (X11; U; Linux i686; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.0.5603M","Chrome","11","Linux","i686"], ["Python-urllib 2.5","Python-urllib/2.5",undefined,undefined,undefined,undefined], -["QupZilla 1.2.0 (Webkit 534.34)","Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) QupZilla/1.2.0 Safari/534.34","Safari",undefined,"Linux","i686"], -["QupZilla 1.3.1","Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) QupZilla/1.3.1 Safari/533.3 ","Safari",undefined,"OS/2",undefined], -["Razr V9","MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0",undefined,undefined,undefined,undefined], -["ReqwirelessWeb 3.5","Mozilla/4.0 (compatible; MSIE 6.0; j2me) ReqwirelessWeb/3.5","IE","6",undefined,undefined], -["RIM (Blackberry) Playbook - OS 2.1.0 - Safari 536.2+","Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+","Safari","7","RIM Tablet OS","2.1.0"], -["RIZR - Symbian OS - Opera 8.65","MOTORIZR-Z8/46.00.00 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 356) Opera 8.65 [it] UP.Link/6.3.0.0.0","Opera","8","Symbian",undefined], -["Roku DVP-4.1","Roku/DVP-4.1 (024.01E01250A)",undefined,undefined,undefined,undefined], -["Rumor2 LX265 - Polaris","POLARIS/6.01(BREW 3.1.5;U;en-us;LG;LX265;POLARIS/6.01/WAP;)MMP/2.0 profile/MIDP-201 Configuration /CLDC-1.1","POLARIS","6",undefined,undefined], -["S500i","SonyEricssonS500i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], ["Safari 125.8 (OS X PPC)","Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8","Safari","1","Mac",undefined], ["Safari 312.3 (OS X PPC)","Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit/312.5 (KHTML, like Gecko) Safari/312.3","Safari","1","Mac",undefined], ["Safari 419.3 (OS X PPC)","Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3","Safari","2","Mac",undefined], @@ -555,92 +270,20 @@ var browsers = [ ["Samsung Galaxy - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], ["Samsung Galaxy - Android 2.2 - Mobile Safari 533.1","Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Android Browser","4","Android","2.2"], ["Samsung GT-P7100 - Android 3.0.1 - AppleWebKit 534.13","Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13","Android Browser","4","Android","3.0.1"], -["Satio - Safari 525","Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 SonyEricssonP100/01; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525","Safari","3","Symbian","9.4"], -["SeaMonkey (Mozilla) 2.0.12 (Win 7)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.17) Gecko/20110123 (like Firefox/3.x) SeaMonkey/2.0.12","Firefox","3","Windows","7"], -["SeaMonkey (Mozilla) 2.7.1 (NT 5.2)","Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1","Firefox","10","Windows","XP"], -["SeaMonkey (Mozilla) 2.9 (Win7 64 bit)","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120422 Firefox/12.0 SeaMonkey/2.9","Firefox","12","Windows","7"], -["SeaMonkey 1.1.18 (Win XP)","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090825 SeaMonkey/1.1.18","SeaMonkey","1","Windows","XP"], -["Seamonkey 1.1.8 (Mozilla) (SunOS 32bit)","Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.8.1.12) Gecko/20080303 SeaMonkey/1.1.8","SeaMonkey","1","Solaris","i86"], -["SeaMonkey 1.5a","Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060702 SeaMonkey/1.5a","SeaMonkey","1","BeOS",undefined], -["SeaMonkey 2.0.12 (Mozilla)","Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.17) Gecko/20110123 SeaMonkey/2.0.12","SeaMonkey","2","Linux","x86_64"], -["SeaMonkey 2.21 - OS/2 Warp 4.5","Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0 SeaMonkey/2.21 ","Firefox","24","OS/2",undefined], -["Seamonkey 2.25 (Firefox/28.0) (FreeBSD)","Mozilla/5.0 (X11; FreeBSD i386; rv:28.0) Gecko/20100101 Firefox/28.0 SeaMonkey/2.25","Firefox","28","Linux","i386"], -["SeaMonkey 2.7.1 (Mozilla)","Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1","Firefox","10","Linux","i686"], -["SeaMonkey 2.7.1 (OS X 10.5 - Mozilla)","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1","Firefox","10","Mac","10.5"], -["SeaMonkey 2.7.2 - OS/2 Warp 4.5","Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20130108 Firefox/10.0.12 SeaMonkey/2.7.2","Firefox","10","OS/2",undefined], -["SeaMonkey 2.9.1 (Mozilla)","Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120502 Firefox/12.0 SeaMonkey/2.9.1","Firefox","12","Linux","i686"], -["Sensation - Android 4.0.3 - Mobile Safari 534.30","Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","Android Browser","4","Android","4.0.3"], -["SGH X210 (WML)","SEC-SGHX210/1.0 UP.Link/6.3.1.13.0",undefined,undefined,undefined,undefined], -["SGH-A867 - Netfront","SAMSUNG-SGH-A867/A867UCHJ3 SHP/VPP/R5 NetFront/35 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1 UP.Link/6.3.0.0.0","NetFront","35",undefined,undefined], -["Shadowfox 7.0 (Mozilla)","Mozilla/5.0 (X11; U; Linux x86_64; us; rv:1.9.1.19) Gecko/20110430 shadowfox/7.0 (like Firefox/7.0","Firefox","7","Linux","x86_64"], -["Silk 1.0.13 (AppleWebKit533.16) 2.9 (Mac OS X 10_6_3)","Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true","Silk","1","Mac","10.6.3"], -["SM-T537A - Android 4.4.2 - Chrome 35.0.1916.141","Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36","Chrome","35","Android","4.4.2"], -["Spica - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; fr-fr; GT-I5700 Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], -["ST7377 - Win XP - Opera 9.5","HTC-ST7377/1.59.502.3 (67150) Opera/9.50 (Windows NT 5.1; U; en) UP.Link/6.3.1.17.0","Opera","9","Windows","XP"], -["SuperBot 4.4.0 (Win XP)","SuperBot/4.4.0.60 (Windows XP)",undefined,undefined,"Windows"," X"], -["Swiftfox 2.0","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0 (Swiftfox)","Swiftfox",undefined,"Linux","i686"], -["Swiftfox 3.6.3","Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko/20100406 Firefox/3.6.3 (Swiftfox)","Swiftfox",undefined,"Linux","i686"], -["Symbian 3 - N8 - Safari 525","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba","WebKit","525","Symbian","3"], -["Symbian 3 - Nokia X7 - Safari 533.4","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba","NokiaBrowser","7","Symbian","3"], -["SymbianOS 9.2 - Nokia E90 - Safari","Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0","Safari",undefined,"Symbian","9.2"], -["SymbianOS 9.4 - Nokia N97 - WicKed 7.1.12344","Mozilla/5.0 (SymbianOS 9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344","WebKit","525","Symbian","9.4"], -["SymbOS - Opera 10.00 Mobi","Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00","Opera Mobile","10","Symbian",undefined], ["T-Mobile G1 - Android 1.0 - Mobile Safari 523.12.2","Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Android Browser","3","Android","1.0"], ["T-Mobile G1 - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1","Android Browser","3","Android","1.5"], ["T-Mobile G2 - Android 1.5 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.5"], -["T100 (WML)","SonyEricssonT100/R101",undefined,undefined,undefined,undefined], -["T610","SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.0",undefined,undefined,undefined,undefined], -["T650i","SonyEricssonT650i/R7AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["T68 (WML)","SonyEricssonT68/R201A",undefined,undefined,undefined,undefined], -["Tattoo - Android 1.6 - Mobile Safari/525.20.1","Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.6"], -["Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40.1","Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0","Safari",undefined,"Linux",undefined], -["Treo 650 - PalmSource","Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320","Blazer","4","Windows","98"], -["UCBrowser 2.9.0 - Trident/MSIE 9.0 - WindowsPhone 7","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7) UCBrowser/2.9.0.263","IE","9","Windows","7"], -["UCBrowser 8.6.1 - Webkit 533 - Android 2.3.3","Mozilla/5.0 (Linux; U; Android 2.3.3; en-us ; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.6.1.262/145/355","UCBrowser","8","Android","2.3.3"], -["Uzbl (Webkit 1.3)","Uzbl (Webkit 1.3) (Linux i686 [i686])",undefined,undefined,"Linux","i686"], -["V177","MOT-V177/0.1.75 UP.Browser/6.2.3.9.c.12 (GUI) MMP/2.0 UP.Link/6.3.1.13.0",undefined,undefined,undefined,undefined], -["Viewty","LG-GC900/V10a Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.1",undefined,undefined,undefined,undefined], -["Vodafone 1.0","Vodafone/1.0/V802SE/SEJ001 Browser/SEMC-Browser/4.1",undefined,undefined,undefined,undefined], ["W3C (X)HTML Validator (1.305.2.12)","W3C_Validator/1.305.2.12 libwww-perl/5.64",undefined,undefined,undefined,undefined], ["W3C (X)HTML Validator (1.654)","W3C_Validator/1.654",undefined,undefined,undefined,undefined], ["W3C CSS Validator","Jigsaw/2.2.5 W3C_CSS_Validator_JFouffa/2.0",undefined,undefined,undefined,undefined], ["W3C P3P Validator","P3P Validator",undefined,undefined,undefined,undefined], ["w3m 0.5.1","w3m/0.5.1","w3m","0",undefined,undefined], ["w3m 0.5.1","w3m/0.5.1","w3m","0",undefined,undefined], -["W580i","SonyEricssonW580i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["W660i","SonyEricssonW660i/R6AD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["W810i","SonyEricssonW810i/R4EA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0","NetFront","3",undefined,undefined], -["W850i","SonyEricssonW850i/R1ED Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["W950i - Opera 8.60 - Symbian OS","SonyEricssonW950i/R100 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 323) Opera 8.60 [en-US]","Opera","8","Symbian",undefined], -["W995","SonyEricssonW995/R1EA Profile/MIDP-2.1 Configuration/CLDC-1.1 UNTRUSTED/1.0",undefined,undefined,undefined,undefined], ["WDG (X)HTML Validator (1.6.2)","WDG_Validator/1.6.2",undefined,undefined,undefined,undefined], ["WDG CSS Validator (1.2.2)","CSSCheck/1.2.2",undefined,undefined,undefined,undefined], ["Web Downloader 6.9","Web Downloader/6.9",undefined,undefined,undefined,undefined], -["WebCopier v4.6","WebCopier v4.6",undefined,undefined,undefined,undefined], -["WebZIP 3.5","WebZIP/3.5 (http://www.spidersoft.com)",undefined,undefined,undefined,undefined], ["Wget 1.9 (Redhat)","Wget/1.9 cvs-stable (Red Hat modified)",undefined,undefined,undefined,undefined], ["Wget 1.9.1","Wget/1.9.1",undefined,undefined,undefined,undefined], -["Wii 2.0.4.7-7","Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)","Opera","9","Linux","Wii"], -["Wii libnup (1.00)","wii libnup/1.0",undefined,undefined,undefined,undefined], -["Windows CE - MSIE 6 - IEMobile 7.11","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)","IE Mobile","7","Windows","CE"], -["Windows CE - MSIE 6 - IEMobile 8.12","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIEMobile6.0)","IE Mobile","8","Windows","CE"], -["Windows CE - ZuneHD 4.3 - IEMobile 6.12","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)","IE Mobile","6","Windows","CE"], -["Windows CE 5.2 - Sprint (HTC Titan) - IEMobile 7.11 (MSIE 6.0)","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800","IE Mobile","7","Windows","CE"], -["Windows Phone 7 - MSIE 7 - IEMobile 7.0","Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0)","IE Mobile","7","Windows Phone","7.0"], -["Windows Phone OS 7.0 - Asus Galaxy - IEMobile 7.0 (MSIE 7.0)","Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6","IE Mobile","7","Windows Phone","7.0"], -["Windows Phone OS 7.5 - IEMobile 9.0","Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)","IE Mobile","9","Windows Phone","7.5"], -["Windows Phone OS 8.0 - ARM - IEMobile 10.0","Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch) ","IE Mobile","10","Windows Phone","8.0"], -["Windows Phone OS 8.0 - Nokia Lumia 620 ARM - IEMobile 10.0","Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)","IE Mobile","10","Windows Phone","8.0"], -["winHTTP","SearchExpress",undefined,undefined,"Linux","Express"], ["X10 - Android 1.6 - Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.6"], ["X10i - Android 1.6 - Mobile Safari 525.20.1","Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1","Android Browser","3","Android","1.6"], -["X7 - Symbian 3 - Safari 533.4","Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba","NokiaBrowser","7","Symbian","3"], -["X820","SEC-SGHX820/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1","NetFront","3",undefined,undefined], -["Xoom - Android 3.0.1 - Mobile Safari 523.12","Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2","Android Browser","3","Android","3.0"], -["Xperia X1 - Opera Mobi 9.5","Opera/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i/R2AA Profile/MIDP-2.0 Configuration/CLDC-1.1","Opera","9",undefined,undefined], -["Yahoo Slurp China","Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)",undefined,undefined,undefined,undefined], -["Yahoo Slurp","Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",undefined,undefined,"Linux","slurp"], -["Z10 - BB10 OS - Mobile Safari 537.10+","Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.1.0.2342 Mobile Safari/537.10+","Mobile Safari","10","BlackBerry","10"], -["Z800i","SonyEricssonZ800/R1Y Browser/SEMC-Browser/4.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",undefined,undefined,undefined,undefined], -["ZuneHD 4.3 - IEMobile 6.12 - CE","Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)","IE Mobile","6","Windows","CE"], ]; \ No newline at end of file