Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval("\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34..
Decoded Output download
?><?php
/**
* Mobile Detect Library
* =====================
*
* Motto: "Every business should have a mobile detection script to detect mobile readers"
*
* Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
* It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
*
* @author Current authors: Serban Ghita <[email protected]>, Nick Ilyin <[email protected]>
* Original author: Victor Stanciu <[email protected]>
*
* @license Code and contributions have 'MIT License'
* More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
*
* @link Homepage: http://mobiledetect.net
* GitHub Repo: https://github.com/serbanghita/Mobile-Detect
* Google Code: http://code.google.com/p/php-mobile-detect/
* README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
* HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
*
* @version 2.7.7
*/
class Devinc_License_Helper_Mobiledetect extends Mage_Core_Helper_Abstract
{
/**
* Mobile detection type.
*
* @deprecated since version 2.6.9
*/
const DETECTION_TYPE_MOBILE = 'mobile';
/**
* Extended detection type.
*
* @deprecated since version 2.6.9
*/
const DETECTION_TYPE_EXTENDED = 'extended';
/**
* A frequently used regular expression to extract version #s.
*
* @deprecated since version 2.6.9
*/
const VER = '([\w._\+]+)';
/**
* Top-level device.
*/
const MOBILE_GRADE_A = 'A';
/**
* Mid-level device.
*/
const MOBILE_GRADE_B = 'B';
/**
* Low-level device.
*/
const MOBILE_GRADE_C = 'C';
/**
* Stores the version number of the current release.
*/
const VERSION = '2.7.7';
/**
* A type for the version() method indicating a string return value.
*/
const VERSION_TYPE_STRING = 'text';
/**
* A type for the version() method indicating a float return value.
*/
const VERSION_TYPE_FLOAT = 'float';
/**
* The User-Agent HTTP header is stored in here.
* @var string
*/
protected $userAgent = null;
/**
* HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
* @var array
*/
protected $httpHeaders = array();
/**
* The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
*
* @deprecated since version 2.6.9
*
* @var string
*/
protected $detectionType = self::DETECTION_TYPE_MOBILE;
/**
* HTTP headers that trigger the 'isMobile' detection
* to be true.
*
* @var array
*/
protected static $mobileHeaders = array(
'HTTP_ACCEPT' => array('matches' => array(
// Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
'application/x-obml2d',
// BlackBerry devices.
'application/vnd.rim.html',
'text/vnd.wap.wml',
'application/vnd.wap.xhtml+xml'
)),
'HTTP_X_WAP_PROFILE' => null,
'HTTP_X_WAP_CLIENTID' => null,
'HTTP_WAP_CONNECTION' => null,
'HTTP_PROFILE' => null,
// Reported by Opera on Nokia devices (eg. C3).
'HTTP_X_OPERAMINI_PHONE_UA' => null,
'HTTP_X_NOKIA_IPADDRESS' => null,
'HTTP_X_NOKIA_GATEWAY_ID' => null,
'HTTP_X_ORANGE_ID' => null,
'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
'HTTP_X_HUAWEI_USERID' => null,
// Reported by Windows Smartphones.
'HTTP_UA_OS' => null,
// Reported by Verizon, Vodafone proxy system.
'HTTP_X_MOBILE_GATEWAY' => null,
// Seend this on HTC Sensation. @ref: SensationXE_Beats_Z715e.
'HTTP_X_ATT_DEVICEID' => null,
// Seen this on a HTC.
'HTTP_UA_CPU' => array('matches' => array('ARM')),
);
/**
* List of mobile devices (phones).
*
* @var array
*/
protected static $phoneDevices = array(
'iPhone' => 'iPhone.*Mobile|iPod', // |iTunes
'BlackBerry' => 'BlackBerry|BB10|rim[0-9]+',
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*EVO|T-Mobile G1|Z520m',
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile',
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|001DL|101DL|GS01',
'Motorola' => 'Motorola|Droid.*Build|DROIDX|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925',
'Samsung' => 'Samsung|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B',
'LG' => 'LG;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999)',
'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i',
'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
// @ref: http://www.micromaxinfo.com/mobiles/smartphones
// Added because the codes might conflict with Acer Tablets.
'Micromax' => 'Micromax.*(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)',
'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex.
'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
// @ref: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
// Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
// @ref: http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
// Added simvalley mobile just for fun. They have some interesting devices.
// @ref: http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
'SimValley' => '(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)',
// @Tapatalk is a mobile app; @ref: http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
'GenericPhone' => 'Tapatalk|PDA;|SAGEM|mmp|pocket|psp|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|wap|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser'
);
/**
* List of tablet devices.
*
* @var array
*/
protected static $tabletDevices = array(
'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
'NexusTablet' => '^.*Android.*Nexus(((?:(?!Mobile))|(?:(\s(7|10).+))).)*$',
'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-I9205|GT-P5200|GT-P5210|SM-T311|SM-T310|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500',
// @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/
'Kindle' => 'Kindle|Silk.*Accelerated|Android.*(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE)',
// Only the Surface tablets with Windows RT are considered mobile.
// @ref: http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;',
// @ref: http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
'HPTablet' => 'HP Slate 7|HP ElitePad 900|hp-tablet|EliteBook.*Touch',
// @note: watch out for PadFone, see #132
'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|K00F|TX201LA',
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
// @ref: http://www.acer.ro/ac/ro/RO/content/drivers
// @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
// @ref: http://us.acer.com/ac/en/US/content/group/tablets
// @note: Can conflict with Micromax and Motorola phones codes.
'AcerTablet' => 'Android.*; (A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810)|W3-810',
// @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
// @ref: http://us.toshiba.com/tablets/tablet-finder
// @ref: http://www.toshiba.co.jp/regza/tablet/
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
// @ref: http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
'LGTablet' => 'L-06C|LG-V900|LG-V909',
'FujitsuTablet' => 'Android.*(F-01D|F-05E|F-10D|M532|Q572)',
// Prestigio Tablets http://www.prestigio.com/support
'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD',
// @ref: http://support.lenovo.com/en_GB/downloads/default.page?#
'LenovoTablet' => 'IdeaTab|S2110|S6000|K3011|A3000|A1000|A2107|A2109|A1107|ThinkPad([ ]+)?Tablet',
// @ref: http://www.yarvik.com/en/matrix/tablets/
'YarvikTablet' => 'Android.*(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)',
'MedionTablet' => 'Android.*OYO|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT',
// IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
'IRUTablet' => 'M702pro',
'MegafonTablet' => 'MegaFon V9|ZTE V9|Android.*MT7A',
// @ref: http://www.e-boda.ro/tablete-pc.html
'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
// @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/
'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
// @reference: http://wiki.archosfans.com/index.php?title=Main_Page
'ArchosTablet' => '(101G9|80G9|A101IT)|Qilive 97R|ARCHOS 101G10',
// @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product
'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
// @ref: Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
// @ref: http://www.sony.jp/support/tablet/
'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201',
// @ref: db + http://www.cube-tablet.com/buy-products.html
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
// @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
// @ref: http://www.match.net.cn/products.asp
'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733',
// @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
// @ref: http://www.imp3.net/14/show.php?itemid=20454
'SMiTTablet' => 'Android.*(MID|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
// @ref: http://www.rock-chips.com/index.php?do=prod&pid=2
'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
// @ref: http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
'FlyTablet' => 'IQ310|Fly Vision',
// @ref: http://www.bqreaders.com/gb/tablets-prices-sale.html
'bqTablet' => 'bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus',
// @ref: http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
// @ref: http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
'HuaweiTablet' => 'MediaPad|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
// Nec or Medias Tab
'NecTablet' => 'N-06D|N-08D',
// Pantech Tablets: http://www.pantechusa.com/phones/
'PantechTablet' => 'Pantech.*P4100',
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
// @ref: http://versusuk.com/support.html
'VersusTablet' => 'TOUCHPAD.*[78910]|TOUCHTAB',
// @ref: http://www.zync.in/index.php/our-products/tablet-phablets
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
// @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
// @ref: https://www.nabitablet.com/
'NabiTablet' => 'Android.*Nabi',
'KoboTablet' => 'Kobo Touch|K080|Vox Build|Arc Build',
// French Danew Tablets http://www.danew.com/produits-tablette.php
'DanewTablet' => 'DSlide.*(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)',
// Texet Tablets and Readers http://www.texet.ru/tablet/
'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
// @note: Avoid detecting 'PLAYSTATION 3' as mobile.
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
// @ref: http://www.trekstor.de/surftabs.html
'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2',
// @ref: http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
'PyleAudioTablet' => '(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)',
// @ref: http://www.advandigital.com/index.php?link=content-product&jns=JP001
'AdvanTablet' => 'Android.* (S5G|S5K|T5B|T3E|T3C|T3B|T1J|T1F|S5D|T2A|T1H|E1C|T1i|S5E|T1-E|S5F|E1-B|T2Ci|T1-B|T1-D|T5-A|O1-A|E1-A|T1-A|T3A|S5|T4i) ',
// @ref: http://www.danytech.com/category/tablet-pc
'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
// @ref: http://www.galapad.net/product.html
'GalapadTablet' => 'Android.*G1',
// @ref: http://www.micromaxinfo.com/tablet/funbook
'MicromaxTablet' => 'Funbook|Micromax.*(P250|P560|P360|P362|P600|P300|P350|P500|P275)',
// http://www.karbonnmobiles.com/products_tablet.php
'KarbonnTablet' => 'Android.*(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)',
// @ref: http://www.myallfine.com/Products.asp
'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
// @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
'PROSCANTablet' => '(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)',
// @ref: http://www.yonesnav.com/products/products.php
'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
// @ref: http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
// China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
// @ref: http://www.gloryunion.cn/products.asp
// @ref: http://www.allwinnertech.com/en/apply/mobile.html
// @ref: http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
// @todo: Softwiner tablets?
// aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
// @ref: http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
// @ref: http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
// @todo: add more tests.
'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)',
// @ref: http://hclmetablet.com/India/index.php
'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
// @ref: http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
// @ref: http://www.visture.com/index.asp
'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
// @ref: http://www.mijncresta.nl/tablet
'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
// MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
'MediatekTablet' => 'MT8125|MT8389|MT8135|MT8377',
// Concorde tab
'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
// GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
// Modecom Tablets - http://www.modecom.eu/tablets/portal/
'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
// @ref: http://www.tesco.com/direct/hudl/
'Hudl' => 'Hudl HT7S3',
// @ref: http://www.telstra.com.au/home-phone/thub-2/
'TelstraTablet' => 'T-Hub2',
'GenericTablet' => 'Android.*97D|Tablet(?!.*PC)|ViewPad7|BNTV250A|MID-WCDMA|LogicPD Zoom2|A7EB|CatNova8|A1_07|CT704|CT1002|M721|rk30sdk|EVOTAB|SmartTabII10|SmartTab10|M758A|ET904',
);
/**
* List of mobile Operating Systems.
*
* @var array
*/
protected static $operatingSystems = array(
'AndroidOS' => 'Android',
'BlackBerryOS' => 'blackberry|BB10|rim tablet os',
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|S60',
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
// @reference: http://en.wikipedia.org/wiki/Windows_Phone
// http://wifeng.cn/?r=blog&a=view&id=106
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
'WindowsPhoneOS' => 'Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7',
'iOS' => 'iPhone.*Mobile|iPod|iPad',
// http://en.wikipedia.org/wiki/MeeGo
// @todo: research MeeGo in UAs
'MeeGoOS' => 'MeeGo',
// http://en.wikipedia.org/wiki/Maemo
// @todo: research Maemo in UAs
'MaemoOS' => 'Maemo',
'JavaOS' => 'J2ME/|MIDP|CLDC', // '|Java/' produces bug #135
'webOS' => 'webOS|hpwOS',
'badaOS' => 'Bada',
'BREWOS' => 'BREW',
);
/**
* List of mobile User Agents.
*
* @var array
*/
protected static $browsers = array(
// @reference: https://developers.google.com/chrome/mobile/docs/user-agent
'Chrome' => 'CrMo|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
'Dolfin' => 'Dolfin',
'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
'Skyfire' => 'Skyfire',
'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+
'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile',
'Bolt' => 'bolt',
'TeaShark' => 'teashark',
'Blazer' => 'Blazer',
// @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile',
// @ref: http://en.wikipedia.org/wiki/Midori_(web_browser)
//'Midori' => 'midori',
'Tizen' => 'Tizen',
'UCBrowser' => 'UC.*Browser|UCWEB',
// @ref: https://github.com/serbanghita/Mobile-Detect/issues/7
'DiigoBrowser' => 'DiigoBrowser',
// http://www.puffinbrowser.com/index.php
'Puffin' => 'Puffin',
// @ref: http://mercury-browser.com/index.html
'Mercury' => 'Mercury',
// @reference: http://en.wikipedia.org/wiki/Minimo
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger'
);
/**
* Utilities.
*
* @var array
*/
protected static $utilities = array(
// Experimental. When a mobile device wants to switch to 'Desktop Mode'.
// @ref: http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
// @ref: https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
'DesktopMode' => 'WPDesktop',
'TV' => 'SonyDTV|HbbTV', // experimental
'WebKit' => '(webkit)[ /]([\w.]+)',
'Bot' => 'Googlebot|DoCoMo|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',
'MobileBot' => 'Googlebot-Mobile|DoCoMo|YahooSeeker/M1A1-R2D2',
'Console' => '(Nintendo|Nintendo WiiU|PLAYSTATION|Xbox)',
'Watch' => 'SM-V700',
);
/**
* All possible HTTP headers that represent the
* User-Agent string.
*
* @var array
*/
protected static $uaHttpHeaders = array(
// The default User-Agent string.
'HTTP_USER_AGENT',
// Header can occur on devices using Opera Mini.
'HTTP_X_OPERAMINI_PHONE_UA',
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
'HTTP_X_DEVICE_USER_AGENT',
'HTTP_X_ORIGINAL_USER_AGENT',
'HTTP_X_SKYFIRE_PHONE',
'HTTP_X_BOLT_PHONE_UA',
'HTTP_DEVICE_STOCK_UA',
'HTTP_X_UCBROWSER_DEVICE_UA'
);
/**
* The individual segments that could exist in a User-Agent string. VER refers to the regular
* expression defined in the constant self::VER.
*
* @var array
*/
protected static $properties = array(
// Build
'Mobile' => 'Mobile/[VER]',
'Build' => 'Build/[VER]',
'Version' => 'Version/[VER]',
'VendorID' => 'VendorID/[VER]',
// Devices
'iPad' => 'iPad.*CPU[a-z ]+[VER]',
'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
'iPod' => 'iPod.*CPU[a-z ]+[VER]',
//'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
'Kindle' => 'Kindle/[VER]',
// Browser
'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'),
'Coast' => array('Coast/[VER]'),
'Dolfin' => 'Dolfin/[VER]',
// @reference: https://developer.mozilla.org/en-US/docs/User_Agent_Strings_Reference
'Firefox' => 'Firefox/[VER]',
'Fennec' => 'Fennec/[VER]',
// @reference: http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];'),
// http://en.wikipedia.org/wiki/NetFront
'NetFront' => 'NetFront/[VER]',
'NokiaBrowser' => 'NokiaBrowser/[VER]',
'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
'Opera Mini' => 'Opera Mini/[VER]',
'Opera Mobi' => 'Version/[VER]',
'UC Browser' => 'UC Browser[VER]',
'MQQBrowser' => 'MQQBrowser/[VER]',
'MicroMessenger' => 'MicroMessenger/[VER]',
// @note: Safari 7534.48.3 is actually Version 5.1.
// @note: On BlackBerry the Version is overwriten by the OS.
'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
'Skyfire' => 'Skyfire/[VER]',
'Tizen' => 'Tizen/[VER]',
'Webkit' => 'webkit[ /][VER]',
// Engine
'Gecko' => 'Gecko/[VER]',
'Trident' => 'Trident/[VER]',
'Presto' => 'Presto/[VER]',
// OS
'iOS' => ' OS [VER] ',
'Android' => 'Android [VER]',
'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
'BREW' => 'BREW [VER]',
'Java' => 'Java/[VER]',
// @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
// @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
'Windows Phone' => 'Windows Phone [VER]',
'Windows CE' => 'Windows CE/[VER]',
// http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
'Windows NT' => 'Windows NT [VER]',
'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'),
'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'),
);
/**
* Construct an instance of this class.
*
* @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
* If left empty, will use the global _SERVER['HTTP_*'] vars instead.
* @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
* from the $headers array instead.
*/
public function __construct(
array $headers = null,
$userAgent = null
){
$this->setHttpHeaders($headers);
$this->setUserAgent($userAgent);
}
/**
* Get the current script version.
* This is useful for the demo.php file,
* so people can check on what version they are testing
* for mobile devices.
*
* @return string The version number in semantic version format.
*/
public static function getScriptVersion()
{
return self::VERSION;
}
/**
* Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
*
* @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
* the headers. The default null is left for backwards compatibilty.
*/
public function setHttpHeaders($httpHeaders = null)
{
//use global _SERVER if $httpHeaders aren't defined
if (!is_array($httpHeaders) || !count($httpHeaders)) {
$httpHeaders = $_SERVER;
}
//clear existing headers
$this->httpHeaders = array();
//Only save HTTP headers. In PHP land, that means only _SERVER vars that
//start with HTTP_.
foreach ($httpHeaders as $key => $value) {
if (substr($key,0,5) == 'HTTP_') {
$this->httpHeaders[$key] = $value;
}
}
}
/**
* Retrieves the HTTP headers.
*
* @return array
*/
public function getHttpHeaders()
{
return $this->httpHeaders;
}
/**
* Retrieves a particular header. If it doesn't exist, no exception/error is caused.
* Simply null is returned.
*
* @param string $header The name of the header to retrieve. Can be HTTP compliant such as
* "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
* all-caps, HTTP_ prefixed, underscore seperated awesomeness.
*
* @return string|null The value of the header.
*/
public function getHttpHeader($header)
{
//are we using PHP-flavored headers?
if (strpos($header, '_') === false) {
$header = str_replace('-', '_', $header);
$header = strtoupper($header);
}
//test the alternate, too
$altHeader = 'HTTP_' . $header;
//Test both the regular and the HTTP_ prefix
if (isset($this->httpHeaders[$header])) {
return $this->httpHeaders[$header];
} elseif (isset($this->httpHeaders[$altHeader])) {
return $this->httpHeaders[$altHeader];
}
}
public function getMobileHeaders()
{
return self::$mobileHeaders;
}
/**
* Get all possible HTTP headers that
* can contain the User-Agent string.
*
* @return array List of HTTP headers.
*/
public function getUaHttpHeaders()
{
return self::$uaHttpHeaders;
}
/**
* Set the User-Agent to be used.
*
* @param string $userAgent The user agent string to set.
*/
public function setUserAgent($userAgent = null)
{
if (!empty($userAgent)) {
return $this->userAgent = $userAgent;
} else {
$this->userAgent = null;
foreach($this->getUaHttpHeaders() as $altHeader){
if(!empty($this->httpHeaders[$altHeader])){ // @todo: should use getHttpHeader(), but it would be slow. (Serban)
$this->userAgent .= $this->httpHeaders[$altHeader] . " ";
}
}
return $this->userAgent = (!empty($this->userAgent) ? trim($this->userAgent) : null);
}
}
/**
* Retrieve the User-Agent.
*
* @return string|null The user agent if it's set.
*/
public function getUserAgent()
{
return $this->userAgent;
}
/**
* Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or
* self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set.
*
* @deprecated since version 2.6.9
*
* @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default
* parameter is null which will default to self::DETECTION_TYPE_MOBILE.
*/
public function setDetectionType($type = null)
{
if ($type === null) {
$type = self::DETECTION_TYPE_MOBILE;
}
if ($type != self::DETECTION_TYPE_MOBILE && $type != self::DETECTION_TYPE_EXTENDED) {
return;
}
$this->detectionType = $type;
}
/**
* Retrieve the list of known phone devices.
*
* @return array List of phone devices.
*/
public static function getPhoneDevices()
{
return self::$phoneDevices;
}
/**
* Retrieve the list of known tablet devices.
*
* @return array List of tablet devices.
*/
public static function getTabletDevices()
{
return self::$tabletDevices;
}
/**
* Alias for getBrowsers() method.
*
* @return array List of user agents.
*/
public static function getUserAgents()
{
return self::getBrowsers();
}
/**
* Retrieve the list of known browsers. Specifically, the user agents.
*
* @return array List of browsers / user agents.
*/
public static function getBrowsers()
{
return self::$browsers;
}
/**
* Retrieve the list of known utilities.
*
* @return array List of utilities.
*/
public static function getUtilities()
{
return self::$utilities;
}
/**
* Method gets the mobile detection rules. This method is used for the magic methods $detect->is*().
*
* @deprecated since version 2.6.9
*
* @return array All the rules (but not extended).
*/
public static function getMobileDetectionRules()
{
static $rules;
if (!$rules) {
$rules = array_merge(
self::$phoneDevices,
self::$tabletDevices,
self::$operatingSystems,
self::$browsers
);
}
return $rules;
}
/**
* Method gets the mobile detection rules + utilities.
* The reason this is separate is because utilities rules
* don't necessary imply mobile. This method is used inside
* the new $detect->is('stuff') method.
*
* @deprecated since version 2.6.9
*
* @return array All the rules + extended.
*/
public function getMobileDetectionRulesExtended()
{
static $rules;
if (!$rules) {
// Merge all rules together.
$rules = array_merge(
self::$phoneDevices,
self::$tabletDevices,
self::$operatingSystems,
self::$browsers,
self::$utilities
);
}
return $rules;
}
/**
* Retrieve the current set of rules.
*
* @deprecated since version 2.6.9
*
* @return array
*/
public function getRules()
{
if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) {
return self::getMobileDetectionRulesExtended();
} else {
return self::getMobileDetectionRules();
}
}
/**
* Retrieve the list of mobile operating systems.
*
* @return array The list of mobile operating systems.
*/
public static function getOperatingSystems()
{
return self::$operatingSystems;
}
/**
* Check the HTTP headers for signs of mobile.
* This is the fastest mobile check possible; it's used
* inside isMobile() method.
*
* @return bool
*/
public function checkHttpHeadersForMobile()
{
foreach($this->getMobileHeaders() as $mobileHeader => $matchType){
if( isset($this->httpHeaders[$mobileHeader]) ){
if( is_array($matchType['matches']) ){
foreach($matchType['matches'] as $_match){
if( strpos($this->httpHeaders[$mobileHeader], $_match) !== false ){
return true;
}
}
return false;
} else {
return true;
}
}
}
return false;
}
/**
* Magic overloading method.
*
* @method boolean is[...]()
* @param string $name
* @param array $arguments
* @return mixed
* @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is'
*/
public function __call($name, $arguments)
{
//make sure the name starts with 'is', otherwise
if (substr($name, 0, 2) != 'is') {
throw new BadMethodCallException("No such method exists: $name");
}
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
$key = substr($name, 2);
return $this->matchUAAgainstKey($key);
}
/**
* Find a detection rule that matches the current User-agent.
*
* @param null $userAgent deprecated
* @return boolean
*/
protected function matchDetectionRulesAgainstUA($userAgent = null)
{
// Begin general search.
foreach ($this->getRules() as $_regex) {
if (empty($_regex)) {
continue;
}
if ($this->match($_regex, $userAgent)) {
return true;
}
}
return false;
}
/**
* Search for a certain key in the rules array.
* If the key is found the try to match the corresponding
* regex agains the User-Agent.
*
* @param string $key
* @param null $userAgent deprecated
* @return mixed
*/
protected function matchUAAgainstKey($key, $userAgent = null)
{
// Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
$key = strtolower($key);
//change the keys to lower case
$_rules = array_change_key_case($this->getRules());
if (array_key_exists($key, $_rules)) {
if (empty($_rules[$key])) {
return null;
}
return $this->match($_rules[$key], $userAgent);
}
return false;
}
/**
* Check if the device is mobile.
* Returns true if any type of mobile device detected, including special ones
* @param null $userAgent deprecated
* @param null $httpHeaders deprecated
* @return bool
*/
public function isMobile($userAgent = null, $httpHeaders = null)
{
if ($httpHeaders) {
$this->setHttpHeaders($httpHeaders);
}
if ($userAgent) {
$this->setUserAgent($userAgent);
}
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
if ($this->checkHttpHeadersForMobile()) {
return true;
} else {
return $this->matchDetectionRulesAgainstUA();
}
}
/**
* Check if the device is a tablet.
* Return true if any type of tablet device is detected.
*
* @param string $userAgent deprecated
* @param array $httpHeaders deprecated
* @return bool
*/
public function isTablet($userAgent = null, $httpHeaders = null)
{
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
foreach (self::$tabletDevices as $_regex) {
if ($this->match($_regex, $userAgent)) {
return true;
}
}
return false;
}
/**
* This method checks for a certain property in the
* userAgent.
* @todo: The httpHeaders part is not yet used.
*
* @param $key
* @param string $userAgent deprecated
* @param string $httpHeaders deprecated
* @return bool|int|null
*/
public function is($key, $userAgent = null, $httpHeaders = null)
{
// Set the UA and HTTP headers only if needed (eg. batch mode).
if ($httpHeaders) {
$this->setHttpHeaders($httpHeaders);
}
if ($userAgent) {
$this->setUserAgent($userAgent);
}
$this->setDetectionType(self::DETECTION_TYPE_EXTENDED);
return $this->matchUAAgainstKey($key);
}
/**
* Some detection rules are relative (not standard),
* because of the diversity of devices, vendors and
* their conventions in representing the User-Agent or
* the HTTP headers.
*
* This method will be used to check custom regexes against
* the User-Agent string.
*
* @param $regex
* @param string $userAgent
* @return bool
*
* @todo: search in the HTTP headers too.
*/
public function match($regex, $userAgent = null)
{
// Escape the special character which is the delimiter.
$regex = str_replace('/', '\/', $regex);
return (bool) preg_match('/'.$regex.'/is', (!empty($userAgent) ? $userAgent : $this->userAgent));
}
/**
* Get the properties array.
*
* @return array
*/
public static function getProperties()
{
return self::$properties;
}
/**
* Prepare the version number.
*
* @todo Remove the error supression from str_replace() call.
*
* @param string $ver The string version, like "2.6.21.2152";
*
* @return float
*/
public function prepareVersionNo($ver)
{
$ver = str_replace(array('_', ' ', '/'), '.', $ver);
$arrVer = explode('.', $ver, 2);
if (isset($arrVer[1])) {
$arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions.
}
return (float) implode('.', $arrVer);
}
/**
* Check the version of the given property in the User-Agent.
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
*
* @param string $propertyName The name of the property. See self::getProperties() array
* keys for all possible properties.
* @param string $type Either self::VERSION_TYPE_STRING to get a string value or
* self::VERSION_TYPE_FLOAT indicating a float value. This parameter
* is optional and defaults to self::VERSION_TYPE_STRING. Passing an
* invalid parameter will default to the this type as well.
*
* @return string|float The version of the property we are trying to extract.
*/
public function version($propertyName, $type = self::VERSION_TYPE_STRING)
{
if (empty($propertyName)) {
return false;
}
//set the $type to the default if we don't recognize the type
if ($type != self::VERSION_TYPE_STRING && $type != self::VERSION_TYPE_FLOAT) {
$type = self::VERSION_TYPE_STRING;
}
$properties = self::getProperties();
// Check if the property exists in the properties array.
if (array_key_exists($propertyName, $properties)) {
// Prepare the pattern to be matched.
// Make sure we always deal with an array (string is converted).
$properties[$propertyName] = (array) $properties[$propertyName];
foreach ($properties[$propertyName] as $propertyMatchString) {
$propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString);
// Escape the special character which is the delimiter.
$propertyPattern = str_replace('/', '\/', $propertyPattern);
// Identify and extract the version.
preg_match('/'.$propertyPattern.'/is', $this->userAgent, $match);
if (!empty($match[1])) {
$version = ( $type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1] );
return $version;
}
}
}
return false;
}
/**
* Retrieve the mobile grading, using self::MOBILE_GRADE_* constants.
*
* @return string One of the self::MOBILE_GRADE_* constants.
*/
public function mobileGrade()
{
$isMobile = $this->isMobile();
if (
// Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)
$this->version('iPad', self::VERSION_TYPE_FLOAT)>=4.3 ||
$this->version('iPhone', self::VERSION_TYPE_FLOAT)>=3.1 ||
$this->version('iPod', self::VERSION_TYPE_FLOAT)>=3.1 ||
// Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
// Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
// Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
// Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) ||
// Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800
$this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT)>=7.0 ||
// Blackberry 7 - Tested on BlackBerry Torch 9810
// Blackberry 6.0 - Tested on the Torch 9800 and Style 9670
$this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=6.0 ||
// Blackberry Playbook (1.0-2.0) - Tested on PlayBook
$this->match('Playbook.*Tablet') ||
// Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)
( $this->version('webOS', self::VERSION_TYPE_FLOAT)>=1.4 && $this->match('Palm|Pre|Pixi') ) ||
// Palm WebOS 3.0 - Tested on HP TouchPad
$this->match('hp.*TouchPad') ||
// Firefox Mobile (12 Beta) - Tested on Android 2.3 device
( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT)>=12 ) ||
// Chrome for Android - Tested on Android 4.0, 4.1 device
( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=4.0 ) ||
// Skyfire 4.1 - Tested on Android 2.3 device
( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT)>=4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
// Opera Mobile 11.5-12: Tested on Android 2.3
( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>11 && $this->is('AndroidOS') ) ||
// Meego 1.2 - Tested on Nokia 950 and N9
$this->is('MeeGoOS') ||
// Tizen (pre-release) - Tested on early hardware
$this->is('Tizen') ||
// Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
// @todo: more tests here!
$this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT)>=2.0 ||
// UC Browser - Tested on Android 2.3 device
( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
// Kindle 3 and Fire - Tested on the built-in WebKit browser for each
( $this->match('Kindle Fire') ||
$this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT)>=3.0 ) ||
// Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
$this->is('AndroidOS') && $this->is('NookTablet') ||
// Chrome Desktop 11-21 - Tested on OS X 10.7 and Windows 7
$this->version('Chrome', self::VERSION_TYPE_FLOAT)>=11 && !$isMobile ||
// Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7
$this->version('Safari', self::VERSION_TYPE_FLOAT)>=5.0 && !$isMobile ||
// Firefox Desktop 4-13 - Tested on OS X 10.7 and Windows 7
$this->version('Firefox', self::VERSION_TYPE_FLOAT)>=4.0 && !$isMobile ||
// Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
$this->version('MSIE', self::VERSION_TYPE_FLOAT)>=7.0 && !$isMobile ||
// Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
// @reference: http://my.opera.com/community/openweb/idopera/
$this->version('Opera', self::VERSION_TYPE_FLOAT)>=10 && !$isMobile
){
return self::MOBILE_GRADE_A;
}
if (
$this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
$this->version('iPhone', self::VERSION_TYPE_FLOAT)<3.1 ||
$this->version('iPod', self::VERSION_TYPE_FLOAT)<3.1 ||
// Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
$this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
//Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
( $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)>=5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)<=6.5 &&
($this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 || $this->is('iOS')) ) ||
// Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
$this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
// @todo: report this (tested on Nokia N71)
$this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>=11 && $this->is('SymbianOS')
){
return self::MOBILE_GRADE_B;
}
if (
// Blackberry 4.x - Tested on the Curve 8330
$this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<5.0 ||
// Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
$this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT)<=5.2
){
return self::MOBILE_GRADE_C;
}
//All older smartphone platforms and featurephones - Any device that doesn't support media queries
//will receive the basic, C grade experience.
return self::MOBILE_GRADE_C;
}
}
Did this file decode correctly?
Original Code
eval("\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'lb3LjmzZjmXXF6B/uLi4DalTcNtPMyTqT9gxt0cBSlWhCiqk7ufr+LIxJpdHCgmpEYgTcdzN9l4PcpKcnPzHP//nef0f/+U///3v//KPzx//9rf/9J//9vf657HXP8/jz78vf/551D+X659/lvrn/ufP558/r3/+bt2n/z4//+/X319+//e2Tv/957PW619+/vz9edtffn+9/eXz9r/8/fEffN9fn+fnebf/4H3+357vr+//18/76/fNn7f+5fnWv3z/n5/d/rp+/9HzHf/++/5//T7vt5yf/97vn8/b/vz5+PPn8+fPrz9//vP3x5/POZ5//vnzO8fBzy+f87F/fX7mZ6/Gefnzc9ufv9u+//zz58/7z8/++f3t52f+fPf2/vPff/bx+O7PGL+zfX7+/Po858////l/69fn2c7l8zs/z/Tz7NuN779/Pv88+Y7183cb3/Fzdsd3/fmZ5f35nfGd2+f9x3f9fMfP990//z5+1nX9/M7Pmfv5vZ9/fp7zZ40O9v5nfX/O4PjcP/9/+eYd7zzn/nlu///P7/w858/P/5yXnz/vl8/e/Pzcz7v6HeMz989a/TyDz5nPun6+Z9yTG8908lwL388+j/f6+tzlk5/zffzvn3XcpjU6fM4bn7ny7jzXrzP99fn/K2vx8//P7fM5ft7PXo//f+Uzb59z5nuO37981mOs9/fnuX7s0HHlva/Ypa/Pd/6sw8EzjrO6fvZvPB/v8vMd43Nv016sn/P583c/n7efnLuT79g+Z3081+Xzs9mD9fOz+dwTu/DzvXfWc/ms5/j+87OuP897Xj5342fdx3qc3Mn75zN//m583s9+7Lw/53vs5+Wzzz/P47v93K+fMzjfn5P9Om/9jhvnwLv+8z3j59mz8d/f/M73Zx9+7uqwK6/ew5/PPnneYUM2zh/24ef3xnuyd/ul13e80433uX3WZtyzE5vAO/58/oF997yP9bu1nTpYy/Ge5+eZx1q6/+zXeOYv7sLBc32z5pfPZ4818fu9byvn6evzez/Ps/AdP2fuZ23O2TZs/eefddy/+p6N579/3v/neXbuwMZZHO/PM4zPun6eaTwb7zruMfd6nMcL9vub37181nLjLo91e3+ee9gYzwJ21XO+Y+tyRg9s6eXzM+O7vj7PefDc425w7n9+78fGbuz9z++c7vGD971hb2+f8/JzD4dv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'\x29\x29\x29\x3B");
Function Calls
| gzinflate | 5 |
| dduhdf47261 | 1 |
| base64_decode | 5 |
Stats
| MD5 | afb1ba2299862f6640e54dd559cdbd41 |
| Eval Count | 10 |
| Decode Time | 221 ms |