xref: /plugin/statistics/vendor/matomo/device-detector/Parser/Device/AbstractDeviceParser.php (revision d5ef99ddb7dfb0cfae33e9257bd1d788f682c50f)
1*d5ef99ddSAndreas Gohr<?php
2*d5ef99ddSAndreas Gohr
3*d5ef99ddSAndreas Gohr/**
4*d5ef99ddSAndreas Gohr * Device Detector - The Universal Device Detection library for parsing User Agents
5*d5ef99ddSAndreas Gohr *
6*d5ef99ddSAndreas Gohr * @link https://matomo.org
7*d5ef99ddSAndreas Gohr *
8*d5ef99ddSAndreas Gohr * @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
9*d5ef99ddSAndreas Gohr */
10*d5ef99ddSAndreas Gohr
11*d5ef99ddSAndreas Gohrdeclare(strict_types=1);
12*d5ef99ddSAndreas Gohr
13*d5ef99ddSAndreas Gohrnamespace DeviceDetector\Parser\Device;
14*d5ef99ddSAndreas Gohr
15*d5ef99ddSAndreas Gohruse DeviceDetector\Parser\AbstractParser;
16*d5ef99ddSAndreas Gohr
17*d5ef99ddSAndreas Gohr/**
18*d5ef99ddSAndreas Gohr * Class AbstractDeviceParser
19*d5ef99ddSAndreas Gohr *
20*d5ef99ddSAndreas Gohr * Abstract class for all device parsers
21*d5ef99ddSAndreas Gohr */
22*d5ef99ddSAndreas Gohrabstract class AbstractDeviceParser extends AbstractParser
23*d5ef99ddSAndreas Gohr{
24*d5ef99ddSAndreas Gohr    /**
25*d5ef99ddSAndreas Gohr     * @var ?int
26*d5ef99ddSAndreas Gohr     */
27*d5ef99ddSAndreas Gohr    protected $deviceType = null;
28*d5ef99ddSAndreas Gohr
29*d5ef99ddSAndreas Gohr    /**
30*d5ef99ddSAndreas Gohr     * @var string
31*d5ef99ddSAndreas Gohr     */
32*d5ef99ddSAndreas Gohr    protected $model = '';
33*d5ef99ddSAndreas Gohr
34*d5ef99ddSAndreas Gohr    /**
35*d5ef99ddSAndreas Gohr     * @var string
36*d5ef99ddSAndreas Gohr     */
37*d5ef99ddSAndreas Gohr    protected $brand = '';
38*d5ef99ddSAndreas Gohr
39*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_DESKTOP              = 0;
40*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_SMARTPHONE           = 1;
41*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_TABLET               = 2;
42*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_FEATURE_PHONE        = 3;
43*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_CONSOLE              = 4;
44*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_TV                   = 5; // including set top boxes, blu-ray players,...
45*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_CAR_BROWSER          = 6;
46*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_SMART_DISPLAY        = 7;
47*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_CAMERA               = 8;
48*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_PORTABLE_MEDIA_PAYER = 9;
49*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_PHABLET              = 10;
50*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_SMART_SPEAKER        = 11;
51*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_WEARABLE             = 12; // including set watches, headsets
52*d5ef99ddSAndreas Gohr    public const DEVICE_TYPE_PERIPHERAL           = 13; // including portable terminal, portable projector
53*d5ef99ddSAndreas Gohr
54*d5ef99ddSAndreas Gohr    /**
55*d5ef99ddSAndreas Gohr     * Detectable device types
56*d5ef99ddSAndreas Gohr     *
57*d5ef99ddSAndreas Gohr     * @var array
58*d5ef99ddSAndreas Gohr     */
59*d5ef99ddSAndreas Gohr    protected static $deviceTypes = [
60*d5ef99ddSAndreas Gohr        'desktop'               => self::DEVICE_TYPE_DESKTOP,
61*d5ef99ddSAndreas Gohr        'smartphone'            => self::DEVICE_TYPE_SMARTPHONE,
62*d5ef99ddSAndreas Gohr        'tablet'                => self::DEVICE_TYPE_TABLET,
63*d5ef99ddSAndreas Gohr        'feature phone'         => self::DEVICE_TYPE_FEATURE_PHONE,
64*d5ef99ddSAndreas Gohr        'console'               => self::DEVICE_TYPE_CONSOLE,
65*d5ef99ddSAndreas Gohr        'tv'                    => self::DEVICE_TYPE_TV,
66*d5ef99ddSAndreas Gohr        'car browser'           => self::DEVICE_TYPE_CAR_BROWSER,
67*d5ef99ddSAndreas Gohr        'smart display'         => self::DEVICE_TYPE_SMART_DISPLAY,
68*d5ef99ddSAndreas Gohr        'camera'                => self::DEVICE_TYPE_CAMERA,
69*d5ef99ddSAndreas Gohr        'portable media player' => self::DEVICE_TYPE_PORTABLE_MEDIA_PAYER,
70*d5ef99ddSAndreas Gohr        'phablet'               => self::DEVICE_TYPE_PHABLET,
71*d5ef99ddSAndreas Gohr        'smart speaker'         => self::DEVICE_TYPE_SMART_SPEAKER,
72*d5ef99ddSAndreas Gohr        'wearable'              => self::DEVICE_TYPE_WEARABLE,
73*d5ef99ddSAndreas Gohr        'peripheral'            => self::DEVICE_TYPE_PERIPHERAL,
74*d5ef99ddSAndreas Gohr    ];
75*d5ef99ddSAndreas Gohr
76*d5ef99ddSAndreas Gohr    /**
77*d5ef99ddSAndreas Gohr     * Known device brands
78*d5ef99ddSAndreas Gohr     *
79*d5ef99ddSAndreas Gohr     * Note: Before using a new brand in on of the regex files, it needs to be added here
80*d5ef99ddSAndreas Gohr     *
81*d5ef99ddSAndreas Gohr     * @var array
82*d5ef99ddSAndreas Gohr     */
83*d5ef99ddSAndreas Gohr    public static $deviceBrands = [
84*d5ef99ddSAndreas Gohr        '5E'  => '2E',
85*d5ef99ddSAndreas Gohr        '5IV' => '5IVE',
86*d5ef99ddSAndreas Gohr        '2F'  => 'F2 Mobile',
87*d5ef99ddSAndreas Gohr        '3Q'  => '3Q',
88*d5ef99ddSAndreas Gohr        'J7'  => '7 Mobile',
89*d5ef99ddSAndreas Gohr        '2Q'  => '3GNET',
90*d5ef99ddSAndreas Gohr        '4G'  => '4Good',
91*d5ef99ddSAndreas Gohr        '27'  => '3GO',
92*d5ef99ddSAndreas Gohr        '04'  => '4ife',
93*d5ef99ddSAndreas Gohr        '36'  => '360',
94*d5ef99ddSAndreas Gohr        '88'  => '8848',
95*d5ef99ddSAndreas Gohr        '10M' => '10moons',
96*d5ef99ddSAndreas Gohr        '41'  => 'A1',
97*d5ef99ddSAndreas Gohr        'AK1' => 'A&K',
98*d5ef99ddSAndreas Gohr        '00'  => 'Accent',
99*d5ef99ddSAndreas Gohr        'ACC' => 'Accesstyle',
100*d5ef99ddSAndreas Gohr        'AE'  => 'Ace',
101*d5ef99ddSAndreas Gohr        'AC'  => 'Acer',
102*d5ef99ddSAndreas Gohr        'ACL' => 'Aceline',
103*d5ef99ddSAndreas Gohr        'ACP' => 'Acepad',
104*d5ef99ddSAndreas Gohr        '3K'  => 'Acteck',
105*d5ef99ddSAndreas Gohr        'ACT' => 'actiMirror',
106*d5ef99ddSAndreas Gohr        'A9'  => 'Advan',
107*d5ef99ddSAndreas Gohr        'AD'  => 'Advance',
108*d5ef99ddSAndreas Gohr        'ADV' => 'Advantage Air',
109*d5ef99ddSAndreas Gohr        '76'  => 'Adronix',
110*d5ef99ddSAndreas Gohr        'ADR' => 'Adreamer',
111*d5ef99ddSAndreas Gohr        'AF'  => 'AfriOne',
112*d5ef99ddSAndreas Gohr        'FY'  => 'AFFIX',
113*d5ef99ddSAndreas Gohr        'A3'  => 'AGM',
114*d5ef99ddSAndreas Gohr        'AEE' => 'AEEZO',
115*d5ef99ddSAndreas Gohr        'J0'  => 'AG Mobile',
116*d5ef99ddSAndreas Gohr        'AJI' => 'Ajib',
117*d5ef99ddSAndreas Gohr        'AZ'  => 'Ainol',
118*d5ef99ddSAndreas Gohr        'AIR' => 'Airis',
119*d5ef99ddSAndreas Gohr        'AI'  => 'Airness',
120*d5ef99ddSAndreas Gohr        'ARP' => 'Airpha',
121*d5ef99ddSAndreas Gohr        'AT'  => 'Airties',
122*d5ef99ddSAndreas Gohr        '7U'  => 'Airtel',
123*d5ef99ddSAndreas Gohr        'AIT' => 'AirTouch',
124*d5ef99ddSAndreas Gohr        'U0'  => 'AIRON',
125*d5ef99ddSAndreas Gohr        '0A'  => 'AIS',
126*d5ef99ddSAndreas Gohr        'AW'  => 'Aiwa',
127*d5ef99ddSAndreas Gohr        '85'  => 'Aiuto',
128*d5ef99ddSAndreas Gohr        'U7'  => 'AIDATA',
129*d5ef99ddSAndreas Gohr        'AL1' => 'AileTV',
130*d5ef99ddSAndreas Gohr        'AK'  => 'Akai',
131*d5ef99ddSAndreas Gohr        'Q3'  => 'AKIRA',
132*d5ef99ddSAndreas Gohr        '1A'  => 'Alba',
133*d5ef99ddSAndreas Gohr        'AL'  => 'Alcatel',
134*d5ef99ddSAndreas Gohr        'AL0' => 'Alienware',
135*d5ef99ddSAndreas Gohr        '20'  => 'Alcor',
136*d5ef99ddSAndreas Gohr        'XY'  => 'Alps',
137*d5ef99ddSAndreas Gohr        'XYA' => 'XY Auto',
138*d5ef99ddSAndreas Gohr        'AAU' => 'AAUW',
139*d5ef99ddSAndreas Gohr        '7L'  => 'ALDI NORD',
140*d5ef99ddSAndreas Gohr        '6L'  => 'ALDI SÜD',
141*d5ef99ddSAndreas Gohr        '3L'  => 'Alfawise',
142*d5ef99ddSAndreas Gohr        '4A'  => 'Aligator',
143*d5ef99ddSAndreas Gohr        'ALS' => 'All Star',
144*d5ef99ddSAndreas Gohr        'AA'  => 'AllCall',
145*d5ef99ddSAndreas Gohr        '3A'  => 'AllDocube',
146*d5ef99ddSAndreas Gohr        'ALL' => 'allente',
147*d5ef99ddSAndreas Gohr        'A2'  => 'Allview',
148*d5ef99ddSAndreas Gohr        'ALI' => 'ALLINmobile',
149*d5ef99ddSAndreas Gohr        'A7'  => 'Allwinner',
150*d5ef99ddSAndreas Gohr        'ALP' => 'alpsmart',
151*d5ef99ddSAndreas Gohr        'A1'  => 'Altech UEC',
152*d5ef99ddSAndreas Gohr        '66'  => 'Altice',
153*d5ef99ddSAndreas Gohr        'ALM' => 'Altimo',
154*d5ef99ddSAndreas Gohr        'A5'  => 'altron',
155*d5ef99ddSAndreas Gohr        'ALB' => 'Altibox',
156*d5ef99ddSAndreas Gohr        'ALT' => 'Altus',
157*d5ef99ddSAndreas Gohr        'KN'  => 'Amazon',
158*d5ef99ddSAndreas Gohr        'AMZ' => 'Amazon Basics',
159*d5ef99ddSAndreas Gohr        'AMA' => 'AMA',
160*d5ef99ddSAndreas Gohr        'AG'  => 'AMGOO',
161*d5ef99ddSAndreas Gohr        '9A'  => 'Amigoo',
162*d5ef99ddSAndreas Gohr        'AO'  => 'Amoi',
163*d5ef99ddSAndreas Gohr        '3J'  => 'Amino',
164*d5ef99ddSAndreas Gohr        '54'  => 'AMCV',
165*d5ef99ddSAndreas Gohr        '60'  => 'Andowl',
166*d5ef99ddSAndreas Gohr        'ANX' => 'ANXONIT',
167*d5ef99ddSAndreas Gohr        'ANL' => 'ANCEL',
168*d5ef99ddSAndreas Gohr        'ANC' => 'ANBERNIC',
169*d5ef99ddSAndreas Gohr        'AND' => 'andersson',
170*d5ef99ddSAndreas Gohr        '6J'  => 'Angelcare',
171*d5ef99ddSAndreas Gohr        'ANG' => 'AngelTech',
172*d5ef99ddSAndreas Gohr        '7A'  => 'Anry',
173*d5ef99ddSAndreas Gohr        'A0'  => 'ANS',
174*d5ef99ddSAndreas Gohr        '74'  => 'Anker',
175*d5ef99ddSAndreas Gohr        '3N'  => 'Aoson',
176*d5ef99ddSAndreas Gohr        'O8'  => 'AOC',
177*d5ef99ddSAndreas Gohr        'J2'  => 'AOYODKG',
178*d5ef99ddSAndreas Gohr        '55'  => 'AOpen',
179*d5ef99ddSAndreas Gohr        'RW'  => 'Aoro',
180*d5ef99ddSAndreas Gohr        '9Y'  => 'Aocos',
181*d5ef99ddSAndreas Gohr        'AOW' => 'Aocwei',
182*d5ef99ddSAndreas Gohr        'AP'  => 'Apple',
183*d5ef99ddSAndreas Gohr        'APS' => 'ApoloSign',
184*d5ef99ddSAndreas Gohr        'ARC' => 'Arçelik',
185*d5ef99ddSAndreas Gohr        'AR'  => 'Archos',
186*d5ef99ddSAndreas Gohr        'AB'  => 'Arian Space',
187*d5ef99ddSAndreas Gohr        'ARI' => 'Arival',
188*d5ef99ddSAndreas Gohr        'A6'  => 'Ark',
189*d5ef99ddSAndreas Gohr        '5A'  => 'ArmPhone',
190*d5ef99ddSAndreas Gohr        'AN'  => 'Arnova',
191*d5ef99ddSAndreas Gohr        'AS'  => 'ARRIS',
192*d5ef99ddSAndreas Gohr        'AQ'  => 'Aspera',
193*d5ef99ddSAndreas Gohr        'HJ'  => 'Aquarius',
194*d5ef99ddSAndreas Gohr        '40'  => 'Artel',
195*d5ef99ddSAndreas Gohr        '21'  => 'Artizlee',
196*d5ef99ddSAndreas Gohr        '59'  => 'ArtLine',
197*d5ef99ddSAndreas Gohr        '8A'  => 'Asano',
198*d5ef99ddSAndreas Gohr        '90'  => 'Asanzo',
199*d5ef99ddSAndreas Gohr        '1U'  => 'Astro (UA)',
200*d5ef99ddSAndreas Gohr        'AST' => 'astro (MY)',
201*d5ef99ddSAndreas Gohr        'A4'  => 'Ask',
202*d5ef99ddSAndreas Gohr        'A8'  => 'Assistant',
203*d5ef99ddSAndreas Gohr        'ASS' => 'ASSE',
204*d5ef99ddSAndreas Gohr        'AU'  => 'Asus',
205*d5ef99ddSAndreas Gohr        '6A'  => 'AT&T',
206*d5ef99ddSAndreas Gohr        'ATH' => 'Athesi',
207*d5ef99ddSAndreas Gohr        'ATE' => 'Atlantic Electrics',
208*d5ef99ddSAndreas Gohr        '5Q'  => 'Atmaca Elektronik',
209*d5ef99ddSAndreas Gohr        'YH'  => 'ATMAN',
210*d5ef99ddSAndreas Gohr        'ATM' => 'ATMPC',
211*d5ef99ddSAndreas Gohr        '2A'  => 'Atom',
212*d5ef99ddSAndreas Gohr        'AT1' => 'Atozee',
213*d5ef99ddSAndreas Gohr        'ATO' => 'ATOL',
214*d5ef99ddSAndreas Gohr        'Z2'  => 'Atvio',
215*d5ef99ddSAndreas Gohr        'ATI' => 'Attila',
216*d5ef99ddSAndreas Gohr        'ATU' => 'Atouch',
217*d5ef99ddSAndreas Gohr        'AX'  => 'Audiovox',
218*d5ef99ddSAndreas Gohr        'AJ'  => 'AURIS',
219*d5ef99ddSAndreas Gohr        'YZ'  => 'Autan',
220*d5ef99ddSAndreas Gohr        'AUP' => 'AUPO',
221*d5ef99ddSAndreas Gohr        'ZA'  => 'Avenzo',
222*d5ef99ddSAndreas Gohr        'AH'  => 'AVH',
223*d5ef99ddSAndreas Gohr        'AV'  => 'Avvio',
224*d5ef99ddSAndreas Gohr        'AVA' => 'Avaya',
225*d5ef99ddSAndreas Gohr        'AXE' => 'AXEN',
226*d5ef99ddSAndreas Gohr        'AY'  => 'Axxion',
227*d5ef99ddSAndreas Gohr        'AXX' => 'AXXA',
228*d5ef99ddSAndreas Gohr        'AYA' => 'AYA',
229*d5ef99ddSAndreas Gohr        'YR'  => 'AYYA',
230*d5ef99ddSAndreas Gohr        'XA'  => 'Axioo',
231*d5ef99ddSAndreas Gohr        'AM'  => 'Azumi Mobile',
232*d5ef99ddSAndreas Gohr        'AZE' => 'Azeyou',
233*d5ef99ddSAndreas Gohr        'AZU' => 'Azupik',
234*d5ef99ddSAndreas Gohr        'AZO' => 'AZOM',
235*d5ef99ddSAndreas Gohr        'WW'  => 'Awow',
236*d5ef99ddSAndreas Gohr        'AWO' => 'AWOX',
237*d5ef99ddSAndreas Gohr        'XU'  => 'AUX',
238*d5ef99ddSAndreas Gohr        'BAC' => 'Backcell',
239*d5ef99ddSAndreas Gohr        'BFF' => 'BAFF',
240*d5ef99ddSAndreas Gohr        'BO'  => 'BangOlufsen',
241*d5ef99ddSAndreas Gohr        'BN'  => 'Barnes & Noble',
242*d5ef99ddSAndreas Gohr        'BAR' => 'BARTEC',
243*d5ef99ddSAndreas Gohr        'BAS' => 'BASE',
244*d5ef99ddSAndreas Gohr        'BAU' => 'BAUHN',
245*d5ef99ddSAndreas Gohr        'BB'  => 'BBK',
246*d5ef99ddSAndreas Gohr        '0B'  => 'BB Mobile',
247*d5ef99ddSAndreas Gohr        'B6'  => 'BDF',
248*d5ef99ddSAndreas Gohr        'QD'  => 'BDQ',
249*d5ef99ddSAndreas Gohr        '8Z'  => 'BDsharing',
250*d5ef99ddSAndreas Gohr        'BEF' => 'Beafon',
251*d5ef99ddSAndreas Gohr        'BE'  => 'Becker',
252*d5ef99ddSAndreas Gohr        'B5'  => 'Beeline',
253*d5ef99ddSAndreas Gohr        'B0'  => 'Beelink',
254*d5ef99ddSAndreas Gohr        'BL'  => 'Beetel',
255*d5ef99ddSAndreas Gohr        'BEK' => 'Beko',
256*d5ef99ddSAndreas Gohr        '2X'  => 'Benco',
257*d5ef99ddSAndreas Gohr        'BQ'  => 'BenQ',
258*d5ef99ddSAndreas Gohr        'BQL' => 'Bqeel',
259*d5ef99ddSAndreas Gohr        'BS'  => 'BenQ-Siemens',
260*d5ef99ddSAndreas Gohr        '4Y'  => 'Benzo',
261*d5ef99ddSAndreas Gohr        'XJ'  => 'Benesse',
262*d5ef99ddSAndreas Gohr        'BEN' => 'BenWee',
263*d5ef99ddSAndreas Gohr        'YB'  => 'Beista',
264*d5ef99ddSAndreas Gohr        'BY'  => 'BS Mobile',
265*d5ef99ddSAndreas Gohr        'BZ'  => 'Bezkam',
266*d5ef99ddSAndreas Gohr        'BEL' => 'Bell',
267*d5ef99ddSAndreas Gohr        '9B'  => 'Bellphone',
268*d5ef99ddSAndreas Gohr        '63'  => 'Beyond',
269*d5ef99ddSAndreas Gohr        'BG'  => 'BGH',
270*d5ef99ddSAndreas Gohr        '6B'  => 'Bigben',
271*d5ef99ddSAndreas Gohr        'B8'  => 'BIHEE',
272*d5ef99ddSAndreas Gohr        '1B'  => 'Billion',
273*d5ef99ddSAndreas Gohr        'BA'  => 'BilimLand',
274*d5ef99ddSAndreas Gohr        'BIL' => 'Billow',
275*d5ef99ddSAndreas Gohr        'BH'  => 'BioRugged',
276*d5ef99ddSAndreas Gohr        'BI'  => 'Bird',
277*d5ef99ddSAndreas Gohr        'BT'  => 'Bitel',
278*d5ef99ddSAndreas Gohr        'B7'  => 'Bitmore',
279*d5ef99ddSAndreas Gohr        'ZB'  => 'Bittium',
280*d5ef99ddSAndreas Gohr        'BIE' => 'Biegedy',
281*d5ef99ddSAndreas Gohr        'BK'  => 'Bkav',
282*d5ef99ddSAndreas Gohr        '5B'  => 'Black Bear',
283*d5ef99ddSAndreas Gohr        'BLK' => 'Black Box',
284*d5ef99ddSAndreas Gohr        'BF'  => 'Black Fox',
285*d5ef99ddSAndreas Gohr        'BPC' => 'Blackpcs',
286*d5ef99ddSAndreas Gohr        'BLP' => 'Blackphone',
287*d5ef99ddSAndreas Gohr        'BLT' => 'Blackton',
288*d5ef99ddSAndreas Gohr        'B2'  => 'Blackview',
289*d5ef99ddSAndreas Gohr        '2Y'  => 'b2m',
290*d5ef99ddSAndreas Gohr        'BP'  => 'Blaupunkt',
291*d5ef99ddSAndreas Gohr        'BU'  => 'Blu',
292*d5ef99ddSAndreas Gohr        'BUS' => 'BluSlate',
293*d5ef99ddSAndreas Gohr        'BUZ' => 'BuzzTV',
294*d5ef99ddSAndreas Gohr        'B3'  => 'Bluboo',
295*d5ef99ddSAndreas Gohr        '2B'  => 'Bluedot',
296*d5ef99ddSAndreas Gohr        'BD'  => 'Bluegood',
297*d5ef99ddSAndreas Gohr        'LB'  => 'Bluewave',
298*d5ef99ddSAndreas Gohr        'J8'  => 'Bluebird',
299*d5ef99ddSAndreas Gohr        'BSS' => 'BlueSky',
300*d5ef99ddSAndreas Gohr        '7B'  => 'Blloc',
301*d5ef99ddSAndreas Gohr        'UB'  => 'Bleck',
302*d5ef99ddSAndreas Gohr        'Q2'  => 'Blow',
303*d5ef99ddSAndreas Gohr        'BLI' => 'BLISS',
304*d5ef99ddSAndreas Gohr        'BM'  => 'Bmobile',
305*d5ef99ddSAndreas Gohr        'Y5'  => 'BMAX',
306*d5ef99ddSAndreas Gohr        'BMX' => 'BMXC',
307*d5ef99ddSAndreas Gohr        'B9'  => 'Bobarry',
308*d5ef99ddSAndreas Gohr        'B4'  => 'bogo',
309*d5ef99ddSAndreas Gohr        'BOL' => 'Bolva',
310*d5ef99ddSAndreas Gohr        'BW'  => 'Boway',
311*d5ef99ddSAndreas Gohr        'BOO' => 'Boost',
312*d5ef99ddSAndreas Gohr        'BOK' => 'Bookeen',
313*d5ef99ddSAndreas Gohr        'BOT' => 'Botech',
314*d5ef99ddSAndreas Gohr        'BX'  => 'bq',
315*d5ef99ddSAndreas Gohr        '8B'  => 'Brandt',
316*d5ef99ddSAndreas Gohr        'BRA' => 'BrandCode',
317*d5ef99ddSAndreas Gohr        'BV'  => 'Bravis',
318*d5ef99ddSAndreas Gohr        'BRV' => 'BRAVE',
319*d5ef99ddSAndreas Gohr        'BRG' => 'Brigmton',
320*d5ef99ddSAndreas Gohr        'BR'  => 'Brondi',
321*d5ef99ddSAndreas Gohr        'XF'  => 'BROR',
322*d5ef99ddSAndreas Gohr        'BJ'  => 'BrightSign',
323*d5ef99ddSAndreas Gohr        'B1'  => 'Bush',
324*d5ef99ddSAndreas Gohr        '4Q'  => 'Bundy',
325*d5ef99ddSAndreas Gohr        'Y8'  => 'Bubblegum',
326*d5ef99ddSAndreas Gohr        'BMW' => 'BMW',
327*d5ef99ddSAndreas Gohr        'BYJ' => 'BYJU\'S',
328*d5ef99ddSAndreas Gohr        'BYY' => 'BYYBUO',
329*d5ef99ddSAndreas Gohr        'BYD' => 'BYD',
330*d5ef99ddSAndreas Gohr        'C9'  => 'CAGI',
331*d5ef99ddSAndreas Gohr        'CAD' => 'CADENA',
332*d5ef99ddSAndreas Gohr        'CAI' => 'Caixun',
333*d5ef99ddSAndreas Gohr        'CT'  => 'Capitel',
334*d5ef99ddSAndreas Gohr        'GRD' => 'G-Guard',
335*d5ef99ddSAndreas Gohr        'G3'  => 'CG Mobile',
336*d5ef99ddSAndreas Gohr        '37'  => 'CGV',
337*d5ef99ddSAndreas Gohr        'CP'  => 'Captiva',
338*d5ef99ddSAndreas Gohr        'CPD' => 'CPDEVICE',
339*d5ef99ddSAndreas Gohr        'CF'  => 'Carrefour',
340*d5ef99ddSAndreas Gohr        'CA1' => 'Carbon Mobile',
341*d5ef99ddSAndreas Gohr        'CS'  => 'Casio',
342*d5ef99ddSAndreas Gohr        'R4'  => 'Casper',
343*d5ef99ddSAndreas Gohr        'CA'  => 'Cat',
344*d5ef99ddSAndreas Gohr        'BC'  => 'Camfone',
345*d5ef99ddSAndreas Gohr        'CJ'  => 'Cavion',
346*d5ef99ddSAndreas Gohr        'CNM' => 'Canaima',
347*d5ef99ddSAndreas Gohr        'CAN' => 'Canal+',
348*d5ef99ddSAndreas Gohr        '4D'  => 'Canal Digital',
349*d5ef99ddSAndreas Gohr        'CNG' => 'Canguro',
350*d5ef99ddSAndreas Gohr        'CNT' => 'CCIT',
351*d5ef99ddSAndreas Gohr        'CEC' => 'Cecotec',
352*d5ef99ddSAndreas Gohr        'CEP' => 'CEPTER',
353*d5ef99ddSAndreas Gohr        'CEI' => 'Ceibal',
354*d5ef99ddSAndreas Gohr        '02'  => 'Cell-C',
355*d5ef99ddSAndreas Gohr        'CEL' => 'Cellacom',
356*d5ef99ddSAndreas Gohr        '34'  => 'CellAllure',
357*d5ef99ddSAndreas Gohr        '7C'  => 'Celcus',
358*d5ef99ddSAndreas Gohr        'CE'  => 'Celkon',
359*d5ef99ddSAndreas Gohr        'CG'  => 'Cellution',
360*d5ef99ddSAndreas Gohr        '62'  => 'Centric',
361*d5ef99ddSAndreas Gohr        'CEN' => 'CENTEK',
362*d5ef99ddSAndreas Gohr        'C2'  => 'Changhong',
363*d5ef99ddSAndreas Gohr        'CHA' => 'Chainway',
364*d5ef99ddSAndreas Gohr        'CHG' => 'ChiliGreen',
365*d5ef99ddSAndreas Gohr        'CH'  => 'Cherry Mobile',
366*d5ef99ddSAndreas Gohr        'C3'  => 'China Mobile',
367*d5ef99ddSAndreas Gohr        'U9'  => 'China Telecom',
368*d5ef99ddSAndreas Gohr        'CI'  => 'Chico Mobile',
369*d5ef99ddSAndreas Gohr        'CHC' => 'CHCNAV',
370*d5ef99ddSAndreas Gohr        'CIA' => 'C Idea',
371*d5ef99ddSAndreas Gohr        'CIP' => 'CipherLab',
372*d5ef99ddSAndreas Gohr        'CIT' => 'Citycall',
373*d5ef99ddSAndreas Gohr        '1C'  => 'Chuwi',
374*d5ef99ddSAndreas Gohr        'L8'  => 'Clarmin',
375*d5ef99ddSAndreas Gohr        '25'  => 'Claresta',
376*d5ef99ddSAndreas Gohr        'CLA' => 'CLAYTON',
377*d5ef99ddSAndreas Gohr        'CLT' => 'Clovertek',
378*d5ef99ddSAndreas Gohr        '1J'  => 'Cloud',
379*d5ef99ddSAndreas Gohr        'CD'  => 'Cloudfone',
380*d5ef99ddSAndreas Gohr        '6C'  => 'Cloudpad',
381*d5ef99ddSAndreas Gohr        'C0'  => 'Clout',
382*d5ef99ddSAndreas Gohr        'CN'  => 'CnM',
383*d5ef99ddSAndreas Gohr        'CY'  => 'Coby Kyros',
384*d5ef99ddSAndreas Gohr        'XC'  => 'Cobalt',
385*d5ef99ddSAndreas Gohr        'C6'  => 'Comio',
386*d5ef99ddSAndreas Gohr        'COM' => 'CommScope',
387*d5ef99ddSAndreas Gohr        'CL'  => 'Compal',
388*d5ef99ddSAndreas Gohr        'CQ'  => 'Compaq',
389*d5ef99ddSAndreas Gohr        'C7'  => 'ComTrade Tesla',
390*d5ef99ddSAndreas Gohr        '7Z'  => 'COMPUMAX',
391*d5ef99ddSAndreas Gohr        'C8'  => 'Concord',
392*d5ef99ddSAndreas Gohr        'CC'  => 'ConCorde',
393*d5ef99ddSAndreas Gohr        'C5'  => 'Condor',
394*d5ef99ddSAndreas Gohr        'C5M' => 'C5 Mobile',
395*d5ef99ddSAndreas Gohr        'COE' => 'Cogeco',
396*d5ef99ddSAndreas Gohr        '4C'  => 'Conquest',
397*d5ef99ddSAndreas Gohr        'COG' => 'CONSUNG',
398*d5ef99ddSAndreas Gohr        '3C'  => 'Contixo',
399*d5ef99ddSAndreas Gohr        '8C'  => 'Connex',
400*d5ef99ddSAndreas Gohr        '53'  => 'Connectce',
401*d5ef99ddSAndreas Gohr        'CON' => 'Conceptum',
402*d5ef99ddSAndreas Gohr        'CED' => 'Continental Edison',
403*d5ef99ddSAndreas Gohr        '9C'  => 'Colors',
404*d5ef99ddSAndreas Gohr        'COL' => 'COLORROOM',
405*d5ef99ddSAndreas Gohr        'CAA' => 'coocaa',
406*d5ef99ddSAndreas Gohr        'CO'  => 'Coolpad',
407*d5ef99ddSAndreas Gohr        'COO' => 'Coopers',
408*d5ef99ddSAndreas Gohr        'CDE' => 'COOD-E',
409*d5ef99ddSAndreas Gohr        '4R'  => 'CORN',
410*d5ef99ddSAndreas Gohr        '1O'  => 'Cosmote',
411*d5ef99ddSAndreas Gohr        'CW'  => 'Cowon',
412*d5ef99ddSAndreas Gohr        '75'  => 'Covia',
413*d5ef99ddSAndreas Gohr        'QG'  => 'COYOTE',
414*d5ef99ddSAndreas Gohr        'CKK' => 'CKK Mobile',
415*d5ef99ddSAndreas Gohr        'YW'  => 'ClearPHONE',
416*d5ef99ddSAndreas Gohr        '33'  => 'Clementoni',
417*d5ef99ddSAndreas Gohr        'CR'  => 'CreNova',
418*d5ef99ddSAndreas Gohr        'CX'  => 'Crescent',
419*d5ef99ddSAndreas Gohr        'CRE' => 'Crestron',
420*d5ef99ddSAndreas Gohr        'CK'  => 'Cricket',
421*d5ef99ddSAndreas Gohr        'CM'  => 'Crius Mea',
422*d5ef99ddSAndreas Gohr        'CMF' => 'CMF',
423*d5ef99ddSAndreas Gohr        '0C'  => 'Crony',
424*d5ef99ddSAndreas Gohr        'C1'  => 'Crosscall',
425*d5ef99ddSAndreas Gohr        '4W'  => 'Crown',
426*d5ef99ddSAndreas Gohr        'CTR' => 'Ctroniq',
427*d5ef99ddSAndreas Gohr        'CU'  => 'Cube',
428*d5ef99ddSAndreas Gohr        'CB'  => 'CUBOT',
429*d5ef99ddSAndreas Gohr        'CUI' => 'Cuiud',
430*d5ef99ddSAndreas Gohr        'CUL' => 'Cultraview',
431*d5ef99ddSAndreas Gohr        'CV'  => 'CVTE',
432*d5ef99ddSAndreas Gohr        'CWO' => 'Cwowdefu',
433*d5ef99ddSAndreas Gohr        'CX0' => 'CX',
434*d5ef99ddSAndreas Gohr        'C4'  => 'Cyrus',
435*d5ef99ddSAndreas Gohr        'D5'  => 'Daewoo',
436*d5ef99ddSAndreas Gohr        'DA'  => 'Danew',
437*d5ef99ddSAndreas Gohr        'DAN' => 'Dany',
438*d5ef99ddSAndreas Gohr        'DA1' => 'DangcapHD',
439*d5ef99ddSAndreas Gohr        'DAR' => 'Daria',
440*d5ef99ddSAndreas Gohr        'DT'  => 'Datang',
441*d5ef99ddSAndreas Gohr        'D7'  => 'Datawind',
442*d5ef99ddSAndreas Gohr        '7D'  => 'Datamini',
443*d5ef99ddSAndreas Gohr        '6D'  => 'Datalogic',
444*d5ef99ddSAndreas Gohr        'D1'  => 'Datsun',
445*d5ef99ddSAndreas Gohr        'DZ'  => 'Dazen',
446*d5ef99ddSAndreas Gohr        'DAS' => 'DASS',
447*d5ef99ddSAndreas Gohr        'DAW' => 'Dawlance',
448*d5ef99ddSAndreas Gohr        'DB'  => 'Dbtel',
449*d5ef99ddSAndreas Gohr        'DBP' => 'DbPhone',
450*d5ef99ddSAndreas Gohr        'DCO' => 'Dcode',
451*d5ef99ddSAndreas Gohr        'DL'  => 'Dell',
452*d5ef99ddSAndreas Gohr        'DL0' => 'DL',
453*d5ef99ddSAndreas Gohr        'DE'  => 'Denver',
454*d5ef99ddSAndreas Gohr        'DS'  => 'Desay',
455*d5ef99ddSAndreas Gohr        'DSD' => 'DSDevices',
456*d5ef99ddSAndreas Gohr        'DSI' => 'DSIC',
457*d5ef99ddSAndreas Gohr        'DW'  => 'DeWalt',
458*d5ef99ddSAndreas Gohr        'DX'  => 'DEXP',
459*d5ef99ddSAndreas Gohr        'DEY' => 'DEYI',
460*d5ef99ddSAndreas Gohr        'DEN' => 'Denali',
461*d5ef99ddSAndreas Gohr        'DEA' => 'DEALDIG',
462*d5ef99ddSAndreas Gohr        'DNK' => 'Denka',
463*d5ef99ddSAndreas Gohr        '8D'  => 'DF',
464*d5ef99ddSAndreas Gohr        'DGT' => 'DGTEC',
465*d5ef99ddSAndreas Gohr        'DG'  => 'Dialog',
466*d5ef99ddSAndreas Gohr        'DIA' => 'DIALN',
467*d5ef99ddSAndreas Gohr        'DI'  => 'Dicam',
468*d5ef99ddSAndreas Gohr        'D4'  => 'Digi',
469*d5ef99ddSAndreas Gohr        'D3'  => 'Digicel',
470*d5ef99ddSAndreas Gohr        'DDG' => 'Digidragon',
471*d5ef99ddSAndreas Gohr        'DH'  => 'Digihome',
472*d5ef99ddSAndreas Gohr        'DD'  => 'Digiland',
473*d5ef99ddSAndreas Gohr        'DIJ' => 'DIJITSU',
474*d5ef99ddSAndreas Gohr        'DIG' => 'Digit4G',
475*d5ef99ddSAndreas Gohr        'DIC' => 'DIGICOM',
476*d5ef99ddSAndreas Gohr        'Q0'  => 'DIGIFORS',
477*d5ef99ddSAndreas Gohr        'DIK' => 'DIKOM',
478*d5ef99ddSAndreas Gohr        'DQ'  => 'DISH',
479*d5ef99ddSAndreas Gohr        'DIS' => 'Disney',
480*d5ef99ddSAndreas Gohr        '9D'  => 'Ditecma',
481*d5ef99ddSAndreas Gohr        'D2'  => 'Digma',
482*d5ef99ddSAndreas Gohr        '1D'  => 'Diva',
483*d5ef99ddSAndreas Gohr        'DIV' => 'DiverMax',
484*d5ef99ddSAndreas Gohr        'D6'  => 'Divisat',
485*d5ef99ddSAndreas Gohr        'DIO' => 'DIORA',
486*d5ef99ddSAndreas Gohr        'DIF' => 'Diofox',
487*d5ef99ddSAndreas Gohr        'X6'  => 'DIXON',
488*d5ef99ddSAndreas Gohr        'DIM' => 'DIMO',
489*d5ef99ddSAndreas Gohr        '5D'  => 'DING DING',
490*d5ef99ddSAndreas Gohr        'DIN' => 'Dinax',
491*d5ef99ddSAndreas Gohr        'DNA' => 'Dinalink',
492*d5ef99ddSAndreas Gohr        'DM'  => 'DMM',
493*d5ef99ddSAndreas Gohr        'DMO' => 'DMOAO',
494*d5ef99ddSAndreas Gohr        'DN'  => 'DNS',
495*d5ef99ddSAndreas Gohr        'DC'  => 'DoCoMo',
496*d5ef99ddSAndreas Gohr        'DF'  => 'Doffler',
497*d5ef99ddSAndreas Gohr        'D9'  => 'Dolamee',
498*d5ef99ddSAndreas Gohr        'DO'  => 'Doogee',
499*d5ef99ddSAndreas Gohr        'D0'  => 'Doopro',
500*d5ef99ddSAndreas Gohr        'DV'  => 'Doov',
501*d5ef99ddSAndreas Gohr        'DOM' => 'Dom.ru',
502*d5ef99ddSAndreas Gohr        'DP'  => 'Dopod',
503*d5ef99ddSAndreas Gohr        'DPA' => 'DPA',
504*d5ef99ddSAndreas Gohr        'JQ'  => 'Doppio',
505*d5ef99ddSAndreas Gohr        'DR'  => 'Doro',
506*d5ef99ddSAndreas Gohr        'DOR' => 'Dora',
507*d5ef99ddSAndreas Gohr        'ZD'  => 'DORLAND',
508*d5ef99ddSAndreas Gohr        'DRO' => 'Droidlogic',
509*d5ef99ddSAndreas Gohr        'D8'  => 'Droxio',
510*d5ef99ddSAndreas Gohr        'DJ'  => 'Dragon Touch',
511*d5ef99ddSAndreas Gohr        'DRA' => 'DRAGON',
512*d5ef99ddSAndreas Gohr        'DY'  => 'Dreamgate',
513*d5ef99ddSAndreas Gohr        'DRE' => 'DreamTab',
514*d5ef99ddSAndreas Gohr        'DR1' => 'DreamStar',
515*d5ef99ddSAndreas Gohr        'DTA' => 'Dtac',
516*d5ef99ddSAndreas Gohr        'DU'  => 'Dune HD',
517*d5ef99ddSAndreas Gohr        'DUO' => 'DuoTV',
518*d5ef99ddSAndreas Gohr        'UD'  => 'DUNNS Mobile',
519*d5ef99ddSAndreas Gohr        'DUU' => 'Duubee',
520*d5ef99ddSAndreas Gohr        'DUR' => 'Durabook',
521*d5ef99ddSAndreas Gohr        'DUD' => 'DUDU AUTO',
522*d5ef99ddSAndreas Gohr        'DYO' => 'Dyon',
523*d5ef99ddSAndreas Gohr        'DYM' => 'Dykemann',
524*d5ef99ddSAndreas Gohr        'DTE' => 'D-Tech',
525*d5ef99ddSAndreas Gohr        'DLI' => 'D-Link',
526*d5ef99ddSAndreas Gohr        'ENO' => 'eNOVA',
527*d5ef99ddSAndreas Gohr        'IN2' => 'iNOVA',
528*d5ef99ddSAndreas Gohr        'IN3' => 'inovo',
529*d5ef99ddSAndreas Gohr        'INH' => 'Inhon',
530*d5ef99ddSAndreas Gohr        'IND' => 'Indurama',
531*d5ef99ddSAndreas Gohr        'EB'  => 'E-Boda',
532*d5ef99ddSAndreas Gohr        'EJ'  => 'Engel',
533*d5ef99ddSAndreas Gohr        'ENA' => 'ENACOM',
534*d5ef99ddSAndreas Gohr        'END' => 'ENDURO',
535*d5ef99ddSAndreas Gohr        'ENI' => 'ENIE',
536*d5ef99ddSAndreas Gohr        '2E'  => 'E-Ceros',
537*d5ef99ddSAndreas Gohr        'E8'  => 'E-tel',
538*d5ef99ddSAndreas Gohr        'ETH' => 'E-TACHI',
539*d5ef99ddSAndreas Gohr        'EAS' => 'EAS Electric',
540*d5ef99ddSAndreas Gohr        'EP'  => 'Easypix',
541*d5ef99ddSAndreas Gohr        'EQ'  => 'Eagle',
542*d5ef99ddSAndreas Gohr        'EGS' => 'EagleSoar',
543*d5ef99ddSAndreas Gohr        'EA'  => 'EBEST',
544*d5ef99ddSAndreas Gohr        'YC'  => 'EBEN',
545*d5ef99ddSAndreas Gohr        'E4'  => 'Echo Mobiles',
546*d5ef99ddSAndreas Gohr        'EQ1' => 'Equator',
547*d5ef99ddSAndreas Gohr        'ES'  => 'ECS',
548*d5ef99ddSAndreas Gohr        '35'  => 'ECON',
549*d5ef99ddSAndreas Gohr        'ECC' => 'ECOO',
550*d5ef99ddSAndreas Gohr        'ZZ'  => 'ecom',
551*d5ef99ddSAndreas Gohr        'ECS' => 'EcoStar',
552*d5ef99ddSAndreas Gohr        'EDE' => 'Edenwood',
553*d5ef99ddSAndreas Gohr        'E6'  => 'EE',
554*d5ef99ddSAndreas Gohr        'GW'  => 'EGL',
555*d5ef99ddSAndreas Gohr        'EGO' => 'EGOTEK',
556*d5ef99ddSAndreas Gohr        'EFT' => 'EFT',
557*d5ef99ddSAndreas Gohr        'EK'  => 'EKO',
558*d5ef99ddSAndreas Gohr        'EY'  => 'Einstein',
559*d5ef99ddSAndreas Gohr        'EM'  => 'Eks Mobility',
560*d5ef99ddSAndreas Gohr        'UE'  => 'Ematic',
561*d5ef99ddSAndreas Gohr        'EMR' => 'Emporia',
562*d5ef99ddSAndreas Gohr        '4K'  => 'EKT',
563*d5ef99ddSAndreas Gohr        'EKI' => 'EKINOX',
564*d5ef99ddSAndreas Gohr        '7E'  => 'ELARI',
565*d5ef99ddSAndreas Gohr        '03'  => 'Electroneum',
566*d5ef99ddSAndreas Gohr        'Z8'  => 'ELECTRONIA',
567*d5ef99ddSAndreas Gohr        'ELG' => 'ELE-GATE',
568*d5ef99ddSAndreas Gohr        'EL1' => 'Elecson',
569*d5ef99ddSAndreas Gohr        'ELK' => 'Elektroland',
570*d5ef99ddSAndreas Gohr        'L0'  => 'Element',
571*d5ef99ddSAndreas Gohr        'EG'  => 'Elenberg',
572*d5ef99ddSAndreas Gohr        'EL'  => 'Elephone',
573*d5ef99ddSAndreas Gohr        'JE'  => 'Elekta',
574*d5ef99ddSAndreas Gohr        'ELE' => 'Elevate',
575*d5ef99ddSAndreas Gohr        'ELS' => 'Elista',
576*d5ef99ddSAndreas Gohr        'ELT' => 'elit',
577*d5ef99ddSAndreas Gohr        '4E'  => 'Eltex',
578*d5ef99ddSAndreas Gohr        'ELM' => 'Elong Mobile',
579*d5ef99ddSAndreas Gohr        'ED'  => 'Energizer',
580*d5ef99ddSAndreas Gohr        'E1'  => 'Energy Sistem',
581*d5ef99ddSAndreas Gohr        '3E'  => 'Enot',
582*d5ef99ddSAndreas Gohr        'ENT' => 'Entity',
583*d5ef99ddSAndreas Gohr        'ENV' => 'Envizen',
584*d5ef99ddSAndreas Gohr        '8E'  => 'Epik One',
585*d5ef99ddSAndreas Gohr        'EPK' => 'Epic',
586*d5ef99ddSAndreas Gohr        'XP'  => 'Epson',
587*d5ef99ddSAndreas Gohr        'EPH' => 'Ephone',
588*d5ef99ddSAndreas Gohr        'E7'  => 'Ergo',
589*d5ef99ddSAndreas Gohr        'EC'  => 'Ericsson',
590*d5ef99ddSAndreas Gohr        '05'  => 'Erisson',
591*d5ef99ddSAndreas Gohr        'ER'  => 'Ericy',
592*d5ef99ddSAndreas Gohr        'EE'  => 'Essential',
593*d5ef99ddSAndreas Gohr        'E2'  => 'Essentielb',
594*d5ef99ddSAndreas Gohr        '6E'  => 'eSTAR',
595*d5ef99ddSAndreas Gohr        'ETO' => 'ETOE',
596*d5ef99ddSAndreas Gohr        'EN'  => 'Eton',
597*d5ef99ddSAndreas Gohr        'ET'  => 'eTouch',
598*d5ef99ddSAndreas Gohr        '1E'  => 'Etuline',
599*d5ef99ddSAndreas Gohr        'EHL' => 'Ehlel',
600*d5ef99ddSAndreas Gohr        'EU'  => 'Eurostar',
601*d5ef99ddSAndreas Gohr        '4J'  => 'Eurocase',
602*d5ef99ddSAndreas Gohr        'EUR' => 'EUROLUX',
603*d5ef99ddSAndreas Gohr        'EUD' => 'Eudora',
604*d5ef99ddSAndreas Gohr        'E9'  => 'Evercoss',
605*d5ef99ddSAndreas Gohr        'EV'  => 'Evertek',
606*d5ef99ddSAndreas Gohr        'EVE' => 'Everest',
607*d5ef99ddSAndreas Gohr        'EV1' => 'Everex',
608*d5ef99ddSAndreas Gohr        'EVR' => 'Everis',
609*d5ef99ddSAndreas Gohr        'EVF' => 'Everfine',
610*d5ef99ddSAndreas Gohr        'E3'  => 'Evolio',
611*d5ef99ddSAndreas Gohr        'EO'  => 'Evolveo',
612*d5ef99ddSAndreas Gohr        '0Q'  => 'Evoo',
613*d5ef99ddSAndreas Gohr        '5U'  => 'EVPAD',
614*d5ef99ddSAndreas Gohr        'EVV' => 'evvoli',
615*d5ef99ddSAndreas Gohr        'E0'  => 'EvroMedia',
616*d5ef99ddSAndreas Gohr        'XE'  => 'ExMobile',
617*d5ef99ddSAndreas Gohr        '4Z'  => 'Exmart',
618*d5ef99ddSAndreas Gohr        'EH'  => 'EXO',
619*d5ef99ddSAndreas Gohr        'EX'  => 'Explay',
620*d5ef99ddSAndreas Gohr        'EXP' => 'Express LUCK',
621*d5ef99ddSAndreas Gohr        'E5'  => 'Extrem',
622*d5ef99ddSAndreas Gohr        'EXL' => 'ExtraLink',
623*d5ef99ddSAndreas Gohr        'EF'  => 'EXCEED',
624*d5ef99ddSAndreas Gohr        'QE'  => 'EWIS',
625*d5ef99ddSAndreas Gohr        'EI'  => 'Ezio',
626*d5ef99ddSAndreas Gohr        'EZ'  => 'Ezze',
627*d5ef99ddSAndreas Gohr        'UF'  => 'EYU',
628*d5ef99ddSAndreas Gohr        'EYE' => 'Eyemoo',
629*d5ef99ddSAndreas Gohr        'UE1' => 'UE',
630*d5ef99ddSAndreas Gohr        '5F'  => 'F150',
631*d5ef99ddSAndreas Gohr        'FPS' => 'F+',
632*d5ef99ddSAndreas Gohr        'F6'  => 'Facebook',
633*d5ef99ddSAndreas Gohr        'FAC' => 'Facetel',
634*d5ef99ddSAndreas Gohr        'FA1' => 'Facime',
635*d5ef99ddSAndreas Gohr        'FA'  => 'Fairphone',
636*d5ef99ddSAndreas Gohr        'FM'  => 'Famoco',
637*d5ef99ddSAndreas Gohr        'FAM' => 'Famous',
638*d5ef99ddSAndreas Gohr        '17'  => 'FarEasTone',
639*d5ef99ddSAndreas Gohr        '9R'  => 'FaRao Pro',
640*d5ef99ddSAndreas Gohr        'FAR' => 'Farassoo',
641*d5ef99ddSAndreas Gohr        'FB'  => 'Fantec',
642*d5ef99ddSAndreas Gohr        'FE'  => 'Fengxiang',
643*d5ef99ddSAndreas Gohr        'FEN' => 'Fenoti',
644*d5ef99ddSAndreas Gohr        'F7'  => 'Fero',
645*d5ef99ddSAndreas Gohr        '67'  => 'FEONAL',
646*d5ef99ddSAndreas Gohr        'FI'  => 'FiGO',
647*d5ef99ddSAndreas Gohr        'J9'  => 'FiGi',
648*d5ef99ddSAndreas Gohr        'FIG' => 'Figgers',
649*d5ef99ddSAndreas Gohr        'F9'  => 'FiiO',
650*d5ef99ddSAndreas Gohr        'F1'  => 'FinePower',
651*d5ef99ddSAndreas Gohr        'FX'  => 'Finlux',
652*d5ef99ddSAndreas Gohr        'F3'  => 'FireFly Mobile',
653*d5ef99ddSAndreas Gohr        'F8'  => 'FISE',
654*d5ef99ddSAndreas Gohr        'FIS' => 'Fision',
655*d5ef99ddSAndreas Gohr        'FIT' => 'FITCO',
656*d5ef99ddSAndreas Gohr        'FLM' => 'Filimo',
657*d5ef99ddSAndreas Gohr        'FIL' => 'FILIX',
658*d5ef99ddSAndreas Gohr        'FIN' => 'FINIX',
659*d5ef99ddSAndreas Gohr        'FL'  => 'Fly',
660*d5ef99ddSAndreas Gohr        'QC'  => 'FLYCAT',
661*d5ef99ddSAndreas Gohr        'FLY' => 'FLYCOAY',
662*d5ef99ddSAndreas Gohr        'FLU' => 'Fluo',
663*d5ef99ddSAndreas Gohr        'FN'  => 'FNB',
664*d5ef99ddSAndreas Gohr        'FOB' => 'Fobem',
665*d5ef99ddSAndreas Gohr        'FD'  => 'Fondi',
666*d5ef99ddSAndreas Gohr        '0F'  => 'Fourel',
667*d5ef99ddSAndreas Gohr        '44'  => 'Four Mobile',
668*d5ef99ddSAndreas Gohr        'F0'  => 'Fonos',
669*d5ef99ddSAndreas Gohr        'F0N' => 'FONTEL',
670*d5ef99ddSAndreas Gohr        'F2'  => 'FORME',
671*d5ef99ddSAndreas Gohr        'FRM' => 'Formovie',
672*d5ef99ddSAndreas Gohr        'F5'  => 'Formuler',
673*d5ef99ddSAndreas Gohr        'FR'  => 'Forstar',
674*d5ef99ddSAndreas Gohr        'RF'  => 'Fortis',
675*d5ef99ddSAndreas Gohr        'FRT' => 'FortuneShip',
676*d5ef99ddSAndreas Gohr        'FO'  => 'Foxconn',
677*d5ef99ddSAndreas Gohr        'FOD' => 'FoxxD',
678*d5ef99ddSAndreas Gohr        'FJ'  => 'FOODO',
679*d5ef99ddSAndreas Gohr        'FOS' => 'FOSSiBOT',
680*d5ef99ddSAndreas Gohr        'FRE' => 'free',
681*d5ef99ddSAndreas Gohr        'FT'  => 'Freetel',
682*d5ef99ddSAndreas Gohr        'FTH' => 'FRESH',
683*d5ef99ddSAndreas Gohr        'FEY' => 'FreeYond',
684*d5ef99ddSAndreas Gohr        'FRU' => 'Frunsi',
685*d5ef99ddSAndreas Gohr        'F4'  => 'F&U',
686*d5ef99ddSAndreas Gohr        '1F'  => 'FMT',
687*d5ef99ddSAndreas Gohr        'FPT' => 'FPT',
688*d5ef99ddSAndreas Gohr        'FG'  => 'Fuego',
689*d5ef99ddSAndreas Gohr        'FUJ' => 'FUJICOM',
690*d5ef99ddSAndreas Gohr        'FU'  => 'Fujitsu',
691*d5ef99ddSAndreas Gohr        '4F'  => 'Funai',
692*d5ef99ddSAndreas Gohr        '5J'  => 'Fusion5',
693*d5ef99ddSAndreas Gohr        'FF'  => 'Future Mobile Technology',
694*d5ef99ddSAndreas Gohr        'FFF' => 'FFF SmartLife',
695*d5ef99ddSAndreas Gohr        'FW'  => 'FNF',
696*d5ef99ddSAndreas Gohr        'FXT' => 'Fxtec',
697*d5ef99ddSAndreas Gohr        'GT'  => 'G-TiDE',
698*d5ef99ddSAndreas Gohr        'G9'  => 'G-Touch',
699*d5ef99ddSAndreas Gohr        'GFO' => 'Gfone',
700*d5ef99ddSAndreas Gohr        'GTM' => 'GTMEDIA',
701*d5ef99ddSAndreas Gohr        'GTX' => 'GTX',
702*d5ef99ddSAndreas Gohr        'GDL' => 'GDL',
703*d5ef99ddSAndreas Gohr        '0G'  => 'GFive',
704*d5ef99ddSAndreas Gohr        'GM'  => 'Garmin-Asus',
705*d5ef99ddSAndreas Gohr        'GA'  => 'Gateway',
706*d5ef99ddSAndreas Gohr        '99'  => 'Galaxy Innovations',
707*d5ef99ddSAndreas Gohr        'GA1' => 'Galactic',
708*d5ef99ddSAndreas Gohr        'GAT' => 'Galatec',
709*d5ef99ddSAndreas Gohr        'GAM' => 'Gamma',
710*d5ef99ddSAndreas Gohr        'GAZ' => 'Gazer',
711*d5ef99ddSAndreas Gohr        'GAL' => 'Gazal',
712*d5ef99ddSAndreas Gohr        'GEA' => 'Geanee',
713*d5ef99ddSAndreas Gohr        'GEN' => 'Geant',
714*d5ef99ddSAndreas Gohr        'GD'  => 'Gemini',
715*d5ef99ddSAndreas Gohr        'GN'  => 'General Mobile',
716*d5ef99ddSAndreas Gohr        '2G'  => 'Genesis',
717*d5ef99ddSAndreas Gohr        'GEP' => 'Geo Phone',
718*d5ef99ddSAndreas Gohr        'G2'  => 'GEOFOX',
719*d5ef99ddSAndreas Gohr        'GE'  => 'Geotel',
720*d5ef99ddSAndreas Gohr        'Q4'  => 'Geotex',
721*d5ef99ddSAndreas Gohr        'GEO' => 'GEOZON',
722*d5ef99ddSAndreas Gohr        'GNO' => 'Getnord',
723*d5ef99ddSAndreas Gohr        'GER' => 'Gear Mobile',
724*d5ef99ddSAndreas Gohr        'GH'  => 'Ghia',
725*d5ef99ddSAndreas Gohr        '2C'  => 'Ghong',
726*d5ef99ddSAndreas Gohr        'GJ'  => 'Ghost',
727*d5ef99ddSAndreas Gohr        'GG'  => 'Gigabyte',
728*d5ef99ddSAndreas Gohr        'GS'  => 'Gigaset',
729*d5ef99ddSAndreas Gohr        'GZ'  => 'Ginzzu',
730*d5ef99ddSAndreas Gohr        '1G'  => 'Gini',
731*d5ef99ddSAndreas Gohr        'GI'  => 'Gionee',
732*d5ef99ddSAndreas Gohr        'GIR' => 'GIRASOLE',
733*d5ef99ddSAndreas Gohr        'G4'  => 'Globex',
734*d5ef99ddSAndreas Gohr        'GLB' => 'Globmall',
735*d5ef99ddSAndreas Gohr        'GME' => 'GlocalMe',
736*d5ef99ddSAndreas Gohr        '38'  => 'GLONYX',
737*d5ef99ddSAndreas Gohr        'U6'  => 'Glofiish',
738*d5ef99ddSAndreas Gohr        'GLO' => 'Glory Star',
739*d5ef99ddSAndreas Gohr        'GNE' => 'GN Electronics',
740*d5ef99ddSAndreas Gohr        'G7'  => 'GoGEN',
741*d5ef99ddSAndreas Gohr        'GC'  => 'GOCLEVER',
742*d5ef99ddSAndreas Gohr        '5G'  => 'Gocomma',
743*d5ef99ddSAndreas Gohr        'GB'  => 'Gol Mobile',
744*d5ef99ddSAndreas Gohr        'GL'  => 'Goly',
745*d5ef99ddSAndreas Gohr        'GOL' => 'GoldMaster',
746*d5ef99ddSAndreas Gohr        'GOS' => 'GoldStar',
747*d5ef99ddSAndreas Gohr        'GOB' => 'GOLDBERG',
748*d5ef99ddSAndreas Gohr        'GX'  => 'GLX',
749*d5ef99ddSAndreas Gohr        'G5'  => 'Gome',
750*d5ef99ddSAndreas Gohr        'G1'  => 'GoMobile',
751*d5ef99ddSAndreas Gohr        'GO'  => 'Google',
752*d5ef99ddSAndreas Gohr        'G0'  => 'Goophone',
753*d5ef99ddSAndreas Gohr        '6G'  => 'Gooweel',
754*d5ef99ddSAndreas Gohr        'GOO' => 'GOODTEL',
755*d5ef99ddSAndreas Gohr        'GO1' => 'GOtv',
756*d5ef99ddSAndreas Gohr        'GPL' => 'G-PLUS',
757*d5ef99ddSAndreas Gohr        '8G'  => 'Gplus',
758*d5ef99ddSAndreas Gohr        'GR'  => 'Gradiente',
759*d5ef99ddSAndreas Gohr        'GRE' => 'Graetz',
760*d5ef99ddSAndreas Gohr        'GP'  => 'Grape',
761*d5ef99ddSAndreas Gohr        'G6'  => 'Gree',
762*d5ef99ddSAndreas Gohr        'GRA' => 'Great Asia',
763*d5ef99ddSAndreas Gohr        '3G'  => 'Greentel',
764*d5ef99ddSAndreas Gohr        'GRO' => 'Green Orange',
765*d5ef99ddSAndreas Gohr        'GRL' => 'Green Lion',
766*d5ef99ddSAndreas Gohr        'GR1' => 'GroBerwert',
767*d5ef99ddSAndreas Gohr        'GF'  => 'Gretel',
768*d5ef99ddSAndreas Gohr        '82'  => 'Gresso',
769*d5ef99ddSAndreas Gohr        'GRB' => 'Grünberg',
770*d5ef99ddSAndreas Gohr        'GU'  => 'Grundig',
771*d5ef99ddSAndreas Gohr        'GV'  => 'Gtel',
772*d5ef99ddSAndreas Gohr        'CUO' => 'Guophone',
773*d5ef99ddSAndreas Gohr        'CUD' => 'CUD',
774*d5ef99ddSAndreas Gohr        'GVC' => 'GVC Pro',
775*d5ef99ddSAndreas Gohr        'H13' => 'H133',
776*d5ef99ddSAndreas Gohr        '9Z'  => 'H96',
777*d5ef99ddSAndreas Gohr        'HF'  => 'Hafury',
778*d5ef99ddSAndreas Gohr        '9F'  => 'HAOVM',
779*d5ef99ddSAndreas Gohr        'HAQ' => 'HAOQIN',
780*d5ef99ddSAndreas Gohr        'HA'  => 'Haier',
781*d5ef99ddSAndreas Gohr        'HEC' => 'HEC',
782*d5ef99ddSAndreas Gohr        'XH'  => 'Haipai',
783*d5ef99ddSAndreas Gohr        'XHU' => 'Haixu',
784*d5ef99ddSAndreas Gohr        'HAN' => 'Handheld',
785*d5ef99ddSAndreas Gohr        'HE'  => 'HannSpree',
786*d5ef99ddSAndreas Gohr        'HNS' => 'Hanseatic',
787*d5ef99ddSAndreas Gohr        'HA2' => 'Hanson',
788*d5ef99ddSAndreas Gohr        'HK'  => 'Hardkernel',
789*d5ef99ddSAndreas Gohr        'HAR' => 'Harper',
790*d5ef99ddSAndreas Gohr        'HA1' => 'Hartens',
791*d5ef99ddSAndreas Gohr        'HS'  => 'Hasee',
792*d5ef99ddSAndreas Gohr        '8H'  => 'Hamlet',
793*d5ef99ddSAndreas Gohr        'HAM' => 'Hammer',
794*d5ef99ddSAndreas Gohr        'HAT' => 'Hathway',
795*d5ef99ddSAndreas Gohr        'HAV' => 'HAVIT',
796*d5ef99ddSAndreas Gohr        'HEM' => 'Hemilton',
797*d5ef99ddSAndreas Gohr        'H6'  => 'Helio',
798*d5ef99ddSAndreas Gohr        'HQ'  => 'HERO',
799*d5ef99ddSAndreas Gohr        'ZH'  => 'Hezire',
800*d5ef99ddSAndreas Gohr        'HEX' => 'HexaByte',
801*d5ef99ddSAndreas Gohr        'HEW' => 'HeadWolf',
802*d5ef99ddSAndreas Gohr        'HEI' => 'Heimat',
803*d5ef99ddSAndreas Gohr        'HL'  => 'Hi-Level',
804*d5ef99ddSAndreas Gohr        '3H'  => 'Hi',
805*d5ef99ddSAndreas Gohr        'HIB' => 'Hiberg',
806*d5ef99ddSAndreas Gohr        'HBY' => 'HiBy',
807*d5ef99ddSAndreas Gohr        'HIH' => 'HiHi',
808*d5ef99ddSAndreas Gohr        'HIK' => 'HiKing',
809*d5ef99ddSAndreas Gohr        'H2'  => 'Highscreen',
810*d5ef99ddSAndreas Gohr        'Q1'  => 'High Q',
811*d5ef99ddSAndreas Gohr        'HI1' => 'HIGH1ONE',
812*d5ef99ddSAndreas Gohr        'HIG' => 'HiGrace',
813*d5ef99ddSAndreas Gohr        '1H'  => 'Hipstreet',
814*d5ef99ddSAndreas Gohr        'HIR' => 'Hiremco',
815*d5ef99ddSAndreas Gohr        'HI'  => 'Hisense',
816*d5ef99ddSAndreas Gohr        'HIP' => 'HIPER',
817*d5ef99ddSAndreas Gohr        'HC'  => 'Hitachi',
818*d5ef99ddSAndreas Gohr        'H8'  => 'Hitech',
819*d5ef99ddSAndreas Gohr        'W3'  => 'HiMax',
820*d5ef99ddSAndreas Gohr        '8X'  => 'Hi Nova',
821*d5ef99ddSAndreas Gohr        'HLL' => 'HLLO',
822*d5ef99ddSAndreas Gohr        'HKC' => 'HKC',
823*d5ef99ddSAndreas Gohr        'HMD' => 'HMD',
824*d5ef99ddSAndreas Gohr        '8W'  => 'HKPro',
825*d5ef99ddSAndreas Gohr        'HOF' => 'HOFER',
826*d5ef99ddSAndreas Gohr        'HOC' => 'hoco',
827*d5ef99ddSAndreas Gohr        'H1'  => 'Hoffmann',
828*d5ef99ddSAndreas Gohr        'HOM' => 'Homatics',
829*d5ef99ddSAndreas Gohr        'H0'  => 'Hometech',
830*d5ef99ddSAndreas Gohr        'HLB' => 'HOLLEBERG',
831*d5ef99ddSAndreas Gohr        'HM'  => 'Homtom',
832*d5ef99ddSAndreas Gohr        'HM1' => 'HOMII',
833*d5ef99ddSAndreas Gohr        'HOP' => 'Hopeland',
834*d5ef99ddSAndreas Gohr        'HZ'  => 'Hoozo',
835*d5ef99ddSAndreas Gohr        'HOR' => 'Horion',
836*d5ef99ddSAndreas Gohr        'H7'  => 'Horizon',
837*d5ef99ddSAndreas Gohr        '4H'  => 'Horizont',
838*d5ef99ddSAndreas Gohr        'HO'  => 'Hosin',
839*d5ef99ddSAndreas Gohr        'H3'  => 'Hotel',
840*d5ef99ddSAndreas Gohr        'HV'  => 'Hotwav',
841*d5ef99ddSAndreas Gohr        'U8'  => 'Hot Pepper',
842*d5ef99ddSAndreas Gohr        'HOT' => 'HOTACK',
843*d5ef99ddSAndreas Gohr        'JH'  => 'HOTREALS',
844*d5ef99ddSAndreas Gohr        'HW'  => 'How',
845*d5ef99ddSAndreas Gohr        'WH'  => 'Honeywell',
846*d5ef99ddSAndreas Gohr        'HON' => 'HongTop',
847*d5ef99ddSAndreas Gohr        'HOG' => 'HONKUAHG',
848*d5ef99ddSAndreas Gohr        'HP'  => 'HP',
849*d5ef99ddSAndreas Gohr        'HDC' => 'HDC',
850*d5ef99ddSAndreas Gohr        'HT'  => 'HTC',
851*d5ef99ddSAndreas Gohr        'QZ'  => 'Huagan',
852*d5ef99ddSAndreas Gohr        'HD'  => 'Huadoo',
853*d5ef99ddSAndreas Gohr        'HG'  => 'Huavi',
854*d5ef99ddSAndreas Gohr        'HU'  => 'Huawei',
855*d5ef99ddSAndreas Gohr        'HX'  => 'Humax',
856*d5ef99ddSAndreas Gohr        'HUM' => 'Humanware',
857*d5ef99ddSAndreas Gohr        'HME' => 'HUMElab',
858*d5ef99ddSAndreas Gohr        'HR'  => 'Hurricane',
859*d5ef99ddSAndreas Gohr        'H5'  => 'Huskee',
860*d5ef99ddSAndreas Gohr        'HUG' => 'Hugerock',
861*d5ef99ddSAndreas Gohr        'HY'  => 'Hyrican',
862*d5ef99ddSAndreas Gohr        'HN'  => 'Hyundai',
863*d5ef99ddSAndreas Gohr        '7H'  => 'Hyve',
864*d5ef99ddSAndreas Gohr        'HYT' => 'Hytera',
865*d5ef99ddSAndreas Gohr        'HYK' => 'Hykker',
866*d5ef99ddSAndreas Gohr        'HYA' => 'Hyatta',
867*d5ef99ddSAndreas Gohr        'IKL' => 'I KALL',
868*d5ef99ddSAndreas Gohr        '3I'  => 'i-Cherry',
869*d5ef99ddSAndreas Gohr        'IJ'  => 'i-Joy',
870*d5ef99ddSAndreas Gohr        'IM'  => 'i-mate',
871*d5ef99ddSAndreas Gohr        'IO'  => 'i-mobile',
872*d5ef99ddSAndreas Gohr        'INN' => 'I-INN',
873*d5ef99ddSAndreas Gohr        'IPL' => 'I-Plus',
874*d5ef99ddSAndreas Gohr        'OF'  => 'iOutdoor',
875*d5ef99ddSAndreas Gohr        'IB'  => 'iBall',
876*d5ef99ddSAndreas Gohr        'IY'  => 'iBerry',
877*d5ef99ddSAndreas Gohr        '7I'  => 'iBrit',
878*d5ef99ddSAndreas Gohr        'IBO' => 'ibowin',
879*d5ef99ddSAndreas Gohr        'I2'  => 'IconBIT',
880*d5ef99ddSAndreas Gohr        'ING' => 'Icone Gold',
881*d5ef99ddSAndreas Gohr        'IC'  => 'iDroid',
882*d5ef99ddSAndreas Gohr        'IDI' => 'iDino',
883*d5ef99ddSAndreas Gohr        '6Z'  => 'iData',
884*d5ef99ddSAndreas Gohr        'IDC' => 'IDC',
885*d5ef99ddSAndreas Gohr        'IG'  => 'iGet',
886*d5ef99ddSAndreas Gohr        'IHL' => 'iHome Life',
887*d5ef99ddSAndreas Gohr        'IH'  => 'iHunt',
888*d5ef99ddSAndreas Gohr        'IA'  => 'Ikea',
889*d5ef99ddSAndreas Gohr        'IYO' => 'iYou',
890*d5ef99ddSAndreas Gohr        '8I'  => 'IKU Mobile',
891*d5ef99ddSAndreas Gohr        '2K'  => 'IKI Mobile',
892*d5ef99ddSAndreas Gohr        'IK'  => 'iKoMo',
893*d5ef99ddSAndreas Gohr        '58'  => 'iKon',
894*d5ef99ddSAndreas Gohr        '588' => 'iKonia',
895*d5ef99ddSAndreas Gohr        'I7'  => 'iLA',
896*d5ef99ddSAndreas Gohr        '2I'  => 'iLife',
897*d5ef99ddSAndreas Gohr        '1I'  => 'iMars',
898*d5ef99ddSAndreas Gohr        'IMI' => 'iMI',
899*d5ef99ddSAndreas Gohr        'U4'  => 'iMan',
900*d5ef99ddSAndreas Gohr        'ILE' => 'iLepo',
901*d5ef99ddSAndreas Gohr        'IL'  => 'IMO Mobile',
902*d5ef99ddSAndreas Gohr        'IMA' => 'Imaq',
903*d5ef99ddSAndreas Gohr        'IM1' => 'Imose',
904*d5ef99ddSAndreas Gohr        'I3'  => 'Impression',
905*d5ef99ddSAndreas Gohr        'FC'  => 'INCAR',
906*d5ef99ddSAndreas Gohr        '2H'  => 'Inch',
907*d5ef99ddSAndreas Gohr        '6I'  => 'Inco',
908*d5ef99ddSAndreas Gohr        'INK' => 'Inka',
909*d5ef99ddSAndreas Gohr        'IW'  => 'iNew',
910*d5ef99ddSAndreas Gohr        'IF'  => 'Infinix',
911*d5ef99ddSAndreas Gohr        'INF' => 'Infiniton',
912*d5ef99ddSAndreas Gohr        'IPR' => 'InfinityPro',
913*d5ef99ddSAndreas Gohr        'I0'  => 'InFocus',
914*d5ef99ddSAndreas Gohr        'IN1' => 'InFone',
915*d5ef99ddSAndreas Gohr        'II'  => 'Inkti',
916*d5ef99ddSAndreas Gohr        'MIR' => 'Infomir',
917*d5ef99ddSAndreas Gohr        '81'  => 'InfoKit',
918*d5ef99ddSAndreas Gohr        'I5'  => 'InnJoo',
919*d5ef99ddSAndreas Gohr        '26'  => 'Innos',
920*d5ef99ddSAndreas Gohr        'IN'  => 'Innostream',
921*d5ef99ddSAndreas Gohr        'I4'  => 'Inoi',
922*d5ef99ddSAndreas Gohr        'INO' => 'iNo Mobile',
923*d5ef99ddSAndreas Gohr        'IQ'  => 'INQ',
924*d5ef99ddSAndreas Gohr        'QN'  => 'iQ&T',
925*d5ef99ddSAndreas Gohr        'IS'  => 'Insignia',
926*d5ef99ddSAndreas Gohr        'YI'  => 'INSYS',
927*d5ef99ddSAndreas Gohr        'IT'  => 'Intek',
928*d5ef99ddSAndreas Gohr        'INT' => 'Intel',
929*d5ef99ddSAndreas Gohr        'IX'  => 'Intex',
930*d5ef99ddSAndreas Gohr        'IV'  => 'Inverto',
931*d5ef99ddSAndreas Gohr        '32'  => 'Invens',
932*d5ef99ddSAndreas Gohr        '4I'  => 'Invin',
933*d5ef99ddSAndreas Gohr        'IFT' => 'iFIT',
934*d5ef99ddSAndreas Gohr        'INA' => 'iNavi',
935*d5ef99ddSAndreas Gohr        'I1'  => 'iOcean',
936*d5ef99ddSAndreas Gohr        'IMU' => 'iMuz',
937*d5ef99ddSAndreas Gohr        'IP'  => 'iPro',
938*d5ef99ddSAndreas Gohr        'X9'  => 'iPEGTOP',
939*d5ef99ddSAndreas Gohr        '8Q'  => 'IQM',
940*d5ef99ddSAndreas Gohr        'Q8'  => 'IRA',
941*d5ef99ddSAndreas Gohr        'I6'  => 'Irbis',
942*d5ef99ddSAndreas Gohr        '5I'  => 'Iris',
943*d5ef99ddSAndreas Gohr        'IRE' => 'iReplace',
944*d5ef99ddSAndreas Gohr        'IR'  => 'iRola',
945*d5ef99ddSAndreas Gohr        'IU'  => 'iRulu',
946*d5ef99ddSAndreas Gohr        'IRO' => 'iRobot',
947*d5ef99ddSAndreas Gohr        '9I'  => 'iSWAG',
948*d5ef99ddSAndreas Gohr        '9J'  => 'iSafe Mobile',
949*d5ef99ddSAndreas Gohr        'IST' => 'iStar',
950*d5ef99ddSAndreas Gohr        '86'  => 'IT',
951*d5ef99ddSAndreas Gohr        'IZ'  => 'iTel',
952*d5ef99ddSAndreas Gohr        '0I'  => 'iTruck',
953*d5ef99ddSAndreas Gohr        'I8'  => 'iVA',
954*d5ef99ddSAndreas Gohr        'IE'  => 'iView',
955*d5ef99ddSAndreas Gohr        '0J'  => 'iVooMi',
956*d5ef99ddSAndreas Gohr        'UI'  => 'ivvi',
957*d5ef99ddSAndreas Gohr        'QW'  => 'iWaylink',
958*d5ef99ddSAndreas Gohr        'I9'  => 'iZotron',
959*d5ef99ddSAndreas Gohr        'IXT' => 'iXTech',
960*d5ef99ddSAndreas Gohr        'IOT' => 'IOTWE',
961*d5ef99ddSAndreas Gohr        'JA'  => 'JAY-Tech',
962*d5ef99ddSAndreas Gohr        'JAM' => 'Jambo',
963*d5ef99ddSAndreas Gohr        'KJ'  => 'Jiake',
964*d5ef99ddSAndreas Gohr        'JD'  => 'Jedi',
965*d5ef99ddSAndreas Gohr        'JEE' => 'Jeep',
966*d5ef99ddSAndreas Gohr        'J6'  => 'Jeka',
967*d5ef99ddSAndreas Gohr        'JF'  => 'JFone',
968*d5ef99ddSAndreas Gohr        'JI'  => 'Jiayu',
969*d5ef99ddSAndreas Gohr        'JG'  => 'Jinga',
970*d5ef99ddSAndreas Gohr        'JIN' => 'Jin Tu',
971*d5ef99ddSAndreas Gohr        'JX'  => 'Jio',
972*d5ef99ddSAndreas Gohr        'VJ'  => 'Jivi',
973*d5ef99ddSAndreas Gohr        'JK'  => 'JKL',
974*d5ef99ddSAndreas Gohr        'JR1' => 'JREN',
975*d5ef99ddSAndreas Gohr        'JO'  => 'Jolla',
976*d5ef99ddSAndreas Gohr        'JP'  => 'Joy',
977*d5ef99ddSAndreas Gohr        'JOY' => 'JoySurf',
978*d5ef99ddSAndreas Gohr        'UJ'  => 'Juniper Systems',
979*d5ef99ddSAndreas Gohr        'J5'  => 'Just5',
980*d5ef99ddSAndreas Gohr        'JUS' => 'JUSYEA',
981*d5ef99ddSAndreas Gohr        '7J'  => 'Jumper',
982*d5ef99ddSAndreas Gohr        'JPA' => 'JPay',
983*d5ef99ddSAndreas Gohr        'JV'  => 'JVC',
984*d5ef99ddSAndreas Gohr        'JXD' => 'JXD',
985*d5ef99ddSAndreas Gohr        'JS'  => 'Jesy',
986*d5ef99ddSAndreas Gohr        'KT'  => 'K-Touch',
987*d5ef99ddSAndreas Gohr        'KLT' => 'K-Lite',
988*d5ef99ddSAndreas Gohr        'K4'  => 'Kaan',
989*d5ef99ddSAndreas Gohr        'K7'  => 'Kaiomy',
990*d5ef99ddSAndreas Gohr        'KL'  => 'Kalley',
991*d5ef99ddSAndreas Gohr        'K6'  => 'Kanji',
992*d5ef99ddSAndreas Gohr        'KA'  => 'Karbonn',
993*d5ef99ddSAndreas Gohr        'K5'  => 'KATV1',
994*d5ef99ddSAndreas Gohr        'KAP' => 'Kapsys',
995*d5ef99ddSAndreas Gohr        'K0'  => 'Kata',
996*d5ef99ddSAndreas Gohr        'KZ'  => 'Kazam',
997*d5ef99ddSAndreas Gohr        '9K'  => 'Kazuna',
998*d5ef99ddSAndreas Gohr        'KD'  => 'KDDI',
999*d5ef99ddSAndreas Gohr        'KHA' => 'Khadas',
1000*d5ef99ddSAndreas Gohr        'KS'  => 'Kempler & Strauss',
1001*d5ef99ddSAndreas Gohr        'K3'  => 'Keneksi',
1002*d5ef99ddSAndreas Gohr        'KHI' => 'KENSHI',
1003*d5ef99ddSAndreas Gohr        'KNW' => 'KENWOOD',
1004*d5ef99ddSAndreas Gohr        'KX'  => 'Kenxinda',
1005*d5ef99ddSAndreas Gohr        'KEN' => 'Kenbo',
1006*d5ef99ddSAndreas Gohr        'KND' => 'Kendo',
1007*d5ef99ddSAndreas Gohr        'KZG' => 'KZG',
1008*d5ef99ddSAndreas Gohr        'K1'  => 'Kiano',
1009*d5ef99ddSAndreas Gohr        'KID' => 'kidiby',
1010*d5ef99ddSAndreas Gohr        '5W'  => 'Kingbox',
1011*d5ef99ddSAndreas Gohr        'KI'  => 'Kingsun',
1012*d5ef99ddSAndreas Gohr        'KIS' => 'Kinstone',
1013*d5ef99ddSAndreas Gohr        'KF'  => 'KINGZONE',
1014*d5ef99ddSAndreas Gohr        'KIN' => 'Kingstar',
1015*d5ef99ddSAndreas Gohr        '46'  => 'Kiowa',
1016*d5ef99ddSAndreas Gohr        'KV'  => 'Kivi',
1017*d5ef99ddSAndreas Gohr        '64'  => 'Kvant',
1018*d5ef99ddSAndreas Gohr        'KVA' => 'KVADRA',
1019*d5ef99ddSAndreas Gohr        '0K'  => 'Klipad',
1020*d5ef99ddSAndreas Gohr        'KNM' => 'KN Mobile',
1021*d5ef99ddSAndreas Gohr        'KC'  => 'Kocaso',
1022*d5ef99ddSAndreas Gohr        'KK'  => 'Kodak',
1023*d5ef99ddSAndreas Gohr        'KG'  => 'Kogan',
1024*d5ef99ddSAndreas Gohr        'KGT' => 'KGTEL',
1025*d5ef99ddSAndreas Gohr        'KM'  => 'Komu',
1026*d5ef99ddSAndreas Gohr        'KMC' => 'KMC',
1027*d5ef99ddSAndreas Gohr        'KO'  => 'Konka',
1028*d5ef99ddSAndreas Gohr        'KW'  => 'Konrow',
1029*d5ef99ddSAndreas Gohr        'KB'  => 'Koobee',
1030*d5ef99ddSAndreas Gohr        '7K'  => 'Koolnee',
1031*d5ef99ddSAndreas Gohr        'K9'  => 'Kooper',
1032*d5ef99ddSAndreas Gohr        'KP'  => 'KOPO',
1033*d5ef99ddSAndreas Gohr        'KR'  => 'Koridy',
1034*d5ef99ddSAndreas Gohr        'XK'  => 'Koslam',
1035*d5ef99ddSAndreas Gohr        'K2'  => 'KRONO',
1036*d5ef99ddSAndreas Gohr        'KRX' => 'Korax',
1037*d5ef99ddSAndreas Gohr        'KE'  => 'Krüger&Matz',
1038*d5ef99ddSAndreas Gohr        '5K'  => 'KREZ',
1039*d5ef99ddSAndreas Gohr        'WK'  => 'KRIP',
1040*d5ef99ddSAndreas Gohr        'KRA' => 'Kraft',
1041*d5ef99ddSAndreas Gohr        'KH'  => 'KT-Tech',
1042*d5ef99ddSAndreas Gohr        'KTC' => 'KTC',
1043*d5ef99ddSAndreas Gohr        'Z6'  => 'KUBO',
1044*d5ef99ddSAndreas Gohr        'KUG' => 'KuGou',
1045*d5ef99ddSAndreas Gohr        'K8'  => 'Kuliao',
1046*d5ef99ddSAndreas Gohr        '8K'  => 'Kult',
1047*d5ef99ddSAndreas Gohr        'KU'  => 'Kumai',
1048*d5ef99ddSAndreas Gohr        '6K'  => 'Kurio',
1049*d5ef99ddSAndreas Gohr        'KYD' => 'Kydos',
1050*d5ef99ddSAndreas Gohr        'KY'  => 'Kyocera',
1051*d5ef99ddSAndreas Gohr        'KQ'  => 'Kyowon',
1052*d5ef99ddSAndreas Gohr        '1K'  => 'Kzen',
1053*d5ef99ddSAndreas Gohr        'LQ'  => 'LAIQ',
1054*d5ef99ddSAndreas Gohr        'L6'  => 'Land Rover',
1055*d5ef99ddSAndreas Gohr        'L2'  => 'Landvo',
1056*d5ef99ddSAndreas Gohr        'LA'  => 'Lanix',
1057*d5ef99ddSAndreas Gohr        'LA1' => 'Lanin',
1058*d5ef99ddSAndreas Gohr        'LK'  => 'Lark',
1059*d5ef99ddSAndreas Gohr        'Z3'  => 'Laurus',
1060*d5ef99ddSAndreas Gohr        'LEC' => 'Lectrus',
1061*d5ef99ddSAndreas Gohr        'LAS' => 'Laser',
1062*d5ef99ddSAndreas Gohr        'LV'  => 'Lava',
1063*d5ef99ddSAndreas Gohr        'LVI' => 'Lville',
1064*d5ef99ddSAndreas Gohr        'LC'  => 'LCT',
1065*d5ef99ddSAndreas Gohr        'L5'  => 'Leagoo',
1066*d5ef99ddSAndreas Gohr        'U3'  => 'Leben',
1067*d5ef99ddSAndreas Gohr        'LEB' => 'LeBest',
1068*d5ef99ddSAndreas Gohr        'LD'  => 'Ledstar',
1069*d5ef99ddSAndreas Gohr        'LEE' => 'Leelbox',
1070*d5ef99ddSAndreas Gohr        'L1'  => 'LeEco',
1071*d5ef99ddSAndreas Gohr        '4B'  => 'Leff',
1072*d5ef99ddSAndreas Gohr        'LEG' => 'Legend',
1073*d5ef99ddSAndreas Gohr        'L4'  => 'Lemhoov',
1074*d5ef99ddSAndreas Gohr        'W9'  => 'LEMFO',
1075*d5ef99ddSAndreas Gohr        'LEM' => 'Lemco',
1076*d5ef99ddSAndreas Gohr        'LN'  => 'Lenco',
1077*d5ef99ddSAndreas Gohr        'LE'  => 'Lenovo',
1078*d5ef99ddSAndreas Gohr        'LT'  => 'Leotec',
1079*d5ef99ddSAndreas Gohr        'LP'  => 'Le Pan',
1080*d5ef99ddSAndreas Gohr        'ZJ'  => 'Leke',
1081*d5ef99ddSAndreas Gohr        'L7'  => 'Lephone',
1082*d5ef99ddSAndreas Gohr        'LZ'  => 'Lesia',
1083*d5ef99ddSAndreas Gohr        'L3'  => 'Lexand',
1084*d5ef99ddSAndreas Gohr        'LX'  => 'Lexibook',
1085*d5ef99ddSAndreas Gohr        'LG'  => 'LG',
1086*d5ef99ddSAndreas Gohr        '39'  => 'Liberton',
1087*d5ef99ddSAndreas Gohr        '5L'  => 'Linsar',
1088*d5ef99ddSAndreas Gohr        'LIN' => 'Linsay',
1089*d5ef99ddSAndreas Gohr        'LF'  => 'Lifemaxx',
1090*d5ef99ddSAndreas Gohr        'LI'  => 'Lingwin',
1091*d5ef99ddSAndreas Gohr        'LIB' => 'Lingbo',
1092*d5ef99ddSAndreas Gohr        'LIM' => 'Lime',
1093*d5ef99ddSAndreas Gohr        'LJ'  => 'L-Max',
1094*d5ef99ddSAndreas Gohr        'LW'  => 'Linnex',
1095*d5ef99ddSAndreas Gohr        'JJ'  => 'Listo',
1096*d5ef99ddSAndreas Gohr        'LNM' => 'LNMBBS',
1097*d5ef99ddSAndreas Gohr        'LO'  => 'Loewe',
1098*d5ef99ddSAndreas Gohr        'LNG' => 'LongTV',
1099*d5ef99ddSAndreas Gohr        'YL'  => 'Loview',
1100*d5ef99ddSAndreas Gohr        'LOV' => 'Lovme',
1101*d5ef99ddSAndreas Gohr        'LGN' => 'LOGAN',
1102*d5ef99ddSAndreas Gohr        '1L'  => 'Logic',
1103*d5ef99ddSAndreas Gohr        'LH'  => 'Logic Instrument',
1104*d5ef99ddSAndreas Gohr        'LM'  => 'Logicom',
1105*d5ef99ddSAndreas Gohr        'LOG' => 'Logik',
1106*d5ef99ddSAndreas Gohr        'LGT' => 'Logitech',
1107*d5ef99ddSAndreas Gohr        'GY'  => 'LOKMAT',
1108*d5ef99ddSAndreas Gohr        'LPX' => 'LPX-G',
1109*d5ef99ddSAndreas Gohr        '0L'  => 'Lumigon',
1110*d5ef99ddSAndreas Gohr        'LU'  => 'Lumus',
1111*d5ef99ddSAndreas Gohr        'LUM' => 'Lumitel',
1112*d5ef99ddSAndreas Gohr        'L9'  => 'Luna',
1113*d5ef99ddSAndreas Gohr        'LNN' => 'LUNNEN',
1114*d5ef99ddSAndreas Gohr        'LUO' => 'LUO',
1115*d5ef99ddSAndreas Gohr        'LR'  => 'Luxor',
1116*d5ef99ddSAndreas Gohr        'LY'  => 'LYF',
1117*d5ef99ddSAndreas Gohr        'LL'  => 'Leader Phone',
1118*d5ef99ddSAndreas Gohr        'LTL' => 'LYOTECH LABS',
1119*d5ef99ddSAndreas Gohr        'QL'  => 'LT Mobile',
1120*d5ef99ddSAndreas Gohr        'LW1' => 'LW',
1121*d5ef99ddSAndreas Gohr        'MQ'  => 'M.T.T.',
1122*d5ef99ddSAndreas Gohr        'MN'  => 'M4tel',
1123*d5ef99ddSAndreas Gohr        'XM'  => 'Macoox',
1124*d5ef99ddSAndreas Gohr        '92'  => 'MAC AUDIO',
1125*d5ef99ddSAndreas Gohr        'MJ'  => 'Majestic',
1126*d5ef99ddSAndreas Gohr        'FQ'  => 'Mafe',
1127*d5ef99ddSAndreas Gohr        'MAG' => 'MAG',
1128*d5ef99ddSAndreas Gohr        'MA2' => 'MAGCH',
1129*d5ef99ddSAndreas Gohr        '6Y'  => 'Magicsee',
1130*d5ef99ddSAndreas Gohr        'MA4' => 'Magenta',
1131*d5ef99ddSAndreas Gohr        '23'  => 'Magnus',
1132*d5ef99ddSAndreas Gohr        'NH'  => 'Manhattan',
1133*d5ef99ddSAndreas Gohr        'MAN' => 'Mango',
1134*d5ef99ddSAndreas Gohr        '5M'  => 'Mann',
1135*d5ef99ddSAndreas Gohr        'MA'  => 'Manta Multimedia',
1136*d5ef99ddSAndreas Gohr        'Z0'  => 'Mantra',
1137*d5ef99ddSAndreas Gohr        'J4'  => 'Mara',
1138*d5ef99ddSAndreas Gohr        'MAR' => 'Marshal',
1139*d5ef99ddSAndreas Gohr        '8Y'  => 'Massgo',
1140*d5ef99ddSAndreas Gohr        'MA1' => 'Mascom',
1141*d5ef99ddSAndreas Gohr        '2M'  => 'Masstel',
1142*d5ef99ddSAndreas Gohr        '3X'  => 'Mastertech',
1143*d5ef99ddSAndreas Gohr        'MAS' => 'Master-G',
1144*d5ef99ddSAndreas Gohr        '50'  => 'Matrix',
1145*d5ef99ddSAndreas Gohr        'MAT' => 'Matco Tools',
1146*d5ef99ddSAndreas Gohr        '7M'  => 'Maxcom',
1147*d5ef99ddSAndreas Gohr        '7M1' => 'Maxfone',
1148*d5ef99ddSAndreas Gohr        'ZM'  => 'Maximus',
1149*d5ef99ddSAndreas Gohr        '6X'  => 'Maxtron',
1150*d5ef99ddSAndreas Gohr        '0D'  => 'MAXVI',
1151*d5ef99ddSAndreas Gohr        'MAX' => 'Maxwell',
1152*d5ef99ddSAndreas Gohr        'XZ'  => 'MAXX',
1153*d5ef99ddSAndreas Gohr        'MW'  => 'Maxwest',
1154*d5ef99ddSAndreas Gohr        'M0'  => 'Maze',
1155*d5ef99ddSAndreas Gohr        'YM'  => 'Maze Speed',
1156*d5ef99ddSAndreas Gohr        '87'  => 'Malata',
1157*d5ef99ddSAndreas Gohr        'MAU' => 'Maunfeld',
1158*d5ef99ddSAndreas Gohr        'MCL' => 'McLaut',
1159*d5ef99ddSAndreas Gohr        '28'  => 'MBOX',
1160*d5ef99ddSAndreas Gohr        'FK'  => 'MBI',
1161*d5ef99ddSAndreas Gohr        'MBK' => 'MBK',
1162*d5ef99ddSAndreas Gohr        '3D'  => 'MDC Store',
1163*d5ef99ddSAndreas Gohr        '1Y'  => 'MDTV',
1164*d5ef99ddSAndreas Gohr        '09'  => 'meanIT',
1165*d5ef99ddSAndreas Gohr        'M3'  => 'Mecer',
1166*d5ef99ddSAndreas Gohr        'M3M' => 'M3 Mobile',
1167*d5ef99ddSAndreas Gohr        '0M'  => 'Mecool',
1168*d5ef99ddSAndreas Gohr        'MEC' => 'MECHEN',
1169*d5ef99ddSAndreas Gohr        'MEM' => 'MeMobile',
1170*d5ef99ddSAndreas Gohr        'MC'  => 'Mediacom',
1171*d5ef99ddSAndreas Gohr        'MD'  => 'Medion',
1172*d5ef99ddSAndreas Gohr        'M2'  => 'MEEG',
1173*d5ef99ddSAndreas Gohr        'MEG' => 'MEGA VISION',
1174*d5ef99ddSAndreas Gohr        'MCA' => 'Megacable',
1175*d5ef99ddSAndreas Gohr        'MP'  => 'MegaFon',
1176*d5ef99ddSAndreas Gohr        'MGX' => 'MEGAMAX',
1177*d5ef99ddSAndreas Gohr        'X0'  => 'mPhone',
1178*d5ef99ddSAndreas Gohr        '3M'  => 'Meitu',
1179*d5ef99ddSAndreas Gohr        'M1'  => 'Meizu',
1180*d5ef99ddSAndreas Gohr        '0E'  => 'Melrose',
1181*d5ef99ddSAndreas Gohr        'MU'  => 'Memup',
1182*d5ef99ddSAndreas Gohr        'ME'  => 'Metz',
1183*d5ef99ddSAndreas Gohr        'MEO' => 'MEO',
1184*d5ef99ddSAndreas Gohr        'MX'  => 'MEU',
1185*d5ef99ddSAndreas Gohr        'MES' => 'MESWAO',
1186*d5ef99ddSAndreas Gohr        'MI'  => 'MicroMax',
1187*d5ef99ddSAndreas Gohr        'MIP' => 'mipo',
1188*d5ef99ddSAndreas Gohr        'MS'  => 'Microsoft',
1189*d5ef99ddSAndreas Gohr        '6Q'  => 'Microtech',
1190*d5ef99ddSAndreas Gohr        'MIG' => 'Mightier',
1191*d5ef99ddSAndreas Gohr        '1X'  => 'Minix',
1192*d5ef99ddSAndreas Gohr        'OM'  => 'Mintt',
1193*d5ef99ddSAndreas Gohr        'MIN' => 'Mint',
1194*d5ef99ddSAndreas Gohr        'MO'  => 'Mio',
1195*d5ef99ddSAndreas Gohr        'MOD' => 'Moondrop',
1196*d5ef99ddSAndreas Gohr        'MOR' => 'MORTAL',
1197*d5ef99ddSAndreas Gohr        'X7'  => 'Mione',
1198*d5ef99ddSAndreas Gohr        'M7'  => 'Miray',
1199*d5ef99ddSAndreas Gohr        'MIT' => 'Mitchell & Brown',
1200*d5ef99ddSAndreas Gohr        '8M'  => 'Mito',
1201*d5ef99ddSAndreas Gohr        'MT'  => 'Mitsubishi',
1202*d5ef99ddSAndreas Gohr        '0Y'  => 'Mitsui',
1203*d5ef99ddSAndreas Gohr        'M5'  => 'MIXC',
1204*d5ef99ddSAndreas Gohr        '2D'  => 'MIVO',
1205*d5ef99ddSAndreas Gohr        '1Z'  => 'MiXzo',
1206*d5ef99ddSAndreas Gohr        'MIW' => 'MIWANG',
1207*d5ef99ddSAndreas Gohr        'ML'  => 'MLLED',
1208*d5ef99ddSAndreas Gohr        'LS'  => 'MLS',
1209*d5ef99ddSAndreas Gohr        'MLA' => 'MLAB',
1210*d5ef99ddSAndreas Gohr        '5H'  => 'MMI',
1211*d5ef99ddSAndreas Gohr        '4M'  => 'Mobicel',
1212*d5ef99ddSAndreas Gohr        'M6'  => 'Mobiistar',
1213*d5ef99ddSAndreas Gohr        'MOK' => 'Mobile Kingdom',
1214*d5ef99ddSAndreas Gohr        'MH'  => 'Mobiola',
1215*d5ef99ddSAndreas Gohr        'MB'  => 'Mobistel',
1216*d5ef99ddSAndreas Gohr        'ID'  => 'MobiIoT',
1217*d5ef99ddSAndreas Gohr        '6W'  => 'MobiWire',
1218*d5ef99ddSAndreas Gohr        '9M'  => 'Mobo',
1219*d5ef99ddSAndreas Gohr        'MOB' => 'Mobell',
1220*d5ef99ddSAndreas Gohr        'MVO' => 'Mobvoi',
1221*d5ef99ddSAndreas Gohr        'M4'  => 'Modecom',
1222*d5ef99ddSAndreas Gohr        'MEP' => 'Mode Mobile',
1223*d5ef99ddSAndreas Gohr        'MF'  => 'Mofut',
1224*d5ef99ddSAndreas Gohr        'MR'  => 'Motorola',
1225*d5ef99ddSAndreas Gohr        'MTS' => 'Motorola Solutions',
1226*d5ef99ddSAndreas Gohr        'MIV' => 'Motiv',
1227*d5ef99ddSAndreas Gohr        'MV'  => 'Movic',
1228*d5ef99ddSAndreas Gohr        'MOV' => 'Movitel',
1229*d5ef99ddSAndreas Gohr        'MO1' => 'MOVISUN',
1230*d5ef99ddSAndreas Gohr        'MOS' => 'Mosimosi',
1231*d5ef99ddSAndreas Gohr        'MOX' => 'Moxee',
1232*d5ef99ddSAndreas Gohr        'MM'  => 'Mpman',
1233*d5ef99ddSAndreas Gohr        'MZ'  => 'MSI',
1234*d5ef99ddSAndreas Gohr        '3R'  => 'MStar',
1235*d5ef99ddSAndreas Gohr        'M9'  => 'MTC',
1236*d5ef99ddSAndreas Gohr        'N4'  => 'MTN',
1237*d5ef99ddSAndreas Gohr        '72'  => 'M-Tech',
1238*d5ef99ddSAndreas Gohr        '9H'  => 'M-Horse',
1239*d5ef99ddSAndreas Gohr        'MKP' => 'M-KOPA',
1240*d5ef99ddSAndreas Gohr        'MLB' => 'multibox',
1241*d5ef99ddSAndreas Gohr        '1R'  => 'Multilaser',
1242*d5ef99ddSAndreas Gohr        'MPS' => 'MultiPOS',
1243*d5ef99ddSAndreas Gohr        'MLT' => 'MULTYNET',
1244*d5ef99ddSAndreas Gohr        '1M'  => 'MYFON',
1245*d5ef99ddSAndreas Gohr        'MY1' => 'myPhone (PL)',
1246*d5ef99ddSAndreas Gohr        'MY'  => 'MyPhone (PH)',
1247*d5ef99ddSAndreas Gohr        '51'  => 'Myros',
1248*d5ef99ddSAndreas Gohr        'M8'  => 'Myria',
1249*d5ef99ddSAndreas Gohr        '6M'  => 'Mystery',
1250*d5ef99ddSAndreas Gohr        '3T'  => 'MyTab',
1251*d5ef99ddSAndreas Gohr        'MG'  => 'MyWigo',
1252*d5ef99ddSAndreas Gohr        'J3'  => 'Mymaga',
1253*d5ef99ddSAndreas Gohr        'MYM' => 'MyMobile',
1254*d5ef99ddSAndreas Gohr        '07'  => 'MyGica',
1255*d5ef99ddSAndreas Gohr        'MYG' => 'MygPad',
1256*d5ef99ddSAndreas Gohr        'MWA' => 'MwalimuPlus',
1257*d5ef99ddSAndreas Gohr        'NEO' => 'neoCore',
1258*d5ef99ddSAndreas Gohr        'NER' => 'Neoregent',
1259*d5ef99ddSAndreas Gohr        '08'  => 'Nabi',
1260*d5ef99ddSAndreas Gohr        'N7'  => 'National',
1261*d5ef99ddSAndreas Gohr        'NC'  => 'Navcity',
1262*d5ef99ddSAndreas Gohr        '6N'  => 'Navitech',
1263*d5ef99ddSAndreas Gohr        '7V'  => 'Navitel',
1264*d5ef99ddSAndreas Gohr        'N3'  => 'Navon',
1265*d5ef99ddSAndreas Gohr        '7R'  => 'NavRoad',
1266*d5ef99ddSAndreas Gohr        'NAB' => 'NABO',
1267*d5ef99ddSAndreas Gohr        'NAS' => 'NASCO',
1268*d5ef99ddSAndreas Gohr        'NP'  => 'Naomi Phone',
1269*d5ef99ddSAndreas Gohr        'NAN' => 'Nanho',
1270*d5ef99ddSAndreas Gohr        'NE'  => 'NEC',
1271*d5ef99ddSAndreas Gohr        'NDP' => 'Nedaphone',
1272*d5ef99ddSAndreas Gohr        '8N'  => 'Necnot',
1273*d5ef99ddSAndreas Gohr        'NF'  => 'Neffos',
1274*d5ef99ddSAndreas Gohr        '9X'  => 'Neo',
1275*d5ef99ddSAndreas Gohr        'NEK' => 'NEKO',
1276*d5ef99ddSAndreas Gohr        '1N'  => 'Neomi',
1277*d5ef99ddSAndreas Gohr        '7Q'  => 'Neon IQ',
1278*d5ef99ddSAndreas Gohr        '8F'  => 'Neolix',
1279*d5ef99ddSAndreas Gohr        'NES' => 'Nesons',
1280*d5ef99ddSAndreas Gohr        'NET' => 'NetBox',
1281*d5ef99ddSAndreas Gohr        'NWT' => 'NETWIT',
1282*d5ef99ddSAndreas Gohr        'NA'  => 'Netgear',
1283*d5ef99ddSAndreas Gohr        'NEM' => 'Netmak',
1284*d5ef99ddSAndreas Gohr        'NU'  => 'NeuImage',
1285*d5ef99ddSAndreas Gohr        'NEU' => 'NeuTab',
1286*d5ef99ddSAndreas Gohr        'NEV' => 'NEVIR',
1287*d5ef99ddSAndreas Gohr        'NW'  => 'Newgen',
1288*d5ef99ddSAndreas Gohr        'N9'  => 'Newland',
1289*d5ef99ddSAndreas Gohr        '0N'  => 'Newman',
1290*d5ef99ddSAndreas Gohr        'NS'  => 'NewsMy',
1291*d5ef99ddSAndreas Gohr        'ND'  => 'Newsday',
1292*d5ef99ddSAndreas Gohr        'HB'  => 'New Balance',
1293*d5ef99ddSAndreas Gohr        'BRI' => 'New Bridge',
1294*d5ef99ddSAndreas Gohr        'NEW' => 'Newal',
1295*d5ef99ddSAndreas Gohr        'XB'  => 'NEXBOX',
1296*d5ef99ddSAndreas Gohr        'NX'  => 'Nexian',
1297*d5ef99ddSAndreas Gohr        '7X'  => 'Nexa',
1298*d5ef99ddSAndreas Gohr        '7XR' => 'Nexar',
1299*d5ef99ddSAndreas Gohr        'N8'  => 'NEXON',
1300*d5ef99ddSAndreas Gohr        'N2'  => 'Nextbit',
1301*d5ef99ddSAndreas Gohr        'NT'  => 'NextBook',
1302*d5ef99ddSAndreas Gohr        'NTT' => 'NTT West',
1303*d5ef99ddSAndreas Gohr        '4N'  => 'NextTab',
1304*d5ef99ddSAndreas Gohr        'NEX' => 'NEXT',
1305*d5ef99ddSAndreas Gohr        'NST' => 'Next & NextStar',
1306*d5ef99ddSAndreas Gohr        'NJO' => 'nJoy',
1307*d5ef99ddSAndreas Gohr        'NG'  => 'NGM',
1308*d5ef99ddSAndreas Gohr        'NZ'  => 'NG Optics',
1309*d5ef99ddSAndreas Gohr        'NZP' => 'NGpon',
1310*d5ef99ddSAndreas Gohr        'NN'  => 'Nikon',
1311*d5ef99ddSAndreas Gohr        'NIL' => 'NILAIT',
1312*d5ef99ddSAndreas Gohr        'NI'  => 'Nintendo',
1313*d5ef99ddSAndreas Gohr        'NIN' => 'NINETEC',
1314*d5ef99ddSAndreas Gohr        'NI1' => 'NINETOLOGY',
1315*d5ef99ddSAndreas Gohr        'N5'  => 'NOA',
1316*d5ef99ddSAndreas Gohr        'N1'  => 'Noain',
1317*d5ef99ddSAndreas Gohr        'N6'  => 'Nobby',
1318*d5ef99ddSAndreas Gohr        'NOC' => 'Novacom',
1319*d5ef99ddSAndreas Gohr        'NOS' => 'NoviSea',
1320*d5ef99ddSAndreas Gohr        'NO2' => 'NOVIS',
1321*d5ef99ddSAndreas Gohr        'NOV' => 'Novey',
1322*d5ef99ddSAndreas Gohr        'NO1' => 'NOVO',
1323*d5ef99ddSAndreas Gohr        '57'  => 'Nubia',
1324*d5ef99ddSAndreas Gohr        'JN'  => 'NOBUX',
1325*d5ef99ddSAndreas Gohr        'NB'  => 'Noblex',
1326*d5ef99ddSAndreas Gohr        'OG'  => 'NOGA',
1327*d5ef99ddSAndreas Gohr        'NK'  => 'Nokia',
1328*d5ef99ddSAndreas Gohr        'NM'  => 'Nomi',
1329*d5ef99ddSAndreas Gohr        '2N'  => 'Nomu',
1330*d5ef99ddSAndreas Gohr        '6H'  => 'Noontec',
1331*d5ef99ddSAndreas Gohr        'NR'  => 'Nordmende',
1332*d5ef99ddSAndreas Gohr        'NRD' => 'Nordfrost',
1333*d5ef99ddSAndreas Gohr        'NOR' => 'NORMANDE',
1334*d5ef99ddSAndreas Gohr        '7N'  => 'NorthTech',
1335*d5ef99ddSAndreas Gohr        'NOT' => 'Nothing',
1336*d5ef99ddSAndreas Gohr        '5N'  => 'Nos',
1337*d5ef99ddSAndreas Gohr        'NO'  => 'Nous',
1338*d5ef99ddSAndreas Gohr        'NQ'  => 'Novex',
1339*d5ef99ddSAndreas Gohr        'NOD' => 'noDROPOUT',
1340*d5ef99ddSAndreas Gohr        'NJ'  => 'NuAns',
1341*d5ef99ddSAndreas Gohr        'NL'  => 'NUU Mobile',
1342*d5ef99ddSAndreas Gohr        'N0'  => 'Nuvo',
1343*d5ef99ddSAndreas Gohr        'NUV' => 'NuVision',
1344*d5ef99ddSAndreas Gohr        'NV'  => 'Nvidia',
1345*d5ef99ddSAndreas Gohr        'NY'  => 'NYX Mobile',
1346*d5ef99ddSAndreas Gohr        'NON' => 'N-one',
1347*d5ef99ddSAndreas Gohr        'O3'  => 'O+',
1348*d5ef99ddSAndreas Gohr        'OT'  => 'O2',
1349*d5ef99ddSAndreas Gohr        'O7'  => 'Oale',
1350*d5ef99ddSAndreas Gohr        'OC'  => 'OASYS',
1351*d5ef99ddSAndreas Gohr        'OB'  => 'Obi',
1352*d5ef99ddSAndreas Gohr        'OBR' => 'Ober',
1353*d5ef99ddSAndreas Gohr        'OQ'  => 'Meta',
1354*d5ef99ddSAndreas Gohr        'O1'  => 'Odys',
1355*d5ef99ddSAndreas Gohr        'ODP' => 'Odotpad',
1356*d5ef99ddSAndreas Gohr        'O9'  => 'ok.',
1357*d5ef99ddSAndreas Gohr        'OKA' => 'Okapi',
1358*d5ef99ddSAndreas Gohr        'OA'  => 'Okapia',
1359*d5ef99ddSAndreas Gohr        'OKI' => 'Oking',
1360*d5ef99ddSAndreas Gohr        'OLA' => 'Olax',
1361*d5ef99ddSAndreas Gohr        'OLK' => 'Olkya',
1362*d5ef99ddSAndreas Gohr        'OLY' => 'Olympia',
1363*d5ef99ddSAndreas Gohr        'OCE' => 'OCEANIC',
1364*d5ef99ddSAndreas Gohr        'OLT' => 'OLTO',
1365*d5ef99ddSAndreas Gohr        'OJ'  => 'Ookee',
1366*d5ef99ddSAndreas Gohr        'OD'  => 'Onda',
1367*d5ef99ddSAndreas Gohr        'ON'  => 'OnePlus',
1368*d5ef99ddSAndreas Gohr        'ONC' => 'OneClick',
1369*d5ef99ddSAndreas Gohr        'ONL' => 'OneLern',
1370*d5ef99ddSAndreas Gohr        'OAN' => 'Oangcc',
1371*d5ef99ddSAndreas Gohr        'OX'  => 'Onix',
1372*d5ef99ddSAndreas Gohr        'OIN' => 'Onida',
1373*d5ef99ddSAndreas Gohr        '3O'  => 'ONYX BOOX',
1374*d5ef99ddSAndreas Gohr        'O4'  => 'ONN',
1375*d5ef99ddSAndreas Gohr        '9Q'  => 'Onkyo',
1376*d5ef99ddSAndreas Gohr        'ONV' => 'ONVO',
1377*d5ef99ddSAndreas Gohr        'OOR' => 'Ooredoo',
1378*d5ef99ddSAndreas Gohr        '2O'  => 'OpelMobile',
1379*d5ef99ddSAndreas Gohr        'OH'  => 'Openbox',
1380*d5ef99ddSAndreas Gohr        '7Y'  => 'Obabox',
1381*d5ef99ddSAndreas Gohr        'OP'  => 'OPPO',
1382*d5ef99ddSAndreas Gohr        'OO'  => 'Opsson',
1383*d5ef99ddSAndreas Gohr        'OPT' => 'Optoma',
1384*d5ef99ddSAndreas Gohr        'OPH' => 'Ophone',
1385*d5ef99ddSAndreas Gohr        'OR'  => 'Orange',
1386*d5ef99ddSAndreas Gohr        'ORP' => 'Orange Pi',
1387*d5ef99ddSAndreas Gohr        'ORA' => 'Orava',
1388*d5ef99ddSAndreas Gohr        'O5'  => 'Orbic',
1389*d5ef99ddSAndreas Gohr        'Y6'  => 'Orbita',
1390*d5ef99ddSAndreas Gohr        'ORB' => 'Orbsmart',
1391*d5ef99ddSAndreas Gohr        'OS'  => 'Ordissimo',
1392*d5ef99ddSAndreas Gohr        '8O'  => 'Orion',
1393*d5ef99ddSAndreas Gohr        'OTT' => 'OTTO',
1394*d5ef99ddSAndreas Gohr        'OK'  => 'Ouki',
1395*d5ef99ddSAndreas Gohr        '0O'  => 'OINOM',
1396*d5ef99ddSAndreas Gohr        'OIL' => 'Oilsky',
1397*d5ef99ddSAndreas Gohr        'QK'  => 'OKWU',
1398*d5ef99ddSAndreas Gohr        'QQ'  => 'OMIX',
1399*d5ef99ddSAndreas Gohr        '56'  => 'OKSI',
1400*d5ef99ddSAndreas Gohr        'OE'  => 'Oukitel',
1401*d5ef99ddSAndreas Gohr        'OU'  => 'OUYA',
1402*d5ef99ddSAndreas Gohr        'JB'  => 'OUJIA',
1403*d5ef99ddSAndreas Gohr        'OV'  => 'Overmax',
1404*d5ef99ddSAndreas Gohr        '30'  => 'Ovvi',
1405*d5ef99ddSAndreas Gohr        'O2'  => 'Owwo',
1406*d5ef99ddSAndreas Gohr        'OSC' => 'OSCAL',
1407*d5ef99ddSAndreas Gohr        'OXT' => 'OX TAB',
1408*d5ef99ddSAndreas Gohr        'OY'  => 'Oysters',
1409*d5ef99ddSAndreas Gohr        'QF'  => 'OYSIN',
1410*d5ef99ddSAndreas Gohr        'O6'  => 'Oyyu',
1411*d5ef99ddSAndreas Gohr        'OZ'  => 'OzoneHD',
1412*d5ef99ddSAndreas Gohr        'OLL' => 'Ollee',
1413*d5ef99ddSAndreas Gohr        '7P'  => 'P-UP',
1414*d5ef99ddSAndreas Gohr        'PRA' => 'Pacific Research Alliance',
1415*d5ef99ddSAndreas Gohr        'PAG' => 'PAGRAER',
1416*d5ef99ddSAndreas Gohr        'PAD' => 'Padpro',
1417*d5ef99ddSAndreas Gohr        'YP'  => 'Paladin',
1418*d5ef99ddSAndreas Gohr        'PM'  => 'Palm',
1419*d5ef99ddSAndreas Gohr        'PN'  => 'Panacom',
1420*d5ef99ddSAndreas Gohr        'PA'  => 'Panasonic',
1421*d5ef99ddSAndreas Gohr        'PNV' => 'Panavox',
1422*d5ef99ddSAndreas Gohr        'PT'  => 'Pantech',
1423*d5ef99ddSAndreas Gohr        'PAN' => 'Pano',
1424*d5ef99ddSAndreas Gohr        'PND' => 'Panodic',
1425*d5ef99ddSAndreas Gohr        'PA1' => 'Panoramic',
1426*d5ef99ddSAndreas Gohr        'PLT' => 'Platoon',
1427*d5ef99ddSAndreas Gohr        'PLD' => 'PLDT',
1428*d5ef99ddSAndreas Gohr        '94'  => 'Packard Bell',
1429*d5ef99ddSAndreas Gohr        'H9'  => 'Parrot Mobile',
1430*d5ef99ddSAndreas Gohr        'PAR' => 'Partner Mobile',
1431*d5ef99ddSAndreas Gohr        'PAP' => 'PAPYRE',
1432*d5ef99ddSAndreas Gohr        'PB'  => 'PCBOX',
1433*d5ef99ddSAndreas Gohr        'PCS' => 'PC Smart',
1434*d5ef99ddSAndreas Gohr        'PC'  => 'PCD',
1435*d5ef99ddSAndreas Gohr        'PD'  => 'PCD Argentina',
1436*d5ef99ddSAndreas Gohr        'PE'  => 'PEAQ',
1437*d5ef99ddSAndreas Gohr        'PEN' => 'Penta',
1438*d5ef99ddSAndreas Gohr        'PG'  => 'Pentagram',
1439*d5ef99ddSAndreas Gohr        'PQ'  => 'Pendoo',
1440*d5ef99ddSAndreas Gohr        '93'  => 'Perfeo',
1441*d5ef99ddSAndreas Gohr        '8J'  => 'Pelitt',
1442*d5ef99ddSAndreas Gohr        '1P'  => 'Phicomm',
1443*d5ef99ddSAndreas Gohr        '4P'  => 'Philco',
1444*d5ef99ddSAndreas Gohr        'PH'  => 'Philips',
1445*d5ef99ddSAndreas Gohr        '5P'  => 'Phonemax',
1446*d5ef99ddSAndreas Gohr        'PO'  => 'phoneOne',
1447*d5ef99ddSAndreas Gohr        'PI'  => 'Pioneer',
1448*d5ef99ddSAndreas Gohr        'PIC' => 'Pioneer Computers',
1449*d5ef99ddSAndreas Gohr        'PJ'  => 'PiPO',
1450*d5ef99ddSAndreas Gohr        '8P'  => 'Pixelphone',
1451*d5ef99ddSAndreas Gohr        '9O'  => 'Pixela',
1452*d5ef99ddSAndreas Gohr        'PX'  => 'Pixus',
1453*d5ef99ddSAndreas Gohr        'PIX' => 'PIXPRO',
1454*d5ef99ddSAndreas Gohr        'QP'  => 'Pico',
1455*d5ef99ddSAndreas Gohr        'PIR' => 'PIRANHA',
1456*d5ef99ddSAndreas Gohr        'PIN' => 'PINE',
1457*d5ef99ddSAndreas Gohr        '9P'  => 'Planet Computers',
1458*d5ef99ddSAndreas Gohr        'PLA' => 'Play Now',
1459*d5ef99ddSAndreas Gohr        'PY'  => 'Ployer',
1460*d5ef99ddSAndreas Gohr        'P4'  => 'Plum',
1461*d5ef99ddSAndreas Gohr        'PLU' => 'PlusStyle',
1462*d5ef99ddSAndreas Gohr        '22'  => 'Pluzz',
1463*d5ef99ddSAndreas Gohr        'P8'  => 'PocketBook',
1464*d5ef99ddSAndreas Gohr        '0P'  => 'POCO',
1465*d5ef99ddSAndreas Gohr        'FH'  => 'Point Mobile',
1466*d5ef99ddSAndreas Gohr        'PV'  => 'Point of View',
1467*d5ef99ddSAndreas Gohr        'PVB' => 'PVBox',
1468*d5ef99ddSAndreas Gohr        'PL'  => 'Polaroid',
1469*d5ef99ddSAndreas Gohr        'Q6'  => 'Polar',
1470*d5ef99ddSAndreas Gohr        '97'  => 'PolarLine',
1471*d5ef99ddSAndreas Gohr        'PP'  => 'PolyPad',
1472*d5ef99ddSAndreas Gohr        'P5'  => 'Polytron',
1473*d5ef99ddSAndreas Gohr        'P2'  => 'Pomp',
1474*d5ef99ddSAndreas Gohr        'P0'  => 'Poppox',
1475*d5ef99ddSAndreas Gohr        '0X'  => 'POPTEL',
1476*d5ef99ddSAndreas Gohr        'PS'  => 'Positivo',
1477*d5ef99ddSAndreas Gohr        '3P'  => 'Positivo BGH',
1478*d5ef99ddSAndreas Gohr        '3F'  => 'Porsche',
1479*d5ef99ddSAndreas Gohr        'PRT' => 'Portfolio',
1480*d5ef99ddSAndreas Gohr        'PPD' => 'PPDS',
1481*d5ef99ddSAndreas Gohr        'P3'  => 'PPTV',
1482*d5ef99ddSAndreas Gohr        'FP'  => 'Premio',
1483*d5ef99ddSAndreas Gohr        'PR1' => 'Premier',
1484*d5ef99ddSAndreas Gohr        'PR'  => 'Prestigio',
1485*d5ef99ddSAndreas Gohr        'P9'  => 'Primepad',
1486*d5ef99ddSAndreas Gohr        'PRM' => 'PRIME',
1487*d5ef99ddSAndreas Gohr        '6P'  => 'Primux',
1488*d5ef99ddSAndreas Gohr        '2P'  => 'Prixton',
1489*d5ef99ddSAndreas Gohr        'PRI' => 'Pritom',
1490*d5ef99ddSAndreas Gohr        'PRP' => 'PRISM+',
1491*d5ef99ddSAndreas Gohr        'PF'  => 'PROFiLO',
1492*d5ef99ddSAndreas Gohr        'P6'  => 'Proline',
1493*d5ef99ddSAndreas Gohr        '5O'  => 'Prology',
1494*d5ef99ddSAndreas Gohr        'P1'  => 'ProScan',
1495*d5ef99ddSAndreas Gohr        'PRO' => 'PROSONIC',
1496*d5ef99ddSAndreas Gohr        'P7'  => 'Protruly',
1497*d5ef99ddSAndreas Gohr        'R0'  => 'ProVision',
1498*d5ef99ddSAndreas Gohr        '7O'  => 'Polestar',
1499*d5ef99ddSAndreas Gohr        'PU'  => 'PULID',
1500*d5ef99ddSAndreas Gohr        'UP'  => 'Purism',
1501*d5ef99ddSAndreas Gohr        'PUN' => 'Punos',
1502*d5ef99ddSAndreas Gohr        'QFX' => 'QFX',
1503*d5ef99ddSAndreas Gohr        'Q7'  => 'Q-Box',
1504*d5ef99ddSAndreas Gohr        'QH'  => 'Q-Touch',
1505*d5ef99ddSAndreas Gohr        'QB'  => 'Q.Bell',
1506*d5ef99ddSAndreas Gohr        'QI'  => 'Qilive',
1507*d5ef99ddSAndreas Gohr        'QIN' => 'QIN',
1508*d5ef99ddSAndreas Gohr        'QIW' => 'Qiuwoky',
1509*d5ef99ddSAndreas Gohr        'QM'  => 'QMobile',
1510*d5ef99ddSAndreas Gohr        'QT'  => 'Qtek',
1511*d5ef99ddSAndreas Gohr        'Q9'  => 'QTECH',
1512*d5ef99ddSAndreas Gohr        'QA'  => 'Quantum',
1513*d5ef99ddSAndreas Gohr        'QUE' => 'Quest',
1514*d5ef99ddSAndreas Gohr        'QUA' => 'Quatro',
1515*d5ef99ddSAndreas Gohr        'QU'  => 'Quechua',
1516*d5ef99ddSAndreas Gohr        'QUI' => 'Quipus',
1517*d5ef99ddSAndreas Gohr        'QO'  => 'Qumo',
1518*d5ef99ddSAndreas Gohr        'UQ'  => 'Qubo',
1519*d5ef99ddSAndreas Gohr        'QUP' => 'Qupi',
1520*d5ef99ddSAndreas Gohr        'YQ'  => 'QLink',
1521*d5ef99ddSAndreas Gohr        'QY'  => 'Qnet Mobile',
1522*d5ef99ddSAndreas Gohr        'WJ'  => 'Qware',
1523*d5ef99ddSAndreas Gohr        'QWT' => 'QWATT',
1524*d5ef99ddSAndreas Gohr        'R2'  => 'R-TV',
1525*d5ef99ddSAndreas Gohr        'R3D' => 'R3Di',
1526*d5ef99ddSAndreas Gohr        'RA'  => 'Ramos',
1527*d5ef99ddSAndreas Gohr        '0R'  => 'Raspberry',
1528*d5ef99ddSAndreas Gohr        'R9'  => 'Ravoz',
1529*d5ef99ddSAndreas Gohr        'RZ'  => 'Razer',
1530*d5ef99ddSAndreas Gohr        'RAZ' => 'RAZZ',
1531*d5ef99ddSAndreas Gohr        '95'  => 'Rakuten',
1532*d5ef99ddSAndreas Gohr        'RAY' => 'Raylandz',
1533*d5ef99ddSAndreas Gohr        'RC'  => 'RCA Tablets',
1534*d5ef99ddSAndreas Gohr        'RCT' => 'RCT',
1535*d5ef99ddSAndreas Gohr        '2R'  => 'Reach',
1536*d5ef99ddSAndreas Gohr        'RLX' => 'Realix',
1537*d5ef99ddSAndreas Gohr        'REL' => 'RelNAT',
1538*d5ef99ddSAndreas Gohr        'RE4' => 'Relndoo',
1539*d5ef99ddSAndreas Gohr        'RB'  => 'Readboy',
1540*d5ef99ddSAndreas Gohr        'RE'  => 'Realme',
1541*d5ef99ddSAndreas Gohr        'RE1' => 'Redbean',
1542*d5ef99ddSAndreas Gohr        'R8'  => 'RED',
1543*d5ef99ddSAndreas Gohr        'RDX' => 'RED-X',
1544*d5ef99ddSAndreas Gohr        'REW' => 'Redway',
1545*d5ef99ddSAndreas Gohr        '6F'  => 'Redfox',
1546*d5ef99ddSAndreas Gohr        'RE2' => 'RedLine',
1547*d5ef99ddSAndreas Gohr        'RD'  => 'Reeder',
1548*d5ef99ddSAndreas Gohr        'Z9'  => 'REGAL',
1549*d5ef99ddSAndreas Gohr        'RH'  => 'Remdun',
1550*d5ef99ddSAndreas Gohr        'RP'  => 'Revo',
1551*d5ef99ddSAndreas Gohr        'REV' => 'Revomovil',
1552*d5ef99ddSAndreas Gohr        '8R'  => 'Retroid Pocket',
1553*d5ef99ddSAndreas Gohr        'REN' => 'Renova',
1554*d5ef99ddSAndreas Gohr        'RE3' => 'RENSO',
1555*d5ef99ddSAndreas Gohr        'REP' => 'rephone',
1556*d5ef99ddSAndreas Gohr        'RHI' => 'Rhino',
1557*d5ef99ddSAndreas Gohr        'RIC' => 'Ricoh',
1558*d5ef99ddSAndreas Gohr        'RI'  => 'Rikomagic',
1559*d5ef99ddSAndreas Gohr        'RM'  => 'RIM',
1560*d5ef99ddSAndreas Gohr        'RN'  => 'Rinno',
1561*d5ef99ddSAndreas Gohr        'RNB' => 'Ringing Bells',
1562*d5ef99ddSAndreas Gohr        'RX'  => 'Ritmix',
1563*d5ef99ddSAndreas Gohr        'R7'  => 'Ritzviva',
1564*d5ef99ddSAndreas Gohr        'RV'  => 'Riviera',
1565*d5ef99ddSAndreas Gohr        '6R'  => 'Rivo',
1566*d5ef99ddSAndreas Gohr        'RIZ' => 'Rizzen',
1567*d5ef99ddSAndreas Gohr        'RR'  => 'Roadrover',
1568*d5ef99ddSAndreas Gohr        'QR'  => 'ROADMAX',
1569*d5ef99ddSAndreas Gohr        'ROH' => 'ROCH',
1570*d5ef99ddSAndreas Gohr        'ROC' => 'Roam Cat',
1571*d5ef99ddSAndreas Gohr        'ROT' => 'Rocket',
1572*d5ef99ddSAndreas Gohr        'R1'  => 'Rokit',
1573*d5ef99ddSAndreas Gohr        'ROI' => 'ROiK',
1574*d5ef99ddSAndreas Gohr        'RK'  => 'Roku',
1575*d5ef99ddSAndreas Gohr        'R3'  => 'Rombica',
1576*d5ef99ddSAndreas Gohr        'RUA' => 'Romsat',
1577*d5ef99ddSAndreas Gohr        'R5'  => 'Ross&Moor',
1578*d5ef99ddSAndreas Gohr        'RO'  => 'Rover',
1579*d5ef99ddSAndreas Gohr        'R6'  => 'RoverPad',
1580*d5ef99ddSAndreas Gohr        'RQ'  => 'RoyQueen',
1581*d5ef99ddSAndreas Gohr        'RJ'  => 'Royole',
1582*d5ef99ddSAndreas Gohr        'RT'  => 'RT Project',
1583*d5ef99ddSAndreas Gohr        'RTK' => 'RTK',
1584*d5ef99ddSAndreas Gohr        'RG'  => 'RugGear',
1585*d5ef99ddSAndreas Gohr        'RUG' => 'Ruggex',
1586*d5ef99ddSAndreas Gohr        'RUT' => 'RuggeTech',
1587*d5ef99ddSAndreas Gohr        'RU'  => 'Runbo',
1588*d5ef99ddSAndreas Gohr        'RUP' => 'Rupa',
1589*d5ef99ddSAndreas Gohr        'RL'  => 'Ruio',
1590*d5ef99ddSAndreas Gohr        'RY'  => 'Ryte',
1591*d5ef99ddSAndreas Gohr        'X5'  => 'Saba',
1592*d5ef99ddSAndreas Gohr        '8L'  => 'S-TELL',
1593*d5ef99ddSAndreas Gohr        '8L1' => 'S-Color',
1594*d5ef99ddSAndreas Gohr        '4O'  => 'S2Tel',
1595*d5ef99ddSAndreas Gohr        '89'  => 'Seatel',
1596*d5ef99ddSAndreas Gohr        'SEW' => 'Sewoo',
1597*d5ef99ddSAndreas Gohr        'SE1' => 'SEEWO',
1598*d5ef99ddSAndreas Gohr        'SEN' => 'SENNA',
1599*d5ef99ddSAndreas Gohr        'SER' => 'SERVO',
1600*d5ef99ddSAndreas Gohr        'Y7'  => 'Saiet',
1601*d5ef99ddSAndreas Gohr        'SLF' => 'SAILF',
1602*d5ef99ddSAndreas Gohr        'X1'  => 'Safaricom',
1603*d5ef99ddSAndreas Gohr        'SG'  => 'Sagem',
1604*d5ef99ddSAndreas Gohr        'SAG' => 'Sagemcom',
1605*d5ef99ddSAndreas Gohr        '4L'  => 'Salora',
1606*d5ef99ddSAndreas Gohr        'SA'  => 'Samsung',
1607*d5ef99ddSAndreas Gohr        'SAT' => 'Samtech',
1608*d5ef99ddSAndreas Gohr        'SAM' => 'Samtron',
1609*d5ef99ddSAndreas Gohr        'SAB' => 'Sambox',
1610*d5ef99ddSAndreas Gohr        'SNA' => 'SNAMI',
1611*d5ef99ddSAndreas Gohr        'S0'  => 'Sanei',
1612*d5ef99ddSAndreas Gohr        '12'  => 'Sansui',
1613*d5ef99ddSAndreas Gohr        'SAK' => 'Sankey',
1614*d5ef99ddSAndreas Gohr        'SQ'  => 'Santin',
1615*d5ef99ddSAndreas Gohr        'SY'  => 'Sanyo',
1616*d5ef99ddSAndreas Gohr        'SAN' => 'SANY',
1617*d5ef99ddSAndreas Gohr        'S9'  => 'Savio',
1618*d5ef99ddSAndreas Gohr        'Y4'  => 'TCL SCBC',
1619*d5ef99ddSAndreas Gohr        'SCH' => 'SCHAUB LORENZ',
1620*d5ef99ddSAndreas Gohr        'CZ'  => 'Schneider',
1621*d5ef99ddSAndreas Gohr        'SHO' => 'SCHONTECH',
1622*d5ef99ddSAndreas Gohr        'SCO' => 'Scosmos',
1623*d5ef99ddSAndreas Gohr        'SC1' => 'Scoole',
1624*d5ef99ddSAndreas Gohr        'ZG'  => 'Schok',
1625*d5ef99ddSAndreas Gohr        'G8'  => 'SEG',
1626*d5ef99ddSAndreas Gohr        'SEX' => 'SEHMAX',
1627*d5ef99ddSAndreas Gohr        'SD'  => 'Sega',
1628*d5ef99ddSAndreas Gohr        '0U'  => 'Selecline',
1629*d5ef99ddSAndreas Gohr        '9G'  => 'Selenga',
1630*d5ef99ddSAndreas Gohr        'SV'  => 'Selevision',
1631*d5ef99ddSAndreas Gohr        'SL'  => 'Selfix',
1632*d5ef99ddSAndreas Gohr        '0S'  => 'SEMP TCL',
1633*d5ef99ddSAndreas Gohr        'S1'  => 'Sencor',
1634*d5ef99ddSAndreas Gohr        'SNM' => 'Sencrom',
1635*d5ef99ddSAndreas Gohr        'SN'  => 'Sendo',
1636*d5ef99ddSAndreas Gohr        '01'  => 'Senkatel',
1637*d5ef99ddSAndreas Gohr        'S6'  => 'Senseit',
1638*d5ef99ddSAndreas Gohr        'EW'  => 'Senwa',
1639*d5ef99ddSAndreas Gohr        '24'  => 'Seeken',
1640*d5ef99ddSAndreas Gohr        'SEB' => 'SEBBE',
1641*d5ef99ddSAndreas Gohr        '61'  => 'Seuic',
1642*d5ef99ddSAndreas Gohr        'SX'  => 'SFR',
1643*d5ef99ddSAndreas Gohr        'SGI' => 'SGIN',
1644*d5ef99ddSAndreas Gohr        'SH'  => 'Sharp',
1645*d5ef99ddSAndreas Gohr        'JU'  => 'Shanling',
1646*d5ef99ddSAndreas Gohr        '7S'  => 'Shift Phones',
1647*d5ef99ddSAndreas Gohr        '78'  => 'Shivaki',
1648*d5ef99ddSAndreas Gohr        'RS'  => 'Shtrikh-M',
1649*d5ef99ddSAndreas Gohr        '3S'  => 'Shuttle',
1650*d5ef99ddSAndreas Gohr        '13'  => 'Sico',
1651*d5ef99ddSAndreas Gohr        'SI'  => 'Siemens',
1652*d5ef99ddSAndreas Gohr        '1S'  => 'Sigma',
1653*d5ef99ddSAndreas Gohr        '70'  => 'Silelis',
1654*d5ef99ddSAndreas Gohr        'SJ'  => 'Silent Circle',
1655*d5ef99ddSAndreas Gohr        'SIL' => 'Silva Schneider',
1656*d5ef99ddSAndreas Gohr        '10'  => 'Simbans',
1657*d5ef99ddSAndreas Gohr        '98'  => 'Simply',
1658*d5ef99ddSAndreas Gohr        'SIM' => 'simfer',
1659*d5ef99ddSAndreas Gohr        '52'  => 'Singtech',
1660*d5ef99ddSAndreas Gohr        'SIN' => 'SINGER',
1661*d5ef99ddSAndreas Gohr        '31'  => 'Siragon',
1662*d5ef99ddSAndreas Gohr        'SIS' => 'Siswoo',
1663*d5ef99ddSAndreas Gohr        '83'  => 'Sirin Labs',
1664*d5ef99ddSAndreas Gohr        '5Z'  => 'SK Broadband',
1665*d5ef99ddSAndreas Gohr        'GK'  => 'SKG',
1666*d5ef99ddSAndreas Gohr        'SW'  => 'Sky',
1667*d5ef99ddSAndreas Gohr        'SK'  => 'Skyworth',
1668*d5ef99ddSAndreas Gohr        'SKY' => 'Skyline',
1669*d5ef99ddSAndreas Gohr        'SK1' => 'SkyStream',
1670*d5ef99ddSAndreas Gohr        'SKT' => 'Skytech',
1671*d5ef99ddSAndreas Gohr        'SKK' => 'SKK Mobile',
1672*d5ef99ddSAndreas Gohr        '14'  => 'Smadl',
1673*d5ef99ddSAndreas Gohr        '19'  => 'Smailo',
1674*d5ef99ddSAndreas Gohr        'SR'  => 'Smart Electronic',
1675*d5ef99ddSAndreas Gohr        'SMA' => 'Smart Kassel',
1676*d5ef99ddSAndreas Gohr        'STE' => 'Smart Tech',
1677*d5ef99ddSAndreas Gohr        '49'  => 'Smart',
1678*d5ef99ddSAndreas Gohr        '47'  => 'SmartBook',
1679*d5ef99ddSAndreas Gohr        '3B'  => 'Smartab',
1680*d5ef99ddSAndreas Gohr        '80'  => 'SMARTEC',
1681*d5ef99ddSAndreas Gohr        'SM1' => 'Smartex',
1682*d5ef99ddSAndreas Gohr        'SC'  => 'Smartfren',
1683*d5ef99ddSAndreas Gohr        'S7'  => 'Smartisan',
1684*d5ef99ddSAndreas Gohr        'SMU' => 'SMUX',
1685*d5ef99ddSAndreas Gohr        'SMT' => 'SMT Telecom',
1686*d5ef99ddSAndreas Gohr        'JR'  => 'Sylvania',
1687*d5ef99ddSAndreas Gohr        'SYH' => 'SYH',
1688*d5ef99ddSAndreas Gohr        '3Y'  => 'Smarty',
1689*d5ef99ddSAndreas Gohr        'HH'  => 'Smooth Mobile',
1690*d5ef99ddSAndreas Gohr        '1Q'  => 'Smotreshka',
1691*d5ef99ddSAndreas Gohr        'SF'  => 'Softbank',
1692*d5ef99ddSAndreas Gohr        '9L'  => 'SOLE',
1693*d5ef99ddSAndreas Gohr        'JL'  => 'SOLO',
1694*d5ef99ddSAndreas Gohr        'SOS' => 'SOSH',
1695*d5ef99ddSAndreas Gohr        'SOD' => 'Soda',
1696*d5ef99ddSAndreas Gohr        'SOL' => 'Solas',
1697*d5ef99ddSAndreas Gohr        '16'  => 'Solone',
1698*d5ef99ddSAndreas Gohr        'OI'  => 'Sonim',
1699*d5ef99ddSAndreas Gohr        'SVE' => 'Sveon',
1700*d5ef99ddSAndreas Gohr        'SO'  => 'Sony',
1701*d5ef99ddSAndreas Gohr        'SE'  => 'Sony Ericsson',
1702*d5ef99ddSAndreas Gohr        'X2'  => 'Soundmax',
1703*d5ef99ddSAndreas Gohr        'SUL' => 'SoulLink',
1704*d5ef99ddSAndreas Gohr        '8S'  => 'Soyes',
1705*d5ef99ddSAndreas Gohr        '77'  => 'SONOS',
1706*d5ef99ddSAndreas Gohr        '68'  => 'Soho Style',
1707*d5ef99ddSAndreas Gohr        'SOB' => 'SobieTech',
1708*d5ef99ddSAndreas Gohr        'SOW' => 'SOWLY',
1709*d5ef99ddSAndreas Gohr        'PK'  => 'Spark',
1710*d5ef99ddSAndreas Gohr        'SPX' => 'Sparx',
1711*d5ef99ddSAndreas Gohr        'FS'  => 'SPC',
1712*d5ef99ddSAndreas Gohr        '6S'  => 'Spectrum',
1713*d5ef99ddSAndreas Gohr        '43'  => 'Spectralink',
1714*d5ef99ddSAndreas Gohr        'SP'  => 'Spice',
1715*d5ef99ddSAndreas Gohr        'SPD' => 'Spider',
1716*d5ef99ddSAndreas Gohr        '84'  => 'Sprint',
1717*d5ef99ddSAndreas Gohr        'SPU' => 'SPURT',
1718*d5ef99ddSAndreas Gohr        'QS'  => 'SQOOL',
1719*d5ef99ddSAndreas Gohr        'S4'  => 'Star',
1720*d5ef99ddSAndreas Gohr        'OL'  => 'Starlight',
1721*d5ef99ddSAndreas Gohr        'STA' => 'Star-Light',
1722*d5ef99ddSAndreas Gohr        '18'  => 'Starmobile',
1723*d5ef99ddSAndreas Gohr        '2S'  => 'Starway',
1724*d5ef99ddSAndreas Gohr        '45'  => 'Starwind',
1725*d5ef99ddSAndreas Gohr        'SB'  => 'STF Mobile',
1726*d5ef99ddSAndreas Gohr        'S8'  => 'STK',
1727*d5ef99ddSAndreas Gohr        'GQ'  => 'STG Telecom',
1728*d5ef99ddSAndreas Gohr        'S2'  => 'Stonex',
1729*d5ef99ddSAndreas Gohr        'ST'  => 'Storex',
1730*d5ef99ddSAndreas Gohr        'STR' => 'Stream',
1731*d5ef99ddSAndreas Gohr        '71'  => 'StrawBerry',
1732*d5ef99ddSAndreas Gohr        '96'  => 'STRONG',
1733*d5ef99ddSAndreas Gohr        '69'  => 'Stylo',
1734*d5ef99ddSAndreas Gohr        'STI' => 'Stilevs',
1735*d5ef99ddSAndreas Gohr        '9S'  => 'Sugar',
1736*d5ef99ddSAndreas Gohr        'SUR' => 'Surge',
1737*d5ef99ddSAndreas Gohr        'SUF' => 'Surfans',
1738*d5ef99ddSAndreas Gohr        '06'  => 'Subor',
1739*d5ef99ddSAndreas Gohr        'SUT' => 'SULPICE TV',
1740*d5ef99ddSAndreas Gohr        'SZ'  => 'Sumvision',
1741*d5ef99ddSAndreas Gohr        '0H'  => 'Sunstech',
1742*d5ef99ddSAndreas Gohr        'S3'  => 'SunVan',
1743*d5ef99ddSAndreas Gohr        '5S'  => 'Sunvell',
1744*d5ef99ddSAndreas Gohr        '5Y'  => 'Sunny',
1745*d5ef99ddSAndreas Gohr        'W8'  => 'SUNWIND',
1746*d5ef99ddSAndreas Gohr        'SBX' => 'SuperBOX',
1747*d5ef99ddSAndreas Gohr        'SBM' => 'Supermax',
1748*d5ef99ddSAndreas Gohr        'SBR' => 'Sber',
1749*d5ef99ddSAndreas Gohr        'SGE' => 'Super General',
1750*d5ef99ddSAndreas Gohr        'SU'  => 'SuperSonic',
1751*d5ef99ddSAndreas Gohr        '79'  => 'SuperTab',
1752*d5ef99ddSAndreas Gohr        'STV' => 'SuperTV',
1753*d5ef99ddSAndreas Gohr        'S5'  => 'Supra',
1754*d5ef99ddSAndreas Gohr        'SUP' => 'Supraim',
1755*d5ef99ddSAndreas Gohr        'ZS'  => 'Suzuki',
1756*d5ef99ddSAndreas Gohr        '2J'  => 'Sunmi',
1757*d5ef99ddSAndreas Gohr        'SUN' => 'Sunmax',
1758*d5ef99ddSAndreas Gohr        '0W'  => 'Swipe',
1759*d5ef99ddSAndreas Gohr        'SWI' => 'Switel',
1760*d5ef99ddSAndreas Gohr        'SS'  => 'SWISSMOBILITY',
1761*d5ef99ddSAndreas Gohr        '1W'  => 'Swisstone',
1762*d5ef99ddSAndreas Gohr        'SWO' => 'SWOFY',
1763*d5ef99ddSAndreas Gohr        'SSK' => 'SSKY',
1764*d5ef99ddSAndreas Gohr        'SYC' => 'Syco',
1765*d5ef99ddSAndreas Gohr        'SM'  => 'Symphony',
1766*d5ef99ddSAndreas Gohr        '4S'  => 'Syrox',
1767*d5ef99ddSAndreas Gohr        'SYS' => 'System76',
1768*d5ef99ddSAndreas Gohr        'TM'  => 'T-Mobile',
1769*d5ef99ddSAndreas Gohr        'T96' => 'T96',
1770*d5ef99ddSAndreas Gohr        'TAD' => 'TADAAM',
1771*d5ef99ddSAndreas Gohr        'TK'  => 'Takara',
1772*d5ef99ddSAndreas Gohr        '73'  => 'Tambo',
1773*d5ef99ddSAndreas Gohr        '9N'  => 'Tanix',
1774*d5ef99ddSAndreas Gohr        'U5'  => 'Taiga System',
1775*d5ef99ddSAndreas Gohr        'TAL' => 'Talius',
1776*d5ef99ddSAndreas Gohr        '7G'  => 'TAG Tech',
1777*d5ef99ddSAndreas Gohr        'TLB' => 'TALBERG',
1778*d5ef99ddSAndreas Gohr        'TAU' => 'TAUBE',
1779*d5ef99ddSAndreas Gohr        'T5'  => 'TB Touch',
1780*d5ef99ddSAndreas Gohr        'TC'  => 'TCL',
1781*d5ef99ddSAndreas Gohr        'T0'  => 'TD Systems',
1782*d5ef99ddSAndreas Gohr        'YY'  => 'TD Tech',
1783*d5ef99ddSAndreas Gohr        'H4'  => 'Technicolor',
1784*d5ef99ddSAndreas Gohr        'TEA' => 'TeachTouch',
1785*d5ef99ddSAndreas Gohr        'Z5'  => 'Technika',
1786*d5ef99ddSAndreas Gohr        'TE1' => 'TechSmart',
1787*d5ef99ddSAndreas Gohr        'TX'  => 'TechniSat',
1788*d5ef99ddSAndreas Gohr        'TT'  => 'TechnoTrend',
1789*d5ef99ddSAndreas Gohr        'TTS' => 'TECHNOSAT',
1790*d5ef99ddSAndreas Gohr        'TM1' => 'Temigereev',
1791*d5ef99ddSAndreas Gohr        'TP'  => 'TechPad',
1792*d5ef99ddSAndreas Gohr        'TPS' => 'TPS',
1793*d5ef99ddSAndreas Gohr        '9E'  => 'Techwood',
1794*d5ef99ddSAndreas Gohr        '7F'  => 'Technopc',
1795*d5ef99ddSAndreas Gohr        'TCH' => 'Techstorm',
1796*d5ef99ddSAndreas Gohr        'T7'  => 'Teclast',
1797*d5ef99ddSAndreas Gohr        'TB'  => 'Tecno Mobile',
1798*d5ef99ddSAndreas Gohr        'TEC' => 'TecToy',
1799*d5ef99ddSAndreas Gohr        '91'  => 'TEENO',
1800*d5ef99ddSAndreas Gohr        'TLK' => 'Telkom',
1801*d5ef99ddSAndreas Gohr        '2L'  => 'Tele2',
1802*d5ef99ddSAndreas Gohr        'TL'  => 'Telefunken',
1803*d5ef99ddSAndreas Gohr        'TG'  => 'Telego',
1804*d5ef99ddSAndreas Gohr        'T2'  => 'Telenor',
1805*d5ef99ddSAndreas Gohr        'TE'  => 'Telit',
1806*d5ef99ddSAndreas Gohr        '65'  => 'Telia',
1807*d5ef99ddSAndreas Gohr        'TLY' => 'Telly',
1808*d5ef99ddSAndreas Gohr        'TEL' => 'Telma',
1809*d5ef99ddSAndreas Gohr        'PW'  => 'Telpo',
1810*d5ef99ddSAndreas Gohr        'TLS' => 'TeloSystems',
1811*d5ef99ddSAndreas Gohr        'TER' => 'Teracube',
1812*d5ef99ddSAndreas Gohr        'TD'  => 'Tesco',
1813*d5ef99ddSAndreas Gohr        'TA'  => 'Tesla',
1814*d5ef99ddSAndreas Gohr        '9T'  => 'Tetratab',
1815*d5ef99ddSAndreas Gohr        'TET' => 'TETC',
1816*d5ef99ddSAndreas Gohr        'TZ'  => 'teXet',
1817*d5ef99ddSAndreas Gohr        '29'  => 'Teknosa',
1818*d5ef99ddSAndreas Gohr        'JZ'  => 'TJC',
1819*d5ef99ddSAndreas Gohr        'TJD' => 'TJD',
1820*d5ef99ddSAndreas Gohr        'JC'  => 'TENPLUS',
1821*d5ef99ddSAndreas Gohr        'T4'  => 'ThL',
1822*d5ef99ddSAndreas Gohr        'TN'  => 'Thomson',
1823*d5ef99ddSAndreas Gohr        'O0'  => 'Thuraya',
1824*d5ef99ddSAndreas Gohr        'TI'  => 'TIANYU',
1825*d5ef99ddSAndreas Gohr        'JY'  => 'Tigers',
1826*d5ef99ddSAndreas Gohr        '8T'  => 'Time2',
1827*d5ef99ddSAndreas Gohr        'TQ'  => 'Timovi',
1828*d5ef99ddSAndreas Gohr        'TIM' => 'TIMvision',
1829*d5ef99ddSAndreas Gohr        '2T'  => 'Tinai',
1830*d5ef99ddSAndreas Gohr        'TF'  => 'Tinmo',
1831*d5ef99ddSAndreas Gohr        'TH'  => 'TiPhone',
1832*d5ef99ddSAndreas Gohr        'YV'  => 'TiVo',
1833*d5ef99ddSAndreas Gohr        'TIV' => 'Tivax',
1834*d5ef99ddSAndreas Gohr        'TIB' => 'Tibuta',
1835*d5ef99ddSAndreas Gohr        'Y3'  => 'TOKYO',
1836*d5ef99ddSAndreas Gohr        'TOX' => 'TOX',
1837*d5ef99ddSAndreas Gohr        'T1'  => 'Tolino',
1838*d5ef99ddSAndreas Gohr        '0T'  => 'Tone',
1839*d5ef99ddSAndreas Gohr        'TY'  => 'Tooky',
1840*d5ef99ddSAndreas Gohr        'TYD' => 'TYD',
1841*d5ef99ddSAndreas Gohr        'TOO' => 'TOOGO',
1842*d5ef99ddSAndreas Gohr        'TPT' => 'Top-Tech',
1843*d5ef99ddSAndreas Gohr        'T9'  => 'Top House',
1844*d5ef99ddSAndreas Gohr        'DK'  => 'Topelotek',
1845*d5ef99ddSAndreas Gohr        '42'  => 'Topway',
1846*d5ef99ddSAndreas Gohr        'TO'  => 'Toplux',
1847*d5ef99ddSAndreas Gohr        'TOD' => 'TOPDON',
1848*d5ef99ddSAndreas Gohr        'TOP' => 'TopDevice',
1849*d5ef99ddSAndreas Gohr        'TO2' => 'TOPSHOWS',
1850*d5ef99ddSAndreas Gohr        '7T'  => 'Torex',
1851*d5ef99ddSAndreas Gohr        'TOR' => 'Torque',
1852*d5ef99ddSAndreas Gohr        'TRN' => 'TORNADO',
1853*d5ef99ddSAndreas Gohr        '6O'  => 'TOSCIDO',
1854*d5ef99ddSAndreas Gohr        'TO1' => 'Topsion',
1855*d5ef99ddSAndreas Gohr        'TS'  => 'Toshiba',
1856*d5ef99ddSAndreas Gohr        'T8'  => 'Touchmate',
1857*d5ef99ddSAndreas Gohr        'TOU' => 'Touch Plus',
1858*d5ef99ddSAndreas Gohr        '5R'  => 'Transpeed',
1859*d5ef99ddSAndreas Gohr        'T6'  => 'TrekStor',
1860*d5ef99ddSAndreas Gohr        'TRP' => 'Trecfone',
1861*d5ef99ddSAndreas Gohr        'T3'  => 'Trevi',
1862*d5ef99ddSAndreas Gohr        'TRI' => 'TriaPlay',
1863*d5ef99ddSAndreas Gohr        'TJ'  => 'Trifone',
1864*d5ef99ddSAndreas Gohr        'Q5'  => 'Trident',
1865*d5ef99ddSAndreas Gohr        'TRB' => 'Trimble',
1866*d5ef99ddSAndreas Gohr        '4T'  => 'Tronsmart',
1867*d5ef99ddSAndreas Gohr        '11'  => 'True',
1868*d5ef99ddSAndreas Gohr        'JT'  => 'True Slim',
1869*d5ef99ddSAndreas Gohr        'J1'  => 'Trio',
1870*d5ef99ddSAndreas Gohr        'TRC' => 'Tricolor',
1871*d5ef99ddSAndreas Gohr        'THT' => 'Tsinghua Tongfang',
1872*d5ef99ddSAndreas Gohr        '5C'  => 'TTEC',
1873*d5ef99ddSAndreas Gohr        'TTF' => 'TTfone',
1874*d5ef99ddSAndreas Gohr        'TTK' => 'TTK-TV',
1875*d5ef99ddSAndreas Gohr        'TU'  => 'Tunisie Telecom',
1876*d5ef99ddSAndreas Gohr        '1T'  => 'Turbo',
1877*d5ef99ddSAndreas Gohr        'TR'  => 'Turbo-X',
1878*d5ef99ddSAndreas Gohr        '5X'  => 'TurboPad',
1879*d5ef99ddSAndreas Gohr        '5T'  => 'TurboKids',
1880*d5ef99ddSAndreas Gohr        'UR'  => 'Turkcell',
1881*d5ef99ddSAndreas Gohr        '4U'  => 'TuCEL',
1882*d5ef99ddSAndreas Gohr        'TUV' => 'Tuvio',
1883*d5ef99ddSAndreas Gohr        'TUC' => 'TUCSON',
1884*d5ef99ddSAndreas Gohr        '2U'  => 'Türk Telekom',
1885*d5ef99ddSAndreas Gohr        'TV'  => 'TVC',
1886*d5ef99ddSAndreas Gohr        'TVP' => 'TV+',
1887*d5ef99ddSAndreas Gohr        'TW'  => 'TWM',
1888*d5ef99ddSAndreas Gohr        'Z1'  => 'TWZ',
1889*d5ef99ddSAndreas Gohr        '6T'  => 'Twoe',
1890*d5ef99ddSAndreas Gohr        'TWN' => 'TwinMOS',
1891*d5ef99ddSAndreas Gohr        '15'  => 'Tymes',
1892*d5ef99ddSAndreas Gohr        'UC'  => 'U.S. Cellular',
1893*d5ef99ddSAndreas Gohr        'UD1' => 'UD',
1894*d5ef99ddSAndreas Gohr        'UGI' => 'UGINE',
1895*d5ef99ddSAndreas Gohr        'UG'  => 'Ugoos',
1896*d5ef99ddSAndreas Gohr        'U1'  => 'Uhans',
1897*d5ef99ddSAndreas Gohr        'UH'  => 'Uhappy',
1898*d5ef99ddSAndreas Gohr        'UL'  => 'Ulefone',
1899*d5ef99ddSAndreas Gohr        'UA'  => 'Umax',
1900*d5ef99ddSAndreas Gohr        'UM'  => 'UMIDIGI',
1901*d5ef99ddSAndreas Gohr        'UM2' => 'Umiio',
1902*d5ef99ddSAndreas Gohr        'UNT' => 'Unitech',
1903*d5ef99ddSAndreas Gohr        'UZ'  => 'Unihertz',
1904*d5ef99ddSAndreas Gohr        '3Z'  => 'UZ Mobile',
1905*d5ef99ddSAndreas Gohr        'UX'  => 'Unimax',
1906*d5ef99ddSAndreas Gohr        'UNQ' => 'Uniqcell',
1907*d5ef99ddSAndreas Gohr        'US'  => 'Uniscope',
1908*d5ef99ddSAndreas Gohr        'UNI' => 'Unistrong',
1909*d5ef99ddSAndreas Gohr        'U2'  => 'UNIWA',
1910*d5ef99ddSAndreas Gohr        'UND' => 'Uniden',
1911*d5ef99ddSAndreas Gohr        'UNE' => 'UNITED',
1912*d5ef99ddSAndreas Gohr        'UGR' => 'United Group',
1913*d5ef99ddSAndreas Gohr        'UO'  => 'Unnecto',
1914*d5ef99ddSAndreas Gohr        'UNN' => 'Unnion Technologies',
1915*d5ef99ddSAndreas Gohr        'UNP' => 'UnoPhone',
1916*d5ef99ddSAndreas Gohr        'UU'  => 'Unonu',
1917*d5ef99ddSAndreas Gohr        'UN'  => 'Unowhy',
1918*d5ef99ddSAndreas Gohr        'UY'  => 'UNNO',
1919*d5ef99ddSAndreas Gohr        'UOO' => 'UOOGOU',
1920*d5ef99ddSAndreas Gohr        'UNB' => 'Unblock Tech',
1921*d5ef99ddSAndreas Gohr        'UK'  => 'UTOK',
1922*d5ef99ddSAndreas Gohr        '3U'  => 'IUNI',
1923*d5ef99ddSAndreas Gohr        'UT'  => 'UTStarcom',
1924*d5ef99ddSAndreas Gohr        '6U'  => 'UTime',
1925*d5ef99ddSAndreas Gohr        '9U'  => 'Urovo',
1926*d5ef99ddSAndreas Gohr        'UW'  => 'U-Magic',
1927*d5ef99ddSAndreas Gohr        '5V'  => 'VAIO',
1928*d5ef99ddSAndreas Gohr        'WV'  => 'VAVA',
1929*d5ef99ddSAndreas Gohr        'VA'  => 'Vastking',
1930*d5ef99ddSAndreas Gohr        'VP'  => 'Vargo',
1931*d5ef99ddSAndreas Gohr        'VC'  => 'Vankyo',
1932*d5ef99ddSAndreas Gohr        'VAL' => 'VALEM',
1933*d5ef99ddSAndreas Gohr        'VA2' => 'VALE',
1934*d5ef99ddSAndreas Gohr        'VAT' => 'VALTECH',
1935*d5ef99ddSAndreas Gohr        'VAN' => 'VANGUARD',
1936*d5ef99ddSAndreas Gohr        'VAW' => 'VANWIN',
1937*d5ef99ddSAndreas Gohr        'VB'  => 'VC',
1938*d5ef99ddSAndreas Gohr        'VEI' => 'Veidoo',
1939*d5ef99ddSAndreas Gohr        'VN'  => 'Venso',
1940*d5ef99ddSAndreas Gohr        'VNP' => 'VNPT Technology',
1941*d5ef99ddSAndreas Gohr        'VEN' => 'Venstar',
1942*d5ef99ddSAndreas Gohr        'UV'  => 'Venturer',
1943*d5ef99ddSAndreas Gohr        'VQ'  => 'Vega',
1944*d5ef99ddSAndreas Gohr        'WC'  => 'VEON',
1945*d5ef99ddSAndreas Gohr        '4V'  => 'Verico',
1946*d5ef99ddSAndreas Gohr        'V4'  => 'Verizon',
1947*d5ef99ddSAndreas Gohr        'VR'  => 'Vernee',
1948*d5ef99ddSAndreas Gohr        'VX'  => 'Vertex',
1949*d5ef99ddSAndreas Gohr        'VE'  => 'Vertu',
1950*d5ef99ddSAndreas Gohr        'VET' => 'VETAS',
1951*d5ef99ddSAndreas Gohr        'VL'  => 'Verykool',
1952*d5ef99ddSAndreas Gohr        'QV'  => 'Verssed',
1953*d5ef99ddSAndreas Gohr        'VER' => 'Versus',
1954*d5ef99ddSAndreas Gohr        'V8'  => 'Vesta',
1955*d5ef99ddSAndreas Gohr        'VEK' => 'Vekta',
1956*d5ef99ddSAndreas Gohr        'VT'  => 'Vestel',
1957*d5ef99ddSAndreas Gohr        '48'  => 'Vexia',
1958*d5ef99ddSAndreas Gohr        'V6'  => 'VGO TEL',
1959*d5ef99ddSAndreas Gohr        'QJ'  => 'VDVD',
1960*d5ef99ddSAndreas Gohr        'VIC' => 'Victurio',
1961*d5ef99ddSAndreas Gohr        'VD'  => 'Videocon',
1962*d5ef99ddSAndreas Gohr        'VW'  => 'Videoweb',
1963*d5ef99ddSAndreas Gohr        'VS'  => 'ViewSonic',
1964*d5ef99ddSAndreas Gohr        'VIE' => 'Viendo',
1965*d5ef99ddSAndreas Gohr        'VIK' => 'VIKUSHA',
1966*d5ef99ddSAndreas Gohr        'V7'  => 'Vinga',
1967*d5ef99ddSAndreas Gohr        'V7T' => 'V7',
1968*d5ef99ddSAndreas Gohr        'V3'  => 'Vinsoc',
1969*d5ef99ddSAndreas Gohr        'XD'  => 'Vinabox',
1970*d5ef99ddSAndreas Gohr        'FV'  => 'Vios',
1971*d5ef99ddSAndreas Gohr        '0V'  => 'Vipro',
1972*d5ef99ddSAndreas Gohr        'ZV'  => 'Virzo',
1973*d5ef99ddSAndreas Gohr        'VIP' => 'Viper',
1974*d5ef99ddSAndreas Gohr        'VI'  => 'Vitelcom',
1975*d5ef99ddSAndreas Gohr        'VIB' => 'ViBox',
1976*d5ef99ddSAndreas Gohr        '8V'  => 'Viumee',
1977*d5ef99ddSAndreas Gohr        'V5'  => 'Vivax',
1978*d5ef99ddSAndreas Gohr        'VIV' => 'VIVIMAGE',
1979*d5ef99ddSAndreas Gohr        'VI2' => 'VIVIBright',
1980*d5ef99ddSAndreas Gohr        'VV'  => 'Vivo',
1981*d5ef99ddSAndreas Gohr        '6V'  => 'VIWA',
1982*d5ef99ddSAndreas Gohr        'VII' => 'VIIPOO',
1983*d5ef99ddSAndreas Gohr        'VID' => 'VIDA',
1984*d5ef99ddSAndreas Gohr        'VZ'  => 'Vizio',
1985*d5ef99ddSAndreas Gohr        'VIZ' => 'Vizmo',
1986*d5ef99ddSAndreas Gohr        'VIT' => 'Vityaz',
1987*d5ef99ddSAndreas Gohr        '9V'  => 'Vision Touch',
1988*d5ef99ddSAndreas Gohr        'VIS' => 'Vision Technology',
1989*d5ef99ddSAndreas Gohr        'VST' => 'Visitech',
1990*d5ef99ddSAndreas Gohr        'VIL' => 'Visual Land',
1991*d5ef99ddSAndreas Gohr        'VI1' => 'VILLAON',
1992*d5ef99ddSAndreas Gohr        'VIM' => 'VIMOQ',
1993*d5ef99ddSAndreas Gohr        'VK'  => 'VK Mobile',
1994*d5ef99ddSAndreas Gohr        'JM'  => 'v-mobile',
1995*d5ef99ddSAndreas Gohr        'VHO' => 'V-HOPE',
1996*d5ef99ddSAndreas Gohr        'VHM' => 'V-HOME',
1997*d5ef99ddSAndreas Gohr        'VGE' => 'V-Gen',
1998*d5ef99ddSAndreas Gohr        'V0'  => 'VKworld',
1999*d5ef99ddSAndreas Gohr        'VM'  => 'Vodacom',
2000*d5ef99ddSAndreas Gohr        'VOC' => 'VOCAL',
2001*d5ef99ddSAndreas Gohr        'VF'  => 'Vodafone',
2002*d5ef99ddSAndreas Gohr        '7W'  => 'VOGA',
2003*d5ef99ddSAndreas Gohr        'V2'  => 'Vonino',
2004*d5ef99ddSAndreas Gohr        '1V'  => 'Vontar',
2005*d5ef99ddSAndreas Gohr        'VG'  => 'Vorago',
2006*d5ef99ddSAndreas Gohr        '2V'  => 'Vorke',
2007*d5ef99ddSAndreas Gohr        '8U'  => 'Vorcom',
2008*d5ef99ddSAndreas Gohr        'JW'  => 'Vortex',
2009*d5ef99ddSAndreas Gohr        'VRX' => 'VORTEX (RO)',
2010*d5ef99ddSAndreas Gohr        'VOR' => 'Vormor',
2011*d5ef99ddSAndreas Gohr        'V1'  => 'Voto',
2012*d5ef99ddSAndreas Gohr        'Z7'  => 'VOX',
2013*d5ef99ddSAndreas Gohr        'VO'  => 'Voxtel',
2014*d5ef99ddSAndreas Gohr        'VY'  => 'Voyo',
2015*d5ef99ddSAndreas Gohr        'VOL' => 'Völfen',
2016*d5ef99ddSAndreas Gohr        'VO1' => 'Volt',
2017*d5ef99ddSAndreas Gohr        'VOP' => 'Volla',
2018*d5ef99ddSAndreas Gohr        'V02' => 'VOLIA',
2019*d5ef99ddSAndreas Gohr        'VH'  => 'Vsmart',
2020*d5ef99ddSAndreas Gohr        'V9'  => 'Vsun',
2021*d5ef99ddSAndreas Gohr        'VU'  => 'Vulcan',
2022*d5ef99ddSAndreas Gohr        '3V'  => 'VVETIME',
2023*d5ef99ddSAndreas Gohr        'ZC'  => 'VUCATIMES',
2024*d5ef99ddSAndreas Gohr        'VO2' => 'VOLKANO',
2025*d5ef99ddSAndreas Gohr        'VUE' => 'Vue Micro',
2026*d5ef99ddSAndreas Gohr        'WAK' => 'Walker',
2027*d5ef99ddSAndreas Gohr        'WA'  => 'Walton',
2028*d5ef99ddSAndreas Gohr        'WAF' => 'WAF',
2029*d5ef99ddSAndreas Gohr        'WAO' => 'W&O',
2030*d5ef99ddSAndreas Gohr        'WLT' => 'Waltham',
2031*d5ef99ddSAndreas Gohr        'WAL' => 'Waltter',
2032*d5ef99ddSAndreas Gohr        'WAI' => 'Wainyok',
2033*d5ef99ddSAndreas Gohr        'WHI' => 'White Mobile',
2034*d5ef99ddSAndreas Gohr        'WHO' => 'Whoop',
2035*d5ef99ddSAndreas Gohr        'WBL' => 'We. by Loewe.',
2036*d5ef99ddSAndreas Gohr        'WCP' => 'WeChip',
2037*d5ef99ddSAndreas Gohr        'WM'  => 'Weimei',
2038*d5ef99ddSAndreas Gohr        'WM1' => 'Weiimi',
2039*d5ef99ddSAndreas Gohr        'WE'  => 'WellcoM',
2040*d5ef99ddSAndreas Gohr        'W6'  => 'WELLINGTON',
2041*d5ef99ddSAndreas Gohr        'WD'  => 'Western Digital',
2042*d5ef99ddSAndreas Gohr        'WST' => 'Weston',
2043*d5ef99ddSAndreas Gohr        'WT'  => 'Westpoint',
2044*d5ef99ddSAndreas Gohr        'WAN' => 'Wanmukang',
2045*d5ef99ddSAndreas Gohr        'WA1' => 'WANSA',
2046*d5ef99ddSAndreas Gohr        'WY'  => 'Wexler',
2047*d5ef99ddSAndreas Gohr        '3W'  => 'WE',
2048*d5ef99ddSAndreas Gohr        'WEC' => 'Wecool',
2049*d5ef99ddSAndreas Gohr        'WEE' => 'Weelikeit',
2050*d5ef99ddSAndreas Gohr        'WP'  => 'Wieppo',
2051*d5ef99ddSAndreas Gohr        'W2'  => 'Wigor',
2052*d5ef99ddSAndreas Gohr        'WI'  => 'Wiko',
2053*d5ef99ddSAndreas Gohr        'WF'  => 'Wileyfox',
2054*d5ef99ddSAndreas Gohr        'WLR' => 'WildRed',
2055*d5ef99ddSAndreas Gohr        'WS'  => 'Winds',
2056*d5ef99ddSAndreas Gohr        'WN'  => 'Wink',
2057*d5ef99ddSAndreas Gohr        '9W'  => 'Winmax',
2058*d5ef99ddSAndreas Gohr        'W5'  => 'Winnovo',
2059*d5ef99ddSAndreas Gohr        'WU'  => 'Wintouch',
2060*d5ef99ddSAndreas Gohr        'WIS' => 'Winstar',
2061*d5ef99ddSAndreas Gohr        'W0'  => 'Wiseasy',
2062*d5ef99ddSAndreas Gohr        '2W'  => 'Wizz',
2063*d5ef99ddSAndreas Gohr        'W4'  => 'WIWA',
2064*d5ef99ddSAndreas Gohr        'WIZ' => 'WizarPos',
2065*d5ef99ddSAndreas Gohr        'WL'  => 'Wolder',
2066*d5ef99ddSAndreas Gohr        'WG'  => 'Wolfgang',
2067*d5ef99ddSAndreas Gohr        'WQ'  => 'Wolki',
2068*d5ef99ddSAndreas Gohr        'WON' => 'WONDER',
2069*d5ef99ddSAndreas Gohr        'WO'  => 'Wonu',
2070*d5ef99ddSAndreas Gohr        'W1'  => 'Woo',
2071*d5ef99ddSAndreas Gohr        'WR'  => 'Wortmann',
2072*d5ef99ddSAndreas Gohr        'WX'  => 'Woxter',
2073*d5ef99ddSAndreas Gohr        'WOZ' => 'WOZIFAN',
2074*d5ef99ddSAndreas Gohr        'XQ'  => 'X-AGE',
2075*d5ef99ddSAndreas Gohr        'XEL' => 'XElectron',
2076*d5ef99ddSAndreas Gohr        'X3'  => 'X-BO',
2077*d5ef99ddSAndreas Gohr        'XBI' => 'XB',
2078*d5ef99ddSAndreas Gohr        'XMO' => 'X-Mobile',
2079*d5ef99ddSAndreas Gohr        'XT'  => 'X-TIGI',
2080*d5ef99ddSAndreas Gohr        'XV'  => 'X-View',
2081*d5ef99ddSAndreas Gohr        'X4'  => 'X.Vision',
2082*d5ef99ddSAndreas Gohr        'X88' => 'X88',
2083*d5ef99ddSAndreas Gohr        'X96' => 'X96',
2084*d5ef99ddSAndreas Gohr        '96Q' => 'X96Q',
2085*d5ef99ddSAndreas Gohr        'A95' => 'A95X',
2086*d5ef99ddSAndreas Gohr        'XG'  => 'Xgody',
2087*d5ef99ddSAndreas Gohr        'XGE' => 'XGEM',
2088*d5ef99ddSAndreas Gohr        'QX'  => 'XGIMI',
2089*d5ef99ddSAndreas Gohr        'XL'  => 'Xiaolajiao',
2090*d5ef99ddSAndreas Gohr        'XI'  => 'Xiaomi',
2091*d5ef99ddSAndreas Gohr        'XW'  => 'Xiaodu',
2092*d5ef99ddSAndreas Gohr        'XN'  => 'Xion',
2093*d5ef99ddSAndreas Gohr        'XO'  => 'Xolo',
2094*d5ef99ddSAndreas Gohr        'XR'  => 'Xoro',
2095*d5ef99ddSAndreas Gohr        'XPP' => 'XPPen',
2096*d5ef99ddSAndreas Gohr        'XRL' => 'XREAL',
2097*d5ef99ddSAndreas Gohr        'XS'  => 'Xshitou',
2098*d5ef99ddSAndreas Gohr        'XSM' => 'Xsmart',
2099*d5ef99ddSAndreas Gohr        '4X'  => 'Xtouch',
2100*d5ef99ddSAndreas Gohr        'X8'  => 'Xtratech',
2101*d5ef99ddSAndreas Gohr        'XCR' => 'Xcruiser',
2102*d5ef99ddSAndreas Gohr        'XCO' => 'XCOM',
2103*d5ef99ddSAndreas Gohr        'XCL' => 'Xcell',
2104*d5ef99ddSAndreas Gohr        'XWA' => 'Xwave',
2105*d5ef99ddSAndreas Gohr        'YD'  => 'Yandex',
2106*d5ef99ddSAndreas Gohr        'YA'  => 'Yarvik',
2107*d5ef99ddSAndreas Gohr        'Y2'  => 'Yes',
2108*d5ef99ddSAndreas Gohr        'YES' => 'Yestel',
2109*d5ef99ddSAndreas Gohr        'YE'  => 'Yezz',
2110*d5ef99ddSAndreas Gohr        'YG'  => 'YEPEN',
2111*d5ef99ddSAndreas Gohr        'YEL' => 'YELLYOUTH',
2112*d5ef99ddSAndreas Gohr        'YK'  => 'Yoka TV',
2113*d5ef99ddSAndreas Gohr        'YO'  => 'Yota',
2114*d5ef99ddSAndreas Gohr        'YOU' => 'Youin',
2115*d5ef99ddSAndreas Gohr        'YO1' => 'Youwei',
2116*d5ef99ddSAndreas Gohr        'YOO' => 'Yooz',
2117*d5ef99ddSAndreas Gohr        'YT'  => 'Ytone',
2118*d5ef99ddSAndreas Gohr        'Y9'  => 'YOTOPT',
2119*d5ef99ddSAndreas Gohr        'Y1'  => 'Yu',
2120*d5ef99ddSAndreas Gohr        'YF'  => 'YU Fly',
2121*d5ef99ddSAndreas Gohr        'Y0'  => 'YUHO',
2122*d5ef99ddSAndreas Gohr        'YN'  => 'Yuno',
2123*d5ef99ddSAndreas Gohr        'YUN' => 'YUNDOO',
2124*d5ef99ddSAndreas Gohr        'YUS' => 'YunSong',
2125*d5ef99ddSAndreas Gohr        'YUM' => 'YUMKEM',
2126*d5ef99ddSAndreas Gohr        'YU'  => 'Yuandao',
2127*d5ef99ddSAndreas Gohr        'YS'  => 'Yusun',
2128*d5ef99ddSAndreas Gohr        'YJ'  => 'YASIN',
2129*d5ef99ddSAndreas Gohr        'YX'  => 'Yxtel',
2130*d5ef99ddSAndreas Gohr        '0Z'  => 'Zatec',
2131*d5ef99ddSAndreas Gohr        '2Z'  => 'Zaith',
2132*d5ef99ddSAndreas Gohr        'ZAM' => 'Zamolxe',
2133*d5ef99ddSAndreas Gohr        'ZZB' => 'ZZB',
2134*d5ef99ddSAndreas Gohr        'ZEA' => 'Zealot',
2135*d5ef99ddSAndreas Gohr        'PZ'  => 'Zebra',
2136*d5ef99ddSAndreas Gohr        'ZE1' => 'Zeblaze',
2137*d5ef99ddSAndreas Gohr        'ZE'  => 'Zeemi',
2138*d5ef99ddSAndreas Gohr        'WZ'  => 'Zeeker',
2139*d5ef99ddSAndreas Gohr        'ZN'  => 'Zen',
2140*d5ef99ddSAndreas Gohr        'ZK'  => 'Zenek',
2141*d5ef99ddSAndreas Gohr        'ZL'  => 'Zentality',
2142*d5ef99ddSAndreas Gohr        'ZF'  => 'Zfiner',
2143*d5ef99ddSAndreas Gohr        'ZI'  => 'Zidoo',
2144*d5ef99ddSAndreas Gohr        'FZ'  => 'ZIFRO',
2145*d5ef99ddSAndreas Gohr        'ZIF' => 'ZIFFLER',
2146*d5ef99ddSAndreas Gohr        'ZIO' => 'ZIOVO',
2147*d5ef99ddSAndreas Gohr        'ZX'  => 'Ziox',
2148*d5ef99ddSAndreas Gohr        'ZIK' => 'ZIK',
2149*d5ef99ddSAndreas Gohr        'ZKI' => 'Z-Kai',
2150*d5ef99ddSAndreas Gohr        'ZIG' => 'Zigo',
2151*d5ef99ddSAndreas Gohr        'ZIN' => 'Zinox',
2152*d5ef99ddSAndreas Gohr        'ZO'  => 'Zonda',
2153*d5ef99ddSAndreas Gohr        'ZW'  => 'Zonko',
2154*d5ef99ddSAndreas Gohr        'ZP'  => 'Zopo',
2155*d5ef99ddSAndreas Gohr        'ZOO' => 'ZoomSmart',
2156*d5ef99ddSAndreas Gohr        'ZO1' => 'Zoom',
2157*d5ef99ddSAndreas Gohr        'ZT'  => 'ZTE',
2158*d5ef99ddSAndreas Gohr        'ZU'  => 'Zuum',
2159*d5ef99ddSAndreas Gohr        'ZY'  => 'Zync',
2160*d5ef99ddSAndreas Gohr        'ZR'  => 'Zyrex',
2161*d5ef99ddSAndreas Gohr        'ZQ'  => 'ZYQ',
2162*d5ef99ddSAndreas Gohr        'Z4'  => 'ZH&K',
2163*d5ef99ddSAndreas Gohr        'OW'  => 'öwn',
2164*d5ef99ddSAndreas Gohr        'WBF' => 'Webfleet',
2165*d5ef99ddSAndreas Gohr        'WSS' => 'WS',
2166*d5ef99ddSAndreas Gohr        // legacy brands, might be removed in future versions
2167*d5ef99ddSAndreas Gohr        'WB'  => 'Web TV',
2168*d5ef99ddSAndreas Gohr        'XX'  => 'Unknown',
2169*d5ef99ddSAndreas Gohr    ];
2170*d5ef99ddSAndreas Gohr
2171*d5ef99ddSAndreas Gohr    /**
2172*d5ef99ddSAndreas Gohr     * Mapping formFactor types to parser device types
2173*d5ef99ddSAndreas Gohr     * (not sort array the array priority result device type)
2174*d5ef99ddSAndreas Gohr     * @var array
2175*d5ef99ddSAndreas Gohr     */
2176*d5ef99ddSAndreas Gohr    protected static $clientHintFormFactorsMapping = [
2177*d5ef99ddSAndreas Gohr        'automotive' => self::DEVICE_TYPE_CAR_BROWSER,
2178*d5ef99ddSAndreas Gohr        'xr'         => self::DEVICE_TYPE_WEARABLE,
2179*d5ef99ddSAndreas Gohr        'watch'      => self::DEVICE_TYPE_WEARABLE,
2180*d5ef99ddSAndreas Gohr        'mobile'     => self::DEVICE_TYPE_SMARTPHONE,
2181*d5ef99ddSAndreas Gohr        'tablet'     => self::DEVICE_TYPE_TABLET,
2182*d5ef99ddSAndreas Gohr        'desktop'    => self::DEVICE_TYPE_DESKTOP,
2183*d5ef99ddSAndreas Gohr        'eink'       => self::DEVICE_TYPE_TABLET,
2184*d5ef99ddSAndreas Gohr    ];
2185*d5ef99ddSAndreas Gohr
2186*d5ef99ddSAndreas Gohr    /**
2187*d5ef99ddSAndreas Gohr     * Returns the device type represented by one of the DEVICE_TYPE_* constants
2188*d5ef99ddSAndreas Gohr     *
2189*d5ef99ddSAndreas Gohr     * @return int|null
2190*d5ef99ddSAndreas Gohr     */
2191*d5ef99ddSAndreas Gohr    public function getDeviceType(): ?int
2192*d5ef99ddSAndreas Gohr    {
2193*d5ef99ddSAndreas Gohr        return $this->deviceType;
2194*d5ef99ddSAndreas Gohr    }
2195*d5ef99ddSAndreas Gohr
2196*d5ef99ddSAndreas Gohr    /**
2197*d5ef99ddSAndreas Gohr     * Returns available device types
2198*d5ef99ddSAndreas Gohr     *
2199*d5ef99ddSAndreas Gohr     * @see $deviceTypes
2200*d5ef99ddSAndreas Gohr     *
2201*d5ef99ddSAndreas Gohr     * @return array
2202*d5ef99ddSAndreas Gohr     */
2203*d5ef99ddSAndreas Gohr    public static function getAvailableDeviceTypes(): array
2204*d5ef99ddSAndreas Gohr    {
2205*d5ef99ddSAndreas Gohr        return self::$deviceTypes;
2206*d5ef99ddSAndreas Gohr    }
2207*d5ef99ddSAndreas Gohr
2208*d5ef99ddSAndreas Gohr    /**
2209*d5ef99ddSAndreas Gohr     * Returns names of all available device types
2210*d5ef99ddSAndreas Gohr     *
2211*d5ef99ddSAndreas Gohr     * @return array
2212*d5ef99ddSAndreas Gohr     */
2213*d5ef99ddSAndreas Gohr    public static function getAvailableDeviceTypeNames(): array
2214*d5ef99ddSAndreas Gohr    {
2215*d5ef99ddSAndreas Gohr        return \array_keys(self::$deviceTypes);
2216*d5ef99ddSAndreas Gohr    }
2217*d5ef99ddSAndreas Gohr
2218*d5ef99ddSAndreas Gohr    /**
2219*d5ef99ddSAndreas Gohr     * Returns the name of the given device type
2220*d5ef99ddSAndreas Gohr     *
2221*d5ef99ddSAndreas Gohr     * @param int $deviceType one of the DEVICE_TYPE_* constants
2222*d5ef99ddSAndreas Gohr     *
2223*d5ef99ddSAndreas Gohr     * @return string
2224*d5ef99ddSAndreas Gohr     */
2225*d5ef99ddSAndreas Gohr    public static function getDeviceName(int $deviceType): string
2226*d5ef99ddSAndreas Gohr    {
2227*d5ef99ddSAndreas Gohr        $deviceName = \array_search($deviceType, self::$deviceTypes);
2228*d5ef99ddSAndreas Gohr
2229*d5ef99ddSAndreas Gohr        if (\is_string($deviceName)) {
2230*d5ef99ddSAndreas Gohr            return $deviceName;
2231*d5ef99ddSAndreas Gohr        }
2232*d5ef99ddSAndreas Gohr
2233*d5ef99ddSAndreas Gohr        return '';
2234*d5ef99ddSAndreas Gohr    }
2235*d5ef99ddSAndreas Gohr
2236*d5ef99ddSAndreas Gohr    /**
2237*d5ef99ddSAndreas Gohr     * Returns the detected device model
2238*d5ef99ddSAndreas Gohr     *
2239*d5ef99ddSAndreas Gohr     * @return string
2240*d5ef99ddSAndreas Gohr     */
2241*d5ef99ddSAndreas Gohr    public function getModel(): string
2242*d5ef99ddSAndreas Gohr    {
2243*d5ef99ddSAndreas Gohr        return $this->model;
2244*d5ef99ddSAndreas Gohr    }
2245*d5ef99ddSAndreas Gohr
2246*d5ef99ddSAndreas Gohr    /**
2247*d5ef99ddSAndreas Gohr     * Returns the detected device brand
2248*d5ef99ddSAndreas Gohr     *
2249*d5ef99ddSAndreas Gohr     * @return string
2250*d5ef99ddSAndreas Gohr     */
2251*d5ef99ddSAndreas Gohr    public function getBrand(): string
2252*d5ef99ddSAndreas Gohr    {
2253*d5ef99ddSAndreas Gohr        return $this->brand;
2254*d5ef99ddSAndreas Gohr    }
2255*d5ef99ddSAndreas Gohr
2256*d5ef99ddSAndreas Gohr    /**
2257*d5ef99ddSAndreas Gohr     * Returns the full brand name for the given short name
2258*d5ef99ddSAndreas Gohr     *
2259*d5ef99ddSAndreas Gohr     * @param string $brandId short brand name
2260*d5ef99ddSAndreas Gohr     *
2261*d5ef99ddSAndreas Gohr     * @return string
2262*d5ef99ddSAndreas Gohr     */
2263*d5ef99ddSAndreas Gohr    public static function getFullName(string $brandId): string
2264*d5ef99ddSAndreas Gohr    {
2265*d5ef99ddSAndreas Gohr        if (\array_key_exists($brandId, self::$deviceBrands)) {
2266*d5ef99ddSAndreas Gohr            return self::$deviceBrands[$brandId];
2267*d5ef99ddSAndreas Gohr        }
2268*d5ef99ddSAndreas Gohr
2269*d5ef99ddSAndreas Gohr        return '';
2270*d5ef99ddSAndreas Gohr    }
2271*d5ef99ddSAndreas Gohr
2272*d5ef99ddSAndreas Gohr    /**
2273*d5ef99ddSAndreas Gohr     * Returns the brand short code for the given name
2274*d5ef99ddSAndreas Gohr     *
2275*d5ef99ddSAndreas Gohr     * @param string $brand brand name
2276*d5ef99ddSAndreas Gohr     *
2277*d5ef99ddSAndreas Gohr     * @return string
2278*d5ef99ddSAndreas Gohr     *
2279*d5ef99ddSAndreas Gohr     * @deprecated since 4.0 - short codes might be removed in next major release
2280*d5ef99ddSAndreas Gohr     */
2281*d5ef99ddSAndreas Gohr    public static function getShortCode(string $brand): string
2282*d5ef99ddSAndreas Gohr    {
2283*d5ef99ddSAndreas Gohr        return (string) \array_search($brand, self::$deviceBrands) ?: '';
2284*d5ef99ddSAndreas Gohr    }
2285*d5ef99ddSAndreas Gohr
2286*d5ef99ddSAndreas Gohr    /**
2287*d5ef99ddSAndreas Gohr     * Sets the useragent to be parsed
2288*d5ef99ddSAndreas Gohr     *
2289*d5ef99ddSAndreas Gohr     * @param string $userAgent
2290*d5ef99ddSAndreas Gohr     */
2291*d5ef99ddSAndreas Gohr    public function setUserAgent(string $userAgent): void
2292*d5ef99ddSAndreas Gohr    {
2293*d5ef99ddSAndreas Gohr        $this->reset();
2294*d5ef99ddSAndreas Gohr        parent::setUserAgent($userAgent);
2295*d5ef99ddSAndreas Gohr    }
2296*d5ef99ddSAndreas Gohr
2297*d5ef99ddSAndreas Gohr    /**
2298*d5ef99ddSAndreas Gohr     * @inheritdoc
2299*d5ef99ddSAndreas Gohr     */
2300*d5ef99ddSAndreas Gohr    public function parse(): ?array
2301*d5ef99ddSAndreas Gohr    {
2302*d5ef99ddSAndreas Gohr        $resultClientHint = $this->parseClientHints();
2303*d5ef99ddSAndreas Gohr        $deviceModel      = $resultClientHint['model'] ?? '';
2304*d5ef99ddSAndreas Gohr
2305*d5ef99ddSAndreas Gohr        $this->restoreUserAgentFromClientHints();
2306*d5ef99ddSAndreas Gohr
2307*d5ef99ddSAndreas Gohr        if ('' === $deviceModel && $this->hasUserAgentClientHintsFragment()) {
2308*d5ef99ddSAndreas Gohr            return $this->getResult();
2309*d5ef99ddSAndreas Gohr        }
2310*d5ef99ddSAndreas Gohr
2311*d5ef99ddSAndreas Gohr        if ('' === $deviceModel && $this->hasDesktopFragment()) {
2312*d5ef99ddSAndreas Gohr            return $this->getResult();
2313*d5ef99ddSAndreas Gohr        }
2314*d5ef99ddSAndreas Gohr
2315*d5ef99ddSAndreas Gohr        $brand   = '';
2316*d5ef99ddSAndreas Gohr        $regexes = $this->getRegexes();
2317*d5ef99ddSAndreas Gohr
2318*d5ef99ddSAndreas Gohr        foreach ($regexes as $brand => $regex) {
2319*d5ef99ddSAndreas Gohr            $matches = $this->matchUserAgent($regex['regex']);
2320*d5ef99ddSAndreas Gohr
2321*d5ef99ddSAndreas Gohr            if ($matches) {
2322*d5ef99ddSAndreas Gohr                break;
2323*d5ef99ddSAndreas Gohr            }
2324*d5ef99ddSAndreas Gohr        }
2325*d5ef99ddSAndreas Gohr
2326*d5ef99ddSAndreas Gohr        if (empty($matches)) {
2327*d5ef99ddSAndreas Gohr            $this->deviceType = $resultClientHint['deviceType'] ?? null;
2328*d5ef99ddSAndreas Gohr
2329*d5ef99ddSAndreas Gohr            return $resultClientHint;
2330*d5ef99ddSAndreas Gohr        }
2331*d5ef99ddSAndreas Gohr
2332*d5ef99ddSAndreas Gohr        if ('Unknown' !== $brand) {
2333*d5ef99ddSAndreas Gohr            if (!\in_array($brand, self::$deviceBrands)) {
2334*d5ef99ddSAndreas Gohr                // This Exception should never be thrown. If so a defined brand name is missing in $deviceBrands
2335*d5ef99ddSAndreas Gohr                throw new \Exception(\sprintf(
2336*d5ef99ddSAndreas Gohr                    "The brand with name '%s' should be listed in deviceBrands array. Tried to parse user agent: %s",
2337*d5ef99ddSAndreas Gohr                    $brand,
2338*d5ef99ddSAndreas Gohr                    $this->userAgent
2339*d5ef99ddSAndreas Gohr                )); // @codeCoverageIgnore
2340*d5ef99ddSAndreas Gohr            }
2341*d5ef99ddSAndreas Gohr
2342*d5ef99ddSAndreas Gohr            $this->brand = (string) $brand;
2343*d5ef99ddSAndreas Gohr        }
2344*d5ef99ddSAndreas Gohr
2345*d5ef99ddSAndreas Gohr        if (isset($regex['device']) && \array_key_exists($regex['device'], self::$deviceTypes)) {
2346*d5ef99ddSAndreas Gohr            $this->deviceType = self::$deviceTypes[$regex['device']];
2347*d5ef99ddSAndreas Gohr        }
2348*d5ef99ddSAndreas Gohr
2349*d5ef99ddSAndreas Gohr        $this->model = '';
2350*d5ef99ddSAndreas Gohr
2351*d5ef99ddSAndreas Gohr        if (isset($regex['model'])) {
2352*d5ef99ddSAndreas Gohr            $this->model = $this->buildModel($regex['model'], $matches);
2353*d5ef99ddSAndreas Gohr        }
2354*d5ef99ddSAndreas Gohr
2355*d5ef99ddSAndreas Gohr        if (isset($regex['models'])) {
2356*d5ef99ddSAndreas Gohr            $modelRegex = '';
2357*d5ef99ddSAndreas Gohr
2358*d5ef99ddSAndreas Gohr            foreach ($regex['models'] as $modelRegex) {
2359*d5ef99ddSAndreas Gohr                $modelMatches = $this->matchUserAgent($modelRegex['regex']);
2360*d5ef99ddSAndreas Gohr
2361*d5ef99ddSAndreas Gohr                if ($modelMatches) {
2362*d5ef99ddSAndreas Gohr                    break;
2363*d5ef99ddSAndreas Gohr                }
2364*d5ef99ddSAndreas Gohr            }
2365*d5ef99ddSAndreas Gohr
2366*d5ef99ddSAndreas Gohr            if (empty($modelMatches)) {
2367*d5ef99ddSAndreas Gohr                return $this->getResult();
2368*d5ef99ddSAndreas Gohr            }
2369*d5ef99ddSAndreas Gohr
2370*d5ef99ddSAndreas Gohr            $this->model = $this->buildModel($modelRegex['model'], $modelMatches);
2371*d5ef99ddSAndreas Gohr
2372*d5ef99ddSAndreas Gohr            if (isset($modelRegex['brand']) && \in_array($modelRegex['brand'], self::$deviceBrands)) {
2373*d5ef99ddSAndreas Gohr                $this->brand = (string) $modelRegex['brand'];
2374*d5ef99ddSAndreas Gohr            }
2375*d5ef99ddSAndreas Gohr
2376*d5ef99ddSAndreas Gohr            if (isset($modelRegex['device']) && \array_key_exists($modelRegex['device'], self::$deviceTypes)) {
2377*d5ef99ddSAndreas Gohr                $this->deviceType = self::$deviceTypes[$modelRegex['device']];
2378*d5ef99ddSAndreas Gohr            }
2379*d5ef99ddSAndreas Gohr        }
2380*d5ef99ddSAndreas Gohr
2381*d5ef99ddSAndreas Gohr        return $this->getResult();
2382*d5ef99ddSAndreas Gohr    }
2383*d5ef99ddSAndreas Gohr
2384*d5ef99ddSAndreas Gohr    /**
2385*d5ef99ddSAndreas Gohr     * @param string $model
2386*d5ef99ddSAndreas Gohr     * @param array  $matches
2387*d5ef99ddSAndreas Gohr     *
2388*d5ef99ddSAndreas Gohr     * @return string
2389*d5ef99ddSAndreas Gohr     */
2390*d5ef99ddSAndreas Gohr    protected function buildModel(string $model, array $matches): string
2391*d5ef99ddSAndreas Gohr    {
2392*d5ef99ddSAndreas Gohr        $model = $this->buildByMatch($model, $matches);
2393*d5ef99ddSAndreas Gohr
2394*d5ef99ddSAndreas Gohr        $model = \str_replace('_', ' ', $model);
2395*d5ef99ddSAndreas Gohr
2396*d5ef99ddSAndreas Gohr        $model = \preg_replace('/ TD$/i', '', $model);
2397*d5ef99ddSAndreas Gohr
2398*d5ef99ddSAndreas Gohr        if ('Build' === $model || empty($model)) {
2399*d5ef99ddSAndreas Gohr            return '';
2400*d5ef99ddSAndreas Gohr        }
2401*d5ef99ddSAndreas Gohr
2402*d5ef99ddSAndreas Gohr        return \trim($model);
2403*d5ef99ddSAndreas Gohr    }
2404*d5ef99ddSAndreas Gohr
2405*d5ef99ddSAndreas Gohr    /**
2406*d5ef99ddSAndreas Gohr     * @return array|null
2407*d5ef99ddSAndreas Gohr     */
2408*d5ef99ddSAndreas Gohr    protected function parseClientHints(): ?array
2409*d5ef99ddSAndreas Gohr    {
2410*d5ef99ddSAndreas Gohr        if ($this->clientHints && $this->clientHints->getModel()) {
2411*d5ef99ddSAndreas Gohr            $detectedDeviceType = null;
2412*d5ef99ddSAndreas Gohr            $formFactors        = $this->clientHints->getFormFactors();
2413*d5ef99ddSAndreas Gohr
2414*d5ef99ddSAndreas Gohr            foreach (self::$clientHintFormFactorsMapping as $formFactor => $deviceType) {
2415*d5ef99ddSAndreas Gohr                if (\in_array($formFactor, $formFactors)) {
2416*d5ef99ddSAndreas Gohr                    $detectedDeviceType = $deviceType;
2417*d5ef99ddSAndreas Gohr
2418*d5ef99ddSAndreas Gohr                    break;
2419*d5ef99ddSAndreas Gohr                }
2420*d5ef99ddSAndreas Gohr            }
2421*d5ef99ddSAndreas Gohr
2422*d5ef99ddSAndreas Gohr            return [
2423*d5ef99ddSAndreas Gohr                'deviceType' => $detectedDeviceType,
2424*d5ef99ddSAndreas Gohr                'model'      => $this->clientHints->getModel(),
2425*d5ef99ddSAndreas Gohr                'brand'      => '',
2426*d5ef99ddSAndreas Gohr            ];
2427*d5ef99ddSAndreas Gohr        }
2428*d5ef99ddSAndreas Gohr
2429*d5ef99ddSAndreas Gohr        return null;
2430*d5ef99ddSAndreas Gohr    }
2431*d5ef99ddSAndreas Gohr
2432*d5ef99ddSAndreas Gohr    /**
2433*d5ef99ddSAndreas Gohr     * Resets the stored values
2434*d5ef99ddSAndreas Gohr     */
2435*d5ef99ddSAndreas Gohr    protected function reset(): void
2436*d5ef99ddSAndreas Gohr    {
2437*d5ef99ddSAndreas Gohr        $this->deviceType = null;
2438*d5ef99ddSAndreas Gohr        $this->model      = '';
2439*d5ef99ddSAndreas Gohr        $this->brand      = '';
2440*d5ef99ddSAndreas Gohr    }
2441*d5ef99ddSAndreas Gohr
2442*d5ef99ddSAndreas Gohr    /**
2443*d5ef99ddSAndreas Gohr     * @return array
2444*d5ef99ddSAndreas Gohr     */
2445*d5ef99ddSAndreas Gohr    protected function getResult(): array
2446*d5ef99ddSAndreas Gohr    {
2447*d5ef99ddSAndreas Gohr        return [
2448*d5ef99ddSAndreas Gohr            'deviceType' => $this->deviceType,
2449*d5ef99ddSAndreas Gohr            'model'      => $this->model,
2450*d5ef99ddSAndreas Gohr            'brand'      => $this->brand,
2451*d5ef99ddSAndreas Gohr        ];
2452*d5ef99ddSAndreas Gohr    }
2453*d5ef99ddSAndreas Gohr}
2454