GeoIP Detection - Version 1.8

Version Description

  • NEW: Support reverse proxies (you have to enable it in the plugin options.)
  • NEW: Shortcode now has a default value when no information for this IP found.
Download this release

Release Info

Developer benjamin4
Plugin Icon 128x128 GeoIP Detection
Version 1.8
Comparing to
See all releases

Version 1.8

Files changed (48) hide show
  1. LICENCE +339 -0
  2. api.php +105 -0
  3. composer.json +18 -0
  4. composer.lock +69 -0
  5. filter.php +103 -0
  6. geoip-detect.php +149 -0
  7. languages/messages.pot +114 -0
  8. readme.txt +122 -0
  9. screenshot-1.png +0 -0
  10. shortcode.php +23 -0
  11. updater.php +117 -0
  12. vendor/autoload.php +7 -0
  13. vendor/composer/ClassLoader.php +246 -0
  14. vendor/composer/autoload_classmap.php +9 -0
  15. vendor/composer/autoload_files.php +11 -0
  16. vendor/composer/autoload_namespaces.php +9 -0
  17. vendor/composer/autoload_real.php +48 -0
  18. vendor/composer/installed.json +48 -0
  19. vendor/geoip/geoip/.gitignore +9 -0
  20. vendor/geoip/geoip/ChangeLog +105 -0
  21. vendor/geoip/geoip/ChangeLog.md +133 -0
  22. vendor/geoip/geoip/LICENSE +502 -0
  23. vendor/geoip/geoip/README.md +95 -0
  24. vendor/geoip/geoip/admin/generate_geoipregionvars.php +80 -0
  25. vendor/geoip/geoip/benchmark.php +67 -0
  26. vendor/geoip/geoip/composer.json +24 -0
  27. vendor/geoip/geoip/geoip.inc +714 -0
  28. vendor/geoip/geoip/geoipcity.inc +237 -0
  29. vendor/geoip/geoip/geoipregionvars.php +4254 -0
  30. vendor/geoip/geoip/sample-v6.php +32 -0
  31. vendor/geoip/geoip/sample.php +20 -0
  32. vendor/geoip/geoip/sample_asn-v6.php +18 -0
  33. vendor/geoip/geoip/sample_city-v6.php +33 -0
  34. vendor/geoip/geoip/sample_city.php +33 -0
  35. vendor/geoip/geoip/sample_distributed.php +31 -0
  36. vendor/geoip/geoip/sample_domain.php +17 -0
  37. vendor/geoip/geoip/sample_netspeed.php +23 -0
  38. vendor/geoip/geoip/sample_netspeedcell.php +14 -0
  39. vendor/geoip/geoip/sample_org.php +23 -0
  40. vendor/geoip/geoip/sample_region.php +20 -0
  41. vendor/geoip/geoip/src/geoip.inc +1891 -0
  42. vendor/geoip/geoip/src/geoipcity.inc +241 -0
  43. vendor/geoip/geoip/src/geoipregionvars.php +4447 -0
  44. vendor/geoip/geoip/src/timezone.php +2235 -0
  45. vendor/geoip/geoip/timezone/make_time_zone_php_code.pl +48 -0
  46. vendor/geoip/geoip/timezone/test_timezone.php +5 -0
  47. vendor/geoip/geoip/timezone/timezone.php +2274 -0
  48. views/plugin_page.php +86 -0
LICENCE ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
api.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Get Geo-Information for a specific IP
5
+ * @param string $ip IP-Adress (currently only IPv4)
6
+ * @return geoiprecord GeoInformation. (0 or NULL: no infos found.)
7
+ */
8
+ function geoip_detect_get_info_from_ip($ip)
9
+ {
10
+ $data_file = geoip_detect_get_abs_db_filename();
11
+ if (!$data_file)
12
+ return 0;
13
+
14
+ $gi = geoip_open($data_file, GEOIP_STANDARD);
15
+ $record = geoip_record_by_addr($gi, $ip);
16
+ geoip_close($gi);
17
+
18
+ $record = apply_filters('geoip_detect_record_information', $record, $ip);
19
+
20
+ return $record;
21
+ }
22
+
23
+ /**
24
+ * Get Geo-Information for the current IP
25
+ * @param string $ip (IPv4)
26
+ * @return geoiprecord GeoInformation. (0 / NULL: no infos found.)
27
+ */
28
+ function geoip_detect_get_info_from_current_ip()
29
+ {
30
+ $ip = geoip_detect_get_client_ip();
31
+
32
+ // TODO: Use Proxy IP if available
33
+ return geoip_detect_get_info_from_ip($ip);
34
+ }
35
+
36
+ /**
37
+ * Get client IP (even if it is behind a reverse proxy)
38
+ */
39
+ function geoip_detect_get_client_ip() {
40
+ if (get_option('geoip-detect-has_reverse_proxy', 0) && isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
41
+ {
42
+ $ip = @$_SERVER["HTTP_X_FORWARDED_FOR"];
43
+ } else {
44
+ $ip = @$_SERVER['REMOTE_ADDR'];
45
+ }
46
+
47
+ return $ip;
48
+ }
49
+
50
+ /**
51
+ * Sometimes we can only see an local IP adress (local development environment.)
52
+ * In this case we need to ask an internet server which IP adress our internet connection has.
53
+ *
54
+ * @return string The detected IP Adress. If none is found, '0.0.0.0' is returned instead.
55
+ */
56
+ function geoip_detect_get_external_ip_adress()
57
+ {
58
+ $ip_cache = get_transient('geoip_detect_external_ip');
59
+
60
+ if ($ip_cache)
61
+ return apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
62
+
63
+ $ip_cache = _geoip_detect_get_external_ip_adress_without_cache();
64
+ set_transient('geoip_detect_external_ip', $ip_cache, GEOIP_DETECT_IP_CACHE_TIME);
65
+
66
+ $ip_cache = apply_filters('geoip_detect_get_external_ip_adress', $ip_cache);
67
+ return $ip_cache;
68
+ }
69
+
70
+ function _geoip_detect_get_external_ip_adress_without_cache()
71
+ {
72
+ $ipservices = array(
73
+ 'http://ipv4.icanhazip.com',
74
+ // 'http://ifconfig.me/ip', // seems to be slow
75
+ 'http://ipecho.net/plain',
76
+ 'http://v4.ident.me',
77
+ 'http://bot.whatismyipaddress.com',
78
+ 'http://ip.appspot.com',
79
+ );
80
+
81
+ // Randomizing to avoid querying the same service each time
82
+ shuffle($ipservices);
83
+ $ipservices = apply_filters('geiop_detect_ipservices', $ipservices);
84
+ $ipservices = array_slice($ipservices, 0, 3);
85
+
86
+ foreach ($ipservices as $url)
87
+ {
88
+ $ret = wp_remote_get($url, array('timeout' => 1));
89
+
90
+ if (is_wp_error($ret)) {
91
+ if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
92
+ trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): Curl error (' . $url . '): ' . $ret->get_error_message(), E_USER_NOTICE);
93
+ }
94
+ } else if (isset($ret['response']['code']) && $ret['response']['code'] != 200) {
95
+ if (WP_DEBUG || defined('WP_TESTS_TITLE')) {
96
+ trigger_error('_geoip_detect_get_external_ip_adress_without_cache(): HTTP error (' . $url . '): Returned code ' . $ret['response']['code'], E_USER_NOTICE);
97
+ }
98
+ } else if (isset($ret['body'])) {
99
+ $ip = trim($ret['body']);
100
+ if (preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip))
101
+ return $ip;
102
+ }
103
+ }
104
+ return '0.0.0.0';
105
+ }
composer.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name" : "GeoIP Detection",
3
+ "description" : "Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.",
4
+ "type" : "wordpress-plugin",
5
+ "authors" : [{
6
+ "name" : "Benjamin Pick",
7
+ "email" : "b.pick@yellowtree.de"
8
+ }
9
+ ],
10
+ "keywords" : [],
11
+ "homepage" : "http://www.yellowtree.de",
12
+ "license" : [
13
+ "GPL-2.0+"
14
+ ],
15
+ "require" : {
16
+ "geoip/geoip" : "~1"
17
+ }
18
+ }
composer.lock ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_readme": [
3
+ "This file locks the dependencies of your project to a known state",
4
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
5
+ ],
6
+ "hash": "92be3dc56e82881559a1645ba4b9aa3c",
7
+ "packages": [
8
+ {
9
+ "name": "geoip/geoip",
10
+ "version": "v1.14",
11
+ "source": {
12
+ "type": "git",
13
+ "url": "https://github.com/maxmind/geoip-api-php.git",
14
+ "reference": "465fe4d7e581871e9c8594adf3fb52268b253312"
15
+ },
16
+ "dist": {
17
+ "type": "zip",
18
+ "url": "https://api.github.com/repos/maxmind/geoip-api-php/zipball/465fe4d7e581871e9c8594adf3fb52268b253312",
19
+ "reference": "465fe4d7e581871e9c8594adf3fb52268b253312",
20
+ "shasum": ""
21
+ },
22
+ "conflict": {
23
+ "ext-geoip": "*"
24
+ },
25
+ "type": "library",
26
+ "autoload": {
27
+ "files": [
28
+ "src/geoip.inc",
29
+ "src/geoipcity.inc"
30
+ ]
31
+ },
32
+ "notification-url": "https://packagist.org/downloads/",
33
+ "license": [
34
+ "LGPL 2.1+"
35
+ ],
36
+ "authors": [
37
+ {
38
+ "name": "MaxMind, Inc.",
39
+ "email": "support@maxmind.com",
40
+ "homepage": "http://www.maxmind.com/"
41
+ }
42
+ ],
43
+ "description": "MaxMind GeoIP PHP API",
44
+ "homepage": "http://dev.maxmind.com/geoip/legacy/downloadable",
45
+ "keywords": [
46
+ "geoip",
47
+ "geolocation",
48
+ "maxmind"
49
+ ],
50
+ "time": "2013-11-05 21:52:33"
51
+ }
52
+ ],
53
+ "packages-dev": [
54
+
55
+ ],
56
+ "aliases": [
57
+
58
+ ],
59
+ "minimum-stability": "stable",
60
+ "stability-flags": [
61
+
62
+ ],
63
+ "platform": [
64
+
65
+ ],
66
+ "platform-dev": [
67
+
68
+ ]
69
+ }
filter.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * Filter: geoip_detect_record_information
5
+ * After loading the information from the GeoIP-Database, you can add or remove information from it.
6
+ * @param geoiprecord $record Information found.
7
+ * @return geoiprecord
8
+ *
9
+ * The filters below are optional. You can remove them by using a remove_filter call somewhere, e.g.
10
+ *
11
+ * remove_filter('geoip_detect_record_information', 'geoip_detect_fix_corrupt_info', 101);
12
+ */
13
+
14
+ function geoip_detect_add_verbose_information_to_record($record)
15
+ {
16
+ static $GEOIP_REGION_NAME_COPY;
17
+
18
+ if (is_null($GEOIP_REGION_NAME_COPY))
19
+ {
20
+ require(dirname(__FILE__) . '/vendor/geoip/geoip/src/geoipregionvars.php');
21
+ $GEOIP_REGION_NAME_COPY = $GEOIP_REGION_NAME;
22
+ }
23
+
24
+ if ($record)
25
+ {
26
+ if (!empty($record->country_code) && !empty($record->region) && !empty($GEOIP_REGION_NAME_COPY[$record->country_code][$record->region]))
27
+ $record->region_name = @$GEOIP_REGION_NAME_COPY[$record->country_code][$record->region];
28
+ else
29
+ $record->region_name = null;
30
+ }
31
+
32
+ return $record;
33
+ }
34
+ add_filter('geoip_detect_record_information', 'geoip_detect_add_verbose_information_to_record');
35
+
36
+ if (!function_exists('get_time_zone')) {
37
+ require_once(dirname(__FILE__) . '/vendor/geoip/geoip/src/timezone.php');
38
+ }
39
+
40
+ function geoip_detect_add_timezone_information_to_record($record)
41
+ {
42
+ if ($record)
43
+ {
44
+ $record->timezone = get_time_zone($record->country_code, $record->region);
45
+ }
46
+
47
+ return $record;
48
+ }
49
+ add_filter('geoip_detect_record_information', 'geoip_detect_add_timezone_information_to_record');
50
+
51
+ function geoip_detect_fix_corrupt_info($record)
52
+ {
53
+ if ($record && ($record->latitude < -90 || $record->longitude < -180) )
54
+ {
55
+ // File corrupted? Use empty defaults
56
+ $record->latitude = 0;
57
+ $record->longitude = 0;
58
+ $record->city = 'Unknown';
59
+ }
60
+ return $record;
61
+ }
62
+ add_filter('geoip_detect_record_information', 'geoip_detect_fix_corrupt_info', 101);
63
+
64
+ /**
65
+ * If no information was found, use the external IP of the server and try again.
66
+ * This is necessary to allow local development servers to return sensical data.
67
+ *
68
+ * @param geoiprecord $record Information found.
69
+ * @return geoiprecord Hopefully more accurate information.
70
+ */
71
+ function geoip_detect_add_external_ip($record)
72
+ {
73
+ static $avoid_recursion = false; // Flag in order to retry only once
74
+ if ($avoid_recursion)
75
+ return $record; // This is the retry with the external adress, so don't do anything
76
+
77
+ if (!is_object($record))
78
+ {
79
+ $external_ip = geoip_detect_get_external_ip_adress();
80
+
81
+ $avoid_recursion = true;
82
+ $record = geoip_detect_get_info_from_ip($external_ip);
83
+ $avoid_recursion = false;
84
+ }
85
+ return $record;
86
+ }
87
+ add_filter('geoip_detect_record_information', 'geoip_detect_add_external_ip');
88
+
89
+
90
+ add_filter('body_class', 'geoip_add_body_classes');
91
+ function geoip_add_body_classes($classes) {
92
+ if (!get_option('geoip-detect-set_css_country'))
93
+ return $classes;
94
+
95
+ $info = geoip_detect_get_info_from_current_ip();
96
+ if (!$info)
97
+ return $classes;
98
+
99
+ $classes[] = 'geoip-country-' . $info->country_code;
100
+ $classes[] = 'geoip-continent-' . $info->continent_code;
101
+
102
+ return $classes;
103
+ }
geoip-detect.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: GeoIP Detection
4
+ Plugin URI: http://www.yellowtree.de
5
+ Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
6
+ Author: YellowTree (Benjamin Pick)
7
+ Author URI: http://www.yellowtree.de
8
+ Version: 1.8
9
+ License: GPLv2 or later
10
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
+ Text Domain: geoip-detect
12
+ Domain Path: /languages
13
+ */
14
+ /*
15
+ Copyright 2013-2014 YellowTree, Siegen, Germany
16
+ Author: Benjamin Pick (b.pick@yellowtree.de)
17
+
18
+ This program is free software; you can redistribute it and/or modify
19
+ it under the terms of the GNU General Public License as published by
20
+ the Free Software Foundation; either version 2 of the License, or
21
+ (at your option) any later version.
22
+
23
+ This program is distributed in the hope that it will be useful,
24
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
+ GNU General Public License for more details.
27
+
28
+ You should have received a copy of the GNU General Public License
29
+ along with this program; if not, write to the Free Software
30
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
+ */
32
+
33
+ define('GEOIP_PLUGIN_FILE', __FILE__);
34
+
35
+ if (!class_exists('geoiprecord') && !class_exists('geoiprecord')) {
36
+ require_once(dirname(__FILE__) . '/vendor/geoip/geoip/src/geoipcity.inc');
37
+ }
38
+
39
+ require_once(dirname(__FILE__) . '/api.php');
40
+ require_once(dirname(__FILE__) . '/filter.php');
41
+
42
+ require_once(dirname(__FILE__) . '/updater.php');
43
+
44
+ require_once(dirname(__FILE__) . '/shortcode.php');
45
+
46
+
47
+ define('GEOIP_DETECT_DATA_FILENAME', 'GeoLiteCity.dat');
48
+
49
+ function geoip_detect_defines() {
50
+ if (!defined('GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED'))
51
+ define('GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED', false);
52
+ if (!defined('GEOIP_DETECT_IP_CACHE_TIME'))
53
+ define('GEOIP_DETECT_IP_CACHE_TIME', 2 * HOUR_IN_SECONDS);
54
+ }
55
+ add_action('plugins_loaded', 'geoip_detect_defines');
56
+
57
+
58
+ function geoip_detect_get_abs_db_filename()
59
+ {
60
+ $data_filename = dirname(__FILE__) . '/' . GEOIP_DETECT_DATA_FILENAME;
61
+ if (!file_exists($data_filename))
62
+ $data_filename = '';
63
+
64
+ $data_filename = apply_filters('geoip_detect_get_abs_db_filename', $data_filename);
65
+
66
+ if (!$data_filename && (WP_DEBUG || defined('WP_TESTS_TITLE')))
67
+ trigger_error(__('No GeoIP Database file found. Please refer to the installation instructions in readme.txt.', 'geoip-detect'), E_USER_NOTICE);
68
+
69
+ return $data_filename;
70
+ }
71
+
72
+
73
+
74
+ // ------------- Admin GUI --------------------
75
+
76
+ function geoip_detect_plugin_page()
77
+ {
78
+ geoip_detect_set_cron_schedule();
79
+
80
+ $ip_lookup_result = false;
81
+ $last_update = 0;
82
+ $message = '';
83
+
84
+ $option_names = array('set_css_country', 'has_reverse_proxy');
85
+
86
+ switch(@$_POST['action'])
87
+ {
88
+ case 'update':
89
+ $ret = geoip_detect_update();
90
+ if ($ret === true)
91
+ $message .= __('Updated successfully.', 'geoip-detect');
92
+ else
93
+ $message .= __('Update failed.', 'geoip-detect') .' '. $ret;
94
+
95
+ break;
96
+
97
+ case 'lookup':
98
+ if (isset($_POST['ip']))
99
+ {
100
+ $ip = $_POST['ip'];
101
+ $ip_lookup_result = geoip_detect_get_info_from_ip($ip);
102
+ }
103
+ break;
104
+
105
+ case 'options':
106
+ foreach ($option_names as $opt_name) {
107
+ $opt_value = isset($_POST['options'][$opt_name]) ? (int) $_POST['options'][$opt_name] : 0;
108
+ update_option('geoip-detect-' . $opt_name, $opt_value);
109
+ }
110
+
111
+ break;
112
+ }
113
+
114
+ $data_file = geoip_detect_get_abs_db_filename();
115
+ if (file_exists($data_file))
116
+ {
117
+ $last_update = filemtime($data_file);
118
+ }
119
+ else
120
+ {
121
+ $message .= __('No GeoIP Database found. Click on the button "Update now" or follow the installation instructions.', 'geoip-detect');
122
+ $last_update = 0;
123
+ }
124
+ $next_cron_update = wp_next_scheduled( 'geoipdetectupdate' );
125
+
126
+ $options = array();
127
+
128
+ foreach ($option_names as $opt_name) {
129
+ $options[$opt_name] = (int) get_option('geoip-detect-'. $opt_name);
130
+ }
131
+
132
+ include_once(dirname(__FILE__) . '/views/plugin_page.php');
133
+ }
134
+
135
+ function geoip_detect_menu() {
136
+ require_once ABSPATH . '/wp-admin/admin.php';
137
+ add_submenu_page('tools.php', __('GeoIP Detection', 'geoip-detect'), __('GeoIP Detection', 'geoip-detect'), 'activate_plugins', __FILE__, 'geoip_detect_plugin_page');
138
+ }
139
+ add_action('admin_menu', 'geoip_detect_menu');
140
+
141
+ function geoip_detect_add_settings_link( $links ) {
142
+ $settings_link = '<a href="tools.php?page=geoip-detect/geoip-detect.php">' . __('Plugin page', 'geoip-detect') . '</a>';
143
+ array_push( $links, $settings_link );
144
+ return $links;
145
+ }
146
+ $plugin = plugin_basename( __FILE__ );
147
+ add_filter( "plugin_action_links_$plugin", 'geoip_detect_add_settings_link' );
148
+
149
+
languages/messages.pot ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2013 GeoIP Detection
2
+ # This file is distributed under the same license as the GeoIP Detection package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: GeoIP Detection 1.5\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/geoip-detect\n"
7
+ "POT-Creation-Date: 2013-12-19 10:23:18+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2013-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+
15
+ #: geoip-detect.php:54
16
+ msgid ""
17
+ "No GeoIP Database file found. Please refer to the installation instructions "
18
+ "in readme.txt."
19
+ msgstr ""
20
+
21
+ #: geoip-detect.php:76
22
+ msgid "Updated successfully."
23
+ msgstr ""
24
+
25
+ #: geoip-detect.php:78
26
+ msgid "Update failed."
27
+ msgstr ""
28
+
29
+ #: geoip-detect.php:98
30
+ msgid ""
31
+ "No GeoIP Database found. Click on the button \"Update now\" or follow the "
32
+ "installation instructions."
33
+ msgstr ""
34
+
35
+ #. #-#-#-#-# plugin.pot (GeoIP Detection 1.5) #-#-#-#-#
36
+ #. Plugin Name of the plugin/theme
37
+ #: geoip-detect.php:108
38
+ msgid "GeoIP Detection"
39
+ msgstr ""
40
+
41
+ #: geoip-detect.php:113
42
+ msgid "Plugin page"
43
+ msgstr ""
44
+
45
+ #: updater.php:41
46
+ msgid "Downloaded file could not be opened for reading."
47
+ msgstr ""
48
+
49
+ #: updater.php:43
50
+ msgid "Database could not be written (%s)."
51
+ msgstr ""
52
+
53
+ #: updater.php:67
54
+ msgid "Once Weekly"
55
+ msgstr ""
56
+
57
+ #: views/plugin_page.php:5
58
+ msgid "GeoIP Detect"
59
+ msgstr ""
60
+
61
+ #: views/plugin_page.php:14
62
+ msgid "Last updated: %s"
63
+ msgstr ""
64
+
65
+ #: views/plugin_page.php:14 views/plugin_page.php:19
66
+ msgid "Never"
67
+ msgstr ""
68
+
69
+ #: views/plugin_page.php:19
70
+ msgid "Next update: %s"
71
+ msgstr ""
72
+
73
+ #: views/plugin_page.php:20
74
+ msgid "(The file is updated automatically once a week.)"
75
+ msgstr ""
76
+
77
+ #: views/plugin_page.php:26
78
+ msgid "Update now"
79
+ msgstr ""
80
+
81
+ #: views/plugin_page.php:34
82
+ msgid "Lookup"
83
+ msgstr ""
84
+
85
+ #: views/plugin_page.php:39
86
+ msgid "The function %s returns an object:"
87
+ msgstr ""
88
+
89
+ #: views/plugin_page.php:43
90
+ msgid "Key"
91
+ msgstr ""
92
+
93
+ #: views/plugin_page.php:44
94
+ msgid "Property Value"
95
+ msgstr ""
96
+
97
+ #: views/plugin_page.php:60
98
+ msgid "No information found about this IP."
99
+ msgstr ""
100
+
101
+ #. #-#-#-#-# plugin.pot (GeoIP Detection 1.5) #-#-#-#-#
102
+ #. Plugin URI of the plugin/theme
103
+ #. #-#-#-#-# plugin.pot (GeoIP Detection 1.5) #-#-#-#-#
104
+ #. Author URI of the plugin/theme
105
+ msgid "http://www.yellowtree.de"
106
+ msgstr ""
107
+
108
+ #. Description of the plugin/theme
109
+ msgid "Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database."
110
+ msgstr ""
111
+
112
+ #. Author of the plugin/theme
113
+ msgid "YellowTree (Benjamin Pick)"
114
+ msgstr ""
readme.txt ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === GeoIP Detection ===
2
+ Contributors: benjaminpick
3
+ Tags: geoip, ip, locator, latitude, longitude
4
+ Requires at least: 3.5
5
+ Tested up to: 4.0.1
6
+ Stable tag: trunk
7
+ License: GPLv2 or later
8
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
+
10
+ Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
11
+
12
+ == Description ==
13
+
14
+ Provides geographic information detected by an IP adress. This can be used in themes or other plugins, or via CSS body classes.
15
+
16
+ = Features: =
17
+
18
+ * Provides 3 functions:
19
+ * `geoip_detect_get_info_from_ip($ip)`: Lookup Geo-Information of the specified IP
20
+ * `geoip_detect_get_info_from_current_ip()`: Lookup Geo-Information of the current website user
21
+ * `geoip_detect_get_external_ip_adress()`: Fetch the internet adress of the webserver
22
+ * Auto-Update the GeoIP database once a week
23
+ * For the property names, see the results of a specific IP in the wordpress backend (under Tools > GeoIP Detection).
24
+ * You can include these properties into your posts and pages by using the shortcode `[geoip_detect property="country_name" default="(country could not be detected)"]` (where 'country_name' can be one of the other property names as well, and 'default' can be used (optionally) to show a different text when no information was found for this IP).
25
+ * When enabled on the plugin page, it adds CSS classes to the body tag such as `geoip-country-DE` and `geoip-continent-EU`.
26
+
27
+ = How can I use these functions? =
28
+
29
+ * You could choose the currency of the store based on the country name
30
+ * You could suggest an timezone to use when displaying dates
31
+ * You could show the store nearest to your customer
32
+ * You show or hide content specific to a geographic target group
33
+ * Etc. ... You tell me! I'm rather curious what you'll do with this plugin!
34
+
35
+ *This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com.*
36
+
37
+ == Installation ==
38
+
39
+ This plugin does not contain the database itself. It is downloaded as soon as you activate it the first time (takes some seconds).
40
+ You can try it out on the plugin page.
41
+
42
+ == Frequently Asked Questions ==
43
+
44
+ = How exact is this data? =
45
+
46
+ Think of it as an "educated guess": IP adresses and their allocation change on a frequent basis.
47
+ If you need [more exact data](http://www.maxmind.com/en/geolite_city_accuracy "GeoLiteCity Accuracy"), consider purchasing the commercial version of the data.
48
+
49
+ = Technically speaking, how could I verify if my visitor comes from Germany? =
50
+
51
+ Put this code somewhere in your template files:
52
+
53
+ $userInfo = geoip_detect_get_info_from_current_ip();
54
+ if ($userInfo && $userInfo->country_code == 'DE')
55
+ echo 'Hallo! Schön dass Sie hier sind!';
56
+
57
+ Or, add the plugin shortcode somewhere in the page or post content:
58
+
59
+ Heyo, over there in [geoip_detect property="country_name"] !
60
+
61
+ To see which property names are supported, refer to the [Plugin Backend](http://wordpress.org/plugins/geoip-detect/screenshots/).
62
+
63
+ #### What is planned to be implemented? ####
64
+
65
+ Maxmind released a new API version (v2) with localized country names and a accuracy percentage. Work in Progress.
66
+
67
+ == Screenshots ==
68
+
69
+ 1. Backend page (under Tools > GeoIP Detection)
70
+
71
+ == Upgrade Notice ==
72
+
73
+ = 1.7.1 =
74
+
75
+ Cron update was broken again ...
76
+
77
+ = 1.6 =
78
+
79
+ Automatic weekly update didn't work in all installations.
80
+
81
+ = 1.5 =
82
+
83
+ Fixing automatic weekly updates.
84
+
85
+
86
+ == Changelog ==
87
+
88
+ = 1.8 =
89
+ * NEW: Support reverse proxies (you have to enable it in the plugin options.)
90
+ * NEW: Shortcode now has a default value when no information for this IP found.
91
+
92
+ = 1.7.1 =
93
+ * FIX: Fatal error on cron run
94
+
95
+ = 1.7 =
96
+ * FIX: Schedule Database update to do in background immediately after plugin installation/re-activation.
97
+ * FIX: Longitude can be smaller than -90
98
+
99
+ = 1.6 =
100
+ * NEW: Can add a country- and continent-specific class on the body tag. You need to activate this in the options.
101
+ * FIX: Automatic weekly update. (Didn't work on all installations).
102
+ * FIX: Do not include Maxmind Libraries again if already included by another plugin/theme
103
+
104
+ = 1.5 =
105
+ * FIX: Automatic weekly update. Go to the plugin page (Tools menu) to verify that an update is planned.
106
+
107
+ = 1.4 =
108
+ * Feature: Add shortcode [geoip_detect property="(property name)"] for direct use in posts/pages
109
+
110
+ = 1.3 =
111
+ * FIX: Manual install works again (was broken since 1.2)
112
+
113
+ = 1.2 =
114
+ * FIX: property region_name is now filled again (was broken since 1.1)
115
+
116
+ = 1.1 =
117
+ * Add function `geoip_detect_get_external_ip_adress()`: Ask a webservice to tell me the external IP of the webserver.
118
+ * New filter: When developing locally, the external IP is used to determine the geographic location.
119
+
120
+ = 1.0 =
121
+
122
+ * First working release.
screenshot-1.png ADDED
Binary file
shortcode.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_shortcode('geoip_detect', 'geoip_detect_shortcode');
4
+ function geoip_detect_shortcode($attr)
5
+ {
6
+ $userInfo = geoip_detect_get_info_from_current_ip();
7
+
8
+ $defaultValue = isset($attr['default']) ? $attr['default'] : '';
9
+
10
+ if (!is_object($userInfo))
11
+ return $defaultValue . '<!-- GeoIP Detect: No info found for this IP. -->';
12
+
13
+ $propertyName = $attr['property'];
14
+
15
+ if (property_exists($userInfo, $propertyName)) {
16
+ if ($userInfo->$propertyName)
17
+ return $userInfo->$propertyName;
18
+ else
19
+ return $defaultValue;
20
+ }
21
+
22
+ return $defaultValue . '<!-- GeoIP Detect: Invalid property name. -->';
23
+ }
updater.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // You can use this in your theme/plugin to deactivate the auto-update
3
+ //define('GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED', true);
4
+
5
+
6
+
7
+ // Needed for WP File functions. Cron doesn't work without it.
8
+ require_once(ABSPATH.'/wp-admin/includes/file.php');
9
+
10
+ function geoip_detect_get_database_upload_filename()
11
+ {
12
+ $upload_dir = wp_upload_dir();
13
+ $dir = $upload_dir['basedir'];
14
+
15
+ $filename = $dir . '/' . GEOIP_DETECT_DATA_FILENAME;
16
+ return $filename;
17
+ }
18
+
19
+ function geoip_detect_get_database_upload_filename_filter($filename_before)
20
+ {
21
+ $filename = geoip_detect_get_database_upload_filename();
22
+ if (file_exists($filename))
23
+ return $filename;
24
+
25
+ return $filename_before;
26
+ }
27
+
28
+ add_filter('geoip_detect_get_abs_db_filename', 'geoip_detect_get_database_upload_filename_filter');
29
+
30
+ function geoip_detect_update()
31
+ {
32
+ $download_url = 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz';
33
+
34
+ $outFile = geoip_detect_get_database_upload_filename();
35
+
36
+ // Download
37
+ $tmpFile = download_url($download_url);
38
+ if (is_wp_error($tmpFile))
39
+ return $tmpFile->get_error_message();
40
+
41
+ // Ungzip File
42
+ $zh = gzopen($tmpFile, 'r');
43
+ $h = fopen($outFile, 'w');
44
+
45
+ if (!$zh)
46
+ return __('Downloaded file could not be opened for reading.', 'geoip-detect');
47
+ if (!$h)
48
+ return sprintf(__('Database could not be written (%s).', 'geoip-detect'), $outFile);
49
+
50
+ while ( ($string = gzread($zh, 4096)) != false )
51
+ fwrite($h, $string, strlen($string));
52
+
53
+ gzclose($zh);
54
+ fclose($h);
55
+
56
+ //unlink($tmpFile);
57
+
58
+ return true;
59
+ }
60
+
61
+ // ------------------ CRON Hooks --------------------------
62
+
63
+ function geoip_detect_update_cron($immediately_after_activation = false) {
64
+ /**
65
+ * Filter:
66
+ * Cron has fired.
67
+ * Find out if file should be updated now.
68
+ *
69
+ * @param $do_it False if deactivated by define
70
+ * @param $immediately_after_activation True if this is fired because the plugin was recently activated
71
+ */
72
+ $do_it = apply_filters('geoip_detect_cron_do_update', !GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED, $immediately_after_activation);
73
+
74
+ if ($do_it)
75
+ geoip_detect_update();
76
+ }
77
+
78
+ add_action('geoipdetectupdate', 'geoip_detect_update_cron', 10, 1);
79
+
80
+
81
+ add_filter( 'cron_schedules', 'geoip_detect_cron_add_weekly' );
82
+ function geoip_detect_cron_add_weekly( $schedules ) {
83
+ // Adds once weekly to the existing schedules.
84
+ if (!isset($schedules['weekly']))
85
+ {
86
+ $schedules['weekly'] = array(
87
+ 'interval' => 604800,
88
+ 'display' => __( 'Once Weekly' )
89
+ );
90
+ }
91
+ return $schedules;
92
+ }
93
+
94
+ function geoip_detect_set_cron_schedule($now = false)
95
+ {
96
+ // TODO GeoLite2 databases are updated on the first Tuesday of each month.
97
+ if ( !wp_next_scheduled( 'geoipdetectupdate' ) ) {
98
+ wp_schedule_event(time() + WEEK_IN_SECONDS, 'weekly', 'geoipdetectupdate');
99
+ }
100
+
101
+ if ($now)
102
+ wp_schedule_single_event(time(), 'geoipdetectupdate', array(true));
103
+ }
104
+
105
+ function geoip_detect_activate()
106
+ {
107
+ geoip_detect_set_cron_schedule(true);
108
+ }
109
+ register_activation_hook(GEOIP_PLUGIN_FILE, 'geoip_detect_activate');
110
+
111
+
112
+ function geoip_detect_deactivate()
113
+ {
114
+ wp_clear_scheduled_hook('geoipdetectupdate');
115
+ wp_clear_scheduled_hook('geoipdetectupdate', array(true));
116
+ }
117
+ register_deactivation_hook(GEOIP_PLUGIN_FILE, 'geoip_detect_deactivate');
vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer' . '/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInit71b4ac8c0509b2620f68f63cdbdcfd85::getLoader();
vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0 class loader
17
+ *
18
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
19
+ *
20
+ * $loader = new \Composer\Autoload\ClassLoader();
21
+ *
22
+ * // register classes with namespaces
23
+ * $loader->add('Symfony\Component', __DIR__.'/component');
24
+ * $loader->add('Symfony', __DIR__.'/framework');
25
+ *
26
+ * // activate the autoloader
27
+ * $loader->register();
28
+ *
29
+ * // to enable searching the include path (eg. for PEAR packages)
30
+ * $loader->setUseIncludePath(true);
31
+ *
32
+ * In this example, if you try to use a class in the Symfony\Component
33
+ * namespace or one of its children (Symfony\Component\Console for instance),
34
+ * the autoloader will first look for the class under the component/
35
+ * directory, and it will then fallback to the framework/ directory if not
36
+ * found before giving up.
37
+ *
38
+ * This class is loosely based on the Symfony UniversalClassLoader.
39
+ *
40
+ * @author Fabien Potencier <fabien@symfony.com>
41
+ * @author Jordi Boggiano <j.boggiano@seld.be>
42
+ */
43
+ class ClassLoader
44
+ {
45
+ private $prefixes = array();
46
+ private $fallbackDirs = array();
47
+ private $useIncludePath = false;
48
+ private $classMap = array();
49
+
50
+ public function getPrefixes()
51
+ {
52
+ return call_user_func_array('array_merge', $this->prefixes);
53
+ }
54
+
55
+ public function getFallbackDirs()
56
+ {
57
+ return $this->fallbackDirs;
58
+ }
59
+
60
+ public function getClassMap()
61
+ {
62
+ return $this->classMap;
63
+ }
64
+
65
+ /**
66
+ * @param array $classMap Class to filename map
67
+ */
68
+ public function addClassMap(array $classMap)
69
+ {
70
+ if ($this->classMap) {
71
+ $this->classMap = array_merge($this->classMap, $classMap);
72
+ } else {
73
+ $this->classMap = $classMap;
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Registers a set of classes, merging with any others previously set.
79
+ *
80
+ * @param string $prefix The classes prefix
81
+ * @param array|string $paths The location(s) of the classes
82
+ * @param bool $prepend Prepend the location(s)
83
+ */
84
+ public function add($prefix, $paths, $prepend = false)
85
+ {
86
+ if (!$prefix) {
87
+ if ($prepend) {
88
+ $this->fallbackDirs = array_merge(
89
+ (array) $paths,
90
+ $this->fallbackDirs
91
+ );
92
+ } else {
93
+ $this->fallbackDirs = array_merge(
94
+ $this->fallbackDirs,
95
+ (array) $paths
96
+ );
97
+ }
98
+
99
+ return;
100
+ }
101
+
102
+ $first = $prefix[0];
103
+ if (!isset($this->prefixes[$first][$prefix])) {
104
+ $this->prefixes[$first][$prefix] = (array) $paths;
105
+
106
+ return;
107
+ }
108
+ if ($prepend) {
109
+ $this->prefixes[$first][$prefix] = array_merge(
110
+ (array) $paths,
111
+ $this->prefixes[$first][$prefix]
112
+ );
113
+ } else {
114
+ $this->prefixes[$first][$prefix] = array_merge(
115
+ $this->prefixes[$first][$prefix],
116
+ (array) $paths
117
+ );
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Registers a set of classes, replacing any others previously set.
123
+ *
124
+ * @param string $prefix The classes prefix
125
+ * @param array|string $paths The location(s) of the classes
126
+ */
127
+ public function set($prefix, $paths)
128
+ {
129
+ if (!$prefix) {
130
+ $this->fallbackDirs = (array) $paths;
131
+
132
+ return;
133
+ }
134
+ $this->prefixes[substr($prefix, 0, 1)][$prefix] = (array) $paths;
135
+ }
136
+
137
+ /**
138
+ * Turns on searching the include path for class files.
139
+ *
140
+ * @param bool $useIncludePath
141
+ */
142
+ public function setUseIncludePath($useIncludePath)
143
+ {
144
+ $this->useIncludePath = $useIncludePath;
145
+ }
146
+
147
+ /**
148
+ * Can be used to check if the autoloader uses the include path to check
149
+ * for classes.
150
+ *
151
+ * @return bool
152
+ */
153
+ public function getUseIncludePath()
154
+ {
155
+ return $this->useIncludePath;
156
+ }
157
+
158
+ /**
159
+ * Registers this instance as an autoloader.
160
+ *
161
+ * @param bool $prepend Whether to prepend the autoloader or not
162
+ */
163
+ public function register($prepend = false)
164
+ {
165
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
166
+ }
167
+
168
+ /**
169
+ * Unregisters this instance as an autoloader.
170
+ */
171
+ public function unregister()
172
+ {
173
+ spl_autoload_unregister(array($this, 'loadClass'));
174
+ }
175
+
176
+ /**
177
+ * Loads the given class or interface.
178
+ *
179
+ * @param string $class The name of the class
180
+ * @return bool|null True if loaded, null otherwise
181
+ */
182
+ public function loadClass($class)
183
+ {
184
+ if ($file = $this->findFile($class)) {
185
+ include $file;
186
+
187
+ return true;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Finds the path to the file where the class is defined.
193
+ *
194
+ * @param string $class The name of the class
195
+ *
196
+ * @return string|false The path if found, false otherwise
197
+ */
198
+ public function findFile($class)
199
+ {
200
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
201
+ if ('\\' == $class[0]) {
202
+ $class = substr($class, 1);
203
+ }
204
+
205
+ if (isset($this->classMap[$class])) {
206
+ return $this->classMap[$class];
207
+ }
208
+
209
+ if (false !== $pos = strrpos($class, '\\')) {
210
+ // namespaced class name
211
+ $classPath = strtr(substr($class, 0, $pos), '\\', DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
212
+ $className = substr($class, $pos + 1);
213
+ } else {
214
+ // PEAR-like class name
215
+ $classPath = null;
216
+ $className = $class;
217
+ }
218
+
219
+ $classPath .= strtr($className, '_', DIRECTORY_SEPARATOR) . '.php';
220
+
221
+ $first = $class[0];
222
+ if (isset($this->prefixes[$first])) {
223
+ foreach ($this->prefixes[$first] as $prefix => $dirs) {
224
+ if (0 === strpos($class, $prefix)) {
225
+ foreach ($dirs as $dir) {
226
+ if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) {
227
+ return $dir . DIRECTORY_SEPARATOR . $classPath;
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+
234
+ foreach ($this->fallbackDirs as $dir) {
235
+ if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) {
236
+ return $dir . DIRECTORY_SEPARATOR . $classPath;
237
+ }
238
+ }
239
+
240
+ if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) {
241
+ return $file;
242
+ }
243
+
244
+ return $this->classMap[$class] = false;
245
+ }
246
+ }
vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_files.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_files.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ $vendorDir . '/geoip/geoip/src/geoip.inc',
10
+ $vendorDir . '/geoip/geoip/src/geoipcity.inc',
11
+ );
vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInit71b4ac8c0509b2620f68f63cdbdcfd85
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInit71b4ac8c0509b2620f68f63cdbdcfd85', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit71b4ac8c0509b2620f68f63cdbdcfd85', 'loadClassLoader'));
25
+
26
+ $vendorDir = dirname(__DIR__);
27
+ $baseDir = dirname($vendorDir);
28
+
29
+ $map = require __DIR__ . '/autoload_namespaces.php';
30
+ foreach ($map as $namespace => $path) {
31
+ $loader->set($namespace, $path);
32
+ }
33
+
34
+ $classMap = require __DIR__ . '/autoload_classmap.php';
35
+ if ($classMap) {
36
+ $loader->addClassMap($classMap);
37
+ }
38
+
39
+ $loader->register(true);
40
+
41
+ $includeFiles = require __DIR__ . '/autoload_files.php';
42
+ foreach ($includeFiles as $file) {
43
+ require $file;
44
+ }
45
+
46
+ return $loader;
47
+ }
48
+ }
vendor/composer/installed.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "geoip/geoip",
4
+ "version": "v1.14",
5
+ "version_normalized": "1.14.0.0",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/maxmind/geoip-api-php.git",
9
+ "reference": "465fe4d7e581871e9c8594adf3fb52268b253312"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/maxmind/geoip-api-php/zipball/465fe4d7e581871e9c8594adf3fb52268b253312",
14
+ "reference": "465fe4d7e581871e9c8594adf3fb52268b253312",
15
+ "shasum": ""
16
+ },
17
+ "conflict": {
18
+ "ext-geoip": "*"
19
+ },
20
+ "time": "2013-11-05 21:52:33",
21
+ "type": "library",
22
+ "installation-source": "dist",
23
+ "autoload": {
24
+ "files": [
25
+ "src/geoip.inc",
26
+ "src/geoipcity.inc"
27
+ ]
28
+ },
29
+ "notification-url": "https://packagist.org/downloads/",
30
+ "license": [
31
+ "LGPL 2.1+"
32
+ ],
33
+ "authors": [
34
+ {
35
+ "name": "MaxMind, Inc.",
36
+ "email": "support@maxmind.com",
37
+ "homepage": "http://www.maxmind.com/"
38
+ }
39
+ ],
40
+ "description": "MaxMind GeoIP PHP API",
41
+ "homepage": "http://dev.maxmind.com/geoip/legacy/downloadable",
42
+ "keywords": [
43
+ "geoip",
44
+ "geolocation",
45
+ "maxmind"
46
+ ]
47
+ }
48
+ ]
vendor/geoip/geoip/.gitignore ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ _site
2
+ .gh-pages
3
+ composer.lock
4
+ composer.phar
5
+ phpunit.xml
6
+ vendor/
7
+ *.sw?
8
+ t.php
9
+ *.old
vendor/geoip/geoip/ChangeLog ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1.13 * Composer support ( Maksim Kotlyar )
2
+ * Remove duplicate key - A placeholder for unused countries.
3
+ ( Boris Zentner )
4
+ 1.12 2013-02-20
5
+ * Update FIPS Codes ( Boris Zentner )
6
+ * Add South Sudan ( Boris Zentner )
7
+ * Remove trailing space ( Boris Zentner )
8
+ 1.11
9
+ * Update Time Zones ( Boris Zentner )
10
+ * Update FIPS codes ( Boris Zentner )
11
+ 1.10 2012-03-26
12
+ * Update time zones and country codes ( Boris Zentner )
13
+ * Add example for netspeedcell databases. ( Boris Zentner )
14
+ 1.9 2011-08-23
15
+ * Add new datatypes
16
+ GEOIP_COUNTRY_EDITION_V6, GEOIP_CITY_EDITION_REV1_V6
17
+ GEOIP_CITY_EDITION_REV0_V6, GEOIP_NETSPEED_EDITION_REV1,
18
+ GEOIP_NETSPEED_EDITION_REV1_V6, GEOIP_ASNUM_EDITION_V6,
19
+ GEOIP_ORG_EDITION_V6, GEOIP_DOMAIN_EDITION_V6,
20
+ GEOIP_ISP_EDITION_V6 ( Boris Zentner )
21
+ * Add new functions
22
+ geoip_country_id_by_name_v6
23
+ geoip_country_code_by_name_v6
24
+ geoip_country_name_by_name_v6
25
+ geoip_country_id_by_addr_v6
26
+ geoip_country_code_by_addr_v6
27
+ geoip_country_name_by_addr_v6
28
+ geoip_name_by_addr_v6
29
+ GeoIP_record_by_addr_v6 ( Boris Zentner )
30
+ * Add new examples sample-v6.php, sample_city-v6.php and
31
+ sample_asn-v6.php ( Boris Zentner )
32
+ * Replace ereg with substr ( Boris Zentner )
33
+ * replace split by explode ( Boris Zentner )
34
+ * Add all missing timezones ( Boris Zentner )
35
+ * Fix some 3letter codes ( Boris Zentner )
36
+ * Fix some continent codes ( Boris Zentner )
37
+ * Update FIPS codes 20100810 ( Boris Zentner )
38
+ * Add new database types GEOIP_LOCATIONA_EDITION, GEOIP_DOMAIN_EDITION
39
+ and GEOIP_ACCURACYRADIUS_EDITION ( Boris Zentner )
40
+ * Workaround php's broken usage of mb_substr instead of substr with
41
+ mbstring.func_overload and mbstring.internal_encoding ( Boris Zentner )
42
+ * Change Turkey's continent code from AS to EU ( Boris Zentner )
43
+ * Update FIPS codes 20090723 ( Boris Zentner )
44
+ 1.8 2009-04-02
45
+ * Add continent_code to the city record. See: sample_city.php ( Boris Zentner )
46
+ * Update FIPS codes 20090401 ( Boris Zentner )
47
+ * Fixed spelling of Kazakhstan, was Kazakstan
48
+ * Fix TN FIPS codes and add two new TH79 and TH80 ( Boris Zentner )
49
+ * Fix geoip_country_code_by_addr when used with a city database for unknown or private records ( cpw )
50
+ * Update timezone.php
51
+ * Sync geoipregionvars.php with fips codes from Jan, 14th 2009 ( Boris Zentner )
52
+ * use metro_code in sample_city.php ( Boris Zentner )
53
+ * replace the depreciated dma_code field with metro_code ( Boris Zentner )
54
+ * remove wrong but unreferenced Singapur SG fips regions codes ( Boris Zentner )
55
+ * update regions ( geoipregionvars.php ) ( Boris Zentner )
56
+ * Die when the database file is not found or readable ( Boris Zentner )
57
+
58
+ 1.7 2008-1-8
59
+ * Added BL/Saint Barthelemy, MF/Saint Martin (ISO-3166-1 additions)
60
+ * fixed bug with newlines in Country Name
61
+ * replaced $s_array[size] with $s_array['size'] (Daniel Horchner)
62
+ * Fix bug where PHP API didn't work with new edition of GeoIP ISP
63
+
64
+ 1.6 2007-1-10
65
+ * Added AX/Aland Islands, GG/Guernsey, IM/Isle of Man, JE/Jersey (ISO-3166-1 changes)
66
+ * Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
67
+ * geoip_country_(code|name)_by_addr now work against Geo(IP|Lite) City (Frank Mather)
68
+ * Added code to lookup zoneinfo timezone given country and region (Frank Mather)
69
+ * TP/East Timor changed to TL/Timor-Leste, reflecting changes in ISO-3166
70
+
71
+ 1.5 2005-11-1
72
+ * Added Shared Memory support for GeoIP City (Frank Mather)
73
+ * Replaced Yugoslavia with Serbia and Montenegro
74
+ * Removed global declaration for $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
75
+ and $GEOIP_COUNTRY_CODES3
76
+
77
+ 1.4 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
78
+ * Formatted file according to PEAR library standards.
79
+ * Moved $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
80
+ * $GEOIP_COUNTRY_CODES3 and $GEOIP_COUNTRY_NAMES into the
81
+ * GeoIP class, so that library will still work even when
82
+ * not included in the $GLOBAL context.
83
+
84
+ * Updated geoip_country_code_by_addr to work with PHP5 (Eric of Host Ultra)
85
+ * Replaced bit operators (| and &) with logical operators (|| and &&)
86
+ * Defined GEOIP_ISP_EDITION
87
+
88
+ 1.3 2004-8-4
89
+ * Changed license from GPL to LGPL so code can be included in PEAR
90
+ * added global definitions to prevent undefined variables error when including from function (C�dric Dufour)
91
+ * Updated country names
92
+ * Added support for GeoIP City, version 1 with DMA and Area codes
93
+
94
+ 1.2 2003-10-28
95
+ * Added support for Shared Memory (Jason Priebe)
96
+ * Added support for Distributed queries
97
+ * Added support for GeoIP Region, version 1
98
+ * Added Anonymous Proxy and Satellite Provider code/labels
99
+ * Changed Taiwan, Province of China to Taiwan
100
+
101
+ 1.1 2003-01-15
102
+ * Added support for GeoIP Region and GeoIP City
103
+
104
+ 1.0 2002-11-21
105
+ * Initial checkin to CVS
vendor/geoip/geoip/ChangeLog.md ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Change Log #
2
+
3
+ ## 1.14 (2013-11-05)
4
+
5
+ * Fix lookup issues with some domain databases ( Boris Zentner )
6
+ * Reorganize and clean up code ( Gregory Oschwald )
7
+ * Fix for module when mbstring extension is missing ( Gregory Oschwald )
8
+ * Updated timezones ( Boris Zentner )
9
+
10
+ ## 1.13 (2013-05-27)
11
+
12
+ * Composer support ( Maksim Kotlyar )
13
+ * Remove duplicate key - A placeholder for unused countries.
14
+ ( Boris Zentner )
15
+
16
+ ## 1.12 (2013-02-20)
17
+
18
+ * Update FIPS Codes ( Boris Zentner )
19
+ * Add South Sudan ( Boris Zentner )
20
+ * Remove trailing space ( Boris Zentner )
21
+
22
+ ## 1.11 (2012-07-08)
23
+
24
+ * Update Time Zones ( Boris Zentner )
25
+ * Update FIPS codes ( Boris Zentner )
26
+
27
+ ## 1.10 (2012-03-26)
28
+
29
+ * Update time zones and country codes ( Boris Zentner )
30
+ * Add example for netspeedcell databases. ( Boris Zentner )
31
+
32
+ ## 1.9 (2011-08-23)
33
+
34
+ * Add new datatypes
35
+ GEOIP_COUNTRY_EDITION_V6, GEOIP_CITY_EDITION_REV1_V6
36
+ GEOIP_CITY_EDITION_REV0_V6, GEOIP_NETSPEED_EDITION_REV1,
37
+ GEOIP_NETSPEED_EDITION_REV1_V6, GEOIP_ASNUM_EDITION_V6,
38
+ GEOIP_ORG_EDITION_V6, GEOIP_DOMAIN_EDITION_V6,
39
+ GEOIP_ISP_EDITION_V6 ( Boris Zentner )
40
+ * Add new functions
41
+ geoip_country_id_by_name_v6
42
+ geoip_country_code_by_name_v6
43
+ geoip_country_name_by_name_v6
44
+ geoip_country_id_by_addr_v6
45
+ geoip_country_code_by_addr_v6
46
+ geoip_country_name_by_addr_v6
47
+ geoip_name_by_addr_v6
48
+ GeoIP_record_by_addr_v6 ( Boris Zentner )
49
+ * Add new examples sample-v6.php, sample_city-v6.php and
50
+ sample_asn-v6.php ( Boris Zentner )
51
+ * Replace ereg with substr ( Boris Zentner )
52
+ * replace split by explode ( Boris Zentner )
53
+ * Add all missing timezones ( Boris Zentner )
54
+ * Fix some 3letter codes ( Boris Zentner )
55
+ * Fix some continent codes ( Boris Zentner )
56
+ * Update FIPS codes 20100810 ( Boris Zentner )
57
+ * Add new database types GEOIP_LOCATIONA_EDITION, GEOIP_DOMAIN_EDITION
58
+ and GEOIP_ACCURACYRADIUS_EDITION ( Boris Zentner )
59
+ * Workaround php's broken usage of mb_substr instead of substr with
60
+ mbstring.func_overload and mbstring.internal_encoding ( Boris Zentner )
61
+ * Change Turkey's continent code from AS to EU ( Boris Zentner )
62
+ * Update FIPS codes 20090723 ( Boris Zentner )
63
+
64
+ ## 1.8 (2009-04-02)
65
+
66
+ * Add continent_code to the city record. See: sample_city.php ( Boris Zentner )
67
+ * Update FIPS codes 20090401 ( Boris Zentner )
68
+ * Fixed spelling of Kazakhstan, was Kazakstan
69
+ * Fix TN FIPS codes and add two new TH79 and TH80 ( Boris Zentner )
70
+ * Fix geoip_country_code_by_addr when used with a city database for unknown or private records ( cpw )
71
+ * Update timezone.php
72
+ * Sync geoipregionvars.php with fips codes from Jan, 14th 2009 ( Boris Zentner )
73
+ * use metro_code in sample_city.php ( Boris Zentner )
74
+ * replace the depreciated dma_code field with metro_code ( Boris Zentner )
75
+ * remove wrong but unreferenced Singapur SG fips regions codes ( Boris Zentner )
76
+ * update regions ( geoipregionvars.php ) ( Boris Zentner )
77
+ * Die when the database file is not found or readable ( Boris Zentner )
78
+
79
+ ## 1.7 (2008-1-8)
80
+
81
+ * Added BL/Saint Barthelemy, MF/Saint Martin (ISO-3166-1 additions)
82
+ * fixed bug with newlines in Country Name
83
+ * replaced $s_array[size] with $s_array['size'] (Daniel Horchner)
84
+ * Fix bug where PHP API didn't work with new edition of GeoIP ISP
85
+ 1.6 2007-1-10
86
+ * Added AX/Aland Islands, GG/Guernsey, IM/Isle of Man, JE/Jersey (ISO-3166-1 changes)
87
+ * Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
88
+ * geoip_country_(code|name)_by_addr now work against Geo(IP|Lite) City (Frank Mather)
89
+ * Added code to lookup zoneinfo timezone given country and region (Frank Mather)
90
+ * TP/East Timor changed to TL/Timor-Leste, reflecting changes in ISO-3166
91
+
92
+ ## 1.5 (2005-11-01)
93
+
94
+ * Added Shared Memory support for GeoIP City (Frank Mather)
95
+ * Replaced Yugoslavia with Serbia and Montenegro
96
+ * Removed global declaration for $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
97
+ and $GEOIP_COUNTRY_CODES3
98
+
99
+ ## 1.4 (2005-01-13)
100
+
101
+ * Andrew Hill, Awarez Ltd. (http://www.awarez.net):
102
+ * Formatted file according to PEAR library standards.
103
+ * Moved $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
104
+ $GEOIP_COUNTRY_CODES3 and $GEOIP_COUNTRY_NAMES into the
105
+ GeoIP class, so that library will still work even when
106
+ not included in the $GLOBAL context.
107
+ * Updated geoip_country_code_by_addr to work with PHP5 (Eric of Host Ultra)
108
+ * Replaced bit operators (| and &) with logical operators (|| and &&)
109
+ * Defined GEOIP_ISP_EDITION
110
+
111
+ ## 1.3 (2004-08-04)
112
+
113
+ * Changed license from GPL to LGPL so code can be included in PEAR
114
+ * added global definitions to prevent undefined variables error when including
115
+ from function (C�dric Dufour)
116
+ * Updated country names
117
+ * Added support for GeoIP City, version 1 with DMA and Area codes
118
+
119
+ ## 1.2 (2003-10-28)
120
+
121
+ * Added support for Shared Memory (Jason Priebe)
122
+ * Added support for Distributed queries
123
+ * Added support for GeoIP Region, version 1
124
+ * Added Anonymous Proxy and Satellite Provider code/labels
125
+ * Changed Taiwan, Province of China to Taiwan
126
+
127
+ ## 1.1 (2003-01-15)
128
+
129
+ * Added support for GeoIP Region and GeoIP City
130
+
131
+ ## 1.0 (2002-11-21)
132
+
133
+ * Initial checkin to CVS
vendor/geoip/geoip/LICENSE ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
vendor/geoip/geoip/README.md ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MaxMind GeoIP PHP API #
2
+
3
+ ## Requirements ##
4
+
5
+ This module has no external dependencies. You only need a MaxMind GeoIP
6
+ database. To download a free GeoIP Standard Country database, please see
7
+ our [GeoLite page](http://dev.maxmind.com/geoip/geolite).
8
+
9
+ ## Installing with Composer ##
10
+
11
+ ### Define Your Dependencies ###
12
+
13
+ We recommend installing this package with [Composer](http://getcomposer.org/).
14
+ To do this, add ```geoip/geoip``` to your ```composer.json``` file.
15
+
16
+ ```json
17
+ {
18
+ "require": {
19
+ "geoip/geoip": "~1.14"
20
+ }
21
+ }
22
+ ```
23
+
24
+ ### Install Composer ###
25
+
26
+ Run in your project root:
27
+
28
+ ```
29
+ curl -s http://getcomposer.org/installer | php
30
+ ```
31
+
32
+ ### Install Dependencies ###
33
+
34
+ Run in your project root:
35
+
36
+ ```
37
+ php composer.phar install
38
+ ```
39
+
40
+ ### Require Autoloader ###
41
+
42
+ You can autoload all dependencies by adding this to your code:
43
+ ```
44
+ require 'vendor/autoload.php';
45
+ ```
46
+
47
+ ## Installing without Composer ##
48
+
49
+ Place the 'geoip.inc' file in the `include_path` as specified in your
50
+ `php.ini` file or place it in the same directory as your PHP scripts.
51
+
52
+ ## Usage ##
53
+
54
+ Gets country name by hostname :
55
+
56
+ ```php
57
+ <?php
58
+
59
+ require 'vendor/autoload.php';
60
+
61
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
62
+
63
+ echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
64
+ geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
65
+ echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
66
+ geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
67
+
68
+ geoip_close($gi);
69
+ ```
70
+
71
+ ## Memory Caching ##
72
+
73
+ To enable memory caching, pass `GEOIP_SHARED_MEMORY` or `GEOIP_MEMORY_CACHE`
74
+ as the second argument of `geoip_open`.
75
+
76
+ `GEOIP_SHARED_MEMORY` requires php >= 4.0.4 compiled with `--enable-shmop`
77
+ configure time. See (http://us2.php.net/manual/en/ref.shmop.php).
78
+ In addition, you should call `geoip_load_shared_mem` before calling
79
+ `geoip_open`. See `sample_city.php` for an example of shared memory caching.
80
+
81
+ ## Support ##
82
+
83
+ For help with this API or our databases, please see [our support page]
84
+ (http://www.maxmind.com/en/support).
85
+
86
+ ## Copyright and License ##
87
+
88
+ This software is Copyright (c) 2013 by MaxMind, Inc.
89
+
90
+ This is free software, licensed under the GNU Lesser General Public License
91
+ version 2.1 or later.
92
+
93
+ ## Thanks ##
94
+
95
+ Thanks to Jim Winstead.
vendor/geoip/geoip/admin/generate_geoipregionvars.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+ # Copyright 2003 Maxmind LLC All Rights Reserved
4
+ print "\$iso = array(\n";
5
+ $iso = get_iso_3166_2_subcountry_codes();
6
+ $keys = array_keys($iso);
7
+ $values = array_values($iso);
8
+ for ($a0 = 0;$a0 < sizeof($keys);$a0++){
9
+ print "\"" . $keys[$a0] . "\" => array(\n";
10
+ $keys2 = array_keys($values[$a0]);
11
+ $values2 = array_values($values[$a0]);
12
+ for ($a1 = 0;$a1 < sizeof($keys2);$a1++){
13
+ print "\"" . $keys2[$a1] . "\" => \"" . $values2[$a1] . "\"";
14
+ if ($a1 < sizeof($keys2)-1){print ",\n";}
15
+ }
16
+ if ($a0 < sizeof($keys)-1){
17
+ print "),\n";}
18
+ else{
19
+ print ")\n";}
20
+ }
21
+ print "\$fips = array(\n";
22
+ $fips = get_fips_10_4_subcountry_codes();
23
+ $keys = array_keys($fips);
24
+ $values = array_values($fips);
25
+ for ($a0 = 0;$a0 < sizeof($keys);$a0++){
26
+ print "\"" . $keys[$a0] . "\" => array(\n";
27
+ $keys2 = array_keys($values[$a0]);
28
+ $values2 = array_values($values[$a0]);
29
+ for ($a1 = 0;$a1 < sizeof($keys2);$a1++){
30
+ #setsubstr($value2[$a1],strlen($value2[$a1])-1,1,",");
31
+ print "\"" . $keys2[$a1] . "\" => \"" . $values2[$a1] . "\"";
32
+ if ($a1 < sizeof($keys2)-1){print ",\n";}
33
+ }
34
+ if ($a0 < sizeof($keys)-1){
35
+ print "),\n";}
36
+ else{
37
+ print ")\n";}
38
+ }
39
+ print ");\n";
40
+ function get_iso_3166_2_subcountry_codes(){
41
+ $f = fopen("../iso3166_2","r");
42
+ $str = fgets($f,4096);
43
+ while (!feof($f)){
44
+ $str = fgets($f,4096);
45
+ $substrs = explode(",",$str);
46
+ list($country,$region,$name) = $substrs;
47
+ if (count($substrs) > 3){
48
+ for ($a0 = 3;$a0 < count($substrs);$a0++){
49
+ $name = $name .",". $substrs[$a0];
50
+ }
51
+ }
52
+ if ($name){
53
+ $name = substr($name,1,strlen($name)-3);
54
+ $a[$country][$region] = $name;}
55
+ }
56
+ fclose($f);
57
+ return $a;
58
+ }
59
+
60
+ function get_fips_10_4_subcountry_codes(){
61
+ $f = fopen("../fips10_4","r");
62
+ $str = fgets($f,4096);
63
+ while (!feof($f)){
64
+ $str = fgets($f,4096);
65
+ $substrs = explode(",",$str);
66
+ list($country,$region,$name) = $substrs;
67
+ if (count($substrs) > 3){
68
+ for ($a0 = 3;$a0 < count($substrs);$a0++){
69
+ $name = $name .",". $substrs[$a0];
70
+ }
71
+ }
72
+ if ($name){
73
+ $name = substr($name,1,strlen($name)-3);
74
+ $a[$country][$region] = $name;}
75
+ }
76
+ fclose($f);
77
+ return $a;
78
+ }
79
+
80
+ ?>
vendor/geoip/geoip/benchmark.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ set_time_limit('300');
5
+
6
+ include("geoip.inc");
7
+ include("geoipcity.inc");
8
+ define("GEOIP_COUNTRY_DATABASE",0);
9
+ define("GEOIP_REGION_DATABASE",1);
10
+ define("GEOIP_CITY_DATABASE",2);
11
+
12
+ class mainappc{
13
+ var $dbfilename = array("/usr/local/share/GeoIP/GeoIP.dat","/usr/local/share/GeoIP/GeoIPRegion.dat","/usr/local/share/GeoIP/GeoIPCity.dat");
14
+ function randomipaddress(){
15
+ $result = "";
16
+ for ($a = 0;$a < 4;$a++){
17
+ if ($a > 0){$result = $result . ".";}
18
+ $a2 = rand(1, 254);
19
+ $result = $result . $a2;
20
+ }
21
+ return $result;
22
+ }
23
+ function ftime(){
24
+ $a = gettimeofday();
25
+ return $a[sec] + ($a[usec]*0.000001);
26
+ }
27
+ function testgeoipdatabase($type,$flags,$msg,$numlookups){
28
+ $gi = geoip_open($this->dbfilename[$type],$flags);
29
+ if ($gi == null){
30
+ print "error: " . $this->dbfilename[$type] . " does not exist\n" ;
31
+ return;
32
+ }
33
+ $t1 = $this->ftime();
34
+ $i4 = 0;
35
+ for ($i2 = 0;$i2 < $numlookups;$i2++){
36
+ switch ($type) {
37
+ case GEOIP_COUNTRY_DATABASE:
38
+ geoip_country_code_by_addr($gi,$this->randomipaddress());
39
+ break;
40
+ case GEOIP_REGION_DATABASE:
41
+ geoip_region_by_addr($gi,$this->randomipaddress());
42
+ break;
43
+ case GEOIP_CITY_DATABASE:
44
+ GeoIP_record_by_addr($gi,$this->randomipaddress());
45
+ break;
46
+ }
47
+ }
48
+ $t2 = $this->ftime();
49
+ $t3 = $t2-$t1;
50
+ print $msg . "\n";
51
+ print $numlookups . " lookups made in " . $t3 . " seconds \n";
52
+ geoip_close($gi);
53
+ }
54
+ }
55
+
56
+
57
+ $mainapp = new mainappc();
58
+
59
+
60
+ $mainapp->testgeoipdatabase(GEOIP_COUNTRY_DATABASE,GEOIP_STANDARD,"Geoip Country ",10000);
61
+ $mainapp->testgeoipdatabase(GEOIP_COUNTRY_DATABASE,GEOIP_MEMORY_CACHE,"Geoip Country with memory cache",10000);
62
+ $mainapp->testgeoipdatabase(GEOIP_REGION_DATABASE,GEOIP_STANDARD,"Geoip Region ",10000);
63
+ $mainapp->testgeoipdatabase(GEOIP_REGION_DATABASE,GEOIP_MEMORY_CACHE,"Geoip Region with memory cache",10000);
64
+ $mainapp->testgeoipdatabase(GEOIP_CITY_DATABASE,GEOIP_STANDARD,"Geoip City ",10000);
65
+ $mainapp->testgeoipdatabase(GEOIP_CITY_DATABASE,GEOIP_MEMORY_CACHE,"Geoip City with memory cache",10000);
66
+
67
+ ?>
vendor/geoip/geoip/composer.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "geoip/geoip",
3
+ "description": "MaxMind GeoIP PHP API",
4
+ "keywords": [ "geoip", "geolocation", "maxmind" ],
5
+ "homepage": "http://dev.maxmind.com/geoip/legacy/downloadable",
6
+ "type": "library",
7
+ "license": "LGPL 2.1+",
8
+ "authors": [
9
+ {
10
+ "name": "MaxMind, Inc.",
11
+ "email": "support@maxmind.com",
12
+ "homepage": "http://www.maxmind.com/"
13
+ }
14
+ ],
15
+ "autoload": {
16
+ "files": [
17
+ "src/geoip.inc",
18
+ "src/geoipcity.inc"
19
+ ]
20
+ },
21
+ "conflict": {
22
+ "ext-geoip": "*"
23
+ }
24
+ }
vendor/geoip/geoip/geoip.inc ADDED
@@ -0,0 +1,714 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
4
+ /* geoip.inc
5
+ *
6
+ * Copyright (C) 2007 MaxMind LLC
7
+ *
8
+ * This library is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU Lesser General Public
10
+ * License as published by the Free Software Foundation; either
11
+ * version 2.1 of the License, or (at your option) any later version.
12
+ *
13
+ * This library is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ * Lesser General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Lesser General Public
19
+ * License along with this library; if not, write to the Free Software
20
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+ */
22
+
23
+ define("GEOIP_COUNTRY_BEGIN", 16776960);
24
+ define("GEOIP_STATE_BEGIN_REV0", 16700000);
25
+ define("GEOIP_STATE_BEGIN_REV1", 16000000);
26
+ define("GEOIP_STANDARD", 0);
27
+ define("GEOIP_MEMORY_CACHE", 1);
28
+ define("GEOIP_SHARED_MEMORY", 2);
29
+ define("STRUCTURE_INFO_MAX_SIZE", 20);
30
+ define("DATABASE_INFO_MAX_SIZE", 100);
31
+ define("GEOIP_COUNTRY_EDITION", 106);
32
+ define("GEOIP_PROXY_EDITION", 8);
33
+ define("GEOIP_ASNUM_EDITION", 9);
34
+ define("GEOIP_NETSPEED_EDITION", 10);
35
+ define("GEOIP_REGION_EDITION_REV0", 112);
36
+ define("GEOIP_REGION_EDITION_REV1", 3);
37
+ define("GEOIP_CITY_EDITION_REV0", 111);
38
+ define("GEOIP_CITY_EDITION_REV1", 2);
39
+ define("GEOIP_ORG_EDITION", 110);
40
+ define("GEOIP_ISP_EDITION", 4);
41
+ define("SEGMENT_RECORD_LENGTH", 3);
42
+ define("STANDARD_RECORD_LENGTH", 3);
43
+ define("ORG_RECORD_LENGTH", 4);
44
+ define("MAX_RECORD_LENGTH", 4);
45
+ define("MAX_ORG_RECORD_LENGTH", 300);
46
+ define("GEOIP_SHM_KEY", 0x4f415401);
47
+ define("US_OFFSET", 1);
48
+ define("CANADA_OFFSET", 677);
49
+ define("WORLD_OFFSET", 1353);
50
+ define("FIPS_RANGE", 360);
51
+ define("GEOIP_UNKNOWN_SPEED", 0);
52
+ define("GEOIP_DIALUP_SPEED", 1);
53
+ define("GEOIP_CABLEDSL_SPEED", 2);
54
+ define("GEOIP_CORPORATE_SPEED", 3);
55
+ define("GEOIP_DOMAIN_EDITION", 11);
56
+ define("GEOIP_COUNTRY_EDITION_V6", 12);
57
+ define("GEOIP_LOCATIONA_EDITION", 13);
58
+ define("GEOIP_ACCURACYRADIUS_EDITION", 14);
59
+ define("GEOIP_CITYCOMBINED_EDITION", 15);
60
+ define("GEOIP_CITY_EDITION_REV1_V6", 30);
61
+ define("GEOIP_CITY_EDITION_REV0_V6",31);
62
+ define("GEOIP_NETSPEED_EDITION_REV1",32);
63
+ define("GEOIP_NETSPEED_EDITION_REV1_V6",33);
64
+ define("GEOIP_USERTYPE_EDITION",28);
65
+ define("GEOIP_USERTYPE_EDITION_V6",29);
66
+ define("GEOIP_ASNUM_EDITION_V6",21);
67
+ define("GEOIP_ISP_EDITION_V6",22);
68
+ define("GEOIP_ORG_EDITION_V6",23);
69
+ define("GEOIP_DOMAIN_EDITION_V6",24);
70
+
71
+ define("CITYCOMBINED_FIXED_RECORD", 7 );
72
+
73
+ class GeoIP {
74
+ var $flags;
75
+ var $filehandle;
76
+ var $memory_buffer;
77
+ var $databaseType;
78
+ var $databaseSegments;
79
+ var $record_length;
80
+ var $shmid;
81
+ var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
82
+ "" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5,
83
+ "AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "CW" => 10, "AO" => 11,
84
+ "AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17,
85
+ "AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23,
86
+ "BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29,
87
+ "BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35,
88
+ "BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41,
89
+ "CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47,
90
+ "CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53,
91
+ "CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59,
92
+ "DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65,
93
+ "ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71,
94
+ "FM" => 72, "FO" => 73, "FR" => 74, "SX" => 75, "GA" => 76, "GB" => 77,
95
+ "GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83,
96
+ "GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89,
97
+ "GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95,
98
+ "HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101,
99
+ "IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107,
100
+ "IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113,
101
+ "KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119,
102
+ "KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125,
103
+ "LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131,
104
+ "LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137,
105
+ "MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143,
106
+ "MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149,
107
+ "MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
108
+ "NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161,
109
+ "NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167,
110
+ "PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173,
111
+ "PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179,
112
+ "PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185,
113
+ "RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191,
114
+ "SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197,
115
+ "SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203,
116
+ "SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209,
117
+ "TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215,
118
+ "TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221,
119
+ "UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227,
120
+ "VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
121
+ "VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239,
122
+ "ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245,
123
+ "O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251,
124
+ "MF" => 252, "BQ" => 253, "SS" => 254
125
+ );
126
+ var $GEOIP_COUNTRY_CODES = array(
127
+ "","AP","EU","AD","AE","AF","AG","AI","AL","AM","CW",
128
+ "AO","AQ","AR","AS","AT","AU","AW","AZ","BA","BB",
129
+ "BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO",
130
+ "BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD",
131
+ "CF","CG","CH","CI","CK","CL","CM","CN","CO","CR",
132
+ "CU","CV","CX","CY","CZ","DE","DJ","DK","DM","DO",
133
+ "DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ",
134
+ "FK","FM","FO","FR","SX","GA","GB","GD","GE","GF",
135
+ "GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT",
136
+ "GU","GW","GY","HK","HM","HN","HR","HT","HU","ID",
137
+ "IE","IL","IN","IO","IQ","IR","IS","IT","JM","JO",
138
+ "JP","KE","KG","KH","KI","KM","KN","KP","KR","KW",
139
+ "KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT",
140
+ "LU","LV","LY","MA","MC","MD","MG","MH","MK","ML",
141
+ "MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV",
142
+ "MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI",
143
+ "NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF",
144
+ "PG","PH","PK","PL","PM","PN","PR","PS","PT","PW",
145
+ "PY","QA","RE","RO","RU","RW","SA","SB","SC","SD",
146
+ "SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO",
147
+ "SR","ST","SV","SY","SZ","TC","TD","TF","TG","TH",
148
+ "TJ","TK","TM","TN","TO","TL","TR","TT","TV","TW",
149
+ "TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE",
150
+ "VG","VI","VN","VU","WF","WS","YE","YT","RS","ZA",
151
+ "ZM","ME","ZW","A1","A2","O1","AX","GG","IM","JE",
152
+ "BL","MF", "BQ", "SS", "O1" );
153
+ var $GEOIP_COUNTRY_CODES3 = array(
154
+ "","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","CUW",
155
+ "AGO","ATA","ARG","ASM","AUT","AUS","ABW","AZE","BIH","BRB",
156
+ "BGD","BEL","BFA","BGR","BHR","BDI","BEN","BMU","BRN","BOL",
157
+ "BRA","BHS","BTN","BVT","BWA","BLR","BLZ","CAN","CCK","COD",
158
+ "CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI",
159
+ "CUB","CPV","CXR","CYP","CZE","DEU","DJI","DNK","DMA","DOM",
160
+ "DZA","ECU","EST","EGY","ESH","ERI","ESP","ETH","FIN","FJI",
161
+ "FLK","FSM","FRO","FRA","SXM","GAB","GBR","GRD","GEO","GUF",
162
+ "GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","SGS","GTM",
163
+ "GUM","GNB","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN",
164
+ "IRL","ISR","IND","IOT","IRQ","IRN","ISL","ITA","JAM","JOR",
165
+ "JPN","KEN","KGZ","KHM","KIR","COM","KNA","PRK","KOR","KWT",
166
+ "CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
167
+ "LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI",
168
+ "MMR","MNG","MAC","MNP","MTQ","MRT","MSR","MLT","MUS","MDV",
169
+ "MWI","MEX","MYS","MOZ","NAM","NCL","NER","NFK","NGA","NIC",
170
+ "NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER","PYF",
171
+ "PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW",
172
+ "PRY","QAT","REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN",
173
+ "SWE","SGP","SHN","SVN","SJM","SVK","SLE","SMR","SEN","SOM",
174
+ "SUR","STP","SLV","SYR","SWZ","TCA","TCD","ATF","TGO","THA",
175
+ "TJK","TKL","TKM","TUN","TON","TLS","TUR","TTO","TUV","TWN",
176
+ "TZA","UKR","UGA","UMI","USA","URY","UZB","VAT","VCT","VEN",
177
+ "VGB","VIR","VNM","VUT","WLF","WSM","YEM","MYT","SRB","ZAF",
178
+ "ZMB","MNE","ZWE","A1","A2","O1","ALA","GGY","IMN","JEY",
179
+ "BLM","MAF", "BES", "SSD", "O1"
180
+ );
181
+ var $GEOIP_COUNTRY_NAMES = array(
182
+ "","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Curacao",
183
+ "Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados",
184
+ "Bangladesh","Belgium","Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia",
185
+ "Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the",
186
+ "Central African Republic","Congo","Switzerland","Cote D'Ivoire","Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica",
187
+ "Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic",
188
+ "Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji",
189
+ "Falkland Islands (Malvinas)","Micronesia, Federated States of","Faroe Islands","France","Sint Maarten (Dutch part)","Gabon","United Kingdom","Grenada","Georgia","French Guiana",
190
+ "Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala",
191
+ "Guam","Guinea-Bissau","Guyana","Hong Kong","Heard Island and McDonald Islands","Honduras","Croatia","Haiti","Hungary","Indonesia",
192
+ "Ireland","Israel","India","British Indian Ocean Territory","Iraq","Iran, Islamic Republic of","Iceland","Italy","Jamaica","Jordan",
193
+ "Japan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Comoros","Saint Kitts and Nevis","Korea, Democratic People's Republic of","Korea, Republic of","Kuwait",
194
+ "Cayman Islands","Kazakhstan","Lao People's Democratic Republic","Lebanon","Saint Lucia","Liechtenstein","Sri Lanka","Liberia","Lesotho","Lithuania",
195
+ "Luxembourg","Latvia","Libya","Morocco","Monaco","Moldova, Republic of","Madagascar","Marshall Islands","Macedonia","Mali",
196
+ "Myanmar","Mongolia","Macau","Northern Mariana Islands","Martinique","Mauritania","Montserrat","Malta","Mauritius","Maldives",
197
+ "Malawi","Mexico","Malaysia","Mozambique","Namibia","New Caledonia","Niger","Norfolk Island","Nigeria","Nicaragua",
198
+ "Netherlands","Norway","Nepal","Nauru","Niue","New Zealand","Oman","Panama","Peru","French Polynesia",
199
+ "Papua New Guinea","Philippines","Pakistan","Poland","Saint Pierre and Miquelon","Pitcairn Islands","Puerto Rico","Palestinian Territory","Portugal","Palau",
200
+ "Paraguay","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saudi Arabia","Solomon Islands","Seychelles","Sudan",
201
+ "Sweden","Singapore","Saint Helena","Slovenia","Svalbard and Jan Mayen","Slovakia","Sierra Leone","San Marino","Senegal","Somalia","Suriname",
202
+ "Sao Tome and Principe","El Salvador","Syrian Arab Republic","Swaziland","Turks and Caicos Islands","Chad","French Southern Territories","Togo","Thailand",
203
+ "Tajikistan","Tokelau","Turkmenistan","Tunisia","Tonga","Timor-Leste","Turkey","Trinidad and Tobago","Tuvalu","Taiwan",
204
+ "Tanzania, United Republic of","Ukraine","Uganda","United States Minor Outlying Islands","United States","Uruguay","Uzbekistan","Holy See (Vatican City State)","Saint Vincent and the Grenadines","Venezuela",
205
+ "Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa",
206
+ "Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey",
207
+ "Saint Barthelemy","Saint Martin", "Bonaire, Saint Eustatius and Saba",
208
+ "South Sudan", "Other"
209
+ );
210
+
211
+ var $GEOIP_CONTINENT_CODES = array(
212
+ "--", "AS","EU","EU","AS","AS","NA","NA","EU","AS","NA",
213
+ "AF","AN","SA","OC","EU","OC","NA","AS","EU","NA",
214
+ "AS","EU","AF","EU","AS","AF","AF","NA","AS","SA",
215
+ "SA","NA","AS","AN","AF","EU","NA","NA","AS","AF",
216
+ "AF","AF","EU","AF","OC","SA","AF","AS","SA","NA",
217
+ "NA","AF","AS","AS","EU","EU","AF","EU","NA","NA",
218
+ "AF","SA","EU","AF","AF","AF","EU","AF","EU","OC",
219
+ "SA","OC","EU","EU","NA","AF","EU","NA","AS","SA",
220
+ "AF","EU","NA","AF","AF","NA","AF","EU","AN","NA",
221
+ "OC","AF","SA","AS","AN","NA","EU","NA","EU","AS",
222
+ "EU","AS","AS","AS","AS","AS","EU","EU","NA","AS",
223
+ "AS","AF","AS","AS","OC","AF","NA","AS","AS","AS",
224
+ "NA","AS","AS","AS","NA","EU","AS","AF","AF","EU",
225
+ "EU","EU","AF","AF","EU","EU","AF","OC","EU","AF",
226
+ "AS","AS","AS","OC","NA","AF","NA","EU","AF","AS",
227
+ "AF","NA","AS","AF","AF","OC","AF","OC","AF","NA",
228
+ "EU","EU","AS","OC","OC","OC","AS","NA","SA","OC",
229
+ "OC","AS","AS","EU","NA","OC","NA","AS","EU","OC",
230
+ "SA","AS","AF","EU","EU","AF","AS","OC","AF","AF",
231
+ "EU","AS","AF","EU","EU","EU","AF","EU","AF","AF",
232
+ "SA","AF","NA","AS","AF","NA","AF","AN","AF","AS",
233
+ "AS","OC","AS","AF","OC","AS","EU","NA","OC","AS",
234
+ "AF","EU","AF","OC","NA","SA","AS","EU","NA","SA",
235
+ "NA","NA","AS","OC","OC","OC","AS","AF","EU","AF",
236
+ "AF","EU","AF","--","--","--","EU","EU","EU","EU",
237
+ "NA","NA","NA", "AF", "--"
238
+ );
239
+
240
+ }
241
+ function geoip_load_shared_mem ($file) {
242
+
243
+ $fp = fopen($file, "rb");
244
+ if (!$fp) {
245
+ print "error opening $file: $php_errormsg\n";
246
+ exit;
247
+ }
248
+ $s_array = fstat($fp);
249
+ $size = $s_array['size'];
250
+ if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
251
+ shmop_delete ($shmid);
252
+ shmop_close ($shmid);
253
+ }
254
+ $shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
255
+ shmop_write ($shmid, fread($fp, $size), 0);
256
+ shmop_close ($shmid);
257
+ }
258
+
259
+ function _setup_segments($gi){
260
+ $gi->databaseType = GEOIP_COUNTRY_EDITION;
261
+ $gi->record_length = STANDARD_RECORD_LENGTH;
262
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
263
+ $offset = @shmop_size ($gi->shmid) - 3;
264
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
265
+ $delim = @shmop_read ($gi->shmid, $offset, 3);
266
+ $offset += 3;
267
+ if ($delim == (chr(255).chr(255).chr(255))) {
268
+ $gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
269
+ $offset++;
270
+
271
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
272
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
273
+ } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
274
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
275
+ } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
276
+ ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
277
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
278
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
279
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
280
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
281
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
282
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
283
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
284
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
285
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
286
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
287
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
288
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
289
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
290
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
291
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
292
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
293
+ $gi->databaseSegments = 0;
294
+ $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
295
+ for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
296
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
297
+ }
298
+ if (($gi->databaseType == GEOIP_ORG_EDITION)
299
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
300
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
301
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
302
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
303
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)) {
304
+ $gi->record_length = ORG_RECORD_LENGTH;
305
+ }
306
+ }
307
+ break;
308
+ } else {
309
+ $offset -= 4;
310
+ }
311
+ }
312
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
313
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
314
+ ($gi->databaseType == GEOIP_PROXY_EDITION)||
315
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
316
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
317
+ }
318
+ } else {
319
+ $filepos = ftell($gi->filehandle);
320
+ fseek($gi->filehandle, -3, SEEK_END);
321
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
322
+ $delim = fread($gi->filehandle,3);
323
+ if ($delim == (chr(255).chr(255).chr(255))){
324
+ $gi->databaseType = ord(fread($gi->filehandle,1));
325
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
326
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
327
+ }
328
+ else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
329
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
330
+ } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
331
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
332
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
333
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
334
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
335
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
336
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
337
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
338
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
339
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
340
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
341
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
342
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
343
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
344
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
345
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
346
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
347
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
348
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
349
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
350
+ $gi->databaseSegments = 0;
351
+ $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
352
+ for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
353
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
354
+ }
355
+ if ( ( $gi->databaseType == GEOIP_ORG_EDITION )
356
+ || ( $gi->databaseType == GEOIP_DOMAIN_EDITION )
357
+ || ( $gi->databaseType == GEOIP_ISP_EDITION )
358
+ || ( $gi->databaseType == GEOIP_ORG_EDITION_V6 )
359
+ || ( $gi->databaseType == GEOIP_DOMAIN_EDITION_V6 )
360
+ || ( $gi->databaseType == GEOIP_ISP_EDITION_V6 )) {
361
+ $gi->record_length = ORG_RECORD_LENGTH;
362
+ }
363
+ }
364
+ break;
365
+ } else {
366
+ fseek($gi->filehandle, -4, SEEK_CUR);
367
+ }
368
+ }
369
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
370
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
371
+ ($gi->databaseType == GEOIP_PROXY_EDITION)||
372
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
373
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
374
+ }
375
+ fseek($gi->filehandle,$filepos,SEEK_SET);
376
+ }
377
+ return $gi;
378
+ }
379
+
380
+ function geoip_open($filename, $flags) {
381
+ $gi = new GeoIP;
382
+ $gi->flags = $flags;
383
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
384
+ $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
385
+ } else {
386
+ $gi->filehandle = fopen($filename,"rb") or die( "Can not open $filename\n" );
387
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
388
+ $s_array = fstat($gi->filehandle);
389
+ $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
390
+ }
391
+ }
392
+
393
+ $gi = _setup_segments($gi);
394
+ return $gi;
395
+ }
396
+
397
+ function geoip_close($gi) {
398
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
399
+ return true;
400
+ }
401
+
402
+ return fclose($gi->filehandle);
403
+ }
404
+
405
+ function geoip_country_id_by_name_v6($gi, $name) {
406
+ $rec = dns_get_record($name, DNS_AAAA);
407
+ if ( !$rec ) {
408
+ return false;
409
+ }
410
+ $addr = $rec[0]["ipv6"];
411
+ if (!$addr || $addr == $name) {
412
+ return false;
413
+ }
414
+ return geoip_country_id_by_addr_v6($gi, $addr);
415
+ }
416
+
417
+ function geoip_country_id_by_name($gi, $name) {
418
+ $addr = gethostbyname($name);
419
+ if (!$addr || $addr == $name) {
420
+ return false;
421
+ }
422
+ return geoip_country_id_by_addr($gi, $addr);
423
+ }
424
+
425
+ function geoip_country_code_by_name_v6($gi, $name) {
426
+ $country_id = geoip_country_id_by_name_v6($gi,$name);
427
+ if ($country_id !== false) {
428
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
429
+ }
430
+ return false;
431
+ }
432
+
433
+ function geoip_country_code_by_name($gi, $name) {
434
+ $country_id = geoip_country_id_by_name($gi,$name);
435
+ if ($country_id !== false) {
436
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
437
+ }
438
+ return false;
439
+ }
440
+
441
+ function geoip_country_name_by_name_v6($gi, $name) {
442
+ $country_id = geoip_country_id_by_name_v6($gi,$name);
443
+ if ($country_id !== false) {
444
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
445
+ }
446
+ return false;
447
+ }
448
+
449
+ function geoip_country_name_by_name($gi, $name) {
450
+ $country_id = geoip_country_id_by_name($gi,$name);
451
+ if ($country_id !== false) {
452
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
453
+ }
454
+ return false;
455
+ }
456
+
457
+ function geoip_country_id_by_addr_v6($gi, $addr) {
458
+ $ipnum = inet_pton($addr);
459
+ return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
460
+ }
461
+
462
+ function geoip_country_id_by_addr($gi, $addr) {
463
+ $ipnum = ip2long($addr);
464
+ return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
465
+ }
466
+
467
+ function geoip_country_code_by_addr_v6($gi, $addr) {
468
+ $country_id = geoip_country_id_by_addr_v6($gi,$addr);
469
+ if ($country_id !== false) {
470
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
471
+ }
472
+ return false;
473
+ }
474
+
475
+ function geoip_country_code_by_addr($gi, $addr) {
476
+ if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
477
+ $record = geoip_record_by_addr($gi,$addr);
478
+ if ( $record !== false ) {
479
+ return $record->country_code;
480
+ }
481
+ } else {
482
+ $country_id = geoip_country_id_by_addr($gi,$addr);
483
+ if ($country_id !== false) {
484
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
485
+ }
486
+ }
487
+ return false;
488
+ }
489
+
490
+ function geoip_country_name_by_addr_v6($gi, $addr) {
491
+ $country_id = geoip_country_id_by_addr_v6($gi,$addr);
492
+ if ($country_id !== false) {
493
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
494
+ }
495
+ return false;
496
+ }
497
+
498
+ function geoip_country_name_by_addr($gi, $addr) {
499
+ if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
500
+ $record = geoip_record_by_addr($gi,$addr);
501
+ return $record->country_name;
502
+ } else {
503
+ $country_id = geoip_country_id_by_addr($gi,$addr);
504
+ if ($country_id !== false) {
505
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
506
+ }
507
+ }
508
+ return false;
509
+ }
510
+
511
+ function _geoip_seek_country_v6($gi, $ipnum) {
512
+
513
+ # arrays from unpack start with offset 1
514
+ # yet another php mystery. array_merge work around
515
+ # this broken behaviour
516
+ $v6vec = array_merge(unpack( "C16", $ipnum));
517
+
518
+ $offset = 0;
519
+ for ($depth = 127; $depth >= 0; --$depth) {
520
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
521
+ // workaround php's broken substr, strpos, etc handling with
522
+ // mbstring.func_overload and mbstring.internal_encoding
523
+ $enc = mb_internal_encoding();
524
+ mb_internal_encoding('ISO-8859-1');
525
+
526
+ $buf = substr($gi->memory_buffer,
527
+ 2 * $gi->record_length * $offset,
528
+ 2 * $gi->record_length);
529
+
530
+ mb_internal_encoding($enc);
531
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
532
+ $buf = @shmop_read ($gi->shmid,
533
+ 2 * $gi->record_length * $offset,
534
+ 2 * $gi->record_length );
535
+ } else {
536
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
537
+ or die("fseek failed");
538
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
539
+ }
540
+ $x = array(0,0);
541
+ for ($i = 0; $i < 2; ++$i) {
542
+ for ($j = 0; $j < $gi->record_length; ++$j) {
543
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
544
+ }
545
+ }
546
+
547
+ $bnum = 127 - $depth;
548
+ $idx = $bnum >> 3;
549
+ $b_mask = 1 << ( $bnum & 7 ^ 7 );
550
+ if (($v6vec[$idx] & $b_mask) > 0) {
551
+ if ($x[1] >= $gi->databaseSegments) {
552
+ return $x[1];
553
+ }
554
+ $offset = $x[1];
555
+ } else {
556
+ if ($x[0] >= $gi->databaseSegments) {
557
+ return $x[0];
558
+ }
559
+ $offset = $x[0];
560
+ }
561
+ }
562
+ trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
563
+ return false;
564
+ }
565
+
566
+ function _geoip_seek_country($gi, $ipnum) {
567
+ $offset = 0;
568
+ for ($depth = 31; $depth >= 0; --$depth) {
569
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
570
+ // workaround php's broken substr, strpos, etc handling with
571
+ // mbstring.func_overload and mbstring.internal_encoding
572
+ $enc = mb_internal_encoding();
573
+ mb_internal_encoding('ISO-8859-1');
574
+
575
+ $buf = substr($gi->memory_buffer,
576
+ 2 * $gi->record_length * $offset,
577
+ 2 * $gi->record_length);
578
+
579
+ mb_internal_encoding($enc);
580
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
581
+ $buf = @shmop_read ($gi->shmid,
582
+ 2 * $gi->record_length * $offset,
583
+ 2 * $gi->record_length );
584
+ } else {
585
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
586
+ or die("fseek failed");
587
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
588
+ }
589
+ $x = array(0,0);
590
+ for ($i = 0; $i < 2; ++$i) {
591
+ for ($j = 0; $j < $gi->record_length; ++$j) {
592
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
593
+ }
594
+ }
595
+ if ($ipnum & (1 << $depth)) {
596
+ if ($x[1] >= $gi->databaseSegments) {
597
+ return $x[1];
598
+ }
599
+ $offset = $x[1];
600
+ } else {
601
+ if ($x[0] >= $gi->databaseSegments) {
602
+ return $x[0];
603
+ }
604
+ $offset = $x[0];
605
+ }
606
+ }
607
+ trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
608
+ return false;
609
+ }
610
+
611
+ function _common_get_org($gi, $seek_org){
612
+ $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
613
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
614
+ $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
615
+ } else {
616
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
617
+ $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
618
+ }
619
+ // workaround php's broken substr, strpos, etc handling with
620
+ // mbstring.func_overload and mbstring.internal_encoding
621
+ $enc = mb_internal_encoding();
622
+ mb_internal_encoding('ISO-8859-1');
623
+ $org_buf = substr($org_buf, 0, strpos($org_buf, "\0"));
624
+ mb_internal_encoding($enc);
625
+ return $org_buf;
626
+ }
627
+
628
+ function _get_org_v6($gi,$ipnum){
629
+ $seek_org = _geoip_seek_country_v6($gi,$ipnum);
630
+ if ($seek_org == $gi->databaseSegments) {
631
+ return NULL;
632
+ }
633
+ return _common_get_org($gi, $seek_org);
634
+ }
635
+
636
+ function _get_org($gi,$ipnum){
637
+ $seek_org = _geoip_seek_country($gi,$ipnum);
638
+ if ($seek_org == $gi->databaseSegments) {
639
+ return NULL;
640
+ }
641
+ return _common_get_org($gi, $seek_org);
642
+ }
643
+
644
+
645
+
646
+ function geoip_name_by_addr_v6 ($gi,$addr) {
647
+ if ($addr == NULL) {
648
+ return 0;
649
+ }
650
+ $ipnum = inet_pton($addr);
651
+ return _get_org_v6($gi, $ipnum);
652
+ }
653
+
654
+ function geoip_name_by_addr ($gi,$addr) {
655
+ if ($addr == NULL) {
656
+ return 0;
657
+ }
658
+ $ipnum = ip2long($addr);
659
+ return _get_org($gi, $ipnum);
660
+ }
661
+
662
+ function geoip_org_by_addr ($gi,$addr) {
663
+ return geoip_name_by_addr($gi, $addr);
664
+ }
665
+
666
+ function _get_region($gi,$ipnum){
667
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
668
+ $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
669
+ if ($seek_region >= 1000){
670
+ $country_code = "US";
671
+ $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
672
+ } else {
673
+ $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
674
+ $region = "";
675
+ }
676
+ return array ($country_code,$region);
677
+ } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
678
+ $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
679
+ //print $seek_region;
680
+ if ($seek_region < US_OFFSET){
681
+ $country_code = "";
682
+ $region = "";
683
+ } else if ($seek_region < CANADA_OFFSET) {
684
+ $country_code = "US";
685
+ $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
686
+ } else if ($seek_region < WORLD_OFFSET) {
687
+ $country_code = "CA";
688
+ $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
689
+ } else {
690
+ $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
691
+ $region = "";
692
+ }
693
+ return array ($country_code,$region);
694
+ }
695
+ }
696
+
697
+ function geoip_region_by_addr ($gi,$addr) {
698
+ if ($addr == NULL) {
699
+ return 0;
700
+ }
701
+ $ipnum = ip2long($addr);
702
+ return _get_region($gi, $ipnum);
703
+ }
704
+
705
+ function getdnsattributes ($l,$ip){
706
+ $r = new Net_DNS_Resolver();
707
+ $r->nameservers = array("ws1.maxmind.com");
708
+ $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
709
+ $str = is_object($p->answer[0])?$p->answer[0]->string():'';
710
+ $str = substr( $str, 1, -1 );
711
+ return $str;
712
+ }
713
+
714
+ ?>
vendor/geoip/geoip/geoipcity.inc ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* geoipcity.inc
4
+ *
5
+ * Copyright (C) 2004 Maxmind LLC
6
+ *
7
+ * This library is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * This library is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with this library; if not, write to the Free Software
19
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ */
21
+
22
+ /*
23
+ * Changelog:
24
+ *
25
+ * 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
26
+ * Formatted file according to PEAR library standards.
27
+ * Changed inclusion of geoip.inc file to require_once, so that
28
+ * this library can be used in the same script as geoip.inc.
29
+ */
30
+
31
+ define("FULL_RECORD_LENGTH",50);
32
+
33
+ require_once 'geoip.inc';
34
+ require_once 'geoipregionvars.php';
35
+
36
+ class geoiprecord {
37
+ var $country_code;
38
+ var $country_code3;
39
+ var $country_name;
40
+ var $region;
41
+ var $city;
42
+ var $postal_code;
43
+ var $latitude;
44
+ var $longitude;
45
+ var $area_code;
46
+ var $dma_code; # metro and dma code are the same. use metro_code
47
+ var $metro_code;
48
+ var $continent_code;
49
+ }
50
+
51
+ class geoipdnsrecord {
52
+ var $country_code;
53
+ var $country_code3;
54
+ var $country_name;
55
+ var $region;
56
+ var $regionname;
57
+ var $city;
58
+ var $postal_code;
59
+ var $latitude;
60
+ var $longitude;
61
+ var $areacode;
62
+ var $dmacode;
63
+ var $isp;
64
+ var $org;
65
+ var $metrocode;
66
+ }
67
+
68
+ function getrecordwithdnsservice($str){
69
+ $record = new geoipdnsrecord;
70
+ $keyvalue = explode(";",$str);
71
+ foreach ($keyvalue as $keyvalue2){
72
+ list($key,$value) = explode("=",$keyvalue2);
73
+ if ($key == "co"){
74
+ $record->country_code = $value;
75
+ }
76
+ if ($key == "ci"){
77
+ $record->city = $value;
78
+ }
79
+ if ($key == "re"){
80
+ $record->region = $value;
81
+ }
82
+ if ($key == "ac"){
83
+ $record->areacode = $value;
84
+ }
85
+ if ($key == "dm" || $key == "me" ){
86
+ $record->dmacode = $value;
87
+ $record->metrocode = $value;
88
+ }
89
+ if ($key == "is"){
90
+ $record->isp = $value;
91
+ }
92
+ if ($key == "or"){
93
+ $record->org = $value;
94
+ }
95
+ if ($key == "zi"){
96
+ $record->postal_code = $value;
97
+ }
98
+ if ($key == "la"){
99
+ $record->latitude = $value;
100
+ }
101
+ if ($key == "lo"){
102
+ $record->longitude = $value;
103
+ }
104
+ }
105
+ $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
106
+ $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
107
+ $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
108
+ if ($record->region != "") {
109
+ if (($record->country_code == "US") || ($record->country_code == "CA")){
110
+ $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
111
+ } else {
112
+ $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
113
+ }
114
+ }
115
+ return $record;
116
+ }
117
+
118
+
119
+ function _get_record_v6($gi,$ipnum){
120
+ $seek_country = _geoip_seek_country_v6($gi,$ipnum);
121
+ if ($seek_country == $gi->databaseSegments) {
122
+ return NULL;
123
+ }
124
+ return _common_get_record($gi, $seek_country);
125
+ }
126
+
127
+ function _common_get_record($gi, $seek_country){
128
+ // workaround php's broken substr, strpos, etc handling with
129
+ // mbstring.func_overload and mbstring.internal_encoding
130
+ $enc = mb_internal_encoding();
131
+ mb_internal_encoding('ISO-8859-1');
132
+
133
+ $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
134
+
135
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
136
+ $record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
137
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY){
138
+ $record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
139
+ } else {
140
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
141
+ $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
142
+ }
143
+ $record = new geoiprecord;
144
+ $record_buf_pos = 0;
145
+ $char = ord(substr($record_buf,$record_buf_pos,1));
146
+ $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
147
+ $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
148
+ $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
149
+ $record->continent_code = $gi->GEOIP_CONTINENT_CODES[$char];
150
+ $record_buf_pos++;
151
+ $str_length = 0;
152
+ // Get region
153
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
154
+ while ($char != 0){
155
+ $str_length++;
156
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
157
+ }
158
+ if ($str_length > 0){
159
+ $record->region = substr($record_buf,$record_buf_pos,$str_length);
160
+ }
161
+ $record_buf_pos += $str_length + 1;
162
+ $str_length = 0;
163
+ // Get city
164
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
165
+ while ($char != 0){
166
+ $str_length++;
167
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
168
+ }
169
+ if ($str_length > 0){
170
+ $record->city = substr($record_buf,$record_buf_pos,$str_length);
171
+ }
172
+ $record_buf_pos += $str_length + 1;
173
+ $str_length = 0;
174
+ // Get postal code
175
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
176
+ while ($char != 0){
177
+ $str_length++;
178
+ $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
179
+ }
180
+ if ($str_length > 0){
181
+ $record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
182
+ }
183
+ $record_buf_pos += $str_length + 1;
184
+ $str_length = 0;
185
+ // Get latitude and longitude
186
+ $latitude = 0;
187
+ $longitude = 0;
188
+ for ($j = 0;$j < 3; ++$j){
189
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
190
+ $latitude += ($char << ($j * 8));
191
+ }
192
+ $record->latitude = ($latitude/10000) - 180;
193
+ for ($j = 0;$j < 3; ++$j){
194
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
195
+ $longitude += ($char << ($j * 8));
196
+ }
197
+ $record->longitude = ($longitude/10000) - 180;
198
+ if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
199
+ $metroarea_combo = 0;
200
+ if ($record->country_code == "US"){
201
+ for ($j = 0;$j < 3;++$j){
202
+ $char = ord(substr($record_buf,$record_buf_pos++,1));
203
+ $metroarea_combo += ($char << ($j * 8));
204
+ }
205
+ $record->metro_code = $record->dma_code = floor($metroarea_combo/1000);
206
+ $record->area_code = $metroarea_combo%1000;
207
+ }
208
+ }
209
+ mb_internal_encoding($enc);
210
+ return $record;
211
+ }
212
+
213
+ function GeoIP_record_by_addr_v6 ($gi,$addr){
214
+ if ($addr == NULL){
215
+ return 0;
216
+ }
217
+ $ipnum = inet_pton($addr);
218
+ return _get_record_v6($gi, $ipnum);
219
+ }
220
+
221
+ function _get_record($gi,$ipnum){
222
+ $seek_country = _geoip_seek_country($gi,$ipnum);
223
+ if ($seek_country == $gi->databaseSegments) {
224
+ return NULL;
225
+ }
226
+ return _common_get_record($gi, $seek_country);
227
+ }
228
+
229
+ function GeoIP_record_by_addr ($gi,$addr){
230
+ if ($addr == NULL){
231
+ return 0;
232
+ }
233
+ $ipnum = ip2long($addr);
234
+ return _get_record($gi, $ipnum);
235
+ }
236
+
237
+ ?>
vendor/geoip/geoip/geoipregionvars.php ADDED
@@ -0,0 +1,4254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ # Copyright 2013 Maxmind LLC All Rights Reserved
3
+ $GEOIP_REGION_NAME = array(
4
+ "AD" => array(
5
+ "02" => "Canillo",
6
+ "03" => "Encamp",
7
+ "04" => "La Massana",
8
+ "05" => "Ordino",
9
+ "06" => "Sant Julia de Loria",
10
+ "07" => "Andorra la Vella",
11
+ "08" => "Escaldes-Engordany"),
12
+ "AE" => array(
13
+ "01" => "Abu Dhabi",
14
+ "02" => "Ajman",
15
+ "03" => "Dubai",
16
+ "04" => "Fujairah",
17
+ "05" => "Ras Al Khaimah",
18
+ "06" => "Sharjah",
19
+ "07" => "Umm Al Quwain"),
20
+ "AF" => array(
21
+ "01" => "Badakhshan",
22
+ "02" => "Badghis",
23
+ "03" => "Baghlan",
24
+ "05" => "Bamian",
25
+ "06" => "Farah",
26
+ "07" => "Faryab",
27
+ "08" => "Ghazni",
28
+ "09" => "Ghowr",
29
+ "10" => "Helmand",
30
+ "11" => "Herat",
31
+ "13" => "Kabol",
32
+ "14" => "Kapisa",
33
+ "17" => "Lowgar",
34
+ "18" => "Nangarhar",
35
+ "19" => "Nimruz",
36
+ "23" => "Kandahar",
37
+ "24" => "Kondoz",
38
+ "26" => "Takhar",
39
+ "27" => "Vardak",
40
+ "28" => "Zabol",
41
+ "29" => "Paktika",
42
+ "30" => "Balkh",
43
+ "31" => "Jowzjan",
44
+ "32" => "Samangan",
45
+ "33" => "Sar-e Pol",
46
+ "34" => "Konar",
47
+ "35" => "Laghman",
48
+ "36" => "Paktia",
49
+ "37" => "Khowst",
50
+ "38" => "Nurestan",
51
+ "39" => "Oruzgan",
52
+ "40" => "Parvan",
53
+ "41" => "Daykondi",
54
+ "42" => "Panjshir"),
55
+ "AG" => array(
56
+ "01" => "Barbuda",
57
+ "03" => "Saint George",
58
+ "04" => "Saint John",
59
+ "05" => "Saint Mary",
60
+ "06" => "Saint Paul",
61
+ "07" => "Saint Peter",
62
+ "08" => "Saint Philip",
63
+ "09" => "Redonda"),
64
+ "AL" => array(
65
+ "40" => "Berat",
66
+ "41" => "Diber",
67
+ "42" => "Durres",
68
+ "43" => "Elbasan",
69
+ "44" => "Fier",
70
+ "45" => "Gjirokaster",
71
+ "46" => "Korce",
72
+ "47" => "Kukes",
73
+ "48" => "Lezhe",
74
+ "49" => "Shkoder",
75
+ "50" => "Tirane",
76
+ "51" => "Vlore"),
77
+ "AM" => array(
78
+ "01" => "Aragatsotn",
79
+ "02" => "Ararat",
80
+ "03" => "Armavir",
81
+ "04" => "Geghark'unik'",
82
+ "05" => "Kotayk'",
83
+ "06" => "Lorri",
84
+ "07" => "Shirak",
85
+ "08" => "Syunik'",
86
+ "09" => "Tavush",
87
+ "10" => "Vayots' Dzor",
88
+ "11" => "Yerevan"),
89
+ "AO" => array(
90
+ "01" => "Benguela",
91
+ "02" => "Bie",
92
+ "03" => "Cabinda",
93
+ "04" => "Cuando Cubango",
94
+ "05" => "Cuanza Norte",
95
+ "06" => "Cuanza Sul",
96
+ "07" => "Cunene",
97
+ "08" => "Huambo",
98
+ "09" => "Huila",
99
+ "12" => "Malanje",
100
+ "13" => "Namibe",
101
+ "14" => "Moxico",
102
+ "15" => "Uige",
103
+ "16" => "Zaire",
104
+ "17" => "Lunda Norte",
105
+ "18" => "Lunda Sul",
106
+ "19" => "Bengo",
107
+ "20" => "Luanda"),
108
+ "AR" => array(
109
+ "01" => "Buenos Aires",
110
+ "02" => "Catamarca",
111
+ "03" => "Chaco",
112
+ "04" => "Chubut",
113
+ "05" => "Cordoba",
114
+ "06" => "Corrientes",
115
+ "07" => "Distrito Federal",
116
+ "08" => "Entre Rios",
117
+ "09" => "Formosa",
118
+ "10" => "Jujuy",
119
+ "11" => "La Pampa",
120
+ "12" => "La Rioja",
121
+ "13" => "Mendoza",
122
+ "14" => "Misiones",
123
+ "15" => "Neuquen",
124
+ "16" => "Rio Negro",
125
+ "17" => "Salta",
126
+ "18" => "San Juan",
127
+ "19" => "San Luis",
128
+ "20" => "Santa Cruz",
129
+ "21" => "Santa Fe",
130
+ "22" => "Santiago del Estero",
131
+ "23" => "Tierra del Fuego",
132
+ "24" => "Tucuman"),
133
+ "AT" => array(
134
+ "01" => "Burgenland",
135
+ "02" => "Karnten",
136
+ "03" => "Niederosterreich",
137
+ "04" => "Oberosterreich",
138
+ "05" => "Salzburg",
139
+ "06" => "Steiermark",
140
+ "07" => "Tirol",
141
+ "08" => "Vorarlberg",
142
+ "09" => "Wien"),
143
+ "AU" => array(
144
+ "01" => "Australian Capital Territory",
145
+ "02" => "New South Wales",
146
+ "03" => "Northern Territory",
147
+ "04" => "Queensland",
148
+ "05" => "South Australia",
149
+ "06" => "Tasmania",
150
+ "07" => "Victoria",
151
+ "08" => "Western Australia"),
152
+ "AZ" => array(
153
+ "01" => "Abseron",
154
+ "02" => "Agcabadi",
155
+ "03" => "Agdam",
156
+ "04" => "Agdas",
157
+ "05" => "Agstafa",
158
+ "06" => "Agsu",
159
+ "07" => "Ali Bayramli",
160
+ "08" => "Astara",
161
+ "09" => "Baki",
162
+ "10" => "Balakan",
163
+ "11" => "Barda",
164
+ "12" => "Beylaqan",
165
+ "13" => "Bilasuvar",
166
+ "14" => "Cabrayil",
167
+ "15" => "Calilabad",
168
+ "16" => "Daskasan",
169
+ "17" => "Davaci",
170
+ "18" => "Fuzuli",
171
+ "19" => "Gadabay",
172
+ "20" => "Ganca",
173
+ "21" => "Goranboy",
174
+ "22" => "Goycay",
175
+ "23" => "Haciqabul",
176
+ "24" => "Imisli",
177
+ "25" => "Ismayilli",
178
+ "26" => "Kalbacar",
179
+ "27" => "Kurdamir",
180
+ "28" => "Lacin",
181
+ "29" => "Lankaran",
182
+ "30" => "Lankaran",
183
+ "31" => "Lerik",
184
+ "32" => "Masalli",
185
+ "33" => "Mingacevir",
186
+ "34" => "Naftalan",
187
+ "35" => "Naxcivan",
188
+ "36" => "Neftcala",
189
+ "37" => "Oguz",
190
+ "38" => "Qabala",
191
+ "39" => "Qax",
192
+ "40" => "Qazax",
193
+ "41" => "Qobustan",
194
+ "42" => "Quba",
195
+ "43" => "Qubadli",
196
+ "44" => "Qusar",
197
+ "45" => "Saatli",
198
+ "46" => "Sabirabad",
199
+ "47" => "Saki",
200
+ "48" => "Saki",
201
+ "49" => "Salyan",
202
+ "50" => "Samaxi",
203
+ "51" => "Samkir",
204
+ "52" => "Samux",
205
+ "53" => "Siyazan",
206
+ "54" => "Sumqayit",
207
+ "55" => "Susa",
208
+ "56" => "Susa",
209
+ "57" => "Tartar",
210
+ "58" => "Tovuz",
211
+ "59" => "Ucar",
212
+ "60" => "Xacmaz",
213
+ "61" => "Xankandi",
214
+ "62" => "Xanlar",
215
+ "63" => "Xizi",
216
+ "64" => "Xocali",
217
+ "65" => "Xocavand",
218
+ "66" => "Yardimli",
219
+ "67" => "Yevlax",
220
+ "68" => "Yevlax",
221
+ "69" => "Zangilan",
222
+ "70" => "Zaqatala",
223
+ "71" => "Zardab"),
224
+ "BA" => array(
225
+ "01" => "Federation of Bosnia and Herzegovina",
226
+ "02" => "Republika Srpska"),
227
+ "BB" => array(
228
+ "01" => "Christ Church",
229
+ "02" => "Saint Andrew",
230
+ "03" => "Saint George",
231
+ "04" => "Saint James",
232
+ "05" => "Saint John",
233
+ "06" => "Saint Joseph",
234
+ "07" => "Saint Lucy",
235
+ "08" => "Saint Michael",
236
+ "09" => "Saint Peter",
237
+ "10" => "Saint Philip",
238
+ "11" => "Saint Thomas"),
239
+ "BD" => array(
240
+ "81" => "Dhaka",
241
+ "82" => "Khulna",
242
+ "83" => "Rajshahi",
243
+ "84" => "Chittagong",
244
+ "85" => "Barisal",
245
+ "86" => "Sylhet"),
246
+ "BE" => array(
247
+ "01" => "Antwerpen",
248
+ "03" => "Hainaut",
249
+ "04" => "Liege",
250
+ "05" => "Limburg",
251
+ "06" => "Luxembourg",
252
+ "07" => "Namur",
253
+ "08" => "Oost-Vlaanderen",
254
+ "09" => "West-Vlaanderen",
255
+ "10" => "Brabant Wallon",
256
+ "11" => "Brussels Hoofdstedelijk Gewest",
257
+ "12" => "Vlaams-Brabant",
258
+ "13" => "Flanders",
259
+ "14" => "Wallonia"),
260
+ "BF" => array(
261
+ "15" => "Bam",
262
+ "19" => "Boulkiemde",
263
+ "20" => "Ganzourgou",
264
+ "21" => "Gnagna",
265
+ "28" => "Kouritenga",
266
+ "33" => "Oudalan",
267
+ "34" => "Passore",
268
+ "36" => "Sanguie",
269
+ "40" => "Soum",
270
+ "42" => "Tapoa",
271
+ "44" => "Zoundweogo",
272
+ "45" => "Bale",
273
+ "46" => "Banwa",
274
+ "47" => "Bazega",
275
+ "48" => "Bougouriba",
276
+ "49" => "Boulgou",
277
+ "50" => "Gourma",
278
+ "51" => "Houet",
279
+ "52" => "Ioba",
280
+ "53" => "Kadiogo",
281
+ "54" => "Kenedougou",
282
+ "55" => "Komoe",
283
+ "56" => "Komondjari",
284
+ "57" => "Kompienga",
285
+ "58" => "Kossi",
286
+ "59" => "Koulpelogo",
287
+ "60" => "Kourweogo",
288
+ "61" => "Leraba",
289
+ "62" => "Loroum",
290
+ "63" => "Mouhoun",
291
+ "64" => "Namentenga",
292
+ "65" => "Naouri",
293
+ "66" => "Nayala",
294
+ "67" => "Noumbiel",
295
+ "68" => "Oubritenga",
296
+ "69" => "Poni",
297
+ "70" => "Sanmatenga",
298
+ "71" => "Seno",
299
+ "72" => "Sissili",
300
+ "73" => "Sourou",
301
+ "74" => "Tuy",
302
+ "75" => "Yagha",
303
+ "76" => "Yatenga",
304
+ "77" => "Ziro",
305
+ "78" => "Zondoma"),
306
+ "BG" => array(
307
+ "33" => "Mikhaylovgrad",
308
+ "38" => "Blagoevgrad",
309
+ "39" => "Burgas",
310
+ "40" => "Dobrich",
311
+ "41" => "Gabrovo",
312
+ "42" => "Grad Sofiya",
313
+ "43" => "Khaskovo",
314
+ "44" => "Kurdzhali",
315
+ "45" => "Kyustendil",
316
+ "46" => "Lovech",
317
+ "47" => "Montana",
318
+ "48" => "Pazardzhik",
319
+ "49" => "Pernik",
320
+ "50" => "Pleven",
321
+ "51" => "Plovdiv",
322
+ "52" => "Razgrad",
323
+ "53" => "Ruse",
324
+ "54" => "Shumen",
325
+ "55" => "Silistra",
326
+ "56" => "Sliven",
327
+ "57" => "Smolyan",
328
+ "58" => "Sofiya",
329
+ "59" => "Stara Zagora",
330
+ "60" => "Turgovishte",
331
+ "61" => "Varna",
332
+ "62" => "Veliko Turnovo",
333
+ "63" => "Vidin",
334
+ "64" => "Vratsa",
335
+ "65" => "Yambol"),
336
+ "BH" => array(
337
+ "01" => "Al Hadd",
338
+ "02" => "Al Manamah",
339
+ "05" => "Jidd Hafs",
340
+ "06" => "Sitrah",
341
+ "08" => "Al Mintaqah al Gharbiyah",
342
+ "09" => "Mintaqat Juzur Hawar",
343
+ "10" => "Al Mintaqah ash Shamaliyah",
344
+ "11" => "Al Mintaqah al Wusta",
345
+ "12" => "Madinat",
346
+ "13" => "Ar Rifa",
347
+ "14" => "Madinat Hamad",
348
+ "15" => "Al Muharraq",
349
+ "16" => "Al Asimah",
350
+ "17" => "Al Janubiyah",
351
+ "18" => "Ash Shamaliyah",
352
+ "19" => "Al Wusta"),
353
+ "BI" => array(
354
+ "02" => "Bujumbura",
355
+ "09" => "Bubanza",
356
+ "10" => "Bururi",
357
+ "11" => "Cankuzo",
358
+ "12" => "Cibitoke",
359
+ "13" => "Gitega",
360
+ "14" => "Karuzi",
361
+ "15" => "Kayanza",
362
+ "16" => "Kirundo",
363
+ "17" => "Makamba",
364
+ "18" => "Muyinga",
365
+ "19" => "Ngozi",
366
+ "20" => "Rutana",
367
+ "21" => "Ruyigi",
368
+ "22" => "Muramvya",
369
+ "23" => "Mwaro"),
370
+ "BJ" => array(
371
+ "07" => "Alibori",
372
+ "08" => "Atakora",
373
+ "09" => "Atlanyique",
374
+ "10" => "Borgou",
375
+ "11" => "Collines",
376
+ "12" => "Kouffo",
377
+ "13" => "Donga",
378
+ "14" => "Littoral",
379
+ "15" => "Mono",
380
+ "16" => "Oueme",
381
+ "17" => "Plateau",
382
+ "18" => "Zou"),
383
+ "BM" => array(
384
+ "01" => "Devonshire",
385
+ "02" => "Hamilton",
386
+ "03" => "Hamilton",
387
+ "04" => "Paget",
388
+ "05" => "Pembroke",
389
+ "06" => "Saint George",
390
+ "07" => "Saint George's",
391
+ "08" => "Sandys",
392
+ "09" => "Smiths",
393
+ "10" => "Southampton",
394
+ "11" => "Warwick"),
395
+ "BN" => array(
396
+ "07" => "Alibori",
397
+ "08" => "Belait",
398
+ "09" => "Brunei and Muara",
399
+ "10" => "Temburong",
400
+ "11" => "Collines",
401
+ "12" => "Kouffo",
402
+ "13" => "Donga",
403
+ "14" => "Littoral",
404
+ "15" => "Tutong",
405
+ "16" => "Oueme",
406
+ "17" => "Plateau",
407
+ "18" => "Zou"),
408
+ "BO" => array(
409
+ "01" => "Chuquisaca",
410
+ "02" => "Cochabamba",
411
+ "03" => "El Beni",
412
+ "04" => "La Paz",
413
+ "05" => "Oruro",
414
+ "06" => "Pando",
415
+ "07" => "Potosi",
416
+ "08" => "Santa Cruz",
417
+ "09" => "Tarija"),
418
+ "BR" => array(
419
+ "01" => "Acre",
420
+ "02" => "Alagoas",
421
+ "03" => "Amapa",
422
+ "04" => "Amazonas",
423
+ "05" => "Bahia",
424
+ "06" => "Ceara",
425
+ "07" => "Distrito Federal",
426
+ "08" => "Espirito Santo",
427
+ "11" => "Mato Grosso do Sul",
428
+ "13" => "Maranhao",
429
+ "14" => "Mato Grosso",
430
+ "15" => "Minas Gerais",
431
+ "16" => "Para",
432
+ "17" => "Paraiba",
433
+ "18" => "Parana",
434
+ "20" => "Piaui",
435
+ "21" => "Rio de Janeiro",
436
+ "22" => "Rio Grande do Norte",
437
+ "23" => "Rio Grande do Sul",
438
+ "24" => "Rondonia",
439
+ "25" => "Roraima",
440
+ "26" => "Santa Catarina",
441
+ "27" => "Sao Paulo",
442
+ "28" => "Sergipe",
443
+ "29" => "Goias",
444
+ "30" => "Pernambuco",
445
+ "31" => "Tocantins"),
446
+ "BS" => array(
447
+ "05" => "Bimini",
448
+ "06" => "Cat Island",
449
+ "10" => "Exuma",
450
+ "13" => "Inagua",
451
+ "15" => "Long Island",
452
+ "16" => "Mayaguana",
453
+ "18" => "Ragged Island",
454
+ "22" => "Harbour Island",
455
+ "23" => "New Providence",
456
+ "24" => "Acklins and Crooked Islands",
457
+ "25" => "Freeport",
458
+ "26" => "Fresh Creek",
459
+ "27" => "Governor's Harbour",
460
+ "28" => "Green Turtle Cay",
461
+ "29" => "High Rock",
462
+ "30" => "Kemps Bay",
463
+ "31" => "Marsh Harbour",
464
+ "32" => "Nichollstown and Berry Islands",
465
+ "33" => "Rock Sound",
466
+ "34" => "Sandy Point",
467
+ "35" => "San Salvador and Rum Cay"),
468
+ "BT" => array(
469
+ "05" => "Bumthang",
470
+ "06" => "Chhukha",
471
+ "07" => "Chirang",
472
+ "08" => "Daga",
473
+ "09" => "Geylegphug",
474
+ "10" => "Ha",
475
+ "11" => "Lhuntshi",
476
+ "12" => "Mongar",
477
+ "13" => "Paro",
478
+ "14" => "Pemagatsel",
479
+ "15" => "Punakha",
480
+ "16" => "Samchi",
481
+ "17" => "Samdrup",
482
+ "18" => "Shemgang",
483
+ "19" => "Tashigang",
484
+ "20" => "Thimphu",
485
+ "21" => "Tongsa",
486
+ "22" => "Wangdi Phodrang"),
487
+ "BW" => array(
488
+ "01" => "Central",
489
+ "03" => "Ghanzi",
490
+ "04" => "Kgalagadi",
491
+ "05" => "Kgatleng",
492
+ "06" => "Kweneng",
493
+ "08" => "North-East",
494
+ "09" => "South-East",
495
+ "10" => "Southern",
496
+ "11" => "North-West"),
497
+ "BY" => array(
498
+ "01" => "Brestskaya Voblasts'",
499
+ "02" => "Homyel'skaya Voblasts'",
500
+ "03" => "Hrodzyenskaya Voblasts'",
501
+ "04" => "Minsk",
502
+ "05" => "Minskaya Voblasts'",
503
+ "06" => "Mahilyowskaya Voblasts'",
504
+ "07" => "Vitsyebskaya Voblasts'"),
505
+ "BZ" => array(
506
+ "01" => "Belize",
507
+ "02" => "Cayo",
508
+ "03" => "Corozal",
509
+ "04" => "Orange Walk",
510
+ "05" => "Stann Creek",
511
+ "06" => "Toledo"),
512
+ "CA" => array(
513
+ "AB" => "Alberta",
514
+ "BC" => "British Columbia",
515
+ "MB" => "Manitoba",
516
+ "NB" => "New Brunswick",
517
+ "NL" => "Newfoundland",
518
+ "NS" => "Nova Scotia",
519
+ "NT" => "Northwest Territories",
520
+ "NU" => "Nunavut",
521
+ "ON" => "Ontario",
522
+ "PE" => "Prince Edward Island",
523
+ "QC" => "Quebec",
524
+ "SK" => "Saskatchewan",
525
+ "YT" => "Yukon Territory"),
526
+ "CD" => array(
527
+ "01" => "Bandundu",
528
+ "02" => "Equateur",
529
+ "04" => "Kasai-Oriental",
530
+ "05" => "Katanga",
531
+ "06" => "Kinshasa",
532
+ "08" => "Bas-Congo",
533
+ "09" => "Orientale",
534
+ "10" => "Maniema",
535
+ "11" => "Nord-Kivu",
536
+ "12" => "Sud-Kivu"),
537
+ "CF" => array(
538
+ "01" => "Bamingui-Bangoran",
539
+ "02" => "Basse-Kotto",
540
+ "03" => "Haute-Kotto",
541
+ "04" => "Mambere-Kadei",
542
+ "05" => "Haut-Mbomou",
543
+ "06" => "Kemo",
544
+ "07" => "Lobaye",
545
+ "08" => "Mbomou",
546
+ "09" => "Nana-Mambere",
547
+ "11" => "Ouaka",
548
+ "12" => "Ouham",
549
+ "13" => "Ouham-Pende",
550
+ "14" => "Cuvette-Ouest",
551
+ "15" => "Nana-Grebizi",
552
+ "16" => "Sangha-Mbaere",
553
+ "17" => "Ombella-Mpoko",
554
+ "18" => "Bangui"),
555
+ "CG" => array(
556
+ "01" => "Bouenza",
557
+ "04" => "Kouilou",
558
+ "05" => "Lekoumou",
559
+ "06" => "Likouala",
560
+ "07" => "Niari",
561
+ "08" => "Plateaux",
562
+ "10" => "Sangha",
563
+ "11" => "Pool",
564
+ "12" => "Brazzaville",
565
+ "13" => "Cuvette",
566
+ "14" => "Cuvette-Ouest"),
567
+ "CH" => array(
568
+ "01" => "Aargau",
569
+ "02" => "Ausser-Rhoden",
570
+ "03" => "Basel-Landschaft",
571
+ "04" => "Basel-Stadt",
572
+ "05" => "Bern",
573
+ "06" => "Fribourg",
574
+ "07" => "Geneve",
575
+ "08" => "Glarus",
576
+ "09" => "Graubunden",
577
+ "10" => "Inner-Rhoden",
578
+ "11" => "Luzern",
579
+ "12" => "Neuchatel",
580
+ "13" => "Nidwalden",
581
+ "14" => "Obwalden",
582
+ "15" => "Sankt Gallen",
583
+ "16" => "Schaffhausen",
584
+ "17" => "Schwyz",
585
+ "18" => "Solothurn",
586
+ "19" => "Thurgau",
587
+ "20" => "Ticino",
588
+ "21" => "Uri",
589
+ "22" => "Valais",
590
+ "23" => "Vaud",
591
+ "24" => "Zug",
592
+ "25" => "Zurich",
593
+ "26" => "Jura"),
594
+ "CI" => array(
595
+ "74" => "Agneby",
596
+ "75" => "Bafing",
597
+ "76" => "Bas-Sassandra",
598
+ "77" => "Denguele",
599
+ "78" => "Dix-Huit Montagnes",
600
+ "79" => "Fromager",
601
+ "80" => "Haut-Sassandra",
602
+ "81" => "Lacs",
603
+ "82" => "Lagunes",
604
+ "83" => "Marahoue",
605
+ "84" => "Moyen-Cavally",
606
+ "85" => "Moyen-Comoe",
607
+ "86" => "N'zi-Comoe",
608
+ "87" => "Savanes",
609
+ "88" => "Sud-Bandama",
610
+ "89" => "Sud-Comoe",
611
+ "90" => "Vallee du Bandama",
612
+ "91" => "Worodougou",
613
+ "92" => "Zanzan"),
614
+ "CL" => array(
615
+ "01" => "Valparaiso",
616
+ "02" => "Aisen del General Carlos Ibanez del Campo",
617
+ "03" => "Antofagasta",
618
+ "04" => "Araucania",
619
+ "05" => "Atacama",
620
+ "06" => "Bio-Bio",
621
+ "07" => "Coquimbo",
622
+ "08" => "Libertador General Bernardo O'Higgins",
623
+ "09" => "Los Lagos",
624
+ "10" => "Magallanes y de la Antartica Chilena",
625
+ "11" => "Maule",
626
+ "12" => "Region Metropolitana",
627
+ "13" => "Tarapaca",
628
+ "14" => "Los Lagos",
629
+ "15" => "Tarapaca",
630
+ "16" => "Arica y Parinacota",
631
+ "17" => "Los Rios"),
632
+ "CM" => array(
633
+ "04" => "Est",
634
+ "05" => "Littoral",
635
+ "07" => "Nord-Ouest",
636
+ "08" => "Ouest",
637
+ "09" => "Sud-Ouest",
638
+ "10" => "Adamaoua",
639
+ "11" => "Centre",
640
+ "12" => "Extreme-Nord",
641
+ "13" => "Nord",
642
+ "14" => "Sud"),
643
+ "CN" => array(
644
+ "01" => "Anhui",
645
+ "02" => "Zhejiang",
646
+ "03" => "Jiangxi",
647
+ "04" => "Jiangsu",
648
+ "05" => "Jilin",
649
+ "06" => "Qinghai",
650
+ "07" => "Fujian",
651
+ "08" => "Heilongjiang",
652
+ "09" => "Henan",
653
+ "10" => "Hebei",
654
+ "11" => "Hunan",
655
+ "12" => "Hubei",
656
+ "13" => "Xinjiang",
657
+ "14" => "Xizang",
658
+ "15" => "Gansu",
659
+ "16" => "Guangxi",
660
+ "18" => "Guizhou",
661
+ "19" => "Liaoning",
662
+ "20" => "Nei Mongol",
663
+ "21" => "Ningxia",
664
+ "22" => "Beijing",
665
+ "23" => "Shanghai",
666
+ "24" => "Shanxi",
667
+ "25" => "Shandong",
668
+ "26" => "Shaanxi",
669
+ "28" => "Tianjin",
670
+ "29" => "Yunnan",
671
+ "30" => "Guangdong",
672
+ "31" => "Hainan",
673
+ "32" => "Sichuan",
674
+ "33" => "Chongqing"),
675
+ "CO" => array(
676
+ "01" => "Amazonas",
677
+ "02" => "Antioquia",
678
+ "03" => "Arauca",
679
+ "04" => "Atlantico",
680
+ "08" => "Caqueta",
681
+ "09" => "Cauca",
682
+ "10" => "Cesar",
683
+ "11" => "Choco",
684
+ "12" => "Cordoba",
685
+ "14" => "Guaviare",
686
+ "15" => "Guainia",
687
+ "16" => "Huila",
688
+ "17" => "La Guajira",
689
+ "19" => "Meta",
690
+ "20" => "Narino",
691
+ "21" => "Norte de Santander",
692
+ "22" => "Putumayo",
693
+ "23" => "Quindio",
694
+ "24" => "Risaralda",
695
+ "25" => "San Andres y Providencia",
696
+ "26" => "Santander",
697
+ "27" => "Sucre",
698
+ "28" => "Tolima",
699
+ "29" => "Valle del Cauca",
700
+ "30" => "Vaupes",
701
+ "31" => "Vichada",
702
+ "32" => "Casanare",
703
+ "33" => "Cundinamarca",
704
+ "34" => "Distrito Especial",
705
+ "35" => "Bolivar",
706
+ "36" => "Boyaca",
707
+ "37" => "Caldas",
708
+ "38" => "Magdalena"),
709
+ "CR" => array(
710
+ "01" => "Alajuela",
711
+ "02" => "Cartago",
712
+ "03" => "Guanacaste",
713
+ "04" => "Heredia",
714
+ "06" => "Limon",
715
+ "07" => "Puntarenas",
716
+ "08" => "San Jose"),
717
+ "CU" => array(
718
+ "01" => "Pinar del Rio",
719
+ "02" => "Ciudad de la Habana",
720
+ "03" => "Matanzas",
721
+ "04" => "Isla de la Juventud",
722
+ "05" => "Camaguey",
723
+ "07" => "Ciego de Avila",
724
+ "08" => "Cienfuegos",
725
+ "09" => "Granma",
726
+ "10" => "Guantanamo",
727
+ "11" => "La Habana",
728
+ "12" => "Holguin",
729
+ "13" => "Las Tunas",
730
+ "14" => "Sancti Spiritus",
731
+ "15" => "Santiago de Cuba",
732
+ "16" => "Villa Clara"),
733
+ "CV" => array(
734
+ "01" => "Boa Vista",
735
+ "02" => "Brava",
736
+ "04" => "Maio",
737
+ "05" => "Paul",
738
+ "07" => "Ribeira Grande",
739
+ "08" => "Sal",
740
+ "10" => "Sao Nicolau",
741
+ "11" => "Sao Vicente",
742
+ "13" => "Mosteiros",
743
+ "14" => "Praia",
744
+ "15" => "Santa Catarina",
745
+ "16" => "Santa Cruz",
746
+ "17" => "Sao Domingos",
747
+ "18" => "Sao Filipe",
748
+ "19" => "Sao Miguel",
749
+ "20" => "Tarrafal"),
750
+ "CY" => array(
751
+ "01" => "Famagusta",
752
+ "02" => "Kyrenia",
753
+ "03" => "Larnaca",
754
+ "04" => "Nicosia",
755
+ "05" => "Limassol",
756
+ "06" => "Paphos"),
757
+ "CZ" => array(
758
+ "52" => "Hlavni mesto Praha",
759
+ "78" => "Jihomoravsky kraj",
760
+ "79" => "Jihocesky kraj",
761
+ "80" => "Vysocina",
762
+ "81" => "Karlovarsky kraj",
763
+ "82" => "Kralovehradecky kraj",
764
+ "83" => "Liberecky kraj",
765
+ "84" => "Olomoucky kraj",
766
+ "85" => "Moravskoslezsky kraj",
767
+ "86" => "Pardubicky kraj",
768
+ "87" => "Plzensky kraj",
769
+ "88" => "Stredocesky kraj",
770
+ "89" => "Ustecky kraj",
771
+ "90" => "Zlinsky kraj"),
772
+ "DE" => array(
773
+ "01" => "Baden-Wurttemberg",
774
+ "02" => "Bayern",
775
+ "03" => "Bremen",
776
+ "04" => "Hamburg",
777
+ "05" => "Hessen",
778
+ "06" => "Niedersachsen",
779
+ "07" => "Nordrhein-Westfalen",
780
+ "08" => "Rheinland-Pfalz",
781
+ "09" => "Saarland",
782
+ "10" => "Schleswig-Holstein",
783
+ "11" => "Brandenburg",
784
+ "12" => "Mecklenburg-Vorpommern",
785
+ "13" => "Sachsen",
786
+ "14" => "Sachsen-Anhalt",
787
+ "15" => "Thuringen",
788
+ "16" => "Berlin"),
789
+ "DJ" => array(
790
+ "01" => "Ali Sabieh",
791
+ "04" => "Obock",
792
+ "05" => "Tadjoura",
793
+ "06" => "Dikhil",
794
+ "07" => "Djibouti",
795
+ "08" => "Arta"),
796
+ "DK" => array(
797
+ "17" => "Hovedstaden",
798
+ "18" => "Midtjylland",
799
+ "19" => "Nordjylland",
800
+ "20" => "Sjelland",
801
+ "21" => "Syddanmark"),
802
+ "DM" => array(
803
+ "02" => "Saint Andrew",
804
+ "03" => "Saint David",
805
+ "04" => "Saint George",
806
+ "05" => "Saint John",
807
+ "06" => "Saint Joseph",
808
+ "07" => "Saint Luke",
809
+ "08" => "Saint Mark",
810
+ "09" => "Saint Patrick",
811
+ "10" => "Saint Paul",
812
+ "11" => "Saint Peter"),
813
+ "DO" => array(
814
+ "01" => "Azua",
815
+ "02" => "Baoruco",
816
+ "03" => "Barahona",
817
+ "04" => "Dajabon",
818
+ "05" => "Distrito Nacional",
819
+ "06" => "Duarte",
820
+ "08" => "Espaillat",
821
+ "09" => "Independencia",
822
+ "10" => "La Altagracia",
823
+ "11" => "Elias Pina",
824
+ "12" => "La Romana",
825
+ "14" => "Maria Trinidad Sanchez",
826
+ "15" => "Monte Cristi",
827
+ "16" => "Pedernales",
828
+ "17" => "Peravia",
829
+ "18" => "Puerto Plata",
830
+ "19" => "Salcedo",
831
+ "20" => "Samana",
832
+ "21" => "Sanchez Ramirez",
833
+ "23" => "San Juan",
834
+ "24" => "San Pedro De Macoris",
835
+ "25" => "Santiago",
836
+ "26" => "Santiago Rodriguez",
837
+ "27" => "Valverde",
838
+ "28" => "El Seibo",
839
+ "29" => "Hato Mayor",
840
+ "30" => "La Vega",
841
+ "31" => "Monsenor Nouel",
842
+ "32" => "Monte Plata",
843
+ "33" => "San Cristobal",
844
+ "34" => "Distrito Nacional",
845
+ "35" => "Peravia",
846
+ "36" => "San Jose de Ocoa",
847
+ "37" => "Santo Domingo"),
848
+ "DZ" => array(
849
+ "01" => "Alger",
850
+ "03" => "Batna",
851
+ "04" => "Constantine",
852
+ "06" => "Medea",
853
+ "07" => "Mostaganem",
854
+ "09" => "Oran",
855
+ "10" => "Saida",
856
+ "12" => "Setif",
857
+ "13" => "Tiaret",
858
+ "14" => "Tizi Ouzou",
859
+ "15" => "Tlemcen",
860
+ "18" => "Bejaia",
861
+ "19" => "Biskra",
862
+ "20" => "Blida",
863
+ "21" => "Bouira",
864
+ "22" => "Djelfa",
865
+ "23" => "Guelma",
866
+ "24" => "Jijel",
867
+ "25" => "Laghouat",
868
+ "26" => "Mascara",
869
+ "27" => "M'sila",
870
+ "29" => "Oum el Bouaghi",
871
+ "30" => "Sidi Bel Abbes",
872
+ "31" => "Skikda",
873
+ "33" => "Tebessa",
874
+ "34" => "Adrar",
875
+ "35" => "Ain Defla",
876
+ "36" => "Ain Temouchent",
877
+ "37" => "Annaba",
878
+ "38" => "Bechar",
879
+ "39" => "Bordj Bou Arreridj",
880
+ "40" => "Boumerdes",
881
+ "41" => "Chlef",
882
+ "42" => "El Bayadh",
883
+ "43" => "El Oued",
884
+ "44" => "El Tarf",
885
+ "45" => "Ghardaia",
886
+ "46" => "Illizi",
887
+ "47" => "Khenchela",
888
+ "48" => "Mila",
889
+ "49" => "Naama",
890
+ "50" => "Ouargla",
891
+ "51" => "Relizane",
892
+ "52" => "Souk Ahras",
893
+ "53" => "Tamanghasset",
894
+ "54" => "Tindouf",
895
+ "55" => "Tipaza",
896
+ "56" => "Tissemsilt"),
897
+ "EC" => array(
898
+ "01" => "Galapagos",
899
+ "02" => "Azuay",
900
+ "03" => "Bolivar",
901
+ "04" => "Canar",
902
+ "05" => "Carchi",
903
+ "06" => "Chimborazo",
904
+ "07" => "Cotopaxi",
905
+ "08" => "El Oro",
906
+ "09" => "Esmeraldas",
907
+ "10" => "Guayas",
908
+ "11" => "Imbabura",
909
+ "12" => "Loja",
910
+ "13" => "Los Rios",
911
+ "14" => "Manabi",
912
+ "15" => "Morona-Santiago",
913
+ "17" => "Pastaza",
914
+ "18" => "Pichincha",
915
+ "19" => "Tungurahua",
916
+ "20" => "Zamora-Chinchipe",
917
+ "22" => "Sucumbios",
918
+ "23" => "Napo",
919
+ "24" => "Orellana"),
920
+ "EE" => array(
921
+ "01" => "Harjumaa",
922
+ "02" => "Hiiumaa",
923
+ "03" => "Ida-Virumaa",
924
+ "04" => "Jarvamaa",
925
+ "05" => "Jogevamaa",
926
+ "06" => "Kohtla-Jarve",
927
+ "07" => "Laanemaa",
928
+ "08" => "Laane-Virumaa",
929
+ "09" => "Narva",
930
+ "10" => "Parnu",
931
+ "11" => "Parnumaa",
932
+ "12" => "Polvamaa",
933
+ "13" => "Raplamaa",
934
+ "14" => "Saaremaa",
935
+ "15" => "Sillamae",
936
+ "16" => "Tallinn",
937
+ "17" => "Tartu",
938
+ "18" => "Tartumaa",
939
+ "19" => "Valgamaa",
940
+ "20" => "Viljandimaa",
941
+ "21" => "Vorumaa"),
942
+ "EG" => array(
943
+ "01" => "Ad Daqahliyah",
944
+ "02" => "Al Bahr al Ahmar",
945
+ "03" => "Al Buhayrah",
946
+ "04" => "Al Fayyum",
947
+ "05" => "Al Gharbiyah",
948
+ "06" => "Al Iskandariyah",
949
+ "07" => "Al Isma'iliyah",
950
+ "08" => "Al Jizah",
951
+ "09" => "Al Minufiyah",
952
+ "10" => "Al Minya",
953
+ "11" => "Al Qahirah",
954
+ "12" => "Al Qalyubiyah",
955
+ "13" => "Al Wadi al Jadid",
956
+ "14" => "Ash Sharqiyah",
957
+ "15" => "As Suways",
958
+ "16" => "Aswan",
959
+ "17" => "Asyut",
960
+ "18" => "Bani Suwayf",
961
+ "19" => "Bur Sa'id",
962
+ "20" => "Dumyat",
963
+ "21" => "Kafr ash Shaykh",
964
+ "22" => "Matruh",
965
+ "23" => "Qina",
966
+ "24" => "Suhaj",
967
+ "26" => "Janub Sina'",
968
+ "27" => "Shamal Sina'"),
969
+ "ER" => array(
970
+ "01" => "Anseba",
971
+ "02" => "Debub",
972
+ "03" => "Debubawi K'eyih Bahri",
973
+ "04" => "Gash Barka",
974
+ "05" => "Ma'akel",
975
+ "06" => "Semenawi K'eyih Bahri"),
976
+ "ES" => array(
977
+ "07" => "Islas Baleares",
978
+ "27" => "La Rioja",
979
+ "29" => "Madrid",
980
+ "31" => "Murcia",
981
+ "32" => "Navarra",
982
+ "34" => "Asturias",
983
+ "39" => "Cantabria",
984
+ "51" => "Andalucia",
985
+ "52" => "Aragon",
986
+ "53" => "Canarias",
987
+ "54" => "Castilla-La Mancha",
988
+ "55" => "Castilla y Leon",
989
+ "56" => "Catalonia",
990
+ "57" => "Extremadura",
991
+ "58" => "Galicia",
992
+ "59" => "Pais Vasco",
993
+ "60" => "Comunidad Valenciana"),
994
+ "ET" => array(
995
+ "44" => "Adis Abeba",
996
+ "45" => "Afar",
997
+ "46" => "Amara",
998
+ "47" => "Binshangul Gumuz",
999
+ "48" => "Dire Dawa",
1000
+ "49" => "Gambela Hizboch",
1001
+ "50" => "Hareri Hizb",
1002
+ "51" => "Oromiya",
1003
+ "52" => "Sumale",
1004
+ "53" => "Tigray",
1005
+ "54" => "YeDebub Biheroch Bihereseboch na Hizboch"),
1006
+ "FI" => array(
1007
+ "01" => "Aland",
1008
+ "06" => "Lapland",
1009
+ "08" => "Oulu",
1010
+ "13" => "Southern Finland",
1011
+ "14" => "Eastern Finland",
1012
+ "15" => "Western Finland"),
1013
+ "FJ" => array(
1014
+ "01" => "Central",
1015
+ "02" => "Eastern",
1016
+ "03" => "Northern",
1017
+ "04" => "Rotuma",
1018
+ "05" => "Western"),
1019
+ "FM" => array(
1020
+ "01" => "Kosrae",
1021
+ "02" => "Pohnpei",
1022
+ "03" => "Chuuk",
1023
+ "04" => "Yap"),
1024
+ "FR" => array(
1025
+ "97" => "Aquitaine",
1026
+ "98" => "Auvergne",
1027
+ "99" => "Basse-Normandie",
1028
+ "A1" => "Bourgogne",
1029
+ "A2" => "Bretagne",
1030
+ "A3" => "Centre",
1031
+ "A4" => "Champagne-Ardenne",
1032
+ "A5" => "Corse",
1033
+ "A6" => "Franche-Comte",
1034
+ "A7" => "Haute-Normandie",
1035
+ "A8" => "Ile-de-France",
1036
+ "A9" => "Languedoc-Roussillon",
1037
+ "B1" => "Limousin",
1038
+ "B2" => "Lorraine",
1039
+ "B3" => "Midi-Pyrenees",
1040
+ "B4" => "Nord-Pas-de-Calais",
1041
+ "B5" => "Pays de la Loire",
1042
+ "B6" => "Picardie",
1043
+ "B7" => "Poitou-Charentes",
1044
+ "B8" => "Provence-Alpes-Cote d'Azur",
1045
+ "B9" => "Rhone-Alpes",
1046
+ "C1" => "Alsace"),
1047
+ "GA" => array(
1048
+ "01" => "Estuaire",
1049
+ "02" => "Haut-Ogooue",
1050
+ "03" => "Moyen-Ogooue",
1051
+ "04" => "Ngounie",
1052
+ "05" => "Nyanga",
1053
+ "06" => "Ogooue-Ivindo",
1054
+ "07" => "Ogooue-Lolo",
1055
+ "08" => "Ogooue-Maritime",
1056
+ "09" => "Woleu-Ntem"),
1057
+ "GB" => array(
1058
+ "A1" => "Barking and Dagenham",
1059
+ "A2" => "Barnet",
1060
+ "A3" => "Barnsley",
1061
+ "A4" => "Bath and North East Somerset",
1062
+ "A5" => "Bedfordshire",
1063
+ "A6" => "Bexley",
1064
+ "A7" => "Birmingham",
1065
+ "A8" => "Blackburn with Darwen",
1066
+ "A9" => "Blackpool",
1067
+ "B1" => "Bolton",
1068
+ "B2" => "Bournemouth",
1069
+ "B3" => "Bracknell Forest",
1070
+ "B4" => "Bradford",
1071
+ "B5" => "Brent",
1072
+ "B6" => "Brighton and Hove",
1073
+ "B7" => "Bristol, City of",
1074
+ "B8" => "Bromley",
1075
+ "B9" => "Buckinghamshire",
1076
+ "C1" => "Bury",
1077
+ "C2" => "Calderdale",
1078
+ "C3" => "Cambridgeshire",
1079
+ "C4" => "Camden",
1080
+ "C5" => "Cheshire",
1081
+ "C6" => "Cornwall",
1082
+ "C7" => "Coventry",
1083
+ "C8" => "Croydon",
1084
+ "C9" => "Cumbria",
1085
+ "D1" => "Darlington",
1086
+ "D2" => "Derby",
1087
+ "D3" => "Derbyshire",
1088
+ "D4" => "Devon",
1089
+ "D5" => "Doncaster",
1090
+ "D6" => "Dorset",
1091
+ "D7" => "Dudley",
1092
+ "D8" => "Durham",
1093
+ "D9" => "Ealing",
1094
+ "E1" => "East Riding of Yorkshire",
1095
+ "E2" => "East Sussex",
1096
+ "E3" => "Enfield",
1097
+ "E4" => "Essex",
1098
+ "E5" => "Gateshead",
1099
+ "E6" => "Gloucestershire",
1100
+ "E7" => "Greenwich",
1101
+ "E8" => "Hackney",
1102
+ "E9" => "Halton",
1103
+ "F1" => "Hammersmith and Fulham",
1104
+ "F2" => "Hampshire",
1105
+ "F3" => "Haringey",
1106
+ "F4" => "Harrow",
1107
+ "F5" => "Hartlepool",
1108
+ "F6" => "Havering",
1109
+ "F7" => "Herefordshire",
1110
+ "F8" => "Hertford",
1111
+ "F9" => "Hillingdon",
1112
+ "G1" => "Hounslow",
1113
+ "G2" => "Isle of Wight",
1114
+ "G3" => "Islington",
1115
+ "G4" => "Kensington and Chelsea",
1116
+ "G5" => "Kent",
1117
+ "G6" => "Kingston upon Hull, City of",
1118
+ "G7" => "Kingston upon Thames",
1119
+ "G8" => "Kirklees",
1120
+ "G9" => "Knowsley",
1121
+ "H1" => "Lambeth",
1122
+ "H2" => "Lancashire",
1123
+ "H3" => "Leeds",
1124
+ "H4" => "Leicester",
1125
+ "H5" => "Leicestershire",
1126
+ "H6" => "Lewisham",
1127
+ "H7" => "Lincolnshire",
1128
+ "H8" => "Liverpool",
1129
+ "H9" => "London, City of",
1130
+ "I1" => "Luton",
1131
+ "I2" => "Manchester",
1132
+ "I3" => "Medway",
1133
+ "I4" => "Merton",
1134
+ "I5" => "Middlesbrough",
1135
+ "I6" => "Milton Keynes",
1136
+ "I7" => "Newcastle upon Tyne",
1137
+ "I8" => "Newham",
1138
+ "I9" => "Norfolk",
1139
+ "J1" => "Northamptonshire",
1140
+ "J2" => "North East Lincolnshire",
1141
+ "J3" => "North Lincolnshire",
1142
+ "J4" => "North Somerset",
1143
+ "J5" => "North Tyneside",
1144
+ "J6" => "Northumberland",
1145
+ "J7" => "North Yorkshire",
1146
+ "J8" => "Nottingham",
1147
+ "J9" => "Nottinghamshire",
1148
+ "K1" => "Oldham",
1149
+ "K2" => "Oxfordshire",
1150
+ "K3" => "Peterborough",
1151
+ "K4" => "Plymouth",
1152
+ "K5" => "Poole",
1153
+ "K6" => "Portsmouth",
1154
+ "K7" => "Reading",
1155
+ "K8" => "Redbridge",
1156
+ "K9" => "Redcar and Cleveland",
1157
+ "L1" => "Richmond upon Thames",
1158
+ "L2" => "Rochdale",
1159
+ "L3" => "Rotherham",
1160
+ "L4" => "Rutland",
1161
+ "L5" => "Salford",
1162
+ "L6" => "Shropshire",
1163
+ "L7" => "Sandwell",
1164
+ "L8" => "Sefton",
1165
+ "L9" => "Sheffield",
1166
+ "M1" => "Slough",
1167
+ "M2" => "Solihull",
1168
+ "M3" => "Somerset",
1169
+ "M4" => "Southampton",
1170
+ "M5" => "Southend-on-Sea",
1171
+ "M6" => "South Gloucestershire",
1172
+ "M7" => "South Tyneside",
1173
+ "M8" => "Southwark",
1174
+ "M9" => "Staffordshire",
1175
+ "N1" => "St. Helens",
1176
+ "N2" => "Stockport",
1177
+ "N3" => "Stockton-on-Tees",
1178
+ "N4" => "Stoke-on-Trent",
1179
+ "N5" => "Suffolk",
1180
+ "N6" => "Sunderland",
1181
+ "N7" => "Surrey",
1182
+ "N8" => "Sutton",
1183
+ "N9" => "Swindon",
1184
+ "O1" => "Tameside",
1185
+ "O2" => "Telford and Wrekin",
1186
+ "O3" => "Thurrock",
1187
+ "O4" => "Torbay",
1188
+ "O5" => "Tower Hamlets",
1189
+ "O6" => "Trafford",
1190
+ "O7" => "Wakefield",
1191
+ "O8" => "Walsall",
1192
+ "O9" => "Waltham Forest",
1193
+ "P1" => "Wandsworth",
1194
+ "P2" => "Warrington",
1195
+ "P3" => "Warwickshire",
1196
+ "P4" => "West Berkshire",
1197
+ "P5" => "Westminster",
1198
+ "P6" => "West Sussex",
1199
+ "P7" => "Wigan",
1200
+ "P8" => "Wiltshire",
1201
+ "P9" => "Windsor and Maidenhead",
1202
+ "Q1" => "Wirral",
1203
+ "Q2" => "Wokingham",
1204
+ "Q3" => "Wolverhampton",
1205
+ "Q4" => "Worcestershire",
1206
+ "Q5" => "York",
1207
+ "Q6" => "Antrim",
1208
+ "Q7" => "Ards",
1209
+ "Q8" => "Armagh",
1210
+ "Q9" => "Ballymena",
1211
+ "R1" => "Ballymoney",
1212
+ "R2" => "Banbridge",
1213
+ "R3" => "Belfast",
1214
+ "R4" => "Carrickfergus",
1215
+ "R5" => "Castlereagh",
1216
+ "R6" => "Coleraine",
1217
+ "R7" => "Cookstown",
1218
+ "R8" => "Craigavon",
1219
+ "R9" => "Down",
1220
+ "S1" => "Dungannon",
1221
+ "S2" => "Fermanagh",
1222
+ "S3" => "Larne",
1223
+ "S4" => "Limavady",
1224
+ "S5" => "Lisburn",
1225
+ "S6" => "Derry",
1226
+ "S7" => "Magherafelt",
1227
+ "S8" => "Moyle",
1228
+ "S9" => "Newry and Mourne",
1229
+ "T1" => "Newtownabbey",
1230
+ "T2" => "North Down",
1231
+ "T3" => "Omagh",
1232
+ "T4" => "Strabane",
1233
+ "T5" => "Aberdeen City",
1234
+ "T6" => "Aberdeenshire",
1235
+ "T7" => "Angus",
1236
+ "T8" => "Argyll and Bute",
1237
+ "T9" => "Scottish Borders, The",
1238
+ "U1" => "Clackmannanshire",
1239
+ "U2" => "Dumfries and Galloway",
1240
+ "U3" => "Dundee City",
1241
+ "U4" => "East Ayrshire",
1242
+ "U5" => "East Dunbartonshire",
1243
+ "U6" => "East Lothian",
1244
+ "U7" => "East Renfrewshire",
1245
+ "U8" => "Edinburgh, City of",
1246
+ "U9" => "Falkirk",
1247
+ "V1" => "Fife",
1248
+ "V2" => "Glasgow City",
1249
+ "V3" => "Highland",
1250
+ "V4" => "Inverclyde",
1251
+ "V5" => "Midlothian",
1252
+ "V6" => "Moray",
1253
+ "V7" => "North Ayrshire",
1254
+ "V8" => "North Lanarkshire",
1255
+ "V9" => "Orkney",
1256
+ "W1" => "Perth and Kinross",
1257
+ "W2" => "Renfrewshire",
1258
+ "W3" => "Shetland Islands",
1259
+ "W4" => "South Ayrshire",
1260
+ "W5" => "South Lanarkshire",
1261
+ "W6" => "Stirling",
1262
+ "W7" => "West Dunbartonshire",
1263
+ "W8" => "Eilean Siar",
1264
+ "W9" => "West Lothian",
1265
+ "X1" => "Isle of Anglesey",
1266
+ "X2" => "Blaenau Gwent",
1267
+ "X3" => "Bridgend",
1268
+ "X4" => "Caerphilly",
1269
+ "X5" => "Cardiff",
1270
+ "X6" => "Ceredigion",
1271
+ "X7" => "Carmarthenshire",
1272
+ "X8" => "Conwy",
1273
+ "X9" => "Denbighshire",
1274
+ "Y1" => "Flintshire",
1275
+ "Y2" => "Gwynedd",
1276
+ "Y3" => "Merthyr Tydfil",
1277
+ "Y4" => "Monmouthshire",
1278
+ "Y5" => "Neath Port Talbot",
1279
+ "Y6" => "Newport",
1280
+ "Y7" => "Pembrokeshire",
1281
+ "Y8" => "Powys",
1282
+ "Y9" => "Rhondda Cynon Taff",
1283
+ "Z1" => "Swansea",
1284
+ "Z2" => "Torfaen",
1285
+ "Z3" => "Vale of Glamorgan, The",
1286
+ "Z4" => "Wrexham",
1287
+ "Z5" => "Bedfordshire",
1288
+ "Z6" => "Central Bedfordshire",
1289
+ "Z7" => "Cheshire East",
1290
+ "Z8" => "Cheshire West and Chester",
1291
+ "Z9" => "Isles of Scilly"),
1292
+ "GD" => array(
1293
+ "01" => "Saint Andrew",
1294
+ "02" => "Saint David",
1295
+ "03" => "Saint George",
1296
+ "04" => "Saint John",
1297
+ "05" => "Saint Mark",
1298
+ "06" => "Saint Patrick"),
1299
+ "GE" => array(
1300
+ "01" => "Abashis Raioni",
1301
+ "02" => "Abkhazia",
1302
+ "03" => "Adigenis Raioni",
1303
+ "04" => "Ajaria",
1304
+ "05" => "Akhalgoris Raioni",
1305
+ "06" => "Akhalk'alak'is Raioni",
1306
+ "07" => "Akhalts'ikhis Raioni",
1307
+ "08" => "Akhmetis Raioni",
1308
+ "09" => "Ambrolauris Raioni",
1309
+ "10" => "Aspindzis Raioni",
1310
+ "11" => "Baghdat'is Raioni",
1311
+ "12" => "Bolnisis Raioni",
1312
+ "13" => "Borjomis Raioni",
1313
+ "14" => "Chiat'ura",
1314
+ "15" => "Ch'khorotsqus Raioni",
1315
+ "16" => "Ch'okhatauris Raioni",
1316
+ "17" => "Dedop'listsqaros Raioni",
1317
+ "18" => "Dmanisis Raioni",
1318
+ "19" => "Dushet'is Raioni",
1319
+ "20" => "Gardabanis Raioni",
1320
+ "21" => "Gori",
1321
+ "22" => "Goris Raioni",
1322
+ "23" => "Gurjaanis Raioni",
1323
+ "24" => "Javis Raioni",
1324
+ "25" => "K'arelis Raioni",
1325
+ "26" => "Kaspis Raioni",
1326
+ "27" => "Kharagaulis Raioni",
1327
+ "28" => "Khashuris Raioni",
1328
+ "29" => "Khobis Raioni",
1329
+ "30" => "Khonis Raioni",
1330
+ "31" => "K'ut'aisi",
1331
+ "32" => "Lagodekhis Raioni",
1332
+ "33" => "Lanch'khut'is Raioni",
1333
+ "34" => "Lentekhis Raioni",
1334
+ "35" => "Marneulis Raioni",
1335
+ "36" => "Martvilis Raioni",
1336
+ "37" => "Mestiis Raioni",
1337
+ "38" => "Mts'khet'is Raioni",
1338
+ "39" => "Ninotsmindis Raioni",
1339
+ "40" => "Onis Raioni",
1340
+ "41" => "Ozurget'is Raioni",
1341
+ "42" => "P'ot'i",
1342
+ "43" => "Qazbegis Raioni",
1343
+ "44" => "Qvarlis Raioni",
1344
+ "45" => "Rust'avi",
1345
+ "46" => "Sach'kheris Raioni",
1346
+ "47" => "Sagarejos Raioni",
1347
+ "48" => "Samtrediis Raioni",
1348
+ "49" => "Senakis Raioni",
1349
+ "50" => "Sighnaghis Raioni",
1350
+ "51" => "T'bilisi",
1351
+ "52" => "T'elavis Raioni",
1352
+ "53" => "T'erjolis Raioni",
1353
+ "54" => "T'et'ritsqaros Raioni",
1354
+ "55" => "T'ianet'is Raioni",
1355
+ "56" => "Tqibuli",
1356
+ "57" => "Ts'ageris Raioni",
1357
+ "58" => "Tsalenjikhis Raioni",
1358
+ "59" => "Tsalkis Raioni",
1359
+ "60" => "Tsqaltubo",
1360
+ "61" => "Vanis Raioni",
1361
+ "62" => "Zestap'onis Raioni",
1362
+ "63" => "Zugdidi",
1363
+ "64" => "Zugdidis Raioni"),
1364
+ "GH" => array(
1365
+ "01" => "Greater Accra",
1366
+ "02" => "Ashanti",
1367
+ "03" => "Brong-Ahafo",
1368
+ "04" => "Central",
1369
+ "05" => "Eastern",
1370
+ "06" => "Northern",
1371
+ "08" => "Volta",
1372
+ "09" => "Western",
1373
+ "10" => "Upper East",
1374
+ "11" => "Upper West"),
1375
+ "GL" => array(
1376
+ "01" => "Nordgronland",
1377
+ "02" => "Ostgronland",
1378
+ "03" => "Vestgronland"),
1379
+ "GM" => array(
1380
+ "01" => "Banjul",
1381
+ "02" => "Lower River",
1382
+ "03" => "Central River",
1383
+ "04" => "Upper River",
1384
+ "05" => "Western",
1385
+ "07" => "North Bank"),
1386
+ "GN" => array(
1387
+ "01" => "Beyla",
1388
+ "02" => "Boffa",
1389
+ "03" => "Boke",
1390
+ "04" => "Conakry",
1391
+ "05" => "Dabola",
1392
+ "06" => "Dalaba",
1393
+ "07" => "Dinguiraye",
1394
+ "09" => "Faranah",
1395
+ "10" => "Forecariah",
1396
+ "11" => "Fria",
1397
+ "12" => "Gaoual",
1398
+ "13" => "Gueckedou",
1399
+ "15" => "Kerouane",
1400
+ "16" => "Kindia",
1401
+ "17" => "Kissidougou",
1402
+ "18" => "Koundara",
1403
+ "19" => "Kouroussa",
1404
+ "21" => "Macenta",
1405
+ "22" => "Mali",
1406
+ "23" => "Mamou",
1407
+ "25" => "Pita",
1408
+ "27" => "Telimele",
1409
+ "28" => "Tougue",
1410
+ "29" => "Yomou",
1411
+ "30" => "Coyah",
1412
+ "31" => "Dubreka",
1413
+ "32" => "Kankan",
1414
+ "33" => "Koubia",
1415
+ "34" => "Labe",
1416
+ "35" => "Lelouma",
1417
+ "36" => "Lola",
1418
+ "37" => "Mandiana",
1419
+ "38" => "Nzerekore",
1420
+ "39" => "Siguiri"),
1421
+ "GQ" => array(
1422
+ "03" => "Annobon",
1423
+ "04" => "Bioko Norte",
1424
+ "05" => "Bioko Sur",
1425
+ "06" => "Centro Sur",
1426
+ "07" => "Kie-Ntem",
1427
+ "08" => "Litoral",
1428
+ "09" => "Wele-Nzas"),
1429
+ "GR" => array(
1430
+ "01" => "Evros",
1431
+ "02" => "Rodhopi",
1432
+ "03" => "Xanthi",
1433
+ "04" => "Drama",
1434
+ "05" => "Serrai",
1435
+ "06" => "Kilkis",
1436
+ "07" => "Pella",
1437
+ "08" => "Florina",
1438
+ "09" => "Kastoria",
1439
+ "10" => "Grevena",
1440
+ "11" => "Kozani",
1441
+ "12" => "Imathia",
1442
+ "13" => "Thessaloniki",
1443
+ "14" => "Kavala",
1444
+ "15" => "Khalkidhiki",
1445
+ "16" => "Pieria",
1446
+ "17" => "Ioannina",
1447
+ "18" => "Thesprotia",
1448
+ "19" => "Preveza",
1449
+ "20" => "Arta",
1450
+ "21" => "Larisa",
1451
+ "22" => "Trikala",
1452
+ "23" => "Kardhitsa",
1453
+ "24" => "Magnisia",
1454
+ "25" => "Kerkira",
1455
+ "26" => "Levkas",
1456
+ "27" => "Kefallinia",
1457
+ "28" => "Zakinthos",
1458
+ "29" => "Fthiotis",
1459
+ "30" => "Evritania",
1460
+ "31" => "Aitolia kai Akarnania",
1461
+ "32" => "Fokis",
1462
+ "33" => "Voiotia",
1463
+ "34" => "Evvoia",
1464
+ "35" => "Attiki",
1465
+ "36" => "Argolis",
1466
+ "37" => "Korinthia",
1467
+ "38" => "Akhaia",
1468
+ "39" => "Ilia",
1469
+ "40" => "Messinia",
1470
+ "41" => "Arkadhia",
1471
+ "42" => "Lakonia",
1472
+ "43" => "Khania",
1473
+ "44" => "Rethimni",
1474
+ "45" => "Iraklion",
1475
+ "46" => "Lasithi",
1476
+ "47" => "Dhodhekanisos",
1477
+ "48" => "Samos",
1478
+ "49" => "Kikladhes",
1479
+ "50" => "Khios",
1480
+ "51" => "Lesvos"),
1481
+ "GT" => array(
1482
+ "01" => "Alta Verapaz",
1483
+ "02" => "Baja Verapaz",
1484
+ "03" => "Chimaltenango",
1485
+ "04" => "Chiquimula",
1486
+ "05" => "El Progreso",
1487
+ "06" => "Escuintla",
1488
+ "07" => "Guatemala",
1489
+ "08" => "Huehuetenango",
1490
+ "09" => "Izabal",
1491
+ "10" => "Jalapa",
1492
+ "11" => "Jutiapa",
1493
+ "12" => "Peten",
1494
+ "13" => "Quetzaltenango",
1495
+ "14" => "Quiche",
1496
+ "15" => "Retalhuleu",
1497
+ "16" => "Sacatepequez",
1498
+ "17" => "San Marcos",
1499
+ "18" => "Santa Rosa",
1500
+ "19" => "Solola",
1501
+ "20" => "Suchitepequez",
1502
+ "21" => "Totonicapan",
1503
+ "22" => "Zacapa"),
1504
+ "GW" => array(
1505
+ "01" => "Bafata",
1506
+ "02" => "Quinara",
1507
+ "04" => "Oio",
1508
+ "05" => "Bolama",
1509
+ "06" => "Cacheu",
1510
+ "07" => "Tombali",
1511
+ "10" => "Gabu",
1512
+ "11" => "Bissau",
1513
+ "12" => "Biombo"),
1514
+ "GY" => array(
1515
+ "10" => "Barima-Waini",
1516
+ "11" => "Cuyuni-Mazaruni",
1517
+ "12" => "Demerara-Mahaica",
1518
+ "13" => "East Berbice-Corentyne",
1519
+ "14" => "Essequibo Islands-West Demerara",
1520
+ "15" => "Mahaica-Berbice",
1521
+ "16" => "Pomeroon-Supenaam",
1522
+ "17" => "Potaro-Siparuni",
1523
+ "18" => "Upper Demerara-Berbice",
1524
+ "19" => "Upper Takutu-Upper Essequibo"),
1525
+ "HN" => array(
1526
+ "01" => "Atlantida",
1527
+ "02" => "Choluteca",
1528
+ "03" => "Colon",
1529
+ "04" => "Comayagua",
1530
+ "05" => "Copan",
1531
+ "06" => "Cortes",
1532
+ "07" => "El Paraiso",
1533
+ "08" => "Francisco Morazan",
1534
+ "09" => "Gracias a Dios",
1535
+ "10" => "Intibuca",
1536
+ "11" => "Islas de la Bahia",
1537
+ "12" => "La Paz",
1538
+ "13" => "Lempira",
1539
+ "14" => "Ocotepeque",
1540
+ "15" => "Olancho",
1541
+ "16" => "Santa Barbara",
1542
+ "17" => "Valle",
1543
+ "18" => "Yoro"),
1544
+ "HR" => array(
1545
+ "01" => "Bjelovarsko-Bilogorska",
1546
+ "02" => "Brodsko-Posavska",
1547
+ "03" => "Dubrovacko-Neretvanska",
1548
+ "04" => "Istarska",
1549
+ "05" => "Karlovacka",
1550
+ "06" => "Koprivnicko-Krizevacka",
1551
+ "07" => "Krapinsko-Zagorska",
1552
+ "08" => "Licko-Senjska",
1553
+ "09" => "Medimurska",
1554
+ "10" => "Osjecko-Baranjska",
1555
+ "11" => "Pozesko-Slavonska",
1556
+ "12" => "Primorsko-Goranska",
1557
+ "13" => "Sibensko-Kninska",
1558
+ "14" => "Sisacko-Moslavacka",
1559
+ "15" => "Splitsko-Dalmatinska",
1560
+ "16" => "Varazdinska",
1561
+ "17" => "Viroviticko-Podravska",
1562
+ "18" => "Vukovarsko-Srijemska",
1563
+ "19" => "Zadarska",
1564
+ "20" => "Zagrebacka",
1565
+ "21" => "Grad Zagreb"),
1566
+ "HT" => array(
1567
+ "03" => "Nord-Ouest",
1568
+ "06" => "Artibonite",
1569
+ "07" => "Centre",
1570
+ "09" => "Nord",
1571
+ "10" => "Nord-Est",
1572
+ "11" => "Ouest",
1573
+ "12" => "Sud",
1574
+ "13" => "Sud-Est",
1575
+ "14" => "Grand' Anse",
1576
+ "15" => "Nippes"),
1577
+ "HU" => array(
1578
+ "01" => "Bacs-Kiskun",
1579
+ "02" => "Baranya",
1580
+ "03" => "Bekes",
1581
+ "04" => "Borsod-Abauj-Zemplen",
1582
+ "05" => "Budapest",
1583
+ "06" => "Csongrad",
1584
+ "07" => "Debrecen",
1585
+ "08" => "Fejer",
1586
+ "09" => "Gyor-Moson-Sopron",
1587
+ "10" => "Hajdu-Bihar",
1588
+ "11" => "Heves",
1589
+ "12" => "Komarom-Esztergom",
1590
+ "13" => "Miskolc",
1591
+ "14" => "Nograd",
1592
+ "15" => "Pecs",
1593
+ "16" => "Pest",
1594
+ "17" => "Somogy",
1595
+ "18" => "Szabolcs-Szatmar-Bereg",
1596
+ "19" => "Szeged",
1597
+ "20" => "Jasz-Nagykun-Szolnok",
1598
+ "21" => "Tolna",
1599
+ "22" => "Vas",
1600
+ "23" => "Veszprem",
1601
+ "24" => "Zala",
1602
+ "25" => "Gyor",
1603
+ "26" => "Bekescsaba",
1604
+ "27" => "Dunaujvaros",
1605
+ "28" => "Eger",
1606
+ "29" => "Hodmezovasarhely",
1607
+ "30" => "Kaposvar",
1608
+ "31" => "Kecskemet",
1609
+ "32" => "Nagykanizsa",
1610
+ "33" => "Nyiregyhaza",
1611
+ "34" => "Sopron",
1612
+ "35" => "Szekesfehervar",
1613
+ "36" => "Szolnok",
1614
+ "37" => "Szombathely",
1615
+ "38" => "Tatabanya",
1616
+ "39" => "Veszprem",
1617
+ "40" => "Zalaegerszeg",
1618
+ "41" => "Salgotarjan",
1619
+ "42" => "Szekszard",
1620
+ "43" => "Erd"),
1621
+ "ID" => array(
1622
+ "01" => "Aceh",
1623
+ "02" => "Bali",
1624
+ "03" => "Bengkulu",
1625
+ "04" => "Jakarta Raya",
1626
+ "05" => "Jambi",
1627
+ "07" => "Jawa Tengah",
1628
+ "08" => "Jawa Timur",
1629
+ "10" => "Yogyakarta",
1630
+ "11" => "Kalimantan Barat",
1631
+ "12" => "Kalimantan Selatan",
1632
+ "13" => "Kalimantan Tengah",
1633
+ "14" => "Kalimantan Timur",
1634
+ "15" => "Lampung",
1635
+ "17" => "Nusa Tenggara Barat",
1636
+ "18" => "Nusa Tenggara Timur",
1637
+ "21" => "Sulawesi Tengah",
1638
+ "22" => "Sulawesi Tenggara",
1639
+ "24" => "Sumatera Barat",
1640
+ "26" => "Sumatera Utara",
1641
+ "28" => "Maluku",
1642
+ "29" => "Maluku Utara",
1643
+ "30" => "Jawa Barat",
1644
+ "31" => "Sulawesi Utara",
1645
+ "32" => "Sumatera Selatan",
1646
+ "33" => "Banten",
1647
+ "34" => "Gorontalo",
1648
+ "35" => "Kepulauan Bangka Belitung",
1649
+ "36" => "Papua",
1650
+ "37" => "Riau",
1651
+ "38" => "Sulawesi Selatan",
1652
+ "39" => "Irian Jaya Barat",
1653
+ "40" => "Kepulauan Riau",
1654
+ "41" => "Sulawesi Barat"),
1655
+ "IE" => array(
1656
+ "01" => "Carlow",
1657
+ "02" => "Cavan",
1658
+ "03" => "Clare",
1659
+ "04" => "Cork",
1660
+ "06" => "Donegal",
1661
+ "07" => "Dublin",
1662
+ "10" => "Galway",
1663
+ "11" => "Kerry",
1664
+ "12" => "Kildare",
1665
+ "13" => "Kilkenny",
1666
+ "14" => "Leitrim",
1667
+ "15" => "Laois",
1668
+ "16" => "Limerick",
1669
+ "18" => "Longford",
1670
+ "19" => "Louth",
1671
+ "20" => "Mayo",
1672
+ "21" => "Meath",
1673
+ "22" => "Monaghan",
1674
+ "23" => "Offaly",
1675
+ "24" => "Roscommon",
1676
+ "25" => "Sligo",
1677
+ "26" => "Tipperary",
1678
+ "27" => "Waterford",
1679
+ "29" => "Westmeath",
1680
+ "30" => "Wexford",
1681
+ "31" => "Wicklow"),
1682
+ "IL" => array(
1683
+ "01" => "HaDarom",
1684
+ "02" => "HaMerkaz",
1685
+ "03" => "HaZafon",
1686
+ "04" => "Hefa",
1687
+ "05" => "Tel Aviv",
1688
+ "06" => "Yerushalayim"),
1689
+ "IN" => array(
1690
+ "01" => "Andaman and Nicobar Islands",
1691
+ "02" => "Andhra Pradesh",
1692
+ "03" => "Assam",
1693
+ "05" => "Chandigarh",
1694
+ "06" => "Dadra and Nagar Haveli",
1695
+ "07" => "Delhi",
1696
+ "09" => "Gujarat",
1697
+ "10" => "Haryana",
1698
+ "11" => "Himachal Pradesh",
1699
+ "12" => "Jammu and Kashmir",
1700
+ "13" => "Kerala",
1701
+ "14" => "Lakshadweep",
1702
+ "16" => "Maharashtra",
1703
+ "17" => "Manipur",
1704
+ "18" => "Meghalaya",
1705
+ "19" => "Karnataka",
1706
+ "20" => "Nagaland",
1707
+ "21" => "Orissa",
1708
+ "22" => "Puducherry",
1709
+ "23" => "Punjab",
1710
+ "24" => "Rajasthan",
1711
+ "25" => "Tamil Nadu",
1712
+ "26" => "Tripura",
1713
+ "28" => "West Bengal",
1714
+ "29" => "Sikkim",
1715
+ "30" => "Arunachal Pradesh",
1716
+ "31" => "Mizoram",
1717
+ "32" => "Daman and Diu",
1718
+ "33" => "Goa",
1719
+ "34" => "Bihar",
1720
+ "35" => "Madhya Pradesh",
1721
+ "36" => "Uttar Pradesh",
1722
+ "37" => "Chhattisgarh",
1723
+ "38" => "Jharkhand",
1724
+ "39" => "Uttarakhand"),
1725
+ "IQ" => array(
1726
+ "01" => "Al Anbar",
1727
+ "02" => "Al Basrah",
1728
+ "03" => "Al Muthanna",
1729
+ "04" => "Al Qadisiyah",
1730
+ "05" => "As Sulaymaniyah",
1731
+ "06" => "Babil",
1732
+ "07" => "Baghdad",
1733
+ "08" => "Dahuk",
1734
+ "09" => "Dhi Qar",
1735
+ "10" => "Diyala",
1736
+ "11" => "Arbil",
1737
+ "12" => "Karbala'",
1738
+ "13" => "At Ta'mim",
1739
+ "14" => "Maysan",
1740
+ "15" => "Ninawa",
1741
+ "16" => "Wasit",
1742
+ "17" => "An Najaf",
1743
+ "18" => "Salah ad Din"),
1744
+ "IR" => array(
1745
+ "01" => "Azarbayjan-e Bakhtari",
1746
+ "03" => "Chahar Mahall va Bakhtiari",
1747
+ "04" => "Sistan va Baluchestan",
1748
+ "05" => "Kohkiluyeh va Buyer Ahmadi",
1749
+ "07" => "Fars",
1750
+ "08" => "Gilan",
1751
+ "09" => "Hamadan",
1752
+ "10" => "Ilam",
1753
+ "11" => "Hormozgan",
1754
+ "12" => "Kerman",
1755
+ "13" => "Bakhtaran",
1756
+ "15" => "Khuzestan",
1757
+ "16" => "Kordestan",
1758
+ "17" => "Mazandaran",
1759
+ "18" => "Semnan Province",
1760
+ "19" => "Markazi",
1761
+ "21" => "Zanjan",
1762
+ "22" => "Bushehr",
1763
+ "23" => "Lorestan",
1764
+ "24" => "Markazi",
1765
+ "25" => "Semnan",
1766
+ "26" => "Tehran",
1767
+ "27" => "Zanjan",
1768
+ "28" => "Esfahan",
1769
+ "29" => "Kerman",
1770
+ "30" => "Khorasan",
1771
+ "31" => "Yazd",
1772
+ "32" => "Ardabil",
1773
+ "33" => "East Azarbaijan",
1774
+ "34" => "Markazi",
1775
+ "35" => "Mazandaran",
1776
+ "36" => "Zanjan",
1777
+ "37" => "Golestan",
1778
+ "38" => "Qazvin",
1779
+ "39" => "Qom",
1780
+ "40" => "Yazd",
1781
+ "41" => "Khorasan-e Janubi",
1782
+ "42" => "Khorasan-e Razavi",
1783
+ "43" => "Khorasan-e Shemali",
1784
+ "44" => "Alborz"),
1785
+ "IS" => array(
1786
+ "03" => "Arnessysla",
1787
+ "05" => "Austur-Hunavatnssysla",
1788
+ "06" => "Austur-Skaftafellssysla",
1789
+ "07" => "Borgarfjardarsysla",
1790
+ "09" => "Eyjafjardarsysla",
1791
+ "10" => "Gullbringusysla",
1792
+ "15" => "Kjosarsysla",
1793
+ "17" => "Myrasysla",
1794
+ "20" => "Nordur-Mulasysla",
1795
+ "21" => "Nordur-Tingeyjarsysla",
1796
+ "23" => "Rangarvallasysla",
1797
+ "28" => "Skagafjardarsysla",
1798
+ "29" => "Snafellsnes- og Hnappadalssysla",
1799
+ "30" => "Strandasysla",
1800
+ "31" => "Sudur-Mulasysla",
1801
+ "32" => "Sudur-Tingeyjarsysla",
1802
+ "34" => "Vestur-Bardastrandarsysla",
1803
+ "35" => "Vestur-Hunavatnssysla",
1804
+ "36" => "Vestur-Isafjardarsysla",
1805
+ "37" => "Vestur-Skaftafellssysla",
1806
+ "38" => "Austurland",
1807
+ "39" => "Hofuoborgarsvaoio",
1808
+ "40" => "Norourland Eystra",
1809
+ "41" => "Norourland Vestra",
1810
+ "42" => "Suourland",
1811
+ "43" => "Suournes",
1812
+ "44" => "Vestfiroir",
1813
+ "45" => "Vesturland"),
1814
+ "IT" => array(
1815
+ "01" => "Abruzzi",
1816
+ "02" => "Basilicata",
1817
+ "03" => "Calabria",
1818
+ "04" => "Campania",
1819
+ "05" => "Emilia-Romagna",
1820
+ "06" => "Friuli-Venezia Giulia",
1821
+ "07" => "Lazio",
1822
+ "08" => "Liguria",
1823
+ "09" => "Lombardia",
1824
+ "10" => "Marche",
1825
+ "11" => "Molise",
1826
+ "12" => "Piemonte",
1827
+ "13" => "Puglia",
1828
+ "14" => "Sardegna",
1829
+ "15" => "Sicilia",
1830
+ "16" => "Toscana",
1831
+ "17" => "Trentino-Alto Adige",
1832
+ "18" => "Umbria",
1833
+ "19" => "Valle d'Aosta",
1834
+ "20" => "Veneto"),
1835
+ "JM" => array(
1836
+ "01" => "Clarendon",
1837
+ "02" => "Hanover",
1838
+ "04" => "Manchester",
1839
+ "07" => "Portland",
1840
+ "08" => "Saint Andrew",
1841
+ "09" => "Saint Ann",
1842
+ "10" => "Saint Catherine",
1843
+ "11" => "Saint Elizabeth",
1844
+ "12" => "Saint James",
1845
+ "13" => "Saint Mary",
1846
+ "14" => "Saint Thomas",
1847
+ "15" => "Trelawny",
1848
+ "16" => "Westmoreland",
1849
+ "17" => "Kingston"),
1850
+ "JO" => array(
1851
+ "02" => "Al Balqa'",
1852
+ "09" => "Al Karak",
1853
+ "12" => "At Tafilah",
1854
+ "15" => "Al Mafraq",
1855
+ "16" => "Amman",
1856
+ "17" => "Az Zaraqa",
1857
+ "18" => "Irbid",
1858
+ "19" => "Ma'an",
1859
+ "20" => "Ajlun",
1860
+ "21" => "Al Aqabah",
1861
+ "22" => "Jarash",
1862
+ "23" => "Madaba"),
1863
+ "JP" => array(
1864
+ "01" => "Aichi",
1865
+ "02" => "Akita",
1866
+ "03" => "Aomori",
1867
+ "04" => "Chiba",
1868
+ "05" => "Ehime",
1869
+ "06" => "Fukui",
1870
+ "07" => "Fukuoka",
1871
+ "08" => "Fukushima",
1872
+ "09" => "Gifu",
1873
+ "10" => "Gumma",
1874
+ "11" => "Hiroshima",
1875
+ "12" => "Hokkaido",
1876
+ "13" => "Hyogo",
1877
+ "14" => "Ibaraki",
1878
+ "15" => "Ishikawa",
1879
+ "16" => "Iwate",
1880
+ "17" => "Kagawa",
1881
+ "18" => "Kagoshima",
1882
+ "19" => "Kanagawa",
1883
+ "20" => "Kochi",
1884
+ "21" => "Kumamoto",
1885
+ "22" => "Kyoto",
1886
+ "23" => "Mie",
1887
+ "24" => "Miyagi",
1888
+ "25" => "Miyazaki",
1889
+ "26" => "Nagano",
1890
+ "27" => "Nagasaki",
1891
+ "28" => "Nara",
1892
+ "29" => "Niigata",
1893
+ "30" => "Oita",
1894
+ "31" => "Okayama",
1895
+ "32" => "Osaka",
1896
+ "33" => "Saga",
1897
+ "34" => "Saitama",
1898
+ "35" => "Shiga",
1899
+ "36" => "Shimane",
1900
+ "37" => "Shizuoka",
1901
+ "38" => "Tochigi",
1902
+ "39" => "Tokushima",
1903
+ "40" => "Tokyo",
1904
+ "41" => "Tottori",
1905
+ "42" => "Toyama",
1906
+ "43" => "Wakayama",
1907
+ "44" => "Yamagata",
1908
+ "45" => "Yamaguchi",
1909
+ "46" => "Yamanashi",
1910
+ "47" => "Okinawa"),
1911
+ "KE" => array(
1912
+ "01" => "Central",
1913
+ "02" => "Coast",
1914
+ "03" => "Eastern",
1915
+ "05" => "Nairobi Area",
1916
+ "06" => "North-Eastern",
1917
+ "07" => "Nyanza",
1918
+ "08" => "Rift Valley",
1919
+ "09" => "Western"),
1920
+ "KG" => array(
1921
+ "01" => "Bishkek",
1922
+ "02" => "Chuy",
1923
+ "03" => "Jalal-Abad",
1924
+ "04" => "Naryn",
1925
+ "05" => "Osh",
1926
+ "06" => "Talas",
1927
+ "07" => "Ysyk-Kol",
1928
+ "08" => "Osh",
1929
+ "09" => "Batken"),
1930
+ "KH" => array(
1931
+ "01" => "Batdambang",
1932
+ "02" => "Kampong Cham",
1933
+ "03" => "Kampong Chhnang",
1934
+ "04" => "Kampong Speu",
1935
+ "05" => "Kampong Thum",
1936
+ "06" => "Kampot",
1937
+ "07" => "Kandal",
1938
+ "08" => "Koh Kong",
1939
+ "09" => "Kracheh",
1940
+ "10" => "Mondulkiri",
1941
+ "11" => "Phnum Penh",
1942
+ "12" => "Pursat",
1943
+ "13" => "Preah Vihear",
1944
+ "14" => "Prey Veng",
1945
+ "15" => "Ratanakiri Kiri",
1946
+ "16" => "Siem Reap",
1947
+ "17" => "Stung Treng",
1948
+ "18" => "Svay Rieng",
1949
+ "19" => "Takeo",
1950
+ "25" => "Banteay Meanchey",
1951
+ "29" => "Batdambang",
1952
+ "30" => "Pailin"),
1953
+ "KI" => array(
1954
+ "01" => "Gilbert Islands",
1955
+ "02" => "Line Islands",
1956
+ "03" => "Phoenix Islands"),
1957
+ "KM" => array(
1958
+ "01" => "Anjouan",
1959
+ "02" => "Grande Comore",
1960
+ "03" => "Moheli"),
1961
+ "KN" => array(
1962
+ "01" => "Christ Church Nichola Town",
1963
+ "02" => "Saint Anne Sandy Point",
1964
+ "03" => "Saint George Basseterre",
1965
+ "04" => "Saint George Gingerland",
1966
+ "05" => "Saint James Windward",
1967
+ "06" => "Saint John Capisterre",
1968
+ "07" => "Saint John Figtree",
1969
+ "08" => "Saint Mary Cayon",
1970
+ "09" => "Saint Paul Capisterre",
1971
+ "10" => "Saint Paul Charlestown",
1972
+ "11" => "Saint Peter Basseterre",
1973
+ "12" => "Saint Thomas Lowland",
1974
+ "13" => "Saint Thomas Middle Island",
1975
+ "15" => "Trinity Palmetto Point"),
1976
+ "KP" => array(
1977
+ "01" => "Chagang-do",
1978
+ "03" => "Hamgyong-namdo",
1979
+ "06" => "Hwanghae-namdo",
1980
+ "07" => "Hwanghae-bukto",
1981
+ "08" => "Kaesong-si",
1982
+ "09" => "Kangwon-do",
1983
+ "11" => "P'yongan-bukto",
1984
+ "12" => "P'yongyang-si",
1985
+ "13" => "Yanggang-do",
1986
+ "14" => "Namp'o-si",
1987
+ "15" => "P'yongan-namdo",
1988
+ "17" => "Hamgyong-bukto",
1989
+ "18" => "Najin Sonbong-si"),
1990
+ "KR" => array(
1991
+ "01" => "Cheju-do",
1992
+ "03" => "Cholla-bukto",
1993
+ "05" => "Ch'ungch'ong-bukto",
1994
+ "06" => "Kangwon-do",
1995
+ "10" => "Pusan-jikhalsi",
1996
+ "11" => "Seoul-t'ukpyolsi",
1997
+ "12" => "Inch'on-jikhalsi",
1998
+ "13" => "Kyonggi-do",
1999
+ "14" => "Kyongsang-bukto",
2000
+ "15" => "Taegu-jikhalsi",
2001
+ "16" => "Cholla-namdo",
2002
+ "17" => "Ch'ungch'ong-namdo",
2003
+ "18" => "Kwangju-jikhalsi",
2004
+ "19" => "Taejon-jikhalsi",
2005
+ "20" => "Kyongsang-namdo",
2006
+ "21" => "Ulsan-gwangyoksi"),
2007
+ "KW" => array(
2008
+ "01" => "Al Ahmadi",
2009
+ "02" => "Al Kuwayt",
2010
+ "05" => "Al Jahra",
2011
+ "07" => "Al Farwaniyah",
2012
+ "08" => "Hawalli",
2013
+ "09" => "Mubarak al Kabir"),
2014
+ "KY" => array(
2015
+ "01" => "Creek",
2016
+ "02" => "Eastern",
2017
+ "03" => "Midland",
2018
+ "04" => "South Town",
2019
+ "05" => "Spot Bay",
2020
+ "06" => "Stake Bay",
2021
+ "07" => "West End",
2022
+ "08" => "Western"),
2023
+ "KZ" => array(
2024
+ "01" => "Almaty",
2025
+ "02" => "Almaty City",
2026
+ "03" => "Aqmola",
2027
+ "04" => "Aqtobe",
2028
+ "05" => "Astana",
2029
+ "06" => "Atyrau",
2030
+ "07" => "West Kazakhstan",
2031
+ "08" => "Bayqonyr",
2032
+ "09" => "Mangghystau",
2033
+ "10" => "South Kazakhstan",
2034
+ "11" => "Pavlodar",
2035
+ "12" => "Qaraghandy",
2036
+ "13" => "Qostanay",
2037
+ "14" => "Qyzylorda",
2038
+ "15" => "East Kazakhstan",
2039
+ "16" => "North Kazakhstan",
2040
+ "17" => "Zhambyl"),
2041
+ "LA" => array(
2042
+ "01" => "Attapu",
2043
+ "02" => "Champasak",
2044
+ "03" => "Houaphan",
2045
+ "04" => "Khammouan",
2046
+ "05" => "Louang Namtha",
2047
+ "07" => "Oudomxai",
2048
+ "08" => "Phongsali",
2049
+ "09" => "Saravan",
2050
+ "10" => "Savannakhet",
2051
+ "11" => "Vientiane",
2052
+ "13" => "Xaignabouri",
2053
+ "14" => "Xiangkhoang",
2054
+ "17" => "Louangphrabang"),
2055
+ "LB" => array(
2056
+ "01" => "Beqaa",
2057
+ "02" => "Al Janub",
2058
+ "03" => "Liban-Nord",
2059
+ "04" => "Beyrouth",
2060
+ "05" => "Mont-Liban",
2061
+ "06" => "Liban-Sud",
2062
+ "07" => "Nabatiye",
2063
+ "08" => "Beqaa",
2064
+ "09" => "Liban-Nord",
2065
+ "10" => "Aakk,r",
2066
+ "11" => "Baalbek-Hermel"),
2067
+ "LC" => array(
2068
+ "01" => "Anse-la-Raye",
2069
+ "02" => "Dauphin",
2070
+ "03" => "Castries",
2071
+ "04" => "Choiseul",
2072
+ "05" => "Dennery",
2073
+ "06" => "Gros-Islet",
2074
+ "07" => "Laborie",
2075
+ "08" => "Micoud",
2076
+ "09" => "Soufriere",
2077
+ "10" => "Vieux-Fort",
2078
+ "11" => "Praslin"),
2079
+ "LI" => array(
2080
+ "01" => "Balzers",
2081
+ "02" => "Eschen",
2082
+ "03" => "Gamprin",
2083
+ "04" => "Mauren",
2084
+ "05" => "Planken",
2085
+ "06" => "Ruggell",
2086
+ "07" => "Schaan",
2087
+ "08" => "Schellenberg",
2088
+ "09" => "Triesen",
2089
+ "10" => "Triesenberg",
2090
+ "11" => "Vaduz",
2091
+ "21" => "Gbarpolu",
2092
+ "22" => "River Gee"),
2093
+ "LK" => array(
2094
+ "29" => "Central",
2095
+ "30" => "North Central",
2096
+ "32" => "North Western",
2097
+ "33" => "Sabaragamuwa",
2098
+ "34" => "Southern",
2099
+ "35" => "Uva",
2100
+ "36" => "Western",
2101
+ "37" => "Eastern",
2102
+ "38" => "Northern"),
2103
+ "LR" => array(
2104
+ "01" => "Bong",
2105
+ "04" => "Grand Cape Mount",
2106
+ "05" => "Lofa",
2107
+ "06" => "Maryland",
2108
+ "07" => "Monrovia",
2109
+ "09" => "Nimba",
2110
+ "10" => "Sino",
2111
+ "11" => "Grand Bassa",
2112
+ "12" => "Grand Cape Mount",
2113
+ "13" => "Maryland",
2114
+ "14" => "Montserrado",
2115
+ "17" => "Margibi",
2116
+ "18" => "River Cess",
2117
+ "19" => "Grand Gedeh",
2118
+ "20" => "Lofa",
2119
+ "21" => "Gbarpolu",
2120
+ "22" => "River Gee"),
2121
+ "LS" => array(
2122
+ "10" => "Berea",
2123
+ "11" => "Butha-Buthe",
2124
+ "12" => "Leribe",
2125
+ "13" => "Mafeteng",
2126
+ "14" => "Maseru",
2127
+ "15" => "Mohales Hoek",
2128
+ "16" => "Mokhotlong",
2129
+ "17" => "Qachas Nek",
2130
+ "18" => "Quthing",
2131
+ "19" => "Thaba-Tseka"),
2132
+ "LT" => array(
2133
+ "56" => "Alytaus Apskritis",
2134
+ "57" => "Kauno Apskritis",
2135
+ "58" => "Klaipedos Apskritis",
2136
+ "59" => "Marijampoles Apskritis",
2137
+ "60" => "Panevezio Apskritis",
2138
+ "61" => "Siauliu Apskritis",
2139
+ "62" => "Taurages Apskritis",
2140
+ "63" => "Telsiu Apskritis",
2141
+ "64" => "Utenos Apskritis",
2142
+ "65" => "Vilniaus Apskritis"),
2143
+ "LU" => array(
2144
+ "01" => "Diekirch",
2145
+ "02" => "Grevenmacher",
2146
+ "03" => "Luxembourg"),
2147
+ "LV" => array(
2148
+ "01" => "Aizkraukles",
2149
+ "02" => "Aluksnes",
2150
+ "03" => "Balvu",
2151
+ "04" => "Bauskas",
2152
+ "05" => "Cesu",
2153
+ "06" => "Daugavpils",
2154
+ "07" => "Daugavpils",
2155
+ "08" => "Dobeles",
2156
+ "09" => "Gulbenes",
2157
+ "10" => "Jekabpils",
2158
+ "11" => "Jelgava",
2159
+ "12" => "Jelgavas",
2160
+ "13" => "Jurmala",
2161
+ "14" => "Kraslavas",
2162
+ "15" => "Kuldigas",
2163
+ "16" => "Liepaja",
2164
+ "17" => "Liepajas",
2165
+ "18" => "Limbazu",
2166
+ "19" => "Ludzas",
2167
+ "20" => "Madonas",
2168
+ "21" => "Ogres",
2169
+ "22" => "Preilu",
2170
+ "23" => "Rezekne",
2171
+ "24" => "Rezeknes",
2172
+ "25" => "Riga",
2173
+ "26" => "Rigas",
2174
+ "27" => "Saldus",
2175
+ "28" => "Talsu",
2176
+ "29" => "Tukuma",
2177
+ "30" => "Valkas",
2178
+ "31" => "Valmieras",
2179
+ "32" => "Ventspils",
2180
+ "33" => "Ventspils"),
2181
+ "LY" => array(
2182
+ "03" => "Al Aziziyah",
2183
+ "05" => "Al Jufrah",
2184
+ "08" => "Al Kufrah",
2185
+ "13" => "Ash Shati'",
2186
+ "30" => "Murzuq",
2187
+ "34" => "Sabha",
2188
+ "41" => "Tarhunah",
2189
+ "42" => "Tubruq",
2190
+ "45" => "Zlitan",
2191
+ "47" => "Ajdabiya",
2192
+ "48" => "Al Fatih",
2193
+ "49" => "Al Jabal al Akhdar",
2194
+ "50" => "Al Khums",
2195
+ "51" => "An Nuqat al Khams",
2196
+ "52" => "Awbari",
2197
+ "53" => "Az Zawiyah",
2198
+ "54" => "Banghazi",
2199
+ "55" => "Darnah",
2200
+ "56" => "Ghadamis",
2201
+ "57" => "Gharyan",
2202
+ "58" => "Misratah",
2203
+ "59" => "Sawfajjin",
2204
+ "60" => "Surt",
2205
+ "61" => "Tarabulus",
2206
+ "62" => "Yafran"),
2207
+ "MA" => array(
2208
+ "45" => "Grand Casablanca",
2209
+ "46" => "Fes-Boulemane",
2210
+ "47" => "Marrakech-Tensift-Al Haouz",
2211
+ "48" => "Meknes-Tafilalet",
2212
+ "49" => "Rabat-Sale-Zemmour-Zaer",
2213
+ "50" => "Chaouia-Ouardigha",
2214
+ "51" => "Doukkala-Abda",
2215
+ "52" => "Gharb-Chrarda-Beni Hssen",
2216
+ "53" => "Guelmim-Es Smara",
2217
+ "54" => "Oriental",
2218
+ "55" => "Souss-Massa-Dr,a",
2219
+ "56" => "Tadla-Azilal",
2220
+ "57" => "Tanger-Tetouan",
2221
+ "58" => "Taza-Al Hoceima-Taounate",
2222
+ "59" => "La,youne-Boujdour-Sakia El Hamra"),
2223
+ "MC" => array(
2224
+ "01" => "La Condamine",
2225
+ "02" => "Monaco",
2226
+ "03" => "Monte-Carlo"),
2227
+ "MD" => array(
2228
+ "51" => "Gagauzia",
2229
+ "57" => "Chisinau",
2230
+ "58" => "Stinga Nistrului",
2231
+ "59" => "Anenii Noi",
2232
+ "60" => "Balti",
2233
+ "61" => "Basarabeasca",
2234
+ "62" => "Bender",
2235
+ "63" => "Briceni",
2236
+ "64" => "Cahul",
2237
+ "65" => "Cantemir",
2238
+ "66" => "Calarasi",
2239
+ "67" => "Causeni",
2240
+ "68" => "Cimislia",
2241
+ "69" => "Criuleni",
2242
+ "70" => "Donduseni",
2243
+ "71" => "Drochia",
2244
+ "72" => "Dubasari",
2245
+ "73" => "Edinet",
2246
+ "74" => "Falesti",
2247
+ "75" => "Floresti",
2248
+ "76" => "Glodeni",
2249
+ "77" => "Hincesti",
2250
+ "78" => "Ialoveni",
2251
+ "79" => "Leova",
2252
+ "80" => "Nisporeni",
2253
+ "81" => "Ocnita",
2254
+ "82" => "Orhei",
2255
+ "83" => "Rezina",
2256
+ "84" => "Riscani",
2257
+ "85" => "Singerei",
2258
+ "86" => "Soldanesti",
2259
+ "87" => "Soroca",
2260
+ "88" => "Stefan-Voda",
2261
+ "89" => "Straseni",
2262
+ "90" => "Taraclia",
2263
+ "91" => "Telenesti",
2264
+ "92" => "Ungheni"),
2265
+ "MG" => array(
2266
+ "01" => "Antsiranana",
2267
+ "02" => "Fianarantsoa",
2268
+ "03" => "Mahajanga",
2269
+ "04" => "Toamasina",
2270
+ "05" => "Antananarivo",
2271
+ "06" => "Toliara"),
2272
+ "MK" => array(
2273
+ "01" => "Aracinovo",
2274
+ "02" => "Bac",
2275
+ "03" => "Belcista",
2276
+ "04" => "Berovo",
2277
+ "05" => "Bistrica",
2278
+ "06" => "Bitola",
2279
+ "07" => "Blatec",
2280
+ "08" => "Bogdanci",
2281
+ "09" => "Bogomila",
2282
+ "10" => "Bogovinje",
2283
+ "11" => "Bosilovo",
2284
+ "12" => "Brvenica",
2285
+ "13" => "Cair",
2286
+ "14" => "Capari",
2287
+ "15" => "Caska",
2288
+ "16" => "Cegrane",
2289
+ "17" => "Centar",
2290
+ "18" => "Centar Zupa",
2291
+ "19" => "Cesinovo",
2292
+ "20" => "Cucer-Sandevo",
2293
+ "21" => "Debar",
2294
+ "22" => "Delcevo",
2295
+ "23" => "Delogozdi",
2296
+ "24" => "Demir Hisar",
2297
+ "25" => "Demir Kapija",
2298
+ "26" => "Dobrusevo",
2299
+ "27" => "Dolna Banjica",
2300
+ "28" => "Dolneni",
2301
+ "29" => "Dorce Petrov",
2302
+ "30" => "Drugovo",
2303
+ "31" => "Dzepciste",
2304
+ "32" => "Gazi Baba",
2305
+ "33" => "Gevgelija",
2306
+ "34" => "Gostivar",
2307
+ "35" => "Gradsko",
2308
+ "36" => "Ilinden",
2309
+ "37" => "Izvor",
2310
+ "38" => "Jegunovce",
2311
+ "39" => "Kamenjane",
2312
+ "40" => "Karbinci",
2313
+ "41" => "Karpos",
2314
+ "42" => "Kavadarci",
2315
+ "43" => "Kicevo",
2316
+ "44" => "Kisela Voda",
2317
+ "45" => "Klecevce",
2318
+ "46" => "Kocani",
2319
+ "47" => "Konce",
2320
+ "48" => "Kondovo",
2321
+ "49" => "Konopiste",
2322
+ "50" => "Kosel",
2323
+ "51" => "Kratovo",
2324
+ "52" => "Kriva Palanka",
2325
+ "53" => "Krivogastani",
2326
+ "54" => "Krusevo",
2327
+ "55" => "Kuklis",
2328
+ "56" => "Kukurecani",
2329
+ "57" => "Kumanovo",
2330
+ "58" => "Labunista",
2331
+ "59" => "Lipkovo",
2332
+ "60" => "Lozovo",
2333
+ "61" => "Lukovo",
2334
+ "62" => "Makedonska Kamenica",
2335
+ "63" => "Makedonski Brod",
2336
+ "64" => "Mavrovi Anovi",
2337
+ "65" => "Meseista",
2338
+ "66" => "Miravci",
2339
+ "67" => "Mogila",
2340
+ "68" => "Murtino",
2341
+ "69" => "Negotino",
2342
+ "70" => "Negotino-Polosko",
2343
+ "71" => "Novaci",
2344
+ "72" => "Novo Selo",
2345
+ "73" => "Oblesevo",
2346
+ "74" => "Ohrid",
2347
+ "75" => "Orasac",
2348
+ "76" => "Orizari",
2349
+ "77" => "Oslomej",
2350
+ "78" => "Pehcevo",
2351
+ "79" => "Petrovec",
2352
+ "80" => "Plasnica",
2353
+ "81" => "Podares",
2354
+ "82" => "Prilep",
2355
+ "83" => "Probistip",
2356
+ "84" => "Radovis",
2357
+ "85" => "Rankovce",
2358
+ "86" => "Resen",
2359
+ "87" => "Rosoman",
2360
+ "88" => "Rostusa",
2361
+ "89" => "Samokov",
2362
+ "90" => "Saraj",
2363
+ "91" => "Sipkovica",
2364
+ "92" => "Sopiste",
2365
+ "93" => "Sopotnica",
2366
+ "94" => "Srbinovo",
2367
+ "95" => "Staravina",
2368
+ "96" => "Star Dojran",
2369
+ "97" => "Staro Nagoricane",
2370
+ "98" => "Stip",
2371
+ "99" => "Struga",
2372
+ "A1" => "Strumica",
2373
+ "A2" => "Studenicani",
2374
+ "A3" => "Suto Orizari",
2375
+ "A4" => "Sveti Nikole",
2376
+ "A5" => "Tearce",
2377
+ "A6" => "Tetovo",
2378
+ "A7" => "Topolcani",
2379
+ "A8" => "Valandovo",
2380
+ "A9" => "Vasilevo",
2381
+ "B1" => "Veles",
2382
+ "B2" => "Velesta",
2383
+ "B3" => "Vevcani",
2384
+ "B4" => "Vinica",
2385
+ "B5" => "Vitoliste",
2386
+ "B6" => "Vranestica",
2387
+ "B7" => "Vrapciste",
2388
+ "B8" => "Vratnica",
2389
+ "B9" => "Vrutok",
2390
+ "C1" => "Zajas",
2391
+ "C2" => "Zelenikovo",
2392
+ "C3" => "Zelino",
2393
+ "C4" => "Zitose",
2394
+ "C5" => "Zletovo",
2395
+ "C6" => "Zrnovci"),
2396
+ "ML" => array(
2397
+ "01" => "Bamako",
2398
+ "03" => "Kayes",
2399
+ "04" => "Mopti",
2400
+ "05" => "Segou",
2401
+ "06" => "Sikasso",
2402
+ "07" => "Koulikoro",
2403
+ "08" => "Tombouctou",
2404
+ "09" => "Gao",
2405
+ "10" => "Kidal"),
2406
+ "MM" => array(
2407
+ "01" => "Rakhine State",
2408
+ "02" => "Chin State",
2409
+ "03" => "Irrawaddy",
2410
+ "04" => "Kachin State",
2411
+ "05" => "Karan State",
2412
+ "06" => "Kayah State",
2413
+ "07" => "Magwe",
2414
+ "08" => "Mandalay",
2415
+ "09" => "Pegu",
2416
+ "10" => "Sagaing",
2417
+ "11" => "Shan State",
2418
+ "12" => "Tenasserim",
2419
+ "13" => "Mon State",
2420
+ "14" => "Rangoon",
2421
+ "17" => "Yangon"),
2422
+ "MN" => array(
2423
+ "01" => "Arhangay",
2424
+ "02" => "Bayanhongor",
2425
+ "03" => "Bayan-Olgiy",
2426
+ "05" => "Darhan",
2427
+ "06" => "Dornod",
2428
+ "07" => "Dornogovi",
2429
+ "08" => "Dundgovi",
2430
+ "09" => "Dzavhan",
2431
+ "10" => "Govi-Altay",
2432
+ "11" => "Hentiy",
2433
+ "12" => "Hovd",
2434
+ "13" => "Hovsgol",
2435
+ "14" => "Omnogovi",
2436
+ "15" => "Ovorhangay",
2437
+ "16" => "Selenge",
2438
+ "17" => "Suhbaatar",
2439
+ "18" => "Tov",
2440
+ "19" => "Uvs",
2441
+ "20" => "Ulaanbaatar",
2442
+ "21" => "Bulgan",
2443
+ "22" => "Erdenet",
2444
+ "23" => "Darhan-Uul",
2445
+ "24" => "Govisumber",
2446
+ "25" => "Orhon"),
2447
+ "MO" => array(
2448
+ "01" => "Ilhas",
2449
+ "02" => "Macau"),
2450
+ "MR" => array(
2451
+ "01" => "Hodh Ech Chargui",
2452
+ "02" => "Hodh El Gharbi",
2453
+ "03" => "Assaba",
2454
+ "04" => "Gorgol",
2455
+ "05" => "Brakna",
2456
+ "06" => "Trarza",
2457
+ "07" => "Adrar",
2458
+ "08" => "Dakhlet Nouadhibou",
2459
+ "09" => "Tagant",
2460
+ "10" => "Guidimaka",
2461
+ "11" => "Tiris Zemmour",
2462
+ "12" => "Inchiri"),
2463
+ "MS" => array(
2464
+ "01" => "Saint Anthony",
2465
+ "02" => "Saint Georges",
2466
+ "03" => "Saint Peter"),
2467
+ "MU" => array(
2468
+ "12" => "Black River",
2469
+ "13" => "Flacq",
2470
+ "14" => "Grand Port",
2471
+ "15" => "Moka",
2472
+ "16" => "Pamplemousses",
2473
+ "17" => "Plaines Wilhems",
2474
+ "18" => "Port Louis",
2475
+ "19" => "Riviere du Rempart",
2476
+ "20" => "Savanne",
2477
+ "21" => "Agalega Islands",
2478
+ "22" => "Cargados Carajos",
2479
+ "23" => "Rodrigues"),
2480
+ "MV" => array(
2481
+ "01" => "Seenu",
2482
+ "05" => "Laamu",
2483
+ "30" => "Alifu",
2484
+ "31" => "Baa",
2485
+ "32" => "Dhaalu",
2486
+ "33" => "Faafu ",
2487
+ "34" => "Gaafu Alifu",
2488
+ "35" => "Gaafu Dhaalu",
2489
+ "36" => "Haa Alifu",
2490
+ "37" => "Haa Dhaalu",
2491
+ "38" => "Kaafu",
2492
+ "39" => "Lhaviyani",
2493
+ "40" => "Maale",
2494
+ "41" => "Meemu",
2495
+ "42" => "Gnaviyani",
2496
+ "43" => "Noonu",
2497
+ "44" => "Raa",
2498
+ "45" => "Shaviyani",
2499
+ "46" => "Thaa",
2500
+ "47" => "Vaavu"),
2501
+ "MW" => array(
2502
+ "02" => "Chikwawa",
2503
+ "03" => "Chiradzulu",
2504
+ "04" => "Chitipa",
2505
+ "05" => "Thyolo",
2506
+ "06" => "Dedza",
2507
+ "07" => "Dowa",
2508
+ "08" => "Karonga",
2509
+ "09" => "Kasungu",
2510
+ "11" => "Lilongwe",
2511
+ "12" => "Mangochi",
2512
+ "13" => "Mchinji",
2513
+ "15" => "Mzimba",
2514
+ "16" => "Ntcheu",
2515
+ "17" => "Nkhata Bay",
2516
+ "18" => "Nkhotakota",
2517
+ "19" => "Nsanje",
2518
+ "20" => "Ntchisi",
2519
+ "21" => "Rumphi",
2520
+ "22" => "Salima",
2521
+ "23" => "Zomba",
2522
+ "24" => "Blantyre",
2523
+ "25" => "Mwanza",
2524
+ "26" => "Balaka",
2525
+ "27" => "Likoma",
2526
+ "28" => "Machinga",
2527
+ "29" => "Mulanje",
2528
+ "30" => "Phalombe"),
2529
+ "MX" => array(
2530
+ "01" => "Aguascalientes",
2531
+ "02" => "Baja California",
2532
+ "03" => "Baja California Sur",
2533
+ "04" => "Campeche",
2534
+ "05" => "Chiapas",
2535
+ "06" => "Chihuahua",
2536
+ "07" => "Coahuila de Zaragoza",
2537
+ "08" => "Colima",
2538
+ "09" => "Distrito Federal",
2539
+ "10" => "Durango",
2540
+ "11" => "Guanajuato",
2541
+ "12" => "Guerrero",
2542
+ "13" => "Hidalgo",
2543
+ "14" => "Jalisco",
2544
+ "15" => "Mexico",
2545
+ "16" => "Michoacan de Ocampo",
2546
+ "17" => "Morelos",
2547
+ "18" => "Nayarit",
2548
+ "19" => "Nuevo Leon",
2549
+ "20" => "Oaxaca",
2550
+ "21" => "Puebla",
2551
+ "22" => "Queretaro de Arteaga",
2552
+ "23" => "Quintana Roo",
2553
+ "24" => "San Luis Potosi",
2554
+ "25" => "Sinaloa",
2555
+ "26" => "Sonora",
2556
+ "27" => "Tabasco",
2557
+ "28" => "Tamaulipas",
2558
+ "29" => "Tlaxcala",
2559
+ "30" => "Veracruz-Llave",
2560
+ "31" => "Yucatan",
2561
+ "32" => "Zacatecas"),
2562
+ "MY" => array(
2563
+ "01" => "Johor",
2564
+ "02" => "Kedah",
2565
+ "03" => "Kelantan",
2566
+ "04" => "Melaka",
2567
+ "05" => "Negeri Sembilan",
2568
+ "06" => "Pahang",
2569
+ "07" => "Perak",
2570
+ "08" => "Perlis",
2571
+ "09" => "Pulau Pinang",
2572
+ "11" => "Sarawak",
2573
+ "12" => "Selangor",
2574
+ "13" => "Terengganu",
2575
+ "14" => "Kuala Lumpur",
2576
+ "15" => "Labuan",
2577
+ "16" => "Sabah",
2578
+ "17" => "Putrajaya"),
2579
+ "MZ" => array(
2580
+ "01" => "Cabo Delgado",
2581
+ "02" => "Gaza",
2582
+ "03" => "Inhambane",
2583
+ "04" => "Maputo",
2584
+ "05" => "Sofala",
2585
+ "06" => "Nampula",
2586
+ "07" => "Niassa",
2587
+ "08" => "Tete",
2588
+ "09" => "Zambezia",
2589
+ "10" => "Manica",
2590
+ "11" => "Maputo"),
2591
+ "NA" => array(
2592
+ "01" => "Bethanien",
2593
+ "02" => "Caprivi Oos",
2594
+ "03" => "Boesmanland",
2595
+ "04" => "Gobabis",
2596
+ "05" => "Grootfontein",
2597
+ "06" => "Kaokoland",
2598
+ "07" => "Karibib",
2599
+ "08" => "Keetmanshoop",
2600
+ "09" => "Luderitz",
2601
+ "10" => "Maltahohe",
2602
+ "11" => "Okahandja",
2603
+ "12" => "Omaruru",
2604
+ "13" => "Otjiwarongo",
2605
+ "14" => "Outjo",
2606
+ "15" => "Owambo",
2607
+ "16" => "Rehoboth",
2608
+ "17" => "Swakopmund",
2609
+ "18" => "Tsumeb",
2610
+ "20" => "Karasburg",
2611
+ "21" => "Windhoek",
2612
+ "22" => "Damaraland",
2613
+ "23" => "Hereroland Oos",
2614
+ "24" => "Hereroland Wes",
2615
+ "25" => "Kavango",
2616
+ "26" => "Mariental",
2617
+ "27" => "Namaland",
2618
+ "28" => "Caprivi",
2619
+ "29" => "Erongo",
2620
+ "30" => "Hardap",
2621
+ "31" => "Karas",
2622
+ "32" => "Kunene",
2623
+ "33" => "Ohangwena",
2624
+ "34" => "Okavango",
2625
+ "35" => "Omaheke",
2626
+ "36" => "Omusati",
2627
+ "37" => "Oshana",
2628
+ "38" => "Oshikoto",
2629
+ "39" => "Otjozondjupa"),
2630
+ "NE" => array(
2631
+ "01" => "Agadez",
2632
+ "02" => "Diffa",
2633
+ "03" => "Dosso",
2634
+ "04" => "Maradi",
2635
+ "05" => "Niamey",
2636
+ "06" => "Tahoua",
2637
+ "07" => "Zinder",
2638
+ "08" => "Niamey"),
2639
+ "NG" => array(
2640
+ "05" => "Lagos",
2641
+ "11" => "Federal Capital Territory",
2642
+ "16" => "Ogun",
2643
+ "21" => "Akwa Ibom",
2644
+ "22" => "Cross River",
2645
+ "23" => "Kaduna",
2646
+ "24" => "Katsina",
2647
+ "25" => "Anambra",
2648
+ "26" => "Benue",
2649
+ "27" => "Borno",
2650
+ "28" => "Imo",
2651
+ "29" => "Kano",
2652
+ "30" => "Kwara",
2653
+ "31" => "Niger",
2654
+ "32" => "Oyo",
2655
+ "35" => "Adamawa",
2656
+ "36" => "Delta",
2657
+ "37" => "Edo",
2658
+ "39" => "Jigawa",
2659
+ "40" => "Kebbi",
2660
+ "41" => "Kogi",
2661
+ "42" => "Osun",
2662
+ "43" => "Taraba",
2663
+ "44" => "Yobe",
2664
+ "45" => "Abia",
2665
+ "46" => "Bauchi",
2666
+ "47" => "Enugu",
2667
+ "48" => "Ondo",
2668
+ "49" => "Plateau",
2669
+ "50" => "Rivers",
2670
+ "51" => "Sokoto",
2671
+ "52" => "Bayelsa",
2672
+ "53" => "Ebonyi",
2673
+ "54" => "Ekiti",
2674
+ "55" => "Gombe",
2675
+ "56" => "Nassarawa",
2676
+ "57" => "Zamfara"),
2677
+ "NI" => array(
2678
+ "01" => "Boaco",
2679
+ "02" => "Carazo",
2680
+ "03" => "Chinandega",
2681
+ "04" => "Chontales",
2682
+ "05" => "Esteli",
2683
+ "06" => "Granada",
2684
+ "07" => "Jinotega",
2685
+ "08" => "Leon",
2686
+ "09" => "Madriz",
2687
+ "10" => "Managua",
2688
+ "11" => "Masaya",
2689
+ "12" => "Matagalpa",
2690
+ "13" => "Nueva Segovia",
2691
+ "14" => "Rio San Juan",
2692
+ "15" => "Rivas",
2693
+ "16" => "Zelaya",
2694
+ "17" => "Autonoma Atlantico Norte",
2695
+ "18" => "Region Autonoma Atlantico Sur"),
2696
+ "NL" => array(
2697
+ "01" => "Drenthe",
2698
+ "02" => "Friesland",
2699
+ "03" => "Gelderland",
2700
+ "04" => "Groningen",
2701
+ "05" => "Limburg",
2702
+ "06" => "Noord-Brabant",
2703
+ "07" => "Noord-Holland",
2704
+ "09" => "Utrecht",
2705
+ "10" => "Zeeland",
2706
+ "11" => "Zuid-Holland",
2707
+ "15" => "Overijssel",
2708
+ "16" => "Flevoland"),
2709
+ "NO" => array(
2710
+ "01" => "Akershus",
2711
+ "02" => "Aust-Agder",
2712
+ "04" => "Buskerud",
2713
+ "05" => "Finnmark",
2714
+ "06" => "Hedmark",
2715
+ "07" => "Hordaland",
2716
+ "08" => "More og Romsdal",
2717
+ "09" => "Nordland",
2718
+ "10" => "Nord-Trondelag",
2719
+ "11" => "Oppland",
2720
+ "12" => "Oslo",
2721
+ "13" => "Ostfold",
2722
+ "14" => "Rogaland",
2723
+ "15" => "Sogn og Fjordane",
2724
+ "16" => "Sor-Trondelag",
2725
+ "17" => "Telemark",
2726
+ "18" => "Troms",
2727
+ "19" => "Vest-Agder",
2728
+ "20" => "Vestfold"),
2729
+ "NP" => array(
2730
+ "01" => "Bagmati",
2731
+ "02" => "Bheri",
2732
+ "03" => "Dhawalagiri",
2733
+ "04" => "Gandaki",
2734
+ "05" => "Janakpur",
2735
+ "06" => "Karnali",
2736
+ "07" => "Kosi",
2737
+ "08" => "Lumbini",
2738
+ "09" => "Mahakali",
2739
+ "10" => "Mechi",
2740
+ "11" => "Narayani",
2741
+ "12" => "Rapti",
2742
+ "13" => "Sagarmatha",
2743
+ "14" => "Seti"),
2744
+ "NR" => array(
2745
+ "01" => "Aiwo",
2746
+ "02" => "Anabar",
2747
+ "03" => "Anetan",
2748
+ "04" => "Anibare",
2749
+ "05" => "Baiti",
2750
+ "06" => "Boe",
2751
+ "07" => "Buada",
2752
+ "08" => "Denigomodu",
2753
+ "09" => "Ewa",
2754
+ "10" => "Ijuw",
2755
+ "11" => "Meneng",
2756
+ "12" => "Nibok",
2757
+ "13" => "Uaboe",
2758
+ "14" => "Yaren"),
2759
+ "NZ" => array(
2760
+ "10" => "Chatham Islands",
2761
+ "E7" => "Auckland",
2762
+ "E8" => "Bay of Plenty",
2763
+ "E9" => "Canterbury",
2764
+ "F1" => "Gisborne",
2765
+ "F2" => "Hawke's Bay",
2766
+ "F3" => "Manawatu-Wanganui",
2767
+ "F4" => "Marlborough",
2768
+ "F5" => "Nelson",
2769
+ "F6" => "Northland",
2770
+ "F7" => "Otago",
2771
+ "F8" => "Southland",
2772
+ "F9" => "Taranaki",
2773
+ "G1" => "Waikato",
2774
+ "G2" => "Wellington",
2775
+ "G3" => "West Coast"),
2776
+ "OM" => array(
2777
+ "01" => "Ad Dakhiliyah",
2778
+ "02" => "Al Batinah",
2779
+ "03" => "Al Wusta",
2780
+ "04" => "Ash Sharqiyah",
2781
+ "05" => "Az Zahirah",
2782
+ "06" => "Masqat",
2783
+ "07" => "Musandam",
2784
+ "08" => "Zufar"),
2785
+ "PA" => array(
2786
+ "01" => "Bocas del Toro",
2787
+ "02" => "Chiriqui",
2788
+ "03" => "Cocle",
2789
+ "04" => "Colon",
2790
+ "05" => "Darien",
2791
+ "06" => "Herrera",
2792
+ "07" => "Los Santos",
2793
+ "08" => "Panama",
2794
+ "09" => "San Blas",
2795
+ "10" => "Veraguas"),
2796
+ "PE" => array(
2797
+ "01" => "Amazonas",
2798
+ "02" => "Ancash",
2799
+ "03" => "Apurimac",
2800
+ "04" => "Arequipa",
2801
+ "05" => "Ayacucho",
2802
+ "06" => "Cajamarca",
2803
+ "07" => "Callao",
2804
+ "08" => "Cusco",
2805
+ "09" => "Huancavelica",
2806
+ "10" => "Huanuco",
2807
+ "11" => "Ica",
2808
+ "12" => "Junin",
2809
+ "13" => "La Libertad",
2810
+ "14" => "Lambayeque",
2811
+ "15" => "Lima",
2812
+ "16" => "Loreto",
2813
+ "17" => "Madre de Dios",
2814
+ "18" => "Moquegua",
2815
+ "19" => "Pasco",
2816
+ "20" => "Piura",
2817
+ "21" => "Puno",
2818
+ "22" => "San Martin",
2819
+ "23" => "Tacna",
2820
+ "24" => "Tumbes",
2821
+ "25" => "Ucayali"),
2822
+ "PG" => array(
2823
+ "01" => "Central",
2824
+ "02" => "Gulf",
2825
+ "03" => "Milne Bay",
2826
+ "04" => "Northern",
2827
+ "05" => "Southern Highlands",
2828
+ "06" => "Western",
2829
+ "07" => "North Solomons",
2830
+ "08" => "Chimbu",
2831
+ "09" => "Eastern Highlands",
2832
+ "10" => "East New Britain",
2833
+ "11" => "East Sepik",
2834
+ "12" => "Madang",
2835
+ "13" => "Manus",
2836
+ "14" => "Morobe",
2837
+ "15" => "New Ireland",
2838
+ "16" => "Western Highlands",
2839
+ "17" => "West New Britain",
2840
+ "18" => "Sandaun",
2841
+ "19" => "Enga",
2842
+ "20" => "National Capital"),
2843
+ "PH" => array(
2844
+ "01" => "Abra",
2845
+ "02" => "Agusan del Norte",
2846
+ "03" => "Agusan del Sur",
2847
+ "04" => "Aklan",
2848
+ "05" => "Albay",
2849
+ "06" => "Antique",
2850
+ "07" => "Bataan",
2851
+ "08" => "Batanes",
2852
+ "09" => "Batangas",
2853
+ "10" => "Benguet",
2854
+ "11" => "Bohol",
2855
+ "12" => "Bukidnon",
2856
+ "13" => "Bulacan",
2857
+ "14" => "Cagayan",
2858
+ "15" => "Camarines Norte",
2859
+ "16" => "Camarines Sur",
2860
+ "17" => "Camiguin",
2861
+ "18" => "Capiz",
2862
+ "19" => "Catanduanes",
2863
+ "20" => "Cavite",
2864
+ "21" => "Cebu",
2865
+ "22" => "Basilan",
2866
+ "23" => "Eastern Samar",
2867
+ "24" => "Davao",
2868
+ "25" => "Davao del Sur",
2869
+ "26" => "Davao Oriental",
2870
+ "27" => "Ifugao",
2871
+ "28" => "Ilocos Norte",
2872
+ "29" => "Ilocos Sur",
2873
+ "30" => "Iloilo",
2874
+ "31" => "Isabela",
2875
+ "32" => "Kalinga-Apayao",
2876
+ "33" => "Laguna",
2877
+ "34" => "Lanao del Norte",
2878
+ "35" => "Lanao del Sur",
2879
+ "36" => "La Union",
2880
+ "37" => "Leyte",
2881
+ "38" => "Marinduque",
2882
+ "39" => "Masbate",
2883
+ "40" => "Mindoro Occidental",
2884
+ "41" => "Mindoro Oriental",
2885
+ "42" => "Misamis Occidental",
2886
+ "43" => "Misamis Oriental",
2887
+ "44" => "Mountain",
2888
+ "45" => "Negros Occidental",
2889
+ "46" => "Negros Oriental",
2890
+ "47" => "Nueva Ecija",
2891
+ "48" => "Nueva Vizcaya",
2892
+ "49" => "Palawan",
2893
+ "50" => "Pampanga",
2894
+ "51" => "Pangasinan",
2895
+ "53" => "Rizal",
2896
+ "54" => "Romblon",
2897
+ "55" => "Samar",
2898
+ "56" => "Maguindanao",
2899
+ "57" => "North Cotabato",
2900
+ "58" => "Sorsogon",
2901
+ "59" => "Southern Leyte",
2902
+ "60" => "Sulu",
2903
+ "61" => "Surigao del Norte",
2904
+ "62" => "Surigao del Sur",
2905
+ "63" => "Tarlac",
2906
+ "64" => "Zambales",
2907
+ "65" => "Zamboanga del Norte",
2908
+ "66" => "Zamboanga del Sur",
2909
+ "67" => "Northern Samar",
2910
+ "68" => "Quirino",
2911
+ "69" => "Siquijor",
2912
+ "70" => "South Cotabato",
2913
+ "71" => "Sultan Kudarat",
2914
+ "72" => "Tawitawi",
2915
+ "A1" => "Angeles",
2916
+ "A2" => "Bacolod",
2917
+ "A3" => "Bago",
2918
+ "A4" => "Baguio",
2919
+ "A5" => "Bais",
2920
+ "A6" => "Basilan City",
2921
+ "A7" => "Batangas City",
2922
+ "A8" => "Butuan",
2923
+ "A9" => "Cabanatuan",
2924
+ "B1" => "Cadiz",
2925
+ "B2" => "Cagayan de Oro",
2926
+ "B3" => "Calbayog",
2927
+ "B4" => "Caloocan",
2928
+ "B5" => "Canlaon",
2929
+ "B6" => "Cavite City",
2930
+ "B7" => "Cebu City",
2931
+ "B8" => "Cotabato",
2932
+ "B9" => "Dagupan",
2933
+ "C1" => "Danao",
2934
+ "C2" => "Dapitan",
2935
+ "C3" => "Davao City",
2936
+ "C4" => "Dipolog",
2937
+ "C5" => "Dumaguete",
2938
+ "C6" => "General Santos",
2939
+ "C7" => "Gingoog",
2940
+ "C8" => "Iligan",
2941
+ "C9" => "Iloilo City",
2942
+ "D1" => "Iriga",
2943
+ "D2" => "La Carlota",
2944
+ "D3" => "Laoag",
2945
+ "D4" => "Lapu-Lapu",
2946
+ "D5" => "Legaspi",
2947
+ "D6" => "Lipa",
2948
+ "D7" => "Lucena",
2949
+ "D8" => "Mandaue",
2950
+ "D9" => "Manila",
2951
+ "E1" => "Marawi",
2952
+ "E2" => "Naga",
2953
+ "E3" => "Olongapo",
2954
+ "E4" => "Ormoc",
2955
+ "E5" => "Oroquieta",
2956
+ "E6" => "Ozamis",
2957
+ "E7" => "Pagadian",
2958
+ "E8" => "Palayan",
2959
+ "E9" => "Pasay",
2960
+ "F1" => "Puerto Princesa",
2961
+ "F2" => "Quezon City",
2962
+ "F3" => "Roxas",
2963
+ "F4" => "San Carlos",
2964
+ "F5" => "San Carlos",
2965
+ "F6" => "San Jose",
2966
+ "F7" => "San Pablo",
2967
+ "F8" => "Silay",
2968
+ "F9" => "Surigao",
2969
+ "G1" => "Tacloban",
2970
+ "G2" => "Tagaytay",
2971
+ "G3" => "Tagbilaran",
2972
+ "G4" => "Tangub",
2973
+ "G5" => "Toledo",
2974
+ "G6" => "Trece Martires",
2975
+ "G7" => "Zamboanga",
2976
+ "G8" => "Aurora",
2977
+ "H2" => "Quezon",
2978
+ "H3" => "Negros Occidental",
2979
+ "I6" => "Compostela Valley",
2980
+ "I7" => "Davao del Norte",
2981
+ "J7" => "Kalinga",
2982
+ "K6" => "Malaybalay",
2983
+ "M5" => "San Jose del Monte",
2984
+ "M6" => "San Juan",
2985
+ "M8" => "Santiago",
2986
+ "M9" => "Sarangani",
2987
+ "N1" => "Sipalay",
2988
+ "N3" => "Surigao del Norte",
2989
+ "P1" => "Zambales",
2990
+ "P2" => "Zamboanga"),
2991
+ "PK" => array(
2992
+ "01" => "Federally Administered Tribal Areas",
2993
+ "02" => "Balochistan",
2994
+ "03" => "North-West Frontier",
2995
+ "04" => "Punjab",
2996
+ "05" => "Sindh",
2997
+ "06" => "Azad Kashmir",
2998
+ "07" => "Northern Areas",
2999
+ "08" => "Islamabad"),
3000
+ "PL" => array(
3001
+ "72" => "Dolnoslaskie",
3002
+ "73" => "Kujawsko-Pomorskie",
3003
+ "74" => "Lodzkie",
3004
+ "75" => "Lubelskie",
3005
+ "76" => "Lubuskie",
3006
+ "77" => "Malopolskie",
3007
+ "78" => "Mazowieckie",
3008
+ "79" => "Opolskie",
3009
+ "80" => "Podkarpackie",
3010
+ "81" => "Podlaskie",
3011
+ "82" => "Pomorskie",
3012
+ "83" => "Slaskie",
3013
+ "84" => "Swietokrzyskie",
3014
+ "85" => "Warminsko-Mazurskie",
3015
+ "86" => "Wielkopolskie",
3016
+ "87" => "Zachodniopomorskie"),
3017
+ "PS" => array(
3018
+ "GZ" => "Gaza",
3019
+ "WE" => "West Bank"),
3020
+ "PT" => array(
3021
+ "02" => "Aveiro",
3022
+ "03" => "Beja",
3023
+ "04" => "Braga",
3024
+ "05" => "Braganca",
3025
+ "06" => "Castelo Branco",
3026
+ "07" => "Coimbra",
3027
+ "08" => "Evora",
3028
+ "09" => "Faro",
3029
+ "10" => "Madeira",
3030
+ "11" => "Guarda",
3031
+ "13" => "Leiria",
3032
+ "14" => "Lisboa",
3033
+ "16" => "Portalegre",
3034
+ "17" => "Porto",
3035
+ "18" => "Santarem",
3036
+ "19" => "Setubal",
3037
+ "20" => "Viana do Castelo",
3038
+ "21" => "Vila Real",
3039
+ "22" => "Viseu",
3040
+ "23" => "Azores"),
3041
+ "PY" => array(
3042
+ "01" => "Alto Parana",
3043
+ "02" => "Amambay",
3044
+ "03" => "Boqueron",
3045
+ "04" => "Caaguazu",
3046
+ "05" => "Caazapa",
3047
+ "06" => "Central",
3048
+ "07" => "Concepcion",
3049
+ "08" => "Cordillera",
3050
+ "10" => "Guaira",
3051
+ "11" => "Itapua",
3052
+ "12" => "Misiones",
3053
+ "13" => "Neembucu",
3054
+ "15" => "Paraguari",
3055
+ "16" => "Presidente Hayes",
3056
+ "17" => "San Pedro",
3057
+ "19" => "Canindeyu",
3058
+ "20" => "Chaco",
3059
+ "21" => "Nueva Asuncion",
3060
+ "23" => "Alto Paraguay"),
3061
+ "QA" => array(
3062
+ "01" => "Ad Dawhah",
3063
+ "02" => "Al Ghuwariyah",
3064
+ "03" => "Al Jumaliyah",
3065
+ "04" => "Al Khawr",
3066
+ "05" => "Al Wakrah Municipality",
3067
+ "06" => "Ar Rayyan",
3068
+ "08" => "Madinat ach Shamal",
3069
+ "09" => "Umm Salal",
3070
+ "10" => "Al Wakrah",
3071
+ "11" => "Jariyan al Batnah",
3072
+ "12" => "Umm Sa'id"),
3073
+ "RO" => array(
3074
+ "01" => "Alba",
3075
+ "02" => "Arad",
3076
+ "03" => "Arges",
3077
+ "04" => "Bacau",
3078
+ "05" => "Bihor",
3079
+ "06" => "Bistrita-Nasaud",
3080
+ "07" => "Botosani",
3081
+ "08" => "Braila",
3082
+ "09" => "Brasov",
3083
+ "10" => "Bucuresti",
3084
+ "11" => "Buzau",
3085
+ "12" => "Caras-Severin",
3086
+ "13" => "Cluj",
3087
+ "14" => "Constanta",
3088
+ "15" => "Covasna",
3089
+ "16" => "Dambovita",
3090
+ "17" => "Dolj",
3091
+ "18" => "Galati",
3092
+ "19" => "Gorj",
3093
+ "20" => "Harghita",
3094
+ "21" => "Hunedoara",
3095
+ "22" => "Ialomita",
3096
+ "23" => "Iasi",
3097
+ "25" => "Maramures",
3098
+ "26" => "Mehedinti",
3099
+ "27" => "Mures",
3100
+ "28" => "Neamt",
3101
+ "29" => "Olt",
3102
+ "30" => "Prahova",
3103
+ "31" => "Salaj",
3104
+ "32" => "Satu Mare",
3105
+ "33" => "Sibiu",
3106
+ "34" => "Suceava",
3107
+ "35" => "Teleorman",
3108
+ "36" => "Timis",
3109
+ "37" => "Tulcea",
3110
+ "38" => "Vaslui",
3111
+ "39" => "Valcea",
3112
+ "40" => "Vrancea",
3113
+ "41" => "Calarasi",
3114
+ "42" => "Giurgiu",
3115
+ "43" => "Ilfov"),
3116
+ "RS" => array(
3117
+ "01" => "Kosovo",
3118
+ "02" => "Vojvodina"),
3119
+ "RU" => array(
3120
+ "01" => "Adygeya, Republic of",
3121
+ "02" => "Aginsky Buryatsky AO",
3122
+ "03" => "Gorno-Altay",
3123
+ "04" => "Altaisky krai",
3124
+ "05" => "Amur",
3125
+ "06" => "Arkhangel'sk",
3126
+ "07" => "Astrakhan'",
3127
+ "08" => "Bashkortostan",
3128
+ "09" => "Belgorod",
3129
+ "10" => "Bryansk",
3130
+ "11" => "Buryat",
3131
+ "12" => "Chechnya",
3132
+ "13" => "Chelyabinsk",
3133
+ "14" => "Chita",
3134
+ "15" => "Chukot",
3135
+ "16" => "Chuvashia",
3136
+ "17" => "Dagestan",
3137
+ "18" => "Evenk",
3138
+ "19" => "Ingush",
3139
+ "20" => "Irkutsk",
3140
+ "21" => "Ivanovo",
3141
+ "22" => "Kabardin-Balkar",
3142
+ "23" => "Kaliningrad",
3143
+ "24" => "Kalmyk",
3144
+ "25" => "Kaluga",
3145
+ "26" => "Kamchatka",
3146
+ "27" => "Karachay-Cherkess",
3147
+ "28" => "Karelia",
3148
+ "29" => "Kemerovo",
3149
+ "30" => "Khabarovsk",
3150
+ "31" => "Khakass",
3151
+ "32" => "Khanty-Mansiy",
3152
+ "33" => "Kirov",
3153
+ "34" => "Komi",
3154
+ "35" => "Komi-Permyak",
3155
+ "36" => "Koryak",
3156
+ "37" => "Kostroma",
3157
+ "38" => "Krasnodar",
3158
+ "39" => "Krasnoyarsk",
3159
+ "40" => "Kurgan",
3160
+ "41" => "Kursk",
3161
+ "42" => "Leningrad",
3162
+ "43" => "Lipetsk",
3163
+ "44" => "Magadan",
3164
+ "45" => "Mariy-El",
3165
+ "46" => "Mordovia",
3166
+ "47" => "Moskva",
3167
+ "48" => "Moscow City",
3168
+ "49" => "Murmansk",
3169
+ "50" => "Nenets",
3170
+ "51" => "Nizhegorod",
3171
+ "52" => "Novgorod",
3172
+ "53" => "Novosibirsk",
3173
+ "54" => "Omsk",
3174
+ "55" => "Orenburg",
3175
+ "56" => "Orel",
3176
+ "57" => "Penza",
3177
+ "58" => "Perm'",
3178
+ "59" => "Primor'ye",
3179
+ "60" => "Pskov",
3180
+ "61" => "Rostov",
3181
+ "62" => "Ryazan'",
3182
+ "63" => "Sakha",
3183
+ "64" => "Sakhalin",
3184
+ "65" => "Samara",
3185
+ "66" => "Saint Petersburg City",
3186
+ "67" => "Saratov",
3187
+ "68" => "North Ossetia",
3188
+ "69" => "Smolensk",
3189
+ "70" => "Stavropol'",
3190
+ "71" => "Sverdlovsk",
3191
+ "72" => "Tambovskaya oblast",
3192
+ "73" => "Tatarstan",
3193
+ "74" => "Taymyr",
3194
+ "75" => "Tomsk",
3195
+ "76" => "Tula",
3196
+ "77" => "Tver'",
3197
+ "78" => "Tyumen'",
3198
+ "79" => "Tuva",
3199
+ "80" => "Udmurt",
3200
+ "81" => "Ul'yanovsk",
3201
+ "82" => "Ust-Orda Buryat",
3202
+ "83" => "Vladimir",
3203
+ "84" => "Volgograd",
3204
+ "85" => "Vologda",
3205
+ "86" => "Voronezh",
3206
+ "87" => "Yamal-Nenets",
3207
+ "88" => "Yaroslavl'",
3208
+ "89" => "Yevrey",
3209
+ "90" => "Permskiy Kray",
3210
+ "91" => "Krasnoyarskiy Kray",
3211
+ "92" => "Kamchatskiy Kray",
3212
+ "93" => "Zabaykal'skiy Kray"),
3213
+ "RW" => array(
3214
+ "01" => "Butare",
3215
+ "06" => "Gitarama",
3216
+ "07" => "Kibungo",
3217
+ "09" => "Kigali",
3218
+ "11" => "Est",
3219
+ "12" => "Kigali",
3220
+ "13" => "Nord",
3221
+ "14" => "Ouest",
3222
+ "15" => "Sud"),
3223
+ "SA" => array(
3224
+ "02" => "Al Bahah",
3225
+ "05" => "Al Madinah",
3226
+ "06" => "Ash Sharqiyah",
3227
+ "08" => "Al Qasim",
3228
+ "10" => "Ar Riyad",
3229
+ "11" => "Asir Province",
3230
+ "13" => "Ha'il",
3231
+ "14" => "Makkah",
3232
+ "15" => "Al Hudud ash Shamaliyah",
3233
+ "16" => "Najran",
3234
+ "17" => "Jizan",
3235
+ "19" => "Tabuk",
3236
+ "20" => "Al Jawf"),
3237
+ "SB" => array(
3238
+ "03" => "Malaita",
3239
+ "06" => "Guadalcanal",
3240
+ "07" => "Isabel",
3241
+ "08" => "Makira",
3242
+ "09" => "Temotu",
3243
+ "10" => "Central",
3244
+ "11" => "Western",
3245
+ "12" => "Choiseul",
3246
+ "13" => "Rennell and Bellona"),
3247
+ "SC" => array(
3248
+ "01" => "Anse aux Pins",
3249
+ "02" => "Anse Boileau",
3250
+ "03" => "Anse Etoile",
3251
+ "04" => "Anse Louis",
3252
+ "05" => "Anse Royale",
3253
+ "06" => "Baie Lazare",
3254
+ "07" => "Baie Sainte Anne",
3255
+ "08" => "Beau Vallon",
3256
+ "09" => "Bel Air",
3257
+ "10" => "Bel Ombre",
3258
+ "11" => "Cascade",
3259
+ "12" => "Glacis",
3260
+ "13" => "Grand' Anse",
3261
+ "14" => "Grand' Anse",
3262
+ "15" => "La Digue",
3263
+ "16" => "La Riviere Anglaise",
3264
+ "17" => "Mont Buxton",
3265
+ "18" => "Mont Fleuri",
3266
+ "19" => "Plaisance",
3267
+ "20" => "Pointe La Rue",
3268
+ "21" => "Port Glaud",
3269
+ "22" => "Saint Louis",
3270
+ "23" => "Takamaka"),
3271
+ "SD" => array(
3272
+ "27" => "Al Wusta",
3273
+ "28" => "Al Istiwa'iyah",
3274
+ "29" => "Al Khartum",
3275
+ "30" => "Ash Shamaliyah",
3276
+ "31" => "Ash Sharqiyah",
3277
+ "32" => "Bahr al Ghazal",
3278
+ "33" => "Darfur",
3279
+ "34" => "Kurdufan",
3280
+ "35" => "Upper Nile",
3281
+ "40" => "Al Wahadah State",
3282
+ "44" => "Central Equatoria State"),
3283
+ "SE" => array(
3284
+ "02" => "Blekinge Lan",
3285
+ "03" => "Gavleborgs Lan",
3286
+ "05" => "Gotlands Lan",
3287
+ "06" => "Hallands Lan",
3288
+ "07" => "Jamtlands Lan",
3289
+ "08" => "Jonkopings Lan",
3290
+ "09" => "Kalmar Lan",
3291
+ "10" => "Dalarnas Lan",
3292
+ "12" => "Kronobergs Lan",
3293
+ "14" => "Norrbottens Lan",
3294
+ "15" => "Orebro Lan",
3295
+ "16" => "Ostergotlands Lan",
3296
+ "18" => "Sodermanlands Lan",
3297
+ "21" => "Uppsala Lan",
3298
+ "22" => "Varmlands Lan",
3299
+ "23" => "Vasterbottens Lan",
3300
+ "24" => "Vasternorrlands Lan",
3301
+ "25" => "Vastmanlands Lan",
3302
+ "26" => "Stockholms Lan",
3303
+ "27" => "Skane Lan",
3304
+ "28" => "Vastra Gotaland"),
3305
+ "SH" => array(
3306
+ "01" => "Ascension",
3307
+ "02" => "Saint Helena",
3308
+ "03" => "Tristan da Cunha"),
3309
+ "SI" => array(
3310
+ "01" => "Ajdovscina Commune",
3311
+ "02" => "Beltinci Commune",
3312
+ "03" => "Bled Commune",
3313
+ "04" => "Bohinj Commune",
3314
+ "05" => "Borovnica Commune",
3315
+ "06" => "Bovec Commune",
3316
+ "07" => "Brda Commune",
3317
+ "08" => "Brezice Commune",
3318
+ "09" => "Brezovica Commune",
3319
+ "11" => "Celje Commune",
3320
+ "12" => "Cerklje na Gorenjskem Commune",
3321
+ "13" => "Cerknica Commune",
3322
+ "14" => "Cerkno Commune",
3323
+ "15" => "Crensovci Commune",
3324
+ "16" => "Crna na Koroskem Commune",
3325
+ "17" => "Crnomelj Commune",
3326
+ "19" => "Divaca Commune",
3327
+ "20" => "Dobrepolje Commune",
3328
+ "22" => "Dol pri Ljubljani Commune",
3329
+ "24" => "Dornava Commune",
3330
+ "25" => "Dravograd Commune",
3331
+ "26" => "Duplek Commune",
3332
+ "27" => "Gorenja vas-Poljane Commune",
3333
+ "28" => "Gorisnica Commune",
3334
+ "29" => "Gornja Radgona Commune",
3335
+ "30" => "Gornji Grad Commune",
3336
+ "31" => "Gornji Petrovci Commune",
3337
+ "32" => "Grosuplje Commune",
3338
+ "34" => "Hrastnik Commune",
3339
+ "35" => "Hrpelje-Kozina Commune",
3340
+ "36" => "Idrija Commune",
3341
+ "37" => "Ig Commune",
3342
+ "38" => "Ilirska Bistrica Commune",
3343
+ "39" => "Ivancna Gorica Commune",
3344
+ "40" => "Izola-Isola Commune",
3345
+ "42" => "Jursinci Commune",
3346
+ "44" => "Kanal Commune",
3347
+ "45" => "Kidricevo Commune",
3348
+ "46" => "Kobarid Commune",
3349
+ "47" => "Kobilje Commune",
3350
+ "49" => "Komen Commune",
3351
+ "50" => "Koper-Capodistria Urban Commune",
3352
+ "51" => "Kozje Commune",
3353
+ "52" => "Kranj Commune",
3354
+ "53" => "Kranjska Gora Commune",
3355
+ "54" => "Krsko Commune",
3356
+ "55" => "Kungota Commune",
3357
+ "57" => "Lasko Commune",
3358
+ "61" => "Ljubljana Urban Commune",
3359
+ "62" => "Ljubno Commune",
3360
+ "64" => "Logatec Commune",
3361
+ "66" => "Loski Potok Commune",
3362
+ "68" => "Lukovica Commune",
3363
+ "71" => "Medvode Commune",
3364
+ "72" => "Menges Commune",
3365
+ "73" => "Metlika Commune",
3366
+ "74" => "Mezica Commune",
3367
+ "76" => "Mislinja Commune",
3368
+ "77" => "Moravce Commune",
3369
+ "78" => "Moravske Toplice Commune",
3370
+ "79" => "Mozirje Commune",
3371
+ "80" => "Murska Sobota Urban Commune",
3372
+ "81" => "Muta Commune",
3373
+ "82" => "Naklo Commune",
3374
+ "83" => "Nazarje Commune",
3375
+ "84" => "Nova Gorica Urban Commune",
3376
+ "86" => "Odranci Commune",
3377
+ "87" => "Ormoz Commune",
3378
+ "88" => "Osilnica Commune",
3379
+ "89" => "Pesnica Commune",
3380
+ "91" => "Pivka Commune",
3381
+ "92" => "Podcetrtek Commune",
3382
+ "94" => "Postojna Commune",
3383
+ "97" => "Puconci Commune",
3384
+ "98" => "Race-Fram Commune",
3385
+ "99" => "Radece Commune",
3386
+ "A1" => "Radenci Commune",
3387
+ "A2" => "Radlje ob Dravi Commune",
3388
+ "A3" => "Radovljica Commune",
3389
+ "A6" => "Rogasovci Commune",
3390
+ "A7" => "Rogaska Slatina Commune",
3391
+ "A8" => "Rogatec Commune",
3392
+ "B1" => "Semic Commune",
3393
+ "B2" => "Sencur Commune",
3394
+ "B3" => "Sentilj Commune",
3395
+ "B4" => "Sentjernej Commune",
3396
+ "B6" => "Sevnica Commune",
3397
+ "B7" => "Sezana Commune",
3398
+ "B8" => "Skocjan Commune",
3399
+ "B9" => "Skofja Loka Commune",
3400
+ "C1" => "Skofljica Commune",
3401
+ "C2" => "Slovenj Gradec Urban Commune",
3402
+ "C4" => "Slovenske Konjice Commune",
3403
+ "C5" => "Smarje pri Jelsah Commune",
3404
+ "C6" => "Smartno ob Paki Commune",
3405
+ "C7" => "Sostanj Commune",
3406
+ "C8" => "Starse Commune",
3407
+ "C9" => "Store Commune",
3408
+ "D1" => "Sveti Jurij Commune",
3409
+ "D2" => "Tolmin Commune",
3410
+ "D3" => "Trbovlje Commune",
3411
+ "D4" => "Trebnje Commune",
3412
+ "D5" => "Trzic Commune",
3413
+ "D6" => "Turnisce Commune",
3414
+ "D7" => "Velenje Urban Commune",
3415
+ "D8" => "Velike Lasce Commune",
3416
+ "E1" => "Vipava Commune",
3417
+ "E2" => "Vitanje Commune",
3418
+ "E3" => "Vodice Commune",
3419
+ "E5" => "Vrhnika Commune",
3420
+ "E6" => "Vuzenica Commune",
3421
+ "E7" => "Zagorje ob Savi Commune",
3422
+ "E9" => "Zavrc Commune",
3423
+ "F1" => "Zelezniki Commune",
3424
+ "F2" => "Ziri Commune",
3425
+ "F3" => "Zrece Commune",
3426
+ "F4" => "Benedikt Commune",
3427
+ "F5" => "Bistrica ob Sotli Commune",
3428
+ "F6" => "Bloke Commune",
3429
+ "F7" => "Braslovce Commune",
3430
+ "F8" => "Cankova Commune",
3431
+ "F9" => "Cerkvenjak Commune",
3432
+ "G1" => "Destrnik Commune",
3433
+ "G2" => "Dobje Commune",
3434
+ "G3" => "Dobrna Commune",
3435
+ "G4" => "Dobrova-Horjul-Polhov Gradec Commune",
3436
+ "G5" => "Dobrovnik-Dobronak Commune",
3437
+ "G6" => "Dolenjske Toplice Commune",
3438
+ "G7" => "Domzale Commune",
3439
+ "G8" => "Grad Commune",
3440
+ "G9" => "Hajdina Commune",
3441
+ "H1" => "Hoce-Slivnica Commune",
3442
+ "H2" => "Hodos-Hodos Commune",
3443
+ "H3" => "Horjul Commune",
3444
+ "H4" => "Jesenice Commune",
3445
+ "H5" => "Jezersko Commune",
3446
+ "H6" => "Kamnik Commune",
3447
+ "H7" => "Kocevje Commune",
3448
+ "H8" => "Komenda Commune",
3449
+ "H9" => "Kostel Commune",
3450
+ "I1" => "Krizevci Commune",
3451
+ "I2" => "Kuzma Commune",
3452
+ "I3" => "Lenart Commune",
3453
+ "I4" => "Lendava-Lendva Commune",
3454
+ "I5" => "Litija Commune",
3455
+ "I6" => "Ljutomer Commune",
3456
+ "I7" => "Loska Dolina Commune",
3457
+ "I8" => "Lovrenc na Pohorju Commune",
3458
+ "I9" => "Luce Commune",
3459
+ "J1" => "Majsperk Commune",
3460
+ "J2" => "Maribor Commune",
3461
+ "J3" => "Markovci Commune",
3462
+ "J4" => "Miklavz na Dravskem polju Commune",
3463
+ "J5" => "Miren-Kostanjevica Commune",
3464
+ "J6" => "Mirna Pec Commune",
3465
+ "J7" => "Novo mesto Urban Commune",
3466
+ "J8" => "Oplotnica Commune",
3467
+ "J9" => "Piran-Pirano Commune",
3468
+ "K1" => "Podlehnik Commune",
3469
+ "K2" => "Podvelka Commune",
3470
+ "K3" => "Polzela Commune",
3471
+ "K4" => "Prebold Commune",
3472
+ "K5" => "Preddvor Commune",
3473
+ "K6" => "Prevalje Commune",
3474
+ "K7" => "Ptuj Urban Commune",
3475
+ "K8" => "Ravne na Koroskem Commune",
3476
+ "K9" => "Razkrizje Commune",
3477
+ "L1" => "Ribnica Commune",
3478
+ "L2" => "Ribnica na Pohorju Commune",
3479
+ "L3" => "Ruse Commune",
3480
+ "L4" => "Salovci Commune",
3481
+ "L5" => "Selnica ob Dravi Commune",
3482
+ "L6" => "Sempeter-Vrtojba Commune",
3483
+ "L7" => "Sentjur pri Celju Commune",
3484
+ "L8" => "Slovenska Bistrica Commune",
3485
+ "L9" => "Smartno pri Litiji Commune",
3486
+ "M1" => "Sodrazica Commune",
3487
+ "M2" => "Solcava Commune",
3488
+ "M3" => "Sveta Ana Commune",
3489
+ "M4" => "Sveti Andraz v Slovenskih goricah Commune",
3490
+ "M5" => "Tabor Commune",
3491
+ "M6" => "Tisina Commune",
3492
+ "M7" => "Trnovska vas Commune",
3493
+ "M8" => "Trzin Commune",
3494
+ "M9" => "Velika Polana Commune",
3495
+ "N1" => "Verzej Commune",
3496
+ "N2" => "Videm Commune",
3497
+ "N3" => "Vojnik Commune",
3498
+ "N4" => "Vransko Commune",
3499
+ "N5" => "Zalec Commune",
3500
+ "N6" => "Zetale Commune",
3501
+ "N7" => "Zirovnica Commune",
3502
+ "N8" => "Zuzemberk Commune",
3503
+ "N9" => "Apace Commune",
3504
+ "O1" => "Cirkulane Commune"),
3505
+ "SK" => array(
3506
+ "01" => "Banska Bystrica",
3507
+ "02" => "Bratislava",
3508
+ "03" => "Kosice",
3509
+ "04" => "Nitra",
3510
+ "05" => "Presov",
3511
+ "06" => "Trencin",
3512
+ "07" => "Trnava",
3513
+ "08" => "Zilina"),
3514
+ "SL" => array(
3515
+ "01" => "Eastern",
3516
+ "02" => "Northern",
3517
+ "03" => "Southern",
3518
+ "04" => "Western Area"),
3519
+ "SM" => array(
3520
+ "01" => "Acquaviva",
3521
+ "02" => "Chiesanuova",
3522
+ "03" => "Domagnano",
3523
+ "04" => "Faetano",
3524
+ "05" => "Fiorentino",
3525
+ "06" => "Borgo Maggiore",
3526
+ "07" => "San Marino",
3527
+ "08" => "Monte Giardino",
3528
+ "09" => "Serravalle"),
3529
+ "SN" => array(
3530
+ "01" => "Dakar",
3531
+ "03" => "Diourbel",
3532
+ "05" => "Tambacounda",
3533
+ "07" => "Thies",
3534
+ "09" => "Fatick",
3535
+ "10" => "Kaolack",
3536
+ "11" => "Kolda",
3537
+ "12" => "Ziguinchor",
3538
+ "13" => "Louga",
3539
+ "14" => "Saint-Louis",
3540
+ "15" => "Matam"),
3541
+ "SO" => array(
3542
+ "01" => "Bakool",
3543
+ "02" => "Banaadir",
3544
+ "03" => "Bari",
3545
+ "04" => "Bay",
3546
+ "05" => "Galguduud",
3547
+ "06" => "Gedo",
3548
+ "07" => "Hiiraan",
3549
+ "08" => "Jubbada Dhexe",
3550
+ "09" => "Jubbada Hoose",
3551
+ "10" => "Mudug",
3552
+ "11" => "Nugaal",
3553
+ "12" => "Sanaag",
3554
+ "13" => "Shabeellaha Dhexe",
3555
+ "14" => "Shabeellaha Hoose",
3556
+ "16" => "Woqooyi Galbeed",
3557
+ "18" => "Nugaal",
3558
+ "19" => "Togdheer",
3559
+ "20" => "Woqooyi Galbeed",
3560
+ "21" => "Awdal",
3561
+ "22" => "Sool"),
3562
+ "SR" => array(
3563
+ "10" => "Brokopondo",
3564
+ "11" => "Commewijne",
3565
+ "12" => "Coronie",
3566
+ "13" => "Marowijne",
3567
+ "14" => "Nickerie",
3568
+ "15" => "Para",
3569
+ "16" => "Paramaribo",
3570
+ "17" => "Saramacca",
3571
+ "18" => "Sipaliwini",
3572
+ "19" => "Wanica"),
3573
+ "SS" => array(
3574
+ "01" => "Central Equatoria",
3575
+ "02" => "Eastern Equatoria",
3576
+ "03" => "Jonglei",
3577
+ "04" => "Lakes",
3578
+ "05" => "Northern Bahr el Ghazal",
3579
+ "06" => "Unity",
3580
+ "07" => "Upper Nile",
3581
+ "08" => "Warrap",
3582
+ "09" => "Western Bahr el Ghazal",
3583
+ "10" => "Western Equatoria"),
3584
+ "ST" => array(
3585
+ "01" => "Principe",
3586
+ "02" => "Sao Tome"),
3587
+ "SV" => array(
3588
+ "01" => "Ahuachapan",
3589
+ "02" => "Cabanas",
3590
+ "03" => "Chalatenango",
3591
+ "04" => "Cuscatlan",
3592
+ "05" => "La Libertad",
3593
+ "06" => "La Paz",
3594
+ "07" => "La Union",
3595
+ "08" => "Morazan",
3596
+ "09" => "San Miguel",
3597
+ "10" => "San Salvador",
3598
+ "11" => "Santa Ana",
3599
+ "12" => "San Vicente",
3600
+ "13" => "Sonsonate",
3601
+ "14" => "Usulutan"),
3602
+ "SY" => array(
3603
+ "01" => "Al Hasakah",
3604
+ "02" => "Al Ladhiqiyah",
3605
+ "03" => "Al Qunaytirah",
3606
+ "04" => "Ar Raqqah",
3607
+ "05" => "As Suwayda'",
3608
+ "06" => "Dar",
3609
+ "07" => "Dayr az Zawr",
3610
+ "08" => "Rif Dimashq",
3611
+ "09" => "Halab",
3612
+ "10" => "Hamah",
3613
+ "11" => "Hims",
3614
+ "12" => "Idlib",
3615
+ "13" => "Dimashq",
3616
+ "14" => "Tartus"),
3617
+ "SZ" => array(
3618
+ "01" => "Hhohho",
3619
+ "02" => "Lubombo",
3620
+ "03" => "Manzini",
3621
+ "04" => "Shiselweni",
3622
+ "05" => "Praslin"),
3623
+ "TD" => array(
3624
+ "01" => "Batha",
3625
+ "02" => "Biltine",
3626
+ "03" => "Borkou-Ennedi-Tibesti",
3627
+ "04" => "Chari-Baguirmi",
3628
+ "05" => "Guera",
3629
+ "06" => "Kanem",
3630
+ "07" => "Lac",
3631
+ "08" => "Logone Occidental",
3632
+ "09" => "Logone Oriental",
3633
+ "10" => "Mayo-Kebbi",
3634
+ "11" => "Moyen-Chari",
3635
+ "12" => "Ouaddai",
3636
+ "13" => "Salamat",
3637
+ "14" => "Tandjile"),
3638
+ "TG" => array(
3639
+ "22" => "Centrale",
3640
+ "23" => "Kara",
3641
+ "24" => "Maritime",
3642
+ "25" => "Plateaux",
3643
+ "26" => "Savanes"),
3644
+ "TH" => array(
3645
+ "01" => "Mae Hong Son",
3646
+ "02" => "Chiang Mai",
3647
+ "03" => "Chiang Rai",
3648
+ "04" => "Nan",
3649
+ "05" => "Lamphun",
3650
+ "06" => "Lampang",
3651
+ "07" => "Phrae",
3652
+ "08" => "Tak",
3653
+ "09" => "Sukhothai",
3654
+ "10" => "Uttaradit",
3655
+ "11" => "Kamphaeng Phet",
3656
+ "12" => "Phitsanulok",
3657
+ "13" => "Phichit",
3658
+ "14" => "Phetchabun",
3659
+ "15" => "Uthai Thani",
3660
+ "16" => "Nakhon Sawan",
3661
+ "17" => "Nong Khai",
3662
+ "18" => "Loei",
3663
+ "20" => "Sakon Nakhon",
3664
+ "21" => "Nakhon Phanom",
3665
+ "22" => "Khon Kaen",
3666
+ "23" => "Kalasin",
3667
+ "24" => "Maha Sarakham",
3668
+ "25" => "Roi Et",
3669
+ "26" => "Chaiyaphum",
3670
+ "27" => "Nakhon Ratchasima",
3671
+ "28" => "Buriram",
3672
+ "29" => "Surin",
3673
+ "30" => "Sisaket",
3674
+ "31" => "Narathiwat",
3675
+ "32" => "Chai Nat",
3676
+ "33" => "Sing Buri",
3677
+ "34" => "Lop Buri",
3678
+ "35" => "Ang Thong",
3679
+ "36" => "Phra Nakhon Si Ayutthaya",
3680
+ "37" => "Saraburi",
3681
+ "38" => "Nonthaburi",
3682
+ "39" => "Pathum Thani",
3683
+ "40" => "Krung Thep",
3684
+ "41" => "Phayao",
3685
+ "42" => "Samut Prakan",
3686
+ "43" => "Nakhon Nayok",
3687
+ "44" => "Chachoengsao",
3688
+ "45" => "Prachin Buri",
3689
+ "46" => "Chon Buri",
3690
+ "47" => "Rayong",
3691
+ "48" => "Chanthaburi",
3692
+ "49" => "Trat",
3693
+ "50" => "Kanchanaburi",
3694
+ "51" => "Suphan Buri",
3695
+ "52" => "Ratchaburi",
3696
+ "53" => "Nakhon Pathom",
3697
+ "54" => "Samut Songkhram",
3698
+ "55" => "Samut Sakhon",
3699
+ "56" => "Phetchaburi",
3700
+ "57" => "Prachuap Khiri Khan",
3701
+ "58" => "Chumphon",
3702
+ "59" => "Ranong",
3703
+ "60" => "Surat Thani",
3704
+ "61" => "Phangnga",
3705
+ "62" => "Phuket",
3706
+ "63" => "Krabi",
3707
+ "64" => "Nakhon Si Thammarat",
3708
+ "65" => "Trang",
3709
+ "66" => "Phatthalung",
3710
+ "67" => "Satun",
3711
+ "68" => "Songkhla",
3712
+ "69" => "Pattani",
3713
+ "70" => "Yala",
3714
+ "71" => "Ubon Ratchathani",
3715
+ "72" => "Yasothon",
3716
+ "73" => "Nakhon Phanom",
3717
+ "74" => "Prachin Buri",
3718
+ "75" => "Ubon Ratchathani",
3719
+ "76" => "Udon Thani",
3720
+ "77" => "Amnat Charoen",
3721
+ "78" => "Mukdahan",
3722
+ "79" => "Nong Bua Lamphu",
3723
+ "80" => "Sa Kaeo"),
3724
+ "TJ" => array(
3725
+ "01" => "Kuhistoni Badakhshon",
3726
+ "02" => "Khatlon",
3727
+ "03" => "Sughd"),
3728
+ "TM" => array(
3729
+ "01" => "Ahal",
3730
+ "02" => "Balkan",
3731
+ "03" => "Dashoguz",
3732
+ "04" => "Lebap",
3733
+ "05" => "Mary"),
3734
+ "TN" => array(
3735
+ "02" => "Kasserine",
3736
+ "03" => "Kairouan",
3737
+ "06" => "Jendouba",
3738
+ "10" => "Qafsah",
3739
+ "14" => "El Kef",
3740
+ "15" => "Al Mahdia",
3741
+ "16" => "Al Munastir",
3742
+ "17" => "Bajah",
3743
+ "18" => "Bizerte",
3744
+ "19" => "Nabeul",
3745
+ "22" => "Siliana",
3746
+ "23" => "Sousse",
3747
+ "27" => "Ben Arous",
3748
+ "28" => "Madanin",
3749
+ "29" => "Gabes",
3750
+ "31" => "Kebili",
3751
+ "32" => "Sfax",
3752
+ "33" => "Sidi Bou Zid",
3753
+ "34" => "Tataouine",
3754
+ "35" => "Tozeur",
3755
+ "36" => "Tunis",
3756
+ "37" => "Zaghouan",
3757
+ "38" => "Aiana",
3758
+ "39" => "Manouba"),
3759
+ "TO" => array(
3760
+ "01" => "Ha",
3761
+ "02" => "Tongatapu",
3762
+ "03" => "Vava"),
3763
+ "TR" => array(
3764
+ "02" => "Adiyaman",
3765
+ "03" => "Afyonkarahisar",
3766
+ "04" => "Agri",
3767
+ "05" => "Amasya",
3768
+ "07" => "Antalya",
3769
+ "08" => "Artvin",
3770
+ "09" => "Aydin",
3771
+ "10" => "Balikesir",
3772
+ "11" => "Bilecik",
3773
+ "12" => "Bingol",
3774
+ "13" => "Bitlis",
3775
+ "14" => "Bolu",
3776
+ "15" => "Burdur",
3777
+ "16" => "Bursa",
3778
+ "17" => "Canakkale",
3779
+ "19" => "Corum",
3780
+ "20" => "Denizli",
3781
+ "21" => "Diyarbakir",
3782
+ "22" => "Edirne",
3783
+ "23" => "Elazig",
3784
+ "24" => "Erzincan",
3785
+ "25" => "Erzurum",
3786
+ "26" => "Eskisehir",
3787
+ "28" => "Giresun",
3788
+ "31" => "Hatay",
3789
+ "32" => "Mersin",
3790
+ "33" => "Isparta",
3791
+ "34" => "Istanbul",
3792
+ "35" => "Izmir",
3793
+ "37" => "Kastamonu",
3794
+ "38" => "Kayseri",
3795
+ "39" => "Kirklareli",
3796
+ "40" => "Kirsehir",
3797
+ "41" => "Kocaeli",
3798
+ "43" => "Kutahya",
3799
+ "44" => "Malatya",
3800
+ "45" => "Manisa",
3801
+ "46" => "Kahramanmaras",
3802
+ "48" => "Mugla",
3803
+ "49" => "Mus",
3804
+ "50" => "Nevsehir",
3805
+ "52" => "Ordu",
3806
+ "53" => "Rize",
3807
+ "54" => "Sakarya",
3808
+ "55" => "Samsun",
3809
+ "57" => "Sinop",
3810
+ "58" => "Sivas",
3811
+ "59" => "Tekirdag",
3812
+ "60" => "Tokat",
3813
+ "61" => "Trabzon",
3814
+ "62" => "Tunceli",
3815
+ "63" => "Sanliurfa",
3816
+ "64" => "Usak",
3817
+ "65" => "Van",
3818
+ "66" => "Yozgat",
3819
+ "68" => "Ankara",
3820
+ "69" => "Gumushane",
3821
+ "70" => "Hakkari",
3822
+ "71" => "Konya",
3823
+ "72" => "Mardin",
3824
+ "73" => "Nigde",
3825
+ "74" => "Siirt",
3826
+ "75" => "Aksaray",
3827
+ "76" => "Batman",
3828
+ "77" => "Bayburt",
3829
+ "78" => "Karaman",
3830
+ "79" => "Kirikkale",
3831
+ "80" => "Sirnak",
3832
+ "81" => "Adana",
3833
+ "82" => "Cankiri",
3834
+ "83" => "Gaziantep",
3835
+ "84" => "Kars",
3836
+ "85" => "Zonguldak",
3837
+ "86" => "Ardahan",
3838
+ "87" => "Bartin",
3839
+ "88" => "Igdir",
3840
+ "89" => "Karabuk",
3841
+ "90" => "Kilis",
3842
+ "91" => "Osmaniye",
3843
+ "92" => "Yalova",
3844
+ "93" => "Duzce"),
3845
+ "TT" => array(
3846
+ "01" => "Arima",
3847
+ "02" => "Caroni",
3848
+ "03" => "Mayaro",
3849
+ "04" => "Nariva",
3850
+ "05" => "Port-of-Spain",
3851
+ "06" => "Saint Andrew",
3852
+ "07" => "Saint David",
3853
+ "08" => "Saint George",
3854
+ "09" => "Saint Patrick",
3855
+ "10" => "San Fernando",
3856
+ "11" => "Tobago",
3857
+ "12" => "Victoria"),
3858
+ "TW" => array(
3859
+ "01" => "Fu-chien",
3860
+ "02" => "Kao-hsiung",
3861
+ "03" => "T'ai-pei",
3862
+ "04" => "T'ai-wan"),
3863
+ "TZ" => array(
3864
+ "02" => "Pwani",
3865
+ "03" => "Dodoma",
3866
+ "04" => "Iringa",
3867
+ "05" => "Kigoma",
3868
+ "06" => "Kilimanjaro",
3869
+ "07" => "Lindi",
3870
+ "08" => "Mara",
3871
+ "09" => "Mbeya",
3872
+ "10" => "Morogoro",
3873
+ "11" => "Mtwara",
3874
+ "12" => "Mwanza",
3875
+ "13" => "Pemba North",
3876
+ "14" => "Ruvuma",
3877
+ "15" => "Shinyanga",
3878
+ "16" => "Singida",
3879
+ "17" => "Tabora",
3880
+ "18" => "Tanga",
3881
+ "19" => "Kagera",
3882
+ "20" => "Pemba South",
3883
+ "21" => "Zanzibar Central",
3884
+ "22" => "Zanzibar North",
3885
+ "23" => "Dar es Salaam",
3886
+ "24" => "Rukwa",
3887
+ "25" => "Zanzibar Urban",
3888
+ "26" => "Arusha",
3889
+ "27" => "Manyara"),
3890
+ "UA" => array(
3891
+ "01" => "Cherkas'ka Oblast'",
3892
+ "02" => "Chernihivs'ka Oblast'",
3893
+ "03" => "Chernivets'ka Oblast'",
3894
+ "04" => "Dnipropetrovs'ka Oblast'",
3895
+ "05" => "Donets'ka Oblast'",
3896
+ "06" => "Ivano-Frankivs'ka Oblast'",
3897
+ "07" => "Kharkivs'ka Oblast'",
3898
+ "08" => "Khersons'ka Oblast'",
3899
+ "09" => "Khmel'nyts'ka Oblast'",
3900
+ "10" => "Kirovohrads'ka Oblast'",
3901
+ "11" => "Krym",
3902
+ "12" => "Kyyiv",
3903
+ "13" => "Kyyivs'ka Oblast'",
3904
+ "14" => "Luhans'ka Oblast'",
3905
+ "15" => "L'vivs'ka Oblast'",
3906
+ "16" => "Mykolayivs'ka Oblast'",
3907
+ "17" => "Odes'ka Oblast'",
3908
+ "18" => "Poltavs'ka Oblast'",
3909
+ "19" => "Rivnens'ka Oblast'",
3910
+ "20" => "Sevastopol'",
3911
+ "21" => "Sums'ka Oblast'",
3912
+ "22" => "Ternopil's'ka Oblast'",
3913
+ "23" => "Vinnyts'ka Oblast'",
3914
+ "24" => "Volyns'ka Oblast'",
3915
+ "25" => "Zakarpats'ka Oblast'",
3916
+ "26" => "Zaporiz'ka Oblast'",
3917
+ "27" => "Zhytomyrs'ka Oblast'"),
3918
+ "UG" => array(
3919
+ "26" => "Apac",
3920
+ "28" => "Bundibugyo",
3921
+ "29" => "Bushenyi",
3922
+ "30" => "Gulu",
3923
+ "31" => "Hoima",
3924
+ "33" => "Jinja",
3925
+ "36" => "Kalangala",
3926
+ "37" => "Kampala",
3927
+ "38" => "Kamuli",
3928
+ "39" => "Kapchorwa",
3929
+ "40" => "Kasese",
3930
+ "41" => "Kibale",
3931
+ "42" => "Kiboga",
3932
+ "43" => "Kisoro",
3933
+ "45" => "Kotido",
3934
+ "46" => "Kumi",
3935
+ "47" => "Lira",
3936
+ "50" => "Masindi",
3937
+ "52" => "Mbarara",
3938
+ "56" => "Mubende",
3939
+ "58" => "Nebbi",
3940
+ "59" => "Ntungamo",
3941
+ "60" => "Pallisa",
3942
+ "61" => "Rakai",
3943
+ "65" => "Adjumani",
3944
+ "66" => "Bugiri",
3945
+ "67" => "Busia",
3946
+ "69" => "Katakwi",
3947
+ "70" => "Luwero",
3948
+ "71" => "Masaka",
3949
+ "72" => "Moyo",
3950
+ "73" => "Nakasongola",
3951
+ "74" => "Sembabule",
3952
+ "76" => "Tororo",
3953
+ "77" => "Arua",
3954
+ "78" => "Iganga",
3955
+ "79" => "Kabarole",
3956
+ "80" => "Kaberamaido",
3957
+ "81" => "Kamwenge",
3958
+ "82" => "Kanungu",
3959
+ "83" => "Kayunga",
3960
+ "84" => "Kitgum",
3961
+ "85" => "Kyenjojo",
3962
+ "86" => "Mayuge",
3963
+ "87" => "Mbale",
3964
+ "88" => "Moroto",
3965
+ "89" => "Mpigi",
3966
+ "90" => "Mukono",
3967
+ "91" => "Nakapiripirit",
3968
+ "92" => "Pader",
3969
+ "93" => "Rukungiri",
3970
+ "94" => "Sironko",
3971
+ "95" => "Soroti",
3972
+ "96" => "Wakiso",
3973
+ "97" => "Yumbe"),
3974
+ "US" => array(
3975
+ "AA" => "Armed Forces Americas",
3976
+ "AE" => "Armed Forces Europe, Middle East, & Canada",
3977
+ "AK" => "Alaska",
3978
+ "AL" => "Alabama",
3979
+ "AP" => "Armed Forces Pacific",
3980
+ "AR" => "Arkansas",
3981
+ "AS" => "American Samoa",
3982
+ "AZ" => "Arizona",
3983
+ "CA" => "California",
3984
+ "CO" => "Colorado",
3985
+ "CT" => "Connecticut",
3986
+ "DC" => "District of Columbia",
3987
+ "DE" => "Delaware",
3988
+ "FL" => "Florida",
3989
+ "FM" => "Federated States of Micronesia",
3990
+ "GA" => "Georgia",
3991
+ "GU" => "Guam",
3992
+ "HI" => "Hawaii",
3993
+ "IA" => "Iowa",
3994
+ "ID" => "Idaho",
3995
+ "IL" => "Illinois",
3996
+ "IN" => "Indiana",
3997
+ "KS" => "Kansas",
3998
+ "KY" => "Kentucky",
3999
+ "LA" => "Louisiana",
4000
+ "MA" => "Massachusetts",
4001
+ "MD" => "Maryland",
4002
+ "ME" => "Maine",
4003
+ "MH" => "Marshall Islands",
4004
+ "MI" => "Michigan",
4005
+ "MN" => "Minnesota",
4006
+ "MO" => "Missouri",
4007
+ "MP" => "Northern Mariana Islands",
4008
+ "MS" => "Mississippi",
4009
+ "MT" => "Montana",
4010
+ "NC" => "North Carolina",
4011
+ "ND" => "North Dakota",
4012
+ "NE" => "Nebraska",
4013
+ "NH" => "New Hampshire",
4014
+ "NJ" => "New Jersey",
4015
+ "NM" => "New Mexico",
4016
+ "NV" => "Nevada",
4017
+ "NY" => "New York",
4018
+ "OH" => "Ohio",
4019
+ "OK" => "Oklahoma",
4020
+ "OR" => "Oregon",
4021
+ "PA" => "Pennsylvania",
4022
+ "PR" => "Puerto Rico",
4023
+ "PW" => "Palau",
4024
+ "RI" => "Rhode Island",
4025
+ "SC" => "South Carolina",
4026
+ "SD" => "South Dakota",
4027
+ "TN" => "Tennessee",
4028
+ "TX" => "Texas",
4029
+ "UT" => "Utah",
4030
+ "VA" => "Virginia",
4031
+ "VI" => "Virgin Islands",
4032
+ "VT" => "Vermont",
4033
+ "WA" => "Washington",
4034
+ "WI" => "Wisconsin",
4035
+ "WV" => "West Virginia",
4036
+ "WY" => "Wyoming"),
4037
+ "UY" => array(
4038
+ "01" => "Artigas",
4039
+ "02" => "Canelones",
4040
+ "03" => "Cerro Largo",
4041
+ "04" => "Colonia",
4042
+ "05" => "Durazno",
4043
+ "06" => "Flores",
4044
+ "07" => "Florida",
4045
+ "08" => "Lavalleja",
4046
+ "09" => "Maldonado",
4047
+ "10" => "Montevideo",
4048
+ "11" => "Paysandu",
4049
+ "12" => "Rio Negro",
4050
+ "13" => "Rivera",
4051
+ "14" => "Rocha",
4052
+ "15" => "Salto",
4053
+ "16" => "San Jose",
4054
+ "17" => "Soriano",
4055
+ "18" => "Tacuarembo",
4056
+ "19" => "Treinta y Tres"),
4057
+ "UZ" => array(
4058
+ "01" => "Andijon",
4059
+ "02" => "Bukhoro",
4060
+ "03" => "Farghona",
4061
+ "04" => "Jizzakh",
4062
+ "05" => "Khorazm",
4063
+ "06" => "Namangan",
4064
+ "07" => "Nawoiy",
4065
+ "08" => "Qashqadaryo",
4066
+ "09" => "Qoraqalpoghiston",
4067
+ "10" => "Samarqand",
4068
+ "11" => "Sirdaryo",
4069
+ "12" => "Surkhondaryo",
4070
+ "13" => "Toshkent",
4071
+ "14" => "Toshkent"),
4072
+ "VC" => array(
4073
+ "01" => "Charlotte",
4074
+ "02" => "Saint Andrew",
4075
+ "03" => "Saint David",
4076
+ "04" => "Saint George",
4077
+ "05" => "Saint Patrick",
4078
+ "06" => "Grenadines"),
4079
+ "VE" => array(
4080
+ "01" => "Amazonas",
4081
+ "02" => "Anzoategui",
4082
+ "03" => "Apure",
4083
+ "04" => "Aragua",
4084
+ "05" => "Barinas",
4085
+ "06" => "Bolivar",
4086
+ "07" => "Carabobo",
4087
+ "08" => "Cojedes",
4088
+ "09" => "Delta Amacuro",
4089
+ "11" => "Falcon",
4090
+ "12" => "Guarico",
4091
+ "13" => "Lara",
4092
+ "14" => "Merida",
4093
+ "15" => "Miranda",
4094
+ "16" => "Monagas",
4095
+ "17" => "Nueva Esparta",
4096
+ "18" => "Portuguesa",
4097
+ "19" => "Sucre",
4098
+ "20" => "Tachira",
4099
+ "21" => "Trujillo",
4100
+ "22" => "Yaracuy",
4101
+ "23" => "Zulia",
4102
+ "24" => "Dependencias Federales",
4103
+ "25" => "Distrito Federal",
4104
+ "26" => "Vargas"),
4105
+ "VN" => array(
4106
+ "01" => "An Giang",
4107
+ "03" => "Ben Tre",
4108
+ "05" => "Cao Bang",
4109
+ "09" => "Dong Thap",
4110
+ "13" => "Hai Phong",
4111
+ "20" => "Ho Chi Minh",
4112
+ "21" => "Kien Giang",
4113
+ "23" => "Lam Dong",
4114
+ "24" => "Long An",
4115
+ "30" => "Quang Ninh",
4116
+ "32" => "Son La",
4117
+ "33" => "Tay Ninh",
4118
+ "34" => "Thanh Hoa",
4119
+ "35" => "Thai Binh",
4120
+ "37" => "Tien Giang",
4121
+ "39" => "Lang Son",
4122
+ "43" => "Dong Nai",
4123
+ "44" => "Ha Noi",
4124
+ "45" => "Ba Ria-Vung Tau",
4125
+ "46" => "Binh Dinh",
4126
+ "47" => "Binh Thuan",
4127
+ "49" => "Gia Lai",
4128
+ "50" => "Ha Giang",
4129
+ "52" => "Ha Tinh",
4130
+ "53" => "Hoa Binh",
4131
+ "54" => "Khanh Hoa",
4132
+ "55" => "Kon Tum",
4133
+ "58" => "Nghe An",
4134
+ "59" => "Ninh Binh",
4135
+ "60" => "Ninh Thuan",
4136
+ "61" => "Phu Yen",
4137
+ "62" => "Quang Binh",
4138
+ "63" => "Quang Ngai",
4139
+ "64" => "Quang Tri",
4140
+ "65" => "Soc Trang",
4141
+ "66" => "Thua Thien-Hue",
4142
+ "67" => "Tra Vinh",
4143
+ "68" => "Tuyen Quang",
4144
+ "69" => "Vinh Long",
4145
+ "70" => "Yen Bai",
4146
+ "71" => "Bac Giang",
4147
+ "72" => "Bac Kan",
4148
+ "73" => "Bac Lieu",
4149
+ "74" => "Bac Ninh",
4150
+ "75" => "Binh Duong",
4151
+ "76" => "Binh Phuoc",
4152
+ "77" => "Ca Mau",
4153
+ "78" => "Da Nang",
4154
+ "79" => "Hai Duong",
4155
+ "80" => "Ha Nam",
4156
+ "81" => "Hung Yen",
4157
+ "82" => "Nam Dinh",
4158
+ "83" => "Phu Tho",
4159
+ "84" => "Quang Nam",
4160
+ "85" => "Thai Nguyen",
4161
+ "86" => "Vinh Phuc",
4162
+ "87" => "Can Tho",
4163
+ "88" => "Dac Lak",
4164
+ "89" => "Lai Chau",
4165
+ "90" => "Lao Cai",
4166
+ "91" => "Dak Nong",
4167
+ "92" => "Dien Bien",
4168
+ "93" => "Hau Giang"),
4169
+ "VU" => array(
4170
+ "05" => "Ambrym",
4171
+ "06" => "Aoba",
4172
+ "07" => "Torba",
4173
+ "08" => "Efate",
4174
+ "09" => "Epi",
4175
+ "10" => "Malakula",
4176
+ "11" => "Paama",
4177
+ "12" => "Pentecote",
4178
+ "13" => "Sanma",
4179
+ "14" => "Shepherd",
4180
+ "15" => "Tafea",
4181
+ "16" => "Malampa",
4182
+ "17" => "Penama",
4183
+ "18" => "Shefa"),
4184
+ "WS" => array(
4185
+ "02" => "Aiga-i-le-Tai",
4186
+ "03" => "Atua",
4187
+ "04" => "Fa",
4188
+ "05" => "Gaga",
4189
+ "06" => "Va",
4190
+ "07" => "Gagaifomauga",
4191
+ "08" => "Palauli",
4192
+ "09" => "Satupa",
4193
+ "10" => "Tuamasaga",
4194
+ "11" => "Vaisigano"),
4195
+ "YE" => array(
4196
+ "01" => "Abyan",
4197
+ "02" => "Adan",
4198
+ "03" => "Al Mahrah",
4199
+ "04" => "Hadramawt",
4200
+ "05" => "Shabwah",
4201
+ "06" => "Lahij",
4202
+ "07" => "Al Bayda'",
4203
+ "08" => "Al Hudaydah",
4204
+ "09" => "Al Jawf",
4205
+ "10" => "Al Mahwit",
4206
+ "11" => "Dhamar",
4207
+ "12" => "Hajjah",
4208
+ "13" => "Ibb",
4209
+ "14" => "Ma'rib",
4210
+ "15" => "Sa'dah",
4211
+ "16" => "San'a'",
4212
+ "17" => "Taizz",
4213
+ "18" => "Ad Dali",
4214
+ "19" => "Amran",
4215
+ "20" => "Al Bayda'",
4216
+ "21" => "Al Jawf",
4217
+ "22" => "Hajjah",
4218
+ "23" => "Ibb",
4219
+ "24" => "Lahij",
4220
+ "25" => "Taizz"),
4221
+ "ZA" => array(
4222
+ "01" => "North-Western Province",
4223
+ "02" => "KwaZulu-Natal",
4224
+ "03" => "Free State",
4225
+ "05" => "Eastern Cape",
4226
+ "06" => "Gauteng",
4227
+ "07" => "Mpumalanga",
4228
+ "08" => "Northern Cape",
4229
+ "09" => "Limpopo",
4230
+ "10" => "North-West",
4231
+ "11" => "Western Cape"),
4232
+ "ZM" => array(
4233
+ "01" => "Western",
4234
+ "02" => "Central",
4235
+ "03" => "Eastern",
4236
+ "04" => "Luapula",
4237
+ "05" => "Northern",
4238
+ "06" => "North-Western",
4239
+ "07" => "Southern",
4240
+ "08" => "Copperbelt",
4241
+ "09" => "Lusaka"),
4242
+ "ZW" => array(
4243
+ "01" => "Manicaland",
4244
+ "02" => "Midlands",
4245
+ "03" => "Mashonaland Central",
4246
+ "04" => "Mashonaland East",
4247
+ "05" => "Mashonaland West",
4248
+ "06" => "Matabeleland North",
4249
+ "07" => "Matabeleland South",
4250
+ "08" => "Masvingo",
4251
+ "09" => "Bulawayo",
4252
+ "10" => "Harare")
4253
+ );
4254
+ ?>
vendor/geoip/geoip/sample-v6.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country by IP Address
5
+
6
+ include("geoip.inc");
7
+
8
+ // Uncomment if querying against GeoIP/Lite City.
9
+ // include("geoipcity.inc");
10
+
11
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPv6.dat",GEOIP_STANDARD);
12
+
13
+ echo geoip_country_code_by_addr_v6($gi, "::24.24.24.24") . "\t" .
14
+ geoip_country_name_by_addr_v6($gi, "::24.24.24.24") . "\n";
15
+ echo geoip_country_code_by_addr_v6($gi, "::80.24.24.24") . "\t" .
16
+ geoip_country_name_by_addr_v6($gi, "::80.24.24.24") . "\n";
17
+
18
+ echo geoip_country_code_by_addr_v6($gi, "2001:4860:0:1001::68") . "\t" .
19
+ geoip_country_name_by_addr_v6($gi, "2001:4860:0:1001::68") . "\n";
20
+
21
+ echo geoip_country_code_by_addr_v6($gi, "2001:67c:26c::") . "\t" .
22
+ geoip_country_name_by_addr_v6($gi, "2001:67c:26c::") . "\n";
23
+
24
+ echo geoip_country_code_by_addr_v6($gi, "2001:67c:3a0:ffff:ffff:ffff:ffff:ffff") . "\t" .
25
+ geoip_country_name_by_addr_v6($gi, "2001:67c:3a0:ffff:ffff:ffff:ffff:ffff") . "\n";
26
+
27
+ echo geoip_country_code_by_name_v6($gi, "ipv6.google.com") . "\t" .
28
+ geoip_country_name_by_name_v6($gi, "ipv6.google.com") . "\n";
29
+
30
+ geoip_close($gi);
31
+
32
+ ?>
vendor/geoip/geoip/sample.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country by IP Address
5
+
6
+ include("geoip.inc");
7
+
8
+ // Uncomment if querying against GeoIP/Lite City.
9
+ // include("geoipcity.inc");
10
+
11
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
12
+
13
+ echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
14
+ geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
15
+ echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
16
+ geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
17
+
18
+ geoip_close($gi);
19
+
20
+ ?>
vendor/geoip/geoip/sample_asn-v6.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country and region by IP Address
5
+ // It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
6
+
7
+ include("geoip.inc");
8
+
9
+ $giasn = geoip_open("/usr/local/share/GeoIP/GeoIPASNumv6.dat",GEOIP_STANDARD);
10
+
11
+ $ip = '2001:4860:0:1001::68';
12
+ $asn = geoip_name_by_addr_v6($giasn,$ip);
13
+ print "$ip has asn " . $asn . "\n";
14
+
15
+ geoip_close($giasn);
16
+
17
+ ?>
18
+
vendor/geoip/geoip/sample_city-v6.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country, region, city,
5
+ // postal code, latitude, and longitude by IP Address.
6
+ // It is designed to work with GeoIP/GeoLite City
7
+
8
+ // Note that you must download the New Format of GeoIP City (GEO-133).
9
+ // The old format (GEO-132) will not work.
10
+
11
+ include("geoipcity.inc");
12
+ include("geoipregionvars.php");
13
+
14
+ // uncomment for Shared Memory support
15
+ // geoip_load_shared_mem("/usr/local/share/GeoIP/GeoIPCity.dat");
16
+ // $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
17
+
18
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoLiteCityv6.dat",GEOIP_STANDARD);
19
+
20
+ $record = geoip_record_by_addr_v6($gi,"::24.24.24.24");
21
+ print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
22
+ print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
23
+ print $record->city . "\n";
24
+ print $record->postal_code . "\n";
25
+ print $record->latitude . "\n";
26
+ print $record->longitude . "\n";
27
+ print $record->metro_code . "\n";
28
+ print $record->area_code . "\n";
29
+ print $record->continent_code . "\n";
30
+
31
+ geoip_close($gi);
32
+
33
+ ?>
vendor/geoip/geoip/sample_city.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country, region, city,
5
+ // postal code, latitude, and longitude by IP Address.
6
+ // It is designed to work with GeoIP/GeoLite City
7
+
8
+ // Note that you must download the New Format of GeoIP City (GEO-133).
9
+ // The old format (GEO-132) will not work.
10
+
11
+ include("geoipcity.inc");
12
+ include("geoipregionvars.php");
13
+
14
+ // uncomment for Shared Memory support
15
+ // geoip_load_shared_mem("/usr/local/share/GeoIP/GeoIPCity.dat");
16
+ // $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
17
+
18
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_STANDARD);
19
+
20
+ $record = geoip_record_by_addr($gi,"24.24.24.24");
21
+ print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
22
+ print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
23
+ print $record->city . "\n";
24
+ print $record->postal_code . "\n";
25
+ print $record->latitude . "\n";
26
+ print $record->longitude . "\n";
27
+ print $record->metro_code . "\n";
28
+ print $record->area_code . "\n";
29
+ print $record->continent_code . "\n";
30
+
31
+ geoip_close($gi);
32
+
33
+ ?>
vendor/geoip/geoip/sample_distributed.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ include("geoipcity.inc");
5
+ include("Net/DNS.php");
6
+
7
+ # replace LICENSE_KEY_HERE with your license key
8
+ $l = "LICENSE_KEY_HERE";
9
+ $ip = "24.24.24.24";
10
+
11
+ if ($l == "LICENSE_KEY_HERE") {
12
+ print "Error, must edit sample_distributed.php to replace LICENSE_KEY_HERE\n";
13
+ exit;
14
+ }
15
+
16
+ $str = getdnsattributes($l,$ip);
17
+ $r = getrecordwithdnsservice($str);
18
+ print "country code: " . $r->country_code . "\n";
19
+ print "country code3: " . $r->country_code3 . "\n";
20
+ print "country name: " . $r->country_name . "\n";
21
+ print "city: " . $r->city . "\n";
22
+ print "region: " . $r->region . "\n";
23
+ print "region name: " . $r->regionname . "\n";
24
+ print "postal_code: " . $r->postal_code . "\n";
25
+ print "latitude: " . $r->latitude . "\n";
26
+ print "longitude: " . $r->longitude . "\n";
27
+ print "area code: " . $r->areacode . "\n";
28
+ print "dma code: " . $r->dmacode . "\n";
29
+ print "isp: " . $r->isp . "\n";
30
+ print "org: " . $r->org . "\n";
31
+ ?>
vendor/geoip/geoip/sample_domain.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country and region by IP Address
5
+ // It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
6
+
7
+ include("geoip.inc");
8
+
9
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPDomain.dat",GEOIP_STANDARD);
10
+
11
+ $domain = geoip_org_by_addr($gi,"80.24.24.24");
12
+ print "80.24.24.24 belongs to " . $domain . "\n";
13
+
14
+ geoip_close($gi);
15
+
16
+ ?>
17
+
vendor/geoip/geoip/sample_netspeed.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ include("geoip.inc");
5
+
6
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPNetSpeed.dat",GEOIP_STANDARD);
7
+
8
+ $netspeed = geoip_country_id_by_addr($gi,"24.24.24.24");
9
+
10
+ //print $n . "\n";
11
+ if ($netspeed == GEOIP_UNKNOWN_SPEED){
12
+ print "Unknown\n";
13
+ }else if ($netspeed == GEOIP_DIALUP_SPEED){
14
+ print "Dailup\n";
15
+ }else if ($netspeed == GEOIP_CABLEDSL_SPEED){
16
+ print "Cable/DSL\n";
17
+ }else if ($netspeed == GEOIP_CORPORATE_SPEED){
18
+ print "Corporate\n";
19
+ }
20
+
21
+ geoip_close($gi);
22
+
23
+ ?>
vendor/geoip/geoip/sample_netspeedcell.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ include("geoip.inc");
5
+
6
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPNetSpeedCell.dat",GEOIP_STANDARD);
7
+
8
+ $netspeed = geoip_name_by_addr($gi,"24.24.24.24");
9
+
10
+ print $netspeed . "\n";
11
+
12
+ geoip_close($gi);
13
+
14
+ ?>
vendor/geoip/geoip/sample_org.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country and region by IP Address
5
+ // It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
6
+
7
+ include("geoip.inc");
8
+
9
+ $giorg = geoip_open("/usr/local/share/GeoIP/GeoIPOrg.dat",GEOIP_STANDARD);
10
+
11
+ $org = geoip_org_by_addr($giorg,"80.24.24.24");
12
+ print "80.24.24.24 belongs to " . $org . "\n";
13
+
14
+ $giisp = geoip_open("/usr/local/share/GeoIP/GeoIPISP.dat",GEOIP_STANDARD);
15
+
16
+ $isp = geoip_org_by_addr($giisp,"80.24.24.24");
17
+ print "80.24.24.24 has isp " . $isp . "\n";
18
+
19
+ geoip_close($giorg);
20
+ geoip_close($giisp);
21
+
22
+ ?>
23
+
vendor/geoip/geoip/sample_region.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+
4
+ // This code demonstrates how to lookup the country and region by IP Address
5
+ // It is designed to work with GeoIP Region available from MaxMind
6
+
7
+ include("geoip.inc");
8
+ include("geoipregionvars.php");
9
+
10
+ $gi = geoip_open("/usr/local/share/GeoIP/GeoIPRegion.dat",GEOIP_STANDARD);
11
+
12
+ list ($countrycode,$region) = geoip_region_by_addr($gi,"24.24.24.24");
13
+ print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
14
+ list ($countrycode,$region) = geoip_region_by_addr($gi,"80.24.24.24");
15
+ print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
16
+ list ($countrycode,$region) = geoip_region_by_addr($gi,"199.243.137.184");
17
+ print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
18
+ geoip_close($gi);
19
+
20
+ ?>
vendor/geoip/geoip/src/geoip.inc ADDED
@@ -0,0 +1,1891 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
4
+ /* geoip.inc
5
+ *
6
+ * Copyright (C) 2007 MaxMind LLC
7
+ *
8
+ * This library is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU Lesser General Public
10
+ * License as published by the Free Software Foundation; either
11
+ * version 2.1 of the License, or (at your option) any later version.
12
+ *
13
+ * This library is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ * Lesser General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Lesser General Public
19
+ * License along with this library; if not, write to the Free Software
20
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+ */
22
+
23
+ define("GEOIP_COUNTRY_BEGIN", 16776960);
24
+ define("GEOIP_STATE_BEGIN_REV0", 16700000);
25
+ define("GEOIP_STATE_BEGIN_REV1", 16000000);
26
+ define("GEOIP_STANDARD", 0);
27
+ define("GEOIP_MEMORY_CACHE", 1);
28
+ define("GEOIP_SHARED_MEMORY", 2);
29
+ define("STRUCTURE_INFO_MAX_SIZE", 20);
30
+ define("DATABASE_INFO_MAX_SIZE", 100);
31
+ define("GEOIP_COUNTRY_EDITION", 1);
32
+ define("GEOIP_PROXY_EDITION", 8);
33
+ define("GEOIP_ASNUM_EDITION", 9);
34
+ define("GEOIP_NETSPEED_EDITION", 10);
35
+ define("GEOIP_REGION_EDITION_REV0", 7);
36
+ define("GEOIP_REGION_EDITION_REV1", 3);
37
+ define("GEOIP_CITY_EDITION_REV0", 6);
38
+ define("GEOIP_CITY_EDITION_REV1", 2);
39
+ define("GEOIP_ORG_EDITION", 5);
40
+ define("GEOIP_ISP_EDITION", 4);
41
+ define("SEGMENT_RECORD_LENGTH", 3);
42
+ define("STANDARD_RECORD_LENGTH", 3);
43
+ define("ORG_RECORD_LENGTH", 4);
44
+ define("MAX_RECORD_LENGTH", 4);
45
+ define("MAX_ORG_RECORD_LENGTH", 300);
46
+ define("GEOIP_SHM_KEY", 0x4f415401);
47
+ define("US_OFFSET", 1);
48
+ define("CANADA_OFFSET", 677);
49
+ define("WORLD_OFFSET", 1353);
50
+ define("FIPS_RANGE", 360);
51
+ define("GEOIP_UNKNOWN_SPEED", 0);
52
+ define("GEOIP_DIALUP_SPEED", 1);
53
+ define("GEOIP_CABLEDSL_SPEED", 2);
54
+ define("GEOIP_CORPORATE_SPEED", 3);
55
+ define("GEOIP_DOMAIN_EDITION", 11);
56
+ define("GEOIP_COUNTRY_EDITION_V6", 12);
57
+ define("GEOIP_LOCATIONA_EDITION", 13);
58
+ define("GEOIP_ACCURACYRADIUS_EDITION", 14);
59
+ define("GEOIP_CITYCOMBINED_EDITION", 15);
60
+ define("GEOIP_CITY_EDITION_REV1_V6", 30);
61
+ define("GEOIP_CITY_EDITION_REV0_V6", 31);
62
+ define("GEOIP_NETSPEED_EDITION_REV1", 32);
63
+ define("GEOIP_NETSPEED_EDITION_REV1_V6", 33);
64
+ define("GEOIP_USERTYPE_EDITION", 28);
65
+ define("GEOIP_USERTYPE_EDITION_V6", 29);
66
+ define("GEOIP_ASNUM_EDITION_V6", 21);
67
+ define("GEOIP_ISP_EDITION_V6", 22);
68
+ define("GEOIP_ORG_EDITION_V6", 23);
69
+ define("GEOIP_DOMAIN_EDITION_V6", 24);
70
+
71
+ define("CITYCOMBINED_FIXED_RECORD", 7);
72
+
73
+ class GeoIP
74
+ {
75
+ public $flags;
76
+ public $filehandle;
77
+ public $memory_buffer;
78
+ public $databaseType;
79
+ public $databaseSegments;
80
+ public $record_length;
81
+ public $shmid;
82
+ public $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
83
+ "" => 0,
84
+ "AP" => 1,
85
+ "EU" => 2,
86
+ "AD" => 3,
87
+ "AE" => 4,
88
+ "AF" => 5,
89
+ "AG" => 6,
90
+ "AI" => 7,
91
+ "AL" => 8,
92
+ "AM" => 9,
93
+ "CW" => 10,
94
+ "AO" => 11,
95
+ "AQ" => 12,
96
+ "AR" => 13,
97
+ "AS" => 14,
98
+ "AT" => 15,
99
+ "AU" => 16,
100
+ "AW" => 17,
101
+ "AZ" => 18,
102
+ "BA" => 19,
103
+ "BB" => 20,
104
+ "BD" => 21,
105
+ "BE" => 22,
106
+ "BF" => 23,
107
+ "BG" => 24,
108
+ "BH" => 25,
109
+ "BI" => 26,
110
+ "BJ" => 27,
111
+ "BM" => 28,
112
+ "BN" => 29,
113
+ "BO" => 30,
114
+ "BR" => 31,
115
+ "BS" => 32,
116
+ "BT" => 33,
117
+ "BV" => 34,
118
+ "BW" => 35,
119
+ "BY" => 36,
120
+ "BZ" => 37,
121
+ "CA" => 38,
122
+ "CC" => 39,
123
+ "CD" => 40,
124
+ "CF" => 41,
125
+ "CG" => 42,
126
+ "CH" => 43,
127
+ "CI" => 44,
128
+ "CK" => 45,
129
+ "CL" => 46,
130
+ "CM" => 47,
131
+ "CN" => 48,
132
+ "CO" => 49,
133
+ "CR" => 50,
134
+ "CU" => 51,
135
+ "CV" => 52,
136
+ "CX" => 53,
137
+ "CY" => 54,
138
+ "CZ" => 55,
139
+ "DE" => 56,
140
+ "DJ" => 57,
141
+ "DK" => 58,
142
+ "DM" => 59,
143
+ "DO" => 60,
144
+ "DZ" => 61,
145
+ "EC" => 62,
146
+ "EE" => 63,
147
+ "EG" => 64,
148
+ "EH" => 65,
149
+ "ER" => 66,
150
+ "ES" => 67,
151
+ "ET" => 68,
152
+ "FI" => 69,
153
+ "FJ" => 70,
154
+ "FK" => 71,
155
+ "FM" => 72,
156
+ "FO" => 73,
157
+ "FR" => 74,
158
+ "SX" => 75,
159
+ "GA" => 76,
160
+ "GB" => 77,
161
+ "GD" => 78,
162
+ "GE" => 79,
163
+ "GF" => 80,
164
+ "GH" => 81,
165
+ "GI" => 82,
166
+ "GL" => 83,
167
+ "GM" => 84,
168
+ "GN" => 85,
169
+ "GP" => 86,
170
+ "GQ" => 87,
171
+ "GR" => 88,
172
+ "GS" => 89,
173
+ "GT" => 90,
174
+ "GU" => 91,
175
+ "GW" => 92,
176
+ "GY" => 93,
177
+ "HK" => 94,
178
+ "HM" => 95,
179
+ "HN" => 96,
180
+ "HR" => 97,
181
+ "HT" => 98,
182
+ "HU" => 99,
183
+ "ID" => 100,
184
+ "IE" => 101,
185
+ "IL" => 102,
186
+ "IN" => 103,
187
+ "IO" => 104,
188
+ "IQ" => 105,
189
+ "IR" => 106,
190
+ "IS" => 107,
191
+ "IT" => 108,
192
+ "JM" => 109,
193
+ "JO" => 110,
194
+ "JP" => 111,
195
+ "KE" => 112,
196
+ "KG" => 113,
197
+ "KH" => 114,
198
+ "KI" => 115,
199
+ "KM" => 116,
200
+ "KN" => 117,
201
+ "KP" => 118,
202
+ "KR" => 119,
203
+ "KW" => 120,
204
+ "KY" => 121,
205
+ "KZ" => 122,
206
+ "LA" => 123,
207
+ "LB" => 124,
208
+ "LC" => 125,
209
+ "LI" => 126,
210
+ "LK" => 127,
211
+ "LR" => 128,
212
+ "LS" => 129,
213
+ "LT" => 130,
214
+ "LU" => 131,
215
+ "LV" => 132,
216
+ "LY" => 133,
217
+ "MA" => 134,
218
+ "MC" => 135,
219
+ "MD" => 136,
220
+ "MG" => 137,
221
+ "MH" => 138,
222
+ "MK" => 139,
223
+ "ML" => 140,
224
+ "MM" => 141,
225
+ "MN" => 142,
226
+ "MO" => 143,
227
+ "MP" => 144,
228
+ "MQ" => 145,
229
+ "MR" => 146,
230
+ "MS" => 147,
231
+ "MT" => 148,
232
+ "MU" => 149,
233
+ "MV" => 150,
234
+ "MW" => 151,
235
+ "MX" => 152,
236
+ "MY" => 153,
237
+ "MZ" => 154,
238
+ "NA" => 155,
239
+ "NC" => 156,
240
+ "NE" => 157,
241
+ "NF" => 158,
242
+ "NG" => 159,
243
+ "NI" => 160,
244
+ "NL" => 161,
245
+ "NO" => 162,
246
+ "NP" => 163,
247
+ "NR" => 164,
248
+ "NU" => 165,
249
+ "NZ" => 166,
250
+ "OM" => 167,
251
+ "PA" => 168,
252
+ "PE" => 169,
253
+ "PF" => 170,
254
+ "PG" => 171,
255
+ "PH" => 172,
256
+ "PK" => 173,
257
+ "PL" => 174,
258
+ "PM" => 175,
259
+ "PN" => 176,
260
+ "PR" => 177,
261
+ "PS" => 178,
262
+ "PT" => 179,
263
+ "PW" => 180,
264
+ "PY" => 181,
265
+ "QA" => 182,
266
+ "RE" => 183,
267
+ "RO" => 184,
268
+ "RU" => 185,
269
+ "RW" => 186,
270
+ "SA" => 187,
271
+ "SB" => 188,
272
+ "SC" => 189,
273
+ "SD" => 190,
274
+ "SE" => 191,
275
+ "SG" => 192,
276
+ "SH" => 193,
277
+ "SI" => 194,
278
+ "SJ" => 195,
279
+ "SK" => 196,
280
+ "SL" => 197,
281
+ "SM" => 198,
282
+ "SN" => 199,
283
+ "SO" => 200,
284
+ "SR" => 201,
285
+ "ST" => 202,
286
+ "SV" => 203,
287
+ "SY" => 204,
288
+ "SZ" => 205,
289
+ "TC" => 206,
290
+ "TD" => 207,
291
+ "TF" => 208,
292
+ "TG" => 209,
293
+ "TH" => 210,
294
+ "TJ" => 211,
295
+ "TK" => 212,
296
+ "TM" => 213,
297
+ "TN" => 214,
298
+ "TO" => 215,
299
+ "TL" => 216,
300
+ "TR" => 217,
301
+ "TT" => 218,
302
+ "TV" => 219,
303
+ "TW" => 220,
304
+ "TZ" => 221,
305
+ "UA" => 222,
306
+ "UG" => 223,
307
+ "UM" => 224,
308
+ "US" => 225,
309
+ "UY" => 226,
310
+ "UZ" => 227,
311
+ "VA" => 228,
312
+ "VC" => 229,
313
+ "VE" => 230,
314
+ "VG" => 231,
315
+ "VI" => 232,
316
+ "VN" => 233,
317
+ "VU" => 234,
318
+ "WF" => 235,
319
+ "WS" => 236,
320
+ "YE" => 237,
321
+ "YT" => 238,
322
+ "RS" => 239,
323
+ "ZA" => 240,
324
+ "ZM" => 241,
325
+ "ME" => 242,
326
+ "ZW" => 243,
327
+ "A1" => 244,
328
+ "A2" => 245,
329
+ "O1" => 246,
330
+ "AX" => 247,
331
+ "GG" => 248,
332
+ "IM" => 249,
333
+ "JE" => 250,
334
+ "BL" => 251,
335
+ "MF" => 252,
336
+ "BQ" => 253,
337
+ "SS" => 254
338
+ );
339
+
340
+ public $GEOIP_COUNTRY_CODES = array(
341
+ "",
342
+ "AP",
343
+ "EU",
344
+ "AD",
345
+ "AE",
346
+ "AF",
347
+ "AG",
348
+ "AI",
349
+ "AL",
350
+ "AM",
351
+ "CW",
352
+ "AO",
353
+ "AQ",
354
+ "AR",
355
+ "AS",
356
+ "AT",
357
+ "AU",
358
+ "AW",
359
+ "AZ",
360
+ "BA",
361
+ "BB",
362
+ "BD",
363
+ "BE",
364
+ "BF",
365
+ "BG",
366
+ "BH",
367
+ "BI",
368
+ "BJ",
369
+ "BM",
370
+ "BN",
371
+ "BO",
372
+ "BR",
373
+ "BS",
374
+ "BT",
375
+ "BV",
376
+ "BW",
377
+ "BY",
378
+ "BZ",
379
+ "CA",
380
+ "CC",
381
+ "CD",
382
+ "CF",
383
+ "CG",
384
+ "CH",
385
+ "CI",
386
+ "CK",
387
+ "CL",
388
+ "CM",
389
+ "CN",
390
+ "CO",
391
+ "CR",
392
+ "CU",
393
+ "CV",
394
+ "CX",
395
+ "CY",
396
+ "CZ",
397
+ "DE",
398
+ "DJ",
399
+ "DK",
400
+ "DM",
401
+ "DO",
402
+ "DZ",
403
+ "EC",
404
+ "EE",
405
+ "EG",
406
+ "EH",
407
+ "ER",
408
+ "ES",
409
+ "ET",
410
+ "FI",
411
+ "FJ",
412
+ "FK",
413
+ "FM",
414
+ "FO",
415
+ "FR",
416
+ "SX",
417
+ "GA",
418
+ "GB",
419
+ "GD",
420
+ "GE",
421
+ "GF",
422
+ "GH",
423
+ "GI",
424
+ "GL",
425
+ "GM",
426
+ "GN",
427
+ "GP",
428
+ "GQ",
429
+ "GR",
430
+ "GS",
431
+ "GT",
432
+ "GU",
433
+ "GW",
434
+ "GY",
435
+ "HK",
436
+ "HM",
437
+ "HN",
438
+ "HR",
439
+ "HT",
440
+ "HU",
441
+ "ID",
442
+ "IE",
443
+ "IL",
444
+ "IN",
445
+ "IO",
446
+ "IQ",
447
+ "IR",
448
+ "IS",
449
+ "IT",
450
+ "JM",
451
+ "JO",
452
+ "JP",
453
+ "KE",
454
+ "KG",
455
+ "KH",
456
+ "KI",
457
+ "KM",
458
+ "KN",
459
+ "KP",
460
+ "KR",
461
+ "KW",
462
+ "KY",
463
+ "KZ",
464
+ "LA",
465
+ "LB",
466
+ "LC",
467
+ "LI",
468
+ "LK",
469
+ "LR",
470
+ "LS",
471
+ "LT",
472
+ "LU",
473
+ "LV",
474
+ "LY",
475
+ "MA",
476
+ "MC",
477
+ "MD",
478
+ "MG",
479
+ "MH",
480
+ "MK",
481
+ "ML",
482
+ "MM",
483
+ "MN",
484
+ "MO",
485
+ "MP",
486
+ "MQ",
487
+ "MR",
488
+ "MS",
489
+ "MT",
490
+ "MU",
491
+ "MV",
492
+ "MW",
493
+ "MX",
494
+ "MY",
495
+ "MZ",
496
+ "NA",
497
+ "NC",
498
+ "NE",
499
+ "NF",
500
+ "NG",
501
+ "NI",
502
+ "NL",
503
+ "NO",
504
+ "NP",
505
+ "NR",
506
+ "NU",
507
+ "NZ",
508
+ "OM",
509
+ "PA",
510
+ "PE",
511
+ "PF",
512
+ "PG",
513
+ "PH",
514
+ "PK",
515
+ "PL",
516
+ "PM",
517
+ "PN",
518
+ "PR",
519
+ "PS",
520
+ "PT",
521
+ "PW",
522
+ "PY",
523
+ "QA",
524
+ "RE",
525
+ "RO",
526
+ "RU",
527
+ "RW",
528
+ "SA",
529
+ "SB",
530
+ "SC",
531
+ "SD",
532
+ "SE",
533
+ "SG",
534
+ "SH",
535
+ "SI",
536
+ "SJ",
537
+ "SK",
538
+ "SL",
539
+ "SM",
540
+ "SN",
541
+ "SO",
542
+ "SR",
543
+ "ST",
544
+ "SV",
545
+ "SY",
546
+ "SZ",
547
+ "TC",
548
+ "TD",
549
+ "TF",
550
+ "TG",
551
+ "TH",
552
+ "TJ",
553
+ "TK",
554
+ "TM",
555
+ "TN",
556
+ "TO",
557
+ "TL",
558
+ "TR",
559
+ "TT",
560
+ "TV",
561
+ "TW",
562
+ "TZ",
563
+ "UA",
564
+ "UG",
565
+ "UM",
566
+ "US",
567
+ "UY",
568
+ "UZ",
569
+ "VA",
570
+ "VC",
571
+ "VE",
572
+ "VG",
573
+ "VI",
574
+ "VN",
575
+ "VU",
576
+ "WF",
577
+ "WS",
578
+ "YE",
579
+ "YT",
580
+ "RS",
581
+ "ZA",
582
+ "ZM",
583
+ "ME",
584
+ "ZW",
585
+ "A1",
586
+ "A2",
587
+ "O1",
588
+ "AX",
589
+ "GG",
590
+ "IM",
591
+ "JE",
592
+ "BL",
593
+ "MF",
594
+ "BQ",
595
+ "SS",
596
+ "O1"
597
+ );
598
+
599
+ public $GEOIP_COUNTRY_CODES3 = array(
600
+ "",
601
+ "AP",
602
+ "EU",
603
+ "AND",
604
+ "ARE",
605
+ "AFG",
606
+ "ATG",
607
+ "AIA",
608
+ "ALB",
609
+ "ARM",
610
+ "CUW",
611
+ "AGO",
612
+ "ATA",
613
+ "ARG",
614
+ "ASM",
615
+ "AUT",
616
+ "AUS",
617
+ "ABW",
618
+ "AZE",
619
+ "BIH",
620
+ "BRB",
621
+ "BGD",
622
+ "BEL",
623
+ "BFA",
624
+ "BGR",
625
+ "BHR",
626
+ "BDI",
627
+ "BEN",
628
+ "BMU",
629
+ "BRN",
630
+ "BOL",
631
+ "BRA",
632
+ "BHS",
633
+ "BTN",
634
+ "BVT",
635
+ "BWA",
636
+ "BLR",
637
+ "BLZ",
638
+ "CAN",
639
+ "CCK",
640
+ "COD",
641
+ "CAF",
642
+ "COG",
643
+ "CHE",
644
+ "CIV",
645
+ "COK",
646
+ "CHL",
647
+ "CMR",
648
+ "CHN",
649
+ "COL",
650
+ "CRI",
651
+ "CUB",
652
+ "CPV",
653
+ "CXR",
654
+ "CYP",
655
+ "CZE",
656
+ "DEU",
657
+ "DJI",
658
+ "DNK",
659
+ "DMA",
660
+ "DOM",
661
+ "DZA",
662
+ "ECU",
663
+ "EST",
664
+ "EGY",
665
+ "ESH",
666
+ "ERI",
667
+ "ESP",
668
+ "ETH",
669
+ "FIN",
670
+ "FJI",
671
+ "FLK",
672
+ "FSM",
673
+ "FRO",
674
+ "FRA",
675
+ "SXM",
676
+ "GAB",
677
+ "GBR",
678
+ "GRD",
679
+ "GEO",
680
+ "GUF",
681
+ "GHA",
682
+ "GIB",
683
+ "GRL",
684
+ "GMB",
685
+ "GIN",
686
+ "GLP",
687
+ "GNQ",
688
+ "GRC",
689
+ "SGS",
690
+ "GTM",
691
+ "GUM",
692
+ "GNB",
693
+ "GUY",
694
+ "HKG",
695
+ "HMD",
696
+ "HND",
697
+ "HRV",
698
+ "HTI",
699
+ "HUN",
700
+ "IDN",
701
+ "IRL",
702
+ "ISR",
703
+ "IND",
704
+ "IOT",
705
+ "IRQ",
706
+ "IRN",
707
+ "ISL",
708
+ "ITA",
709
+ "JAM",
710
+ "JOR",
711
+ "JPN",
712
+ "KEN",
713
+ "KGZ",
714
+ "KHM",
715
+ "KIR",
716
+ "COM",
717
+ "KNA",
718
+ "PRK",
719
+ "KOR",
720
+ "KWT",
721
+ "CYM",
722
+ "KAZ",
723
+ "LAO",
724
+ "LBN",
725
+ "LCA",
726
+ "LIE",
727
+ "LKA",
728
+ "LBR",
729
+ "LSO",
730
+ "LTU",
731
+ "LUX",
732
+ "LVA",
733
+ "LBY",
734
+ "MAR",
735
+ "MCO",
736
+ "MDA",
737
+ "MDG",
738
+ "MHL",
739
+ "MKD",
740
+ "MLI",
741
+ "MMR",
742
+ "MNG",
743
+ "MAC",
744
+ "MNP",
745
+ "MTQ",
746
+ "MRT",
747
+ "MSR",
748
+ "MLT",
749
+ "MUS",
750
+ "MDV",
751
+ "MWI",
752
+ "MEX",
753
+ "MYS",
754
+ "MOZ",
755
+ "NAM",
756
+ "NCL",
757
+ "NER",
758
+ "NFK",
759
+ "NGA",
760
+ "NIC",
761
+ "NLD",
762
+ "NOR",
763
+ "NPL",
764
+ "NRU",
765
+ "NIU",
766
+ "NZL",
767
+ "OMN",
768
+ "PAN",
769
+ "PER",
770
+ "PYF",
771
+ "PNG",
772
+ "PHL",
773
+ "PAK",
774
+ "POL",
775
+ "SPM",
776
+ "PCN",
777
+ "PRI",
778
+ "PSE",
779
+ "PRT",
780
+ "PLW",
781
+ "PRY",
782
+ "QAT",
783
+ "REU",
784
+ "ROU",
785
+ "RUS",
786
+ "RWA",
787
+ "SAU",
788
+ "SLB",
789
+ "SYC",
790
+ "SDN",
791
+ "SWE",
792
+ "SGP",
793
+ "SHN",
794
+ "SVN",
795
+ "SJM",
796
+ "SVK",
797
+ "SLE",
798
+ "SMR",
799
+ "SEN",
800
+ "SOM",
801
+ "SUR",
802
+ "STP",
803
+ "SLV",
804
+ "SYR",
805
+ "SWZ",
806
+ "TCA",
807
+ "TCD",
808
+ "ATF",
809
+ "TGO",
810
+ "THA",
811
+ "TJK",
812
+ "TKL",
813
+ "TKM",
814
+ "TUN",
815
+ "TON",
816
+ "TLS",
817
+ "TUR",
818
+ "TTO",
819
+ "TUV",
820
+ "TWN",
821
+ "TZA",
822
+ "UKR",
823
+ "UGA",
824
+ "UMI",
825
+ "USA",
826
+ "URY",
827
+ "UZB",
828
+ "VAT",
829
+ "VCT",
830
+ "VEN",
831
+ "VGB",
832
+ "VIR",
833
+ "VNM",
834
+ "VUT",
835
+ "WLF",
836
+ "WSM",
837
+ "YEM",
838
+ "MYT",
839
+ "SRB",
840
+ "ZAF",
841
+ "ZMB",
842
+ "MNE",
843
+ "ZWE",
844
+ "A1",
845
+ "A2",
846
+ "O1",
847
+ "ALA",
848
+ "GGY",
849
+ "IMN",
850
+ "JEY",
851
+ "BLM",
852
+ "MAF",
853
+ "BES",
854
+ "SSD",
855
+ "O1"
856
+ );
857
+
858
+ public $GEOIP_COUNTRY_NAMES = array(
859
+ "",
860
+ "Asia/Pacific Region",
861
+ "Europe",
862
+ "Andorra",
863
+ "United Arab Emirates",
864
+ "Afghanistan",
865
+ "Antigua and Barbuda",
866
+ "Anguilla",
867
+ "Albania",
868
+ "Armenia",
869
+ "Curacao",
870
+ "Angola",
871
+ "Antarctica",
872
+ "Argentina",
873
+ "American Samoa",
874
+ "Austria",
875
+ "Australia",
876
+ "Aruba",
877
+ "Azerbaijan",
878
+ "Bosnia and Herzegovina",
879
+ "Barbados",
880
+ "Bangladesh",
881
+ "Belgium",
882
+ "Burkina Faso",
883
+ "Bulgaria",
884
+ "Bahrain",
885
+ "Burundi",
886
+ "Benin",
887
+ "Bermuda",
888
+ "Brunei Darussalam",
889
+ "Bolivia",
890
+ "Brazil",
891
+ "Bahamas",
892
+ "Bhutan",
893
+ "Bouvet Island",
894
+ "Botswana",
895
+ "Belarus",
896
+ "Belize",
897
+ "Canada",
898
+ "Cocos (Keeling) Islands",
899
+ "Congo, The Democratic Republic of the",
900
+ "Central African Republic",
901
+ "Congo",
902
+ "Switzerland",
903
+ "Cote D'Ivoire",
904
+ "Cook Islands",
905
+ "Chile",
906
+ "Cameroon",
907
+ "China",
908
+ "Colombia",
909
+ "Costa Rica",
910
+ "Cuba",
911
+ "Cape Verde",
912
+ "Christmas Island",
913
+ "Cyprus",
914
+ "Czech Republic",
915
+ "Germany",
916
+ "Djibouti",
917
+ "Denmark",
918
+ "Dominica",
919
+ "Dominican Republic",
920
+ "Algeria",
921
+ "Ecuador",
922
+ "Estonia",
923
+ "Egypt",
924
+ "Western Sahara",
925
+ "Eritrea",
926
+ "Spain",
927
+ "Ethiopia",
928
+ "Finland",
929
+ "Fiji",
930
+ "Falkland Islands (Malvinas)",
931
+ "Micronesia, Federated States of",
932
+ "Faroe Islands",
933
+ "France",
934
+ "Sint Maarten (Dutch part)",
935
+ "Gabon",
936
+ "United Kingdom",
937
+ "Grenada",
938
+ "Georgia",
939
+ "French Guiana",
940
+ "Ghana",
941
+ "Gibraltar",
942
+ "Greenland",
943
+ "Gambia",
944
+ "Guinea",
945
+ "Guadeloupe",
946
+ "Equatorial Guinea",
947
+ "Greece",
948
+ "South Georgia and the South Sandwich Islands",
949
+ "Guatemala",
950
+ "Guam",
951
+ "Guinea-Bissau",
952
+ "Guyana",
953
+ "Hong Kong",
954
+ "Heard Island and McDonald Islands",
955
+ "Honduras",
956
+ "Croatia",
957
+ "Haiti",
958
+ "Hungary",
959
+ "Indonesia",
960
+ "Ireland",
961
+ "Israel",
962
+ "India",
963
+ "British Indian Ocean Territory",
964
+ "Iraq",
965
+ "Iran, Islamic Republic of",
966
+ "Iceland",
967
+ "Italy",
968
+ "Jamaica",
969
+ "Jordan",
970
+ "Japan",
971
+ "Kenya",
972
+ "Kyrgyzstan",
973
+ "Cambodia",
974
+ "Kiribati",
975
+ "Comoros",
976
+ "Saint Kitts and Nevis",
977
+ "Korea, Democratic People's Republic of",
978
+ "Korea, Republic of",
979
+ "Kuwait",
980
+ "Cayman Islands",
981
+ "Kazakhstan",
982
+ "Lao People's Democratic Republic",
983
+ "Lebanon",
984
+ "Saint Lucia",
985
+ "Liechtenstein",
986
+ "Sri Lanka",
987
+ "Liberia",
988
+ "Lesotho",
989
+ "Lithuania",
990
+ "Luxembourg",
991
+ "Latvia",
992
+ "Libya",
993
+ "Morocco",
994
+ "Monaco",
995
+ "Moldova, Republic of",
996
+ "Madagascar",
997
+ "Marshall Islands",
998
+ "Macedonia",
999
+ "Mali",
1000
+ "Myanmar",
1001
+ "Mongolia",
1002
+ "Macau",
1003
+ "Northern Mariana Islands",
1004
+ "Martinique",
1005
+ "Mauritania",
1006
+ "Montserrat",
1007
+ "Malta",
1008
+ "Mauritius",
1009
+ "Maldives",
1010
+ "Malawi",
1011
+ "Mexico",
1012
+ "Malaysia",
1013
+ "Mozambique",
1014
+ "Namibia",
1015
+ "New Caledonia",
1016
+ "Niger",
1017
+ "Norfolk Island",
1018
+ "Nigeria",
1019
+ "Nicaragua",
1020
+ "Netherlands",
1021
+ "Norway",
1022
+ "Nepal",
1023
+ "Nauru",
1024
+ "Niue",
1025
+ "New Zealand",
1026
+ "Oman",
1027
+ "Panama",
1028
+ "Peru",
1029
+ "French Polynesia",
1030
+ "Papua New Guinea",
1031
+ "Philippines",
1032
+ "Pakistan",
1033
+ "Poland",
1034
+ "Saint Pierre and Miquelon",
1035
+ "Pitcairn Islands",
1036
+ "Puerto Rico",
1037
+ "Palestinian Territory",
1038
+ "Portugal",
1039
+ "Palau",
1040
+ "Paraguay",
1041
+ "Qatar",
1042
+ "Reunion",
1043
+ "Romania",
1044
+ "Russian Federation",
1045
+ "Rwanda",
1046
+ "Saudi Arabia",
1047
+ "Solomon Islands",
1048
+ "Seychelles",
1049
+ "Sudan",
1050
+ "Sweden",
1051
+ "Singapore",
1052
+ "Saint Helena",
1053
+ "Slovenia",
1054
+ "Svalbard and Jan Mayen",
1055
+ "Slovakia",
1056
+ "Sierra Leone",
1057
+ "San Marino",
1058
+ "Senegal",
1059
+ "Somalia",
1060
+ "Suriname",
1061
+ "Sao Tome and Principe",
1062
+ "El Salvador",
1063
+ "Syrian Arab Republic",
1064
+ "Swaziland",
1065
+ "Turks and Caicos Islands",
1066
+ "Chad",
1067
+ "French Southern Territories",
1068
+ "Togo",
1069
+ "Thailand",
1070
+ "Tajikistan",
1071
+ "Tokelau",
1072
+ "Turkmenistan",
1073
+ "Tunisia",
1074
+ "Tonga",
1075
+ "Timor-Leste",
1076
+ "Turkey",
1077
+ "Trinidad and Tobago",
1078
+ "Tuvalu",
1079
+ "Taiwan",
1080
+ "Tanzania, United Republic of",
1081
+ "Ukraine",
1082
+ "Uganda",
1083
+ "United States Minor Outlying Islands",
1084
+ "United States",
1085
+ "Uruguay",
1086
+ "Uzbekistan",
1087
+ "Holy See (Vatican City State)",
1088
+ "Saint Vincent and the Grenadines",
1089
+ "Venezuela",
1090
+ "Virgin Islands, British",
1091
+ "Virgin Islands, U.S.",
1092
+ "Vietnam",
1093
+ "Vanuatu",
1094
+ "Wallis and Futuna",
1095
+ "Samoa",
1096
+ "Yemen",
1097
+ "Mayotte",
1098
+ "Serbia",
1099
+ "South Africa",
1100
+ "Zambia",
1101
+ "Montenegro",
1102
+ "Zimbabwe",
1103
+ "Anonymous Proxy",
1104
+ "Satellite Provider",
1105
+ "Other",
1106
+ "Aland Islands",
1107
+ "Guernsey",
1108
+ "Isle of Man",
1109
+ "Jersey",
1110
+ "Saint Barthelemy",
1111
+ "Saint Martin",
1112
+ "Bonaire, Saint Eustatius and Saba",
1113
+ "South Sudan",
1114
+ "Other"
1115
+ );
1116
+
1117
+ public $GEOIP_CONTINENT_CODES = array(
1118
+ "--",
1119
+ "AS",
1120
+ "EU",
1121
+ "EU",
1122
+ "AS",
1123
+ "AS",
1124
+ "NA",
1125
+ "NA",
1126
+ "EU",
1127
+ "AS",
1128
+ "NA",
1129
+ "AF",
1130
+ "AN",
1131
+ "SA",
1132
+ "OC",
1133
+ "EU",
1134
+ "OC",
1135
+ "NA",
1136
+ "AS",
1137
+ "EU",
1138
+ "NA",
1139
+ "AS",
1140
+ "EU",
1141
+ "AF",
1142
+ "EU",
1143
+ "AS",
1144
+ "AF",
1145
+ "AF",
1146
+ "NA",
1147
+ "AS",
1148
+ "SA",
1149
+ "SA",
1150
+ "NA",
1151
+ "AS",
1152
+ "AN",
1153
+ "AF",
1154
+ "EU",
1155
+ "NA",
1156
+ "NA",
1157
+ "AS",
1158
+ "AF",
1159
+ "AF",
1160
+ "AF",
1161
+ "EU",
1162
+ "AF",
1163
+ "OC",
1164
+ "SA",
1165
+ "AF",
1166
+ "AS",
1167
+ "SA",
1168
+ "NA",
1169
+ "NA",
1170
+ "AF",
1171
+ "AS",
1172
+ "AS",
1173
+ "EU",
1174
+ "EU",
1175
+ "AF",
1176
+ "EU",
1177
+ "NA",
1178
+ "NA",
1179
+ "AF",
1180
+ "SA",
1181
+ "EU",
1182
+ "AF",
1183
+ "AF",
1184
+ "AF",
1185
+ "EU",
1186
+ "AF",
1187
+ "EU",
1188
+ "OC",
1189
+ "SA",
1190
+ "OC",
1191
+ "EU",
1192
+ "EU",
1193
+ "NA",
1194
+ "AF",
1195
+ "EU",
1196
+ "NA",
1197
+ "AS",
1198
+ "SA",
1199
+ "AF",
1200
+ "EU",
1201
+ "NA",
1202
+ "AF",
1203
+ "AF",
1204
+ "NA",
1205
+ "AF",
1206
+ "EU",
1207
+ "AN",
1208
+ "NA",
1209
+ "OC",
1210
+ "AF",
1211
+ "SA",
1212
+ "AS",
1213
+ "AN",
1214
+ "NA",
1215
+ "EU",
1216
+ "NA",
1217
+ "EU",
1218
+ "AS",
1219
+ "EU",
1220
+ "AS",
1221
+ "AS",
1222
+ "AS",
1223
+ "AS",
1224
+ "AS",
1225
+ "EU",
1226
+ "EU",
1227
+ "NA",
1228
+ "AS",
1229
+ "AS",
1230
+ "AF",
1231
+ "AS",
1232
+ "AS",
1233
+ "OC",
1234
+ "AF",
1235
+ "NA",
1236
+ "AS",
1237
+ "AS",
1238
+ "AS",
1239
+ "NA",
1240
+ "AS",
1241
+ "AS",
1242
+ "AS",
1243
+ "NA",
1244
+ "EU",
1245
+ "AS",
1246
+ "AF",
1247
+ "AF",
1248
+ "EU",
1249
+ "EU",
1250
+ "EU",
1251
+ "AF",
1252
+ "AF",
1253
+ "EU",
1254
+ "EU",
1255
+ "AF",
1256
+ "OC",
1257
+ "EU",
1258
+ "AF",
1259
+ "AS",
1260
+ "AS",
1261
+ "AS",
1262
+ "OC",
1263
+ "NA",
1264
+ "AF",
1265
+ "NA",
1266
+ "EU",
1267
+ "AF",
1268
+ "AS",
1269
+ "AF",
1270
+ "NA",
1271
+ "AS",
1272
+ "AF",
1273
+ "AF",
1274
+ "OC",
1275
+ "AF",
1276
+ "OC",
1277
+ "AF",
1278
+ "NA",
1279
+ "EU",
1280
+ "EU",
1281
+ "AS",
1282
+ "OC",
1283
+ "OC",
1284
+ "OC",
1285
+ "AS",
1286
+ "NA",
1287
+ "SA",
1288
+ "OC",
1289
+ "OC",
1290
+ "AS",
1291
+ "AS",
1292
+ "EU",
1293
+ "NA",
1294
+ "OC",
1295
+ "NA",
1296
+ "AS",
1297
+ "EU",
1298
+ "OC",
1299
+ "SA",
1300
+ "AS",
1301
+ "AF",
1302
+ "EU",
1303
+ "EU",
1304
+ "AF",
1305
+ "AS",
1306
+ "OC",
1307
+ "AF",
1308
+ "AF",
1309
+ "EU",
1310
+ "AS",
1311
+ "AF",
1312
+ "EU",
1313
+ "EU",
1314
+ "EU",
1315
+ "AF",
1316
+ "EU",
1317
+ "AF",
1318
+ "AF",
1319
+ "SA",
1320
+ "AF",
1321
+ "NA",
1322
+ "AS",
1323
+ "AF",
1324
+ "NA",
1325
+ "AF",
1326
+ "AN",
1327
+ "AF",
1328
+ "AS",
1329
+ "AS",
1330
+ "OC",
1331
+ "AS",
1332
+ "AF",
1333
+ "OC",
1334
+ "AS",
1335
+ "EU",
1336
+ "NA",
1337
+ "OC",
1338
+ "AS",
1339
+ "AF",
1340
+ "EU",
1341
+ "AF",
1342
+ "OC",
1343
+ "NA",
1344
+ "SA",
1345
+ "AS",
1346
+ "EU",
1347
+ "NA",
1348
+ "SA",
1349
+ "NA",
1350
+ "NA",
1351
+ "AS",
1352
+ "OC",
1353
+ "OC",
1354
+ "OC",
1355
+ "AS",
1356
+ "AF",
1357
+ "EU",
1358
+ "AF",
1359
+ "AF",
1360
+ "EU",
1361
+ "AF",
1362
+ "--",
1363
+ "--",
1364
+ "--",
1365
+ "EU",
1366
+ "EU",
1367
+ "EU",
1368
+ "EU",
1369
+ "NA",
1370
+ "NA",
1371
+ "NA",
1372
+ "AF",
1373
+ "--"
1374
+ );
1375
+ }
1376
+
1377
+ function geoip_load_shared_mem($file)
1378
+ {
1379
+ $fp = fopen($file, "rb");
1380
+ if (!$fp) {
1381
+ print "error opening $file: $php_errormsg\n";
1382
+ exit;
1383
+ }
1384
+ $s_array = fstat($fp);
1385
+ $size = $s_array['size'];
1386
+ if (($shmid = @shmop_open(GEOIP_SHM_KEY, "w", 0, 0))) {
1387
+ shmop_delete($shmid);
1388
+ shmop_close($shmid);
1389
+ }
1390
+ $shmid = shmop_open(GEOIP_SHM_KEY, "c", 0644, $size);
1391
+ shmop_write($shmid, fread($fp, $size), 0);
1392
+ shmop_close($shmid);
1393
+ }
1394
+
1395
+ function _setup_segments($gi)
1396
+ {
1397
+ $gi->databaseType = GEOIP_COUNTRY_EDITION;
1398
+ $gi->record_length = STANDARD_RECORD_LENGTH;
1399
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
1400
+ $offset = @shmop_size($gi->shmid) - 3;
1401
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
1402
+ $delim = @shmop_read($gi->shmid, $offset, 3);
1403
+ $offset += 3;
1404
+ if ($delim == (chr(255) . chr(255) . chr(255))) {
1405
+ $gi->databaseType = ord(@shmop_read($gi->shmid, $offset, 1));
1406
+ if ($gi->databaseType >= 106) {
1407
+ $gi->databaseType -= 105;
1408
+ }
1409
+ $offset++;
1410
+
1411
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
1412
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
1413
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
1414
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
1415
+ } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
1416
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
1417
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
1418
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
1419
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
1420
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
1421
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
1422
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
1423
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
1424
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
1425
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
1426
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
1427
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
1428
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
1429
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
1430
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
1431
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
1432
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)
1433
+ ) {
1434
+ $gi->databaseSegments = 0;
1435
+ $buf = @shmop_read($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
1436
+ for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) {
1437
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
1438
+ }
1439
+ if (($gi->databaseType == GEOIP_ORG_EDITION)
1440
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
1441
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
1442
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
1443
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
1444
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
1445
+ ) {
1446
+ $gi->record_length = ORG_RECORD_LENGTH;
1447
+ }
1448
+ }
1449
+ break;
1450
+ } else {
1451
+ $offset -= 4;
1452
+ }
1453
+ }
1454
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION) ||
1455
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) ||
1456
+ ($gi->databaseType == GEOIP_PROXY_EDITION) ||
1457
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)
1458
+ ) {
1459
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
1460
+ }
1461
+ } else {
1462
+ $filepos = ftell($gi->filehandle);
1463
+ fseek($gi->filehandle, -3, SEEK_END);
1464
+ for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
1465
+ $delim = fread($gi->filehandle, 3);
1466
+ if ($delim == (chr(255) . chr(255) . chr(255))) {
1467
+ $gi->databaseType = ord(fread($gi->filehandle, 1));
1468
+ if ($gi->databaseType >= 106) {
1469
+ $gi->databaseType -= 105;
1470
+ }
1471
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
1472
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
1473
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
1474
+ $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
1475
+ } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
1476
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
1477
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
1478
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
1479
+ || ($gi->databaseType == GEOIP_ORG_EDITION)
1480
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
1481
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
1482
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
1483
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
1484
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
1485
+ || ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
1486
+ || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
1487
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
1488
+ || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
1489
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
1490
+ || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
1491
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION)
1492
+ || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
1493
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION)
1494
+ || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)
1495
+ ) {
1496
+ $gi->databaseSegments = 0;
1497
+ $buf = fread($gi->filehandle, SEGMENT_RECORD_LENGTH);
1498
+ for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) {
1499
+ $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
1500
+ }
1501
+ if (($gi->databaseType == GEOIP_ORG_EDITION)
1502
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION)
1503
+ || ($gi->databaseType == GEOIP_ISP_EDITION)
1504
+ || ($gi->databaseType == GEOIP_ORG_EDITION_V6)
1505
+ || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
1506
+ || ($gi->databaseType == GEOIP_ISP_EDITION_V6)
1507
+ ) {
1508
+ $gi->record_length = ORG_RECORD_LENGTH;
1509
+ }
1510
+ }
1511
+ break;
1512
+ } else {
1513
+ fseek($gi->filehandle, -4, SEEK_CUR);
1514
+ }
1515
+ }
1516
+ if (($gi->databaseType == GEOIP_COUNTRY_EDITION) ||
1517
+ ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) ||
1518
+ ($gi->databaseType == GEOIP_PROXY_EDITION) ||
1519
+ ($gi->databaseType == GEOIP_NETSPEED_EDITION)
1520
+ ) {
1521
+ $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
1522
+ }
1523
+ fseek($gi->filehandle, $filepos, SEEK_SET);
1524
+ }
1525
+ return $gi;
1526
+ }
1527
+
1528
+ function geoip_open($filename, $flags)
1529
+ {
1530
+ $gi = new GeoIP;
1531
+ $gi->flags = $flags;
1532
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
1533
+ $gi->shmid = @shmop_open(GEOIP_SHM_KEY, "a", 0, 0);
1534
+ } else {
1535
+ $gi->filehandle = fopen($filename, "rb") or die("Can not open $filename\n");
1536
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
1537
+ $s_array = fstat($gi->filehandle);
1538
+ $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
1539
+ }
1540
+ }
1541
+
1542
+ $gi = _setup_segments($gi);
1543
+ return $gi;
1544
+ }
1545
+
1546
+ function geoip_close($gi)
1547
+ {
1548
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
1549
+ return true;
1550
+ }
1551
+
1552
+ return fclose($gi->filehandle);
1553
+ }
1554
+
1555
+ function geoip_country_id_by_name_v6($gi, $name)
1556
+ {
1557
+ $rec = dns_get_record($name, DNS_AAAA);
1558
+ if (!$rec) {
1559
+ return false;
1560
+ }
1561
+ $addr = $rec[0]["ipv6"];
1562
+ if (!$addr || $addr == $name) {
1563
+ return false;
1564
+ }
1565
+ return geoip_country_id_by_addr_v6($gi, $addr);
1566
+ }
1567
+
1568
+ function geoip_country_id_by_name($gi, $name)
1569
+ {
1570
+ $addr = gethostbyname($name);
1571
+ if (!$addr || $addr == $name) {
1572
+ return false;
1573
+ }
1574
+ return geoip_country_id_by_addr($gi, $addr);
1575
+ }
1576
+
1577
+ function geoip_country_code_by_name_v6($gi, $name)
1578
+ {
1579
+ $country_id = geoip_country_id_by_name_v6($gi, $name);
1580
+ if ($country_id !== false) {
1581
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
1582
+ }
1583
+ return false;
1584
+ }
1585
+
1586
+ function geoip_country_code_by_name($gi, $name)
1587
+ {
1588
+ $country_id = geoip_country_id_by_name($gi, $name);
1589
+ if ($country_id !== false) {
1590
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
1591
+ }
1592
+ return false;
1593
+ }
1594
+
1595
+ function geoip_country_name_by_name_v6($gi, $name)
1596
+ {
1597
+ $country_id = geoip_country_id_by_name_v6($gi, $name);
1598
+ if ($country_id !== false) {
1599
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
1600
+ }
1601
+ return false;
1602
+ }
1603
+
1604
+ function geoip_country_name_by_name($gi, $name)
1605
+ {
1606
+ $country_id = geoip_country_id_by_name($gi, $name);
1607
+ if ($country_id !== false) {
1608
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
1609
+ }
1610
+ return false;
1611
+ }
1612
+
1613
+ function geoip_country_id_by_addr_v6($gi, $addr)
1614
+ {
1615
+ $ipnum = inet_pton($addr);
1616
+ return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
1617
+ }
1618
+
1619
+ function geoip_country_id_by_addr($gi, $addr)
1620
+ {
1621
+ $ipnum = ip2long($addr);
1622
+ return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
1623
+ }
1624
+
1625
+ function geoip_country_code_by_addr_v6($gi, $addr)
1626
+ {
1627
+ $country_id = geoip_country_id_by_addr_v6($gi, $addr);
1628
+ if ($country_id !== false) {
1629
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
1630
+ }
1631
+ return false;
1632
+ }
1633
+
1634
+ function geoip_country_code_by_addr($gi, $addr)
1635
+ {
1636
+ if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
1637
+ $record = geoip_record_by_addr($gi, $addr);
1638
+ if ($record !== false) {
1639
+ return $record->country_code;
1640
+ }
1641
+ } else {
1642
+ $country_id = geoip_country_id_by_addr($gi, $addr);
1643
+ if ($country_id !== false) {
1644
+ return $gi->GEOIP_COUNTRY_CODES[$country_id];
1645
+ }
1646
+ }
1647
+ return false;
1648
+ }
1649
+
1650
+ function geoip_country_name_by_addr_v6($gi, $addr)
1651
+ {
1652
+ $country_id = geoip_country_id_by_addr_v6($gi, $addr);
1653
+ if ($country_id !== false) {
1654
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
1655
+ }
1656
+ return false;
1657
+ }
1658
+
1659
+ function geoip_country_name_by_addr($gi, $addr)
1660
+ {
1661
+ if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
1662
+ $record = geoip_record_by_addr($gi, $addr);
1663
+ return $record->country_name;
1664
+ } else {
1665
+ $country_id = geoip_country_id_by_addr($gi, $addr);
1666
+ if ($country_id !== false) {
1667
+ return $gi->GEOIP_COUNTRY_NAMES[$country_id];
1668
+ }
1669
+ }
1670
+ return false;
1671
+ }
1672
+
1673
+ function _geoip_seek_country_v6($gi, $ipnum)
1674
+ {
1675
+ # arrays from unpack start with offset 1
1676
+ # yet another php mystery. array_merge work around
1677
+ # this broken behaviour
1678
+ $v6vec = array_merge(unpack("C16", $ipnum));
1679
+
1680
+ $offset = 0;
1681
+ for ($depth = 127; $depth >= 0; --$depth) {
1682
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
1683
+ $buf = _safe_substr(
1684
+ $gi->memory_buffer,
1685
+ 2 * $gi->record_length * $offset,
1686
+ 2 * $gi->record_length
1687
+ );
1688
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
1689
+ $buf = @shmop_read(
1690
+ $gi->shmid,
1691
+ 2 * $gi->record_length * $offset,
1692
+ 2 * $gi->record_length
1693
+ );
1694
+ } else {
1695
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
1696
+ or die("fseek failed");
1697
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
1698
+ }
1699
+ $x = array(0, 0);
1700
+ for ($i = 0; $i < 2; ++$i) {
1701
+ for ($j = 0; $j < $gi->record_length; ++$j) {
1702
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
1703
+ }
1704
+ }
1705
+
1706
+ $bnum = 127 - $depth;
1707
+ $idx = $bnum >> 3;
1708
+ $b_mask = 1 << ($bnum & 7 ^ 7);
1709
+ if (($v6vec[$idx] & $b_mask) > 0) {
1710
+ if ($x[1] >= $gi->databaseSegments) {
1711
+ return $x[1];
1712
+ }
1713
+ $offset = $x[1];
1714
+ } else {
1715
+ if ($x[0] >= $gi->databaseSegments) {
1716
+ return $x[0];
1717
+ }
1718
+ $offset = $x[0];
1719
+ }
1720
+ }
1721
+ trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
1722
+ return false;
1723
+ }
1724
+
1725
+ function _geoip_seek_country($gi, $ipnum)
1726
+ {
1727
+ $offset = 0;
1728
+ for ($depth = 31; $depth >= 0; --$depth) {
1729
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
1730
+ $buf = _safe_substr(
1731
+ $gi->memory_buffer,
1732
+ 2 * $gi->record_length * $offset,
1733
+ 2 * $gi->record_length
1734
+ );
1735
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
1736
+ $buf = @shmop_read(
1737
+ $gi->shmid,
1738
+ 2 * $gi->record_length * $offset,
1739
+ 2 * $gi->record_length
1740
+ );
1741
+ } else {
1742
+ fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
1743
+ or die("fseek failed");
1744
+ $buf = fread($gi->filehandle, 2 * $gi->record_length);
1745
+ }
1746
+ $x = array(0, 0);
1747
+ for ($i = 0; $i < 2; ++$i) {
1748
+ for ($j = 0; $j < $gi->record_length; ++$j) {
1749
+ $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
1750
+ }
1751
+ }
1752
+ if ($ipnum & (1 << $depth)) {
1753
+ if ($x[1] >= $gi->databaseSegments) {
1754
+ return $x[1];
1755
+ }
1756
+ $offset = $x[1];
1757
+ } else {
1758
+ if ($x[0] >= $gi->databaseSegments) {
1759
+ return $x[0];
1760
+ }
1761
+ $offset = $x[0];
1762
+ }
1763
+ }
1764
+ trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
1765
+ return false;
1766
+ }
1767
+
1768
+ function _common_get_org($gi, $seek_org)
1769
+ {
1770
+ $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
1771
+ if ($gi->flags & GEOIP_SHARED_MEMORY) {
1772
+ $org_buf = @shmop_read($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
1773
+ } else {
1774
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
1775
+ $org_buf = fread($gi->filehandle, MAX_ORG_RECORD_LENGTH);
1776
+ }
1777
+ $org_buf = _safe_substr($org_buf, 0, strpos($org_buf, "\0"));
1778
+ return $org_buf;
1779
+ }
1780
+
1781
+ function _get_org_v6($gi, $ipnum)
1782
+ {
1783
+ $seek_org = _geoip_seek_country_v6($gi, $ipnum);
1784
+ if ($seek_org == $gi->databaseSegments) {
1785
+ return null;
1786
+ }
1787
+ return _common_get_org($gi, $seek_org);
1788
+ }
1789
+
1790
+ function _get_org($gi, $ipnum)
1791
+ {
1792
+ $seek_org = _geoip_seek_country($gi, $ipnum);
1793
+ if ($seek_org == $gi->databaseSegments) {
1794
+ return null;
1795
+ }
1796
+ return _common_get_org($gi, $seek_org);
1797
+ }
1798
+
1799
+
1800
+ function geoip_name_by_addr_v6($gi, $addr)
1801
+ {
1802
+ if ($addr == null) {
1803
+ return 0;
1804
+ }
1805
+ $ipnum = inet_pton($addr);
1806
+ return _get_org_v6($gi, $ipnum);
1807
+ }
1808
+
1809
+ function geoip_name_by_addr($gi, $addr)
1810
+ {
1811
+ if ($addr == null) {
1812
+ return 0;
1813
+ }
1814
+ $ipnum = ip2long($addr);
1815
+ return _get_org($gi, $ipnum);
1816
+ }
1817
+
1818
+ function geoip_org_by_addr($gi, $addr)
1819
+ {
1820
+ return geoip_name_by_addr($gi, $addr);
1821
+ }
1822
+
1823
+ function _get_region($gi, $ipnum)
1824
+ {
1825
+ if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) {
1826
+ $seek_region = _geoip_seek_country($gi, $ipnum) - GEOIP_STATE_BEGIN_REV0;
1827
+ if ($seek_region >= 1000) {
1828
+ $country_code = "US";
1829
+ $region = chr(($seek_region - 1000) / 26 + 65) . chr(($seek_region - 1000) % 26 + 65);
1830
+ } else {
1831
+ $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
1832
+ $region = "";
1833
+ }
1834
+ return array($country_code, $region);
1835
+ } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
1836
+ $seek_region = _geoip_seek_country($gi, $ipnum) - GEOIP_STATE_BEGIN_REV1;
1837
+ if ($seek_region < US_OFFSET) {
1838
+ $country_code = "";
1839
+ $region = "";
1840
+ } elseif ($seek_region < CANADA_OFFSET) {
1841
+ $country_code = "US";
1842
+ $region = chr(($seek_region - US_OFFSET) / 26 + 65) . chr(($seek_region - US_OFFSET) % 26 + 65);
1843
+ } elseif ($seek_region < WORLD_OFFSET) {
1844
+ $country_code = "CA";
1845
+ $region = chr(($seek_region - CANADA_OFFSET) / 26 + 65) . chr(($seek_region - CANADA_OFFSET) % 26 + 65);
1846
+ } else {
1847
+ $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
1848
+ $region = "";
1849
+ }
1850
+ return array($country_code, $region);
1851
+ }
1852
+ }
1853
+
1854
+ function geoip_region_by_addr($gi, $addr)
1855
+ {
1856
+ if ($addr == null) {
1857
+ return 0;
1858
+ }
1859
+ $ipnum = ip2long($addr);
1860
+ return _get_region($gi, $ipnum);
1861
+ }
1862
+
1863
+ function getdnsattributes($l, $ip)
1864
+ {
1865
+ $r = new Net_DNS_Resolver();
1866
+ $r->nameservers = array("ws1.maxmind.com");
1867
+ $p = $r->search($l . "." . $ip . ".s.maxmind.com", "TXT", "IN");
1868
+ $str = is_object($p->answer[0]) ? $p->answer[0]->string() : '';
1869
+ $str = substr($str, 1, -1);
1870
+ return $str;
1871
+ }
1872
+
1873
+ function _safe_substr($string, $start, $length)
1874
+ {
1875
+ // workaround php's broken substr, strpos, etc handling with
1876
+ // mbstring.func_overload and mbstring.internal_encoding
1877
+ $mbExists = extension_loaded('mbstring');
1878
+
1879
+ if ($mbExists) {
1880
+ $enc = mb_internal_encoding();
1881
+ mb_internal_encoding('ISO-8859-1');
1882
+ }
1883
+
1884
+ $buf = substr($string, $start, $length);
1885
+
1886
+ if ($mbExists) {
1887
+ mb_internal_encoding($enc);
1888
+ }
1889
+
1890
+ return $buf;
1891
+ }
vendor/geoip/geoip/src/geoipcity.inc ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* geoipcity.inc
4
+ *
5
+ * Copyright (C) 2013 MaxMind, Inc.
6
+ *
7
+ * This library is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * This library is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with this library; if not, write to the Free Software
19
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ */
21
+
22
+
23
+ define("FULL_RECORD_LENGTH", 50);
24
+
25
+ require_once 'geoip.inc';
26
+ require_once 'geoipregionvars.php';
27
+
28
+ class geoiprecord
29
+ {
30
+ public $country_code;
31
+ public $country_code3;
32
+ public $country_name;
33
+ public $region;
34
+ public $city;
35
+ public $postal_code;
36
+ public $latitude;
37
+ public $longitude;
38
+ public $area_code;
39
+ public $dma_code; # metro and dma code are the same. use metro_code
40
+ public $metro_code;
41
+ public $continent_code;
42
+ }
43
+
44
+ class geoipdnsrecord
45
+ {
46
+ public $country_code;
47
+ public $country_code3;
48
+ public $country_name;
49
+ public $region;
50
+ public $regionname;
51
+ public $city;
52
+ public $postal_code;
53
+ public $latitude;
54
+ public $longitude;
55
+ public $areacode;
56
+ public $dmacode;
57
+ public $isp;
58
+ public $org;
59
+ public $metrocode;
60
+ }
61
+
62
+ function getrecordwithdnsservice($str)
63
+ {
64
+ $record = new geoipdnsrecord;
65
+ $keyvalue = explode(";", $str);
66
+ foreach ($keyvalue as $keyvalue2) {
67
+ list($key, $value) = explode("=", $keyvalue2);
68
+ if ($key == "co") {
69
+ $record->country_code = $value;
70
+ }
71
+ if ($key == "ci") {
72
+ $record->city = $value;
73
+ }
74
+ if ($key == "re") {
75
+ $record->region = $value;
76
+ }
77
+ if ($key == "ac") {
78
+ $record->areacode = $value;
79
+ }
80
+ if ($key == "dm" || $key == "me") {
81
+ $record->dmacode = $value;
82
+ $record->metrocode = $value;
83
+ }
84
+ if ($key == "is") {
85
+ $record->isp = $value;
86
+ }
87
+ if ($key == "or") {
88
+ $record->org = $value;
89
+ }
90
+ if ($key == "zi") {
91
+ $record->postal_code = $value;
92
+ }
93
+ if ($key == "la") {
94
+ $record->latitude = $value;
95
+ }
96
+ if ($key == "lo") {
97
+ $record->longitude = $value;
98
+ }
99
+ }
100
+ $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
101
+ $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
102
+ $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
103
+ if ($record->region != "") {
104
+ if (($record->country_code == "US") || ($record->country_code == "CA")) {
105
+ $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
106
+ } else {
107
+ $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
108
+ }
109
+ }
110
+ return $record;
111
+ }
112
+
113
+
114
+ function _get_record_v6($gi, $ipnum)
115
+ {
116
+ $seek_country = _geoip_seek_country_v6($gi, $ipnum);
117
+ if ($seek_country == $gi->databaseSegments) {
118
+ return null;
119
+ }
120
+ return _common_get_record($gi, $seek_country);
121
+ }
122
+
123
+ function _common_get_record($gi, $seek_country)
124
+ {
125
+ // workaround php's broken substr, strpos, etc handling with
126
+ // mbstring.func_overload and mbstring.internal_encoding
127
+ $mbExists = extension_loaded('mbstring');
128
+ if ($mbExists) {
129
+ $enc = mb_internal_encoding();
130
+ mb_internal_encoding('ISO-8859-1');
131
+ }
132
+
133
+ $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
134
+
135
+ if ($gi->flags & GEOIP_MEMORY_CACHE) {
136
+ $record_buf = substr($gi->memory_buffer, $record_pointer, FULL_RECORD_LENGTH);
137
+ } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
138
+ $record_buf = @shmop_read($gi->shmid, $record_pointer, FULL_RECORD_LENGTH);
139
+ } else {
140
+ fseek($gi->filehandle, $record_pointer, SEEK_SET);
141
+ $record_buf = fread($gi->filehandle, FULL_RECORD_LENGTH);
142
+ }
143
+ $record = new geoiprecord;
144
+ $record_buf_pos = 0;
145
+ $char = ord(substr($record_buf, $record_buf_pos, 1));
146
+ $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
147
+ $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
148
+ $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
149
+ $record->continent_code = $gi->GEOIP_CONTINENT_CODES[$char];
150
+ $record_buf_pos++;
151
+ $str_length = 0;
152
+
153
+ // Get region
154
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
155
+ while ($char != 0) {
156
+ $str_length++;
157
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
158
+ }
159
+ if ($str_length > 0) {
160
+ $record->region = substr($record_buf, $record_buf_pos, $str_length);
161
+ }
162
+ $record_buf_pos += $str_length + 1;
163
+ $str_length = 0;
164
+ // Get city
165
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
166
+ while ($char != 0) {
167
+ $str_length++;
168
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
169
+ }
170
+ if ($str_length > 0) {
171
+ $record->city = substr($record_buf, $record_buf_pos, $str_length);
172
+ }
173
+ $record_buf_pos += $str_length + 1;
174
+ $str_length = 0;
175
+ // Get postal code
176
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
177
+ while ($char != 0) {
178
+ $str_length++;
179
+ $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1));
180
+ }
181
+ if ($str_length > 0) {
182
+ $record->postal_code = substr($record_buf, $record_buf_pos, $str_length);
183
+ }
184
+ $record_buf_pos += $str_length + 1;
185
+ $str_length = 0;
186
+ // Get latitude and longitude
187
+ $latitude = 0;
188
+ $longitude = 0;
189
+ for ($j = 0; $j < 3; ++$j) {
190
+ $char = ord(substr($record_buf, $record_buf_pos++, 1));
191
+ $latitude += ($char << ($j * 8));
192
+ }
193
+ $record->latitude = ($latitude / 10000) - 180;
194
+ for ($j = 0; $j < 3; ++$j) {
195
+ $char = ord(substr($record_buf, $record_buf_pos++, 1));
196
+ $longitude += ($char << ($j * 8));
197
+ }
198
+ $record->longitude = ($longitude / 10000) - 180;
199
+ if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType) {
200
+ $metroarea_combo = 0;
201
+ if ($record->country_code == "US") {
202
+ for ($j = 0; $j < 3; ++$j) {
203
+ $char = ord(substr($record_buf, $record_buf_pos++, 1));
204
+ $metroarea_combo += ($char << ($j * 8));
205
+ }
206
+ $record->metro_code = $record->dma_code = floor($metroarea_combo / 1000);
207
+ $record->area_code = $metroarea_combo % 1000;
208
+ }
209
+ }
210
+ if ($mbExists) {
211
+ mb_internal_encoding($enc);
212
+ }
213
+ return $record;
214
+ }
215
+
216
+ function GeoIP_record_by_addr_v6($gi, $addr)
217
+ {
218
+ if ($addr == null) {
219
+ return 0;
220
+ }
221
+ $ipnum = inet_pton($addr);
222
+ return _get_record_v6($gi, $ipnum);
223
+ }
224
+
225
+ function _get_record($gi, $ipnum)
226
+ {
227
+ $seek_country = _geoip_seek_country($gi, $ipnum);
228
+ if ($seek_country == $gi->databaseSegments) {
229
+ return null;
230
+ }
231
+ return _common_get_record($gi, $seek_country);
232
+ }
233
+
234
+ function GeoIP_record_by_addr($gi, $addr)
235
+ {
236
+ if ($addr == null) {
237
+ return 0;
238
+ }
239
+ $ipnum = ip2long($addr);
240
+ return _get_record($gi, $ipnum);
241
+ }
vendor/geoip/geoip/src/geoipregionvars.php ADDED
@@ -0,0 +1,4447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ # Copyright 2013 MaxMind, Inc. All Rights Reserved
3
+ $GEOIP_REGION_NAME = array(
4
+ "AD" => array(
5
+ "02" => "Canillo",
6
+ "03" => "Encamp",
7
+ "04" => "La Massana",
8
+ "05" => "Ordino",
9
+ "06" => "Sant Julia de Loria",
10
+ "07" => "Andorra la Vella",
11
+ "08" => "Escaldes-Engordany"
12
+ ),
13
+ "AE" => array(
14
+ "01" => "Abu Dhabi",
15
+ "02" => "Ajman",
16
+ "03" => "Dubai",
17
+ "04" => "Fujairah",
18
+ "05" => "Ras Al Khaimah",
19
+ "06" => "Sharjah",
20
+ "07" => "Umm Al Quwain"
21
+ ),
22
+ "AF" => array(
23
+ "01" => "Badakhshan",
24
+ "02" => "Badghis",
25
+ "03" => "Baghlan",
26
+ "05" => "Bamian",
27
+ "06" => "Farah",
28
+ "07" => "Faryab",
29
+ "08" => "Ghazni",
30
+ "09" => "Ghowr",
31
+ "10" => "Helmand",
32
+ "11" => "Herat",
33
+ "13" => "Kabol",
34
+ "14" => "Kapisa",
35
+ "17" => "Lowgar",
36
+ "18" => "Nangarhar",
37
+ "19" => "Nimruz",
38
+ "23" => "Kandahar",
39
+ "24" => "Kondoz",
40
+ "26" => "Takhar",
41
+ "27" => "Vardak",
42
+ "28" => "Zabol",
43
+ "29" => "Paktika",
44
+ "30" => "Balkh",
45
+ "31" => "Jowzjan",
46
+ "32" => "Samangan",
47
+ "33" => "Sar-e Pol",
48
+ "34" => "Konar",
49
+ "35" => "Laghman",
50
+ "36" => "Paktia",
51
+ "37" => "Khowst",
52
+ "38" => "Nurestan",
53
+ "39" => "Oruzgan",
54
+ "40" => "Parvan",
55
+ "41" => "Daykondi",
56
+ "42" => "Panjshir"
57
+ ),
58
+ "AG" => array(
59
+ "01" => "Barbuda",
60
+ "03" => "Saint George",
61
+ "04" => "Saint John",
62
+ "05" => "Saint Mary",
63
+ "06" => "Saint Paul",
64
+ "07" => "Saint Peter",
65
+ "08" => "Saint Philip",
66
+ "09" => "Redonda"
67
+ ),
68
+ "AL" => array(
69
+ "40" => "Berat",
70
+ "41" => "Diber",
71
+ "42" => "Durres",
72
+ "43" => "Elbasan",
73
+ "44" => "Fier",
74
+ "45" => "Gjirokaster",
75
+ "46" => "Korce",
76
+ "47" => "Kukes",
77
+ "48" => "Lezhe",
78
+ "49" => "Shkoder",
79
+ "50" => "Tirane",
80
+ "51" => "Vlore"
81
+ ),
82
+ "AM" => array(
83
+ "01" => "Aragatsotn",
84
+ "02" => "Ararat",
85
+ "03" => "Armavir",
86
+ "04" => "Geghark'unik'",
87
+ "05" => "Kotayk'",
88
+ "06" => "Lorri",
89
+ "07" => "Shirak",
90
+ "08" => "Syunik'",
91
+ "09" => "Tavush",
92
+ "10" => "Vayots' Dzor",
93
+ "11" => "Yerevan"
94
+ ),
95
+ "AO" => array(
96
+ "01" => "Benguela",
97
+ "02" => "Bie",
98
+ "03" => "Cabinda",
99
+ "04" => "Cuando Cubango",
100
+ "05" => "Cuanza Norte",
101
+ "06" => "Cuanza Sul",
102
+ "07" => "Cunene",
103
+ "08" => "Huambo",
104
+ "09" => "Huila",
105
+ "12" => "Malanje",
106
+ "13" => "Namibe",
107
+ "14" => "Moxico",
108
+ "15" => "Uige",
109
+ "16" => "Zaire",
110
+ "17" => "Lunda Norte",
111
+ "18" => "Lunda Sul",
112
+ "19" => "Bengo",
113
+ "20" => "Luanda"
114
+ ),
115
+ "AR" => array(
116
+ "01" => "Buenos Aires",
117
+ "02" => "Catamarca",
118
+ "03" => "Chaco",
119
+ "04" => "Chubut",
120
+ "05" => "Cordoba",
121
+ "06" => "Corrientes",
122
+ "07" => "Distrito Federal",
123
+ "08" => "Entre Rios",
124
+ "09" => "Formosa",
125
+ "10" => "Jujuy",
126
+ "11" => "La Pampa",
127
+ "12" => "La Rioja",
128
+ "13" => "Mendoza",
129
+ "14" => "Misiones",
130
+ "15" => "Neuquen",
131
+ "16" => "Rio Negro",
132
+ "17" => "Salta",
133
+ "18" => "San Juan",
134
+ "19" => "San Luis",
135
+ "20" => "Santa Cruz",
136
+ "21" => "Santa Fe",
137
+ "22" => "Santiago del Estero",
138
+ "23" => "Tierra del Fuego",
139
+ "24" => "Tucuman"
140
+ ),
141
+ "AT" => array(
142
+ "01" => "Burgenland",
143
+ "02" => "Karnten",
144
+ "03" => "Niederosterreich",
145
+ "04" => "Oberosterreich",
146
+ "05" => "Salzburg",
147
+ "06" => "Steiermark",
148
+ "07" => "Tirol",
149
+ "08" => "Vorarlberg",
150
+ "09" => "Wien"
151
+ ),
152
+ "AU" => array(
153
+ "01" => "Australian Capital Territory",
154
+ "02" => "New South Wales",
155
+ "03" => "Northern Territory",
156
+ "04" => "Queensland",
157
+ "05" => "South Australia",
158
+ "06" => "Tasmania",
159
+ "07" => "Victoria",
160
+ "08" => "Western Australia"
161
+ ),
162
+ "AZ" => array(
163
+ "01" => "Abseron",
164
+ "02" => "Agcabadi",
165
+ "03" => "Agdam",
166
+ "04" => "Agdas",
167
+ "05" => "Agstafa",
168
+ "06" => "Agsu",
169
+ "07" => "Ali Bayramli",
170
+ "08" => "Astara",
171
+ "09" => "Baki",
172
+ "10" => "Balakan",
173
+ "11" => "Barda",
174
+ "12" => "Beylaqan",
175
+ "13" => "Bilasuvar",
176
+ "14" => "Cabrayil",
177
+ "15" => "Calilabad",
178
+ "16" => "Daskasan",
179
+ "17" => "Davaci",
180
+ "18" => "Fuzuli",
181
+ "19" => "Gadabay",
182
+ "20" => "Ganca",
183
+ "21" => "Goranboy",
184
+ "22" => "Goycay",
185
+ "23" => "Haciqabul",
186
+ "24" => "Imisli",
187
+ "25" => "Ismayilli",
188
+ "26" => "Kalbacar",
189
+ "27" => "Kurdamir",
190
+ "28" => "Lacin",
191
+ "29" => "Lankaran",
192
+ "30" => "Lankaran",
193
+ "31" => "Lerik",
194
+ "32" => "Masalli",
195
+ "33" => "Mingacevir",
196
+ "34" => "Naftalan",
197
+ "35" => "Naxcivan",
198
+ "36" => "Neftcala",
199
+ "37" => "Oguz",
200
+ "38" => "Qabala",
201
+ "39" => "Qax",
202
+ "40" => "Qazax",
203
+ "41" => "Qobustan",
204
+ "42" => "Quba",
205
+ "43" => "Qubadli",
206
+ "44" => "Qusar",
207
+ "45" => "Saatli",
208
+ "46" => "Sabirabad",
209
+ "47" => "Saki",
210
+ "48" => "Saki",
211
+ "49" => "Salyan",
212
+ "50" => "Samaxi",
213
+ "51" => "Samkir",
214
+ "52" => "Samux",
215
+ "53" => "Siyazan",
216
+ "54" => "Sumqayit",
217
+ "55" => "Susa",
218
+ "56" => "Susa",
219
+ "57" => "Tartar",
220
+ "58" => "Tovuz",
221
+ "59" => "Ucar",
222
+ "60" => "Xacmaz",
223
+ "61" => "Xankandi",
224
+ "62" => "Xanlar",
225
+ "63" => "Xizi",
226
+ "64" => "Xocali",
227
+ "65" => "Xocavand",
228
+ "66" => "Yardimli",
229
+ "67" => "Yevlax",
230
+ "68" => "Yevlax",
231
+ "69" => "Zangilan",
232
+ "70" => "Zaqatala",
233
+ "71" => "Zardab"
234
+ ),
235
+ "BA" => array(
236
+ "01" => "Federation of Bosnia and Herzegovina",
237
+ "02" => "Republika Srpska"
238
+ ),
239
+ "BB" => array(
240
+ "01" => "Christ Church",
241
+ "02" => "Saint Andrew",
242
+ "03" => "Saint George",
243
+ "04" => "Saint James",
244
+ "05" => "Saint John",
245
+ "06" => "Saint Joseph",
246
+ "07" => "Saint Lucy",
247
+ "08" => "Saint Michael",
248
+ "09" => "Saint Peter",
249
+ "10" => "Saint Philip",
250
+ "11" => "Saint Thomas"
251
+ ),
252
+ "BD" => array(
253
+ "81" => "Dhaka",
254
+ "82" => "Khulna",
255
+ "83" => "Rajshahi",
256
+ "84" => "Chittagong",
257
+ "85" => "Barisal",
258
+ "86" => "Sylhet"
259
+ ),
260
+ "BE" => array(
261
+ "01" => "Antwerpen",
262
+ "03" => "Hainaut",
263
+ "04" => "Liege",
264
+ "05" => "Limburg",
265
+ "06" => "Luxembourg",
266
+ "07" => "Namur",
267
+ "08" => "Oost-Vlaanderen",
268
+ "09" => "West-Vlaanderen",
269
+ "10" => "Brabant Wallon",
270
+ "11" => "Brussels Hoofdstedelijk Gewest",
271
+ "12" => "Vlaams-Brabant",
272
+ "13" => "Flanders",
273
+ "14" => "Wallonia"
274
+ ),
275
+ "BF" => array(
276
+ "15" => "Bam",
277
+ "19" => "Boulkiemde",
278
+ "20" => "Ganzourgou",
279
+ "21" => "Gnagna",
280
+ "28" => "Kouritenga",
281
+ "33" => "Oudalan",
282
+ "34" => "Passore",
283
+ "36" => "Sanguie",
284
+ "40" => "Soum",
285
+ "42" => "Tapoa",
286
+ "44" => "Zoundweogo",
287
+ "45" => "Bale",
288
+ "46" => "Banwa",
289
+ "47" => "Bazega",
290
+ "48" => "Bougouriba",
291
+ "49" => "Boulgou",
292
+ "50" => "Gourma",
293
+ "51" => "Houet",
294
+ "52" => "Ioba",
295
+ "53" => "Kadiogo",
296
+ "54" => "Kenedougou",
297
+ "55" => "Komoe",
298
+ "56" => "Komondjari",
299
+ "57" => "Kompienga",
300
+ "58" => "Kossi",
301
+ "59" => "Koulpelogo",
302
+ "60" => "Kourweogo",
303
+ "61" => "Leraba",
304
+ "62" => "Loroum",
305
+ "63" => "Mouhoun",
306
+ "64" => "Namentenga",
307
+ "65" => "Naouri",
308
+ "66" => "Nayala",
309
+ "67" => "Noumbiel",
310
+ "68" => "Oubritenga",
311
+ "69" => "Poni",
312
+ "70" => "Sanmatenga",
313
+ "71" => "Seno",
314
+ "72" => "Sissili",
315
+ "73" => "Sourou",
316
+ "74" => "Tuy",
317
+ "75" => "Yagha",
318
+ "76" => "Yatenga",
319
+ "77" => "Ziro",
320
+ "78" => "Zondoma"
321
+ ),
322
+ "BG" => array(
323
+ "33" => "Mikhaylovgrad",
324
+ "38" => "Blagoevgrad",
325
+ "39" => "Burgas",
326
+ "40" => "Dobrich",
327
+ "41" => "Gabrovo",
328
+ "42" => "Grad Sofiya",
329
+ "43" => "Khaskovo",
330
+ "44" => "Kurdzhali",
331
+ "45" => "Kyustendil",
332
+ "46" => "Lovech",
333
+ "47" => "Montana",
334
+ "48" => "Pazardzhik",
335
+ "49" => "Pernik",
336
+ "50" => "Pleven",
337
+ "51" => "Plovdiv",
338
+ "52" => "Razgrad",
339
+ "53" => "Ruse",
340
+ "54" => "Shumen",
341
+ "55" => "Silistra",
342
+ "56" => "Sliven",
343
+ "57" => "Smolyan",
344
+ "58" => "Sofiya",
345
+ "59" => "Stara Zagora",
346
+ "60" => "Turgovishte",
347
+ "61" => "Varna",
348
+ "62" => "Veliko Turnovo",
349
+ "63" => "Vidin",
350
+ "64" => "Vratsa",
351
+ "65" => "Yambol"
352
+ ),
353
+ "BH" => array(
354
+ "01" => "Al Hadd",
355
+ "02" => "Al Manamah",
356
+ "05" => "Jidd Hafs",
357
+ "06" => "Sitrah",
358
+ "08" => "Al Mintaqah al Gharbiyah",
359
+ "09" => "Mintaqat Juzur Hawar",
360
+ "10" => "Al Mintaqah ash Shamaliyah",
361
+ "11" => "Al Mintaqah al Wusta",
362
+ "12" => "Madinat",
363
+ "13" => "Ar Rifa",
364
+ "14" => "Madinat Hamad",
365
+ "15" => "Al Muharraq",
366
+ "16" => "Al Asimah",
367
+ "17" => "Al Janubiyah",
368
+ "18" => "Ash Shamaliyah",
369
+ "19" => "Al Wusta"
370
+ ),
371
+ "BI" => array(
372
+ "02" => "Bujumbura",
373
+ "09" => "Bubanza",
374
+ "10" => "Bururi",
375
+ "11" => "Cankuzo",
376
+ "12" => "Cibitoke",
377
+ "13" => "Gitega",
378
+ "14" => "Karuzi",
379
+ "15" => "Kayanza",
380
+ "16" => "Kirundo",
381
+ "17" => "Makamba",
382
+ "18" => "Muyinga",
383
+ "19" => "Ngozi",
384
+ "20" => "Rutana",
385
+ "21" => "Ruyigi",
386
+ "22" => "Muramvya",
387
+ "23" => "Mwaro"
388
+ ),
389
+ "BJ" => array(
390
+ "07" => "Alibori",
391
+ "08" => "Atakora",
392
+ "09" => "Atlanyique",
393
+ "10" => "Borgou",
394
+ "11" => "Collines",
395
+ "12" => "Kouffo",
396
+ "13" => "Donga",
397
+ "14" => "Littoral",
398
+ "15" => "Mono",
399
+ "16" => "Oueme",
400
+ "17" => "Plateau",
401
+ "18" => "Zou"
402
+ ),
403
+ "BM" => array(
404
+ "01" => "Devonshire",
405
+ "02" => "Hamilton",
406
+ "03" => "Hamilton",
407
+ "04" => "Paget",
408
+ "05" => "Pembroke",
409
+ "06" => "Saint George",
410
+ "07" => "Saint George's",
411
+ "08" => "Sandys",
412
+ "09" => "Smiths",
413
+ "10" => "Southampton",
414
+ "11" => "Warwick"
415
+ ),
416
+ "BN" => array(
417
+ "07" => "Alibori",
418
+ "08" => "Belait",
419
+ "09" => "Brunei and Muara",
420
+ "10" => "Temburong",
421
+ "11" => "Collines",
422
+ "12" => "Kouffo",
423
+ "13" => "Donga",
424
+ "14" => "Littoral",
425
+ "15" => "Tutong",
426
+ "16" => "Oueme",
427
+ "17" => "Plateau",
428
+ "18" => "Zou"
429
+ ),
430
+ "BO" => array(
431
+ "01" => "Chuquisaca",
432
+ "02" => "Cochabamba",
433
+ "03" => "El Beni",
434
+ "04" => "La Paz",
435
+ "05" => "Oruro",
436
+ "06" => "Pando",
437
+ "07" => "Potosi",
438
+ "08" => "Santa Cruz",
439
+ "09" => "Tarija"
440
+ ),
441
+ "BR" => array(
442
+ "01" => "Acre",
443
+ "02" => "Alagoas",
444
+ "03" => "Amapa",
445
+ "04" => "Amazonas",
446
+ "05" => "Bahia",
447
+ "06" => "Ceara",
448
+ "07" => "Distrito Federal",
449
+ "08" => "Espirito Santo",
450
+ "11" => "Mato Grosso do Sul",
451
+ "13" => "Maranhao",
452
+ "14" => "Mato Grosso",
453
+ "15" => "Minas Gerais",
454
+ "16" => "Para",
455
+ "17" => "Paraiba",
456
+ "18" => "Parana",
457
+ "20" => "Piaui",
458
+ "21" => "Rio de Janeiro",
459
+ "22" => "Rio Grande do Norte",
460
+ "23" => "Rio Grande do Sul",
461
+ "24" => "Rondonia",
462
+ "25" => "Roraima",
463
+ "26" => "Santa Catarina",
464
+ "27" => "Sao Paulo",
465
+ "28" => "Sergipe",
466
+ "29" => "Goias",
467
+ "30" => "Pernambuco",
468
+ "31" => "Tocantins"
469
+ ),
470
+ "BS" => array(
471
+ "05" => "Bimini",
472
+ "06" => "Cat Island",
473
+ "10" => "Exuma",
474
+ "13" => "Inagua",
475
+ "15" => "Long Island",
476
+ "16" => "Mayaguana",
477
+ "18" => "Ragged Island",
478
+ "22" => "Harbour Island",
479
+ "23" => "New Providence",
480
+ "24" => "Acklins and Crooked Islands",
481
+ "25" => "Freeport",
482
+ "26" => "Fresh Creek",
483
+ "27" => "Governor's Harbour",
484
+ "28" => "Green Turtle Cay",
485
+ "29" => "High Rock",
486
+ "30" => "Kemps Bay",
487
+ "31" => "Marsh Harbour",
488
+ "32" => "Nichollstown and Berry Islands",
489
+ "33" => "Rock Sound",
490
+ "34" => "Sandy Point",
491
+ "35" => "San Salvador and Rum Cay"
492
+ ),
493
+ "BT" => array(
494
+ "05" => "Bumthang",
495
+ "06" => "Chhukha",
496
+ "07" => "Chirang",
497
+ "08" => "Daga",
498
+ "09" => "Geylegphug",
499
+ "10" => "Ha",
500
+ "11" => "Lhuntshi",
501
+ "12" => "Mongar",
502
+ "13" => "Paro",
503
+ "14" => "Pemagatsel",
504
+ "15" => "Punakha",
505
+ "16" => "Samchi",
506
+ "17" => "Samdrup",
507
+ "18" => "Shemgang",
508
+ "19" => "Tashigang",
509
+ "20" => "Thimphu",
510
+ "21" => "Tongsa",
511
+ "22" => "Wangdi Phodrang"
512
+ ),
513
+ "BW" => array(
514
+ "01" => "Central",
515
+ "03" => "Ghanzi",
516
+ "04" => "Kgalagadi",
517
+ "05" => "Kgatleng",
518
+ "06" => "Kweneng",
519
+ "08" => "North-East",
520
+ "09" => "South-East",
521
+ "10" => "Southern",
522
+ "11" => "North-West"
523
+ ),
524
+ "BY" => array(
525
+ "01" => "Brestskaya Voblasts'",
526
+ "02" => "Homyel'skaya Voblasts'",
527
+ "03" => "Hrodzyenskaya Voblasts'",
528
+ "04" => "Minsk",
529
+ "05" => "Minskaya Voblasts'",
530
+ "06" => "Mahilyowskaya Voblasts'",
531
+ "07" => "Vitsyebskaya Voblasts'"
532
+ ),
533
+ "BZ" => array(
534
+ "01" => "Belize",
535
+ "02" => "Cayo",
536
+ "03" => "Corozal",
537
+ "04" => "Orange Walk",
538
+ "05" => "Stann Creek",
539
+ "06" => "Toledo"
540
+ ),
541
+ "CA" => array(
542
+ "AB" => "Alberta",
543
+ "BC" => "British Columbia",
544
+ "MB" => "Manitoba",
545
+ "NB" => "New Brunswick",
546
+ "NL" => "Newfoundland",
547
+ "NS" => "Nova Scotia",
548
+ "NT" => "Northwest Territories",
549
+ "NU" => "Nunavut",
550
+ "ON" => "Ontario",
551
+ "PE" => "Prince Edward Island",
552
+ "QC" => "Quebec",
553
+ "SK" => "Saskatchewan",
554
+ "YT" => "Yukon Territory"
555
+ ),
556
+ "CD" => array(
557
+ "01" => "Bandundu",
558
+ "02" => "Equateur",
559
+ "04" => "Kasai-Oriental",
560
+ "05" => "Katanga",
561
+ "06" => "Kinshasa",
562
+ "08" => "Bas-Congo",
563
+ "09" => "Orientale",
564
+ "10" => "Maniema",
565
+ "11" => "Nord-Kivu",
566
+ "12" => "Sud-Kivu"
567
+ ),
568
+ "CF" => array(
569
+ "01" => "Bamingui-Bangoran",
570
+ "02" => "Basse-Kotto",
571
+ "03" => "Haute-Kotto",
572
+ "04" => "Mambere-Kadei",
573
+ "05" => "Haut-Mbomou",
574
+ "06" => "Kemo",
575
+ "07" => "Lobaye",
576
+ "08" => "Mbomou",
577
+ "09" => "Nana-Mambere",
578
+ "11" => "Ouaka",
579
+ "12" => "Ouham",
580
+ "13" => "Ouham-Pende",
581
+ "14" => "Cuvette-Ouest",
582
+ "15" => "Nana-Grebizi",
583
+ "16" => "Sangha-Mbaere",
584
+ "17" => "Ombella-Mpoko",
585
+ "18" => "Bangui"
586
+ ),
587
+ "CG" => array(
588
+ "01" => "Bouenza",
589
+ "04" => "Kouilou",
590
+ "05" => "Lekoumou",
591
+ "06" => "Likouala",
592
+ "07" => "Niari",
593
+ "08" => "Plateaux",
594
+ "10" => "Sangha",
595
+ "11" => "Pool",
596
+ "12" => "Brazzaville",
597
+ "13" => "Cuvette",
598
+ "14" => "Cuvette-Ouest"
599
+ ),
600
+ "CH" => array(
601
+ "01" => "Aargau",
602
+ "02" => "Ausser-Rhoden",
603
+ "03" => "Basel-Landschaft",
604
+ "04" => "Basel-Stadt",
605
+ "05" => "Bern",
606
+ "06" => "Fribourg",
607
+ "07" => "Geneve",
608
+ "08" => "Glarus",
609
+ "09" => "Graubunden",
610
+ "10" => "Inner-Rhoden",
611
+ "11" => "Luzern",
612
+ "12" => "Neuchatel",
613
+ "13" => "Nidwalden",
614
+ "14" => "Obwalden",
615
+ "15" => "Sankt Gallen",
616
+ "16" => "Schaffhausen",
617
+ "17" => "Schwyz",
618
+ "18" => "Solothurn",
619
+ "19" => "Thurgau",
620
+ "20" => "Ticino",
621
+ "21" => "Uri",
622
+ "22" => "Valais",
623
+ "23" => "Vaud",
624
+ "24" => "Zug",
625
+ "25" => "Zurich",
626
+ "26" => "Jura"
627
+ ),
628
+ "CI" => array(
629
+ "74" => "Agneby",
630
+ "75" => "Bafing",
631
+ "76" => "Bas-Sassandra",
632
+ "77" => "Denguele",
633
+ "78" => "Dix-Huit Montagnes",
634
+ "79" => "Fromager",
635
+ "80" => "Haut-Sassandra",
636
+ "81" => "Lacs",
637
+ "82" => "Lagunes",
638
+ "83" => "Marahoue",
639
+ "84" => "Moyen-Cavally",
640
+ "85" => "Moyen-Comoe",
641
+ "86" => "N'zi-Comoe",
642
+ "87" => "Savanes",
643
+ "88" => "Sud-Bandama",
644
+ "89" => "Sud-Comoe",
645
+ "90" => "Vallee du Bandama",
646
+ "91" => "Worodougou",
647
+ "92" => "Zanzan"
648
+ ),
649
+ "CL" => array(
650
+ "01" => "Valparaiso",
651
+ "02" => "Aisen del General Carlos Ibanez del Campo",
652
+ "03" => "Antofagasta",
653
+ "04" => "Araucania",
654
+ "05" => "Atacama",
655
+ "06" => "Bio-Bio",
656
+ "07" => "Coquimbo",
657
+ "08" => "Libertador General Bernardo O'Higgins",
658
+ "09" => "Los Lagos",
659
+ "10" => "Magallanes y de la Antartica Chilena",
660
+ "11" => "Maule",
661
+ "12" => "Region Metropolitana",
662
+ "13" => "Tarapaca",
663
+ "14" => "Los Lagos",
664
+ "15" => "Tarapaca",
665
+ "16" => "Arica y Parinacota",
666
+ "17" => "Los Rios"
667
+ ),
668
+ "CM" => array(
669
+ "04" => "Est",
670
+ "05" => "Littoral",
671
+ "07" => "Nord-Ouest",
672
+ "08" => "Ouest",
673
+ "09" => "Sud-Ouest",
674
+ "10" => "Adamaoua",
675
+ "11" => "Centre",
676
+ "12" => "Extreme-Nord",
677
+ "13" => "Nord",
678
+ "14" => "Sud"
679
+ ),
680
+ "CN" => array(
681
+ "01" => "Anhui",
682
+ "02" => "Zhejiang",
683
+ "03" => "Jiangxi",
684
+ "04" => "Jiangsu",
685
+ "05" => "Jilin",
686
+ "06" => "Qinghai",
687
+ "07" => "Fujian",
688
+ "08" => "Heilongjiang",
689
+ "09" => "Henan",
690
+ "10" => "Hebei",
691
+ "11" => "Hunan",
692
+ "12" => "Hubei",
693
+ "13" => "Xinjiang",
694
+ "14" => "Xizang",
695
+ "15" => "Gansu",
696
+ "16" => "Guangxi",
697
+ "18" => "Guizhou",
698
+ "19" => "Liaoning",
699
+ "20" => "Nei Mongol",
700
+ "21" => "Ningxia",
701
+ "22" => "Beijing",
702
+ "23" => "Shanghai",
703
+ "24" => "Shanxi",
704
+ "25" => "Shandong",
705
+ "26" => "Shaanxi",
706
+ "28" => "Tianjin",
707
+ "29" => "Yunnan",
708
+ "30" => "Guangdong",
709
+ "31" => "Hainan",
710
+ "32" => "Sichuan",
711
+ "33" => "Chongqing"
712
+ ),
713
+ "CO" => array(
714
+ "01" => "Amazonas",
715
+ "02" => "Antioquia",
716
+ "03" => "Arauca",
717
+ "04" => "Atlantico",
718
+ "08" => "Caqueta",
719
+ "09" => "Cauca",
720
+ "10" => "Cesar",
721
+ "11" => "Choco",
722
+ "12" => "Cordoba",
723
+ "14" => "Guaviare",
724
+ "15" => "Guainia",
725
+ "16" => "Huila",
726
+ "17" => "La Guajira",
727
+ "19" => "Meta",
728
+ "20" => "Narino",
729
+ "21" => "Norte de Santander",
730
+ "22" => "Putumayo",
731
+ "23" => "Quindio",
732
+ "24" => "Risaralda",
733
+ "25" => "San Andres y Providencia",
734
+ "26" => "Santander",
735
+ "27" => "Sucre",
736
+ "28" => "Tolima",
737
+ "29" => "Valle del Cauca",
738
+ "30" => "Vaupes",
739
+ "31" => "Vichada",
740
+ "32" => "Casanare",
741
+ "33" => "Cundinamarca",
742
+ "34" => "Distrito Especial",
743
+ "35" => "Bolivar",
744
+ "36" => "Boyaca",
745
+ "37" => "Caldas",
746
+ "38" => "Magdalena"
747
+ ),
748
+ "CR" => array(
749
+ "01" => "Alajuela",
750
+ "02" => "Cartago",
751
+ "03" => "Guanacaste",
752
+ "04" => "Heredia",
753
+ "06" => "Limon",
754
+ "07" => "Puntarenas",
755
+ "08" => "San Jose"
756
+ ),
757
+ "CU" => array(
758
+ "01" => "Pinar del Rio",
759
+ "02" => "Ciudad de la Habana",
760
+ "03" => "Matanzas",
761
+ "04" => "Isla de la Juventud",
762
+ "05" => "Camaguey",
763
+ "07" => "Ciego de Avila",
764
+ "08" => "Cienfuegos",
765
+ "09" => "Granma",
766
+ "10" => "Guantanamo",
767
+ "11" => "La Habana",
768
+ "12" => "Holguin",
769
+ "13" => "Las Tunas",
770
+ "14" => "Sancti Spiritus",
771
+ "15" => "Santiago de Cuba",
772
+ "16" => "Villa Clara"
773
+ ),
774
+ "CV" => array(
775
+ "01" => "Boa Vista",
776
+ "02" => "Brava",
777
+ "04" => "Maio",
778
+ "05" => "Paul",
779
+ "07" => "Ribeira Grande",
780
+ "08" => "Sal",
781
+ "10" => "Sao Nicolau",
782
+ "11" => "Sao Vicente",
783
+ "13" => "Mosteiros",
784
+ "14" => "Praia",
785
+ "15" => "Santa Catarina",
786
+ "16" => "Santa Cruz",
787
+ "17" => "Sao Domingos",
788
+ "18" => "Sao Filipe",
789
+ "19" => "Sao Miguel",
790
+ "20" => "Tarrafal"
791
+ ),
792
+ "CY" => array(
793
+ "01" => "Famagusta",
794
+ "02" => "Kyrenia",
795
+ "03" => "Larnaca",
796
+ "04" => "Nicosia",
797
+ "05" => "Limassol",
798
+ "06" => "Paphos"
799
+ ),
800
+ "CZ" => array(
801
+ "52" => "Hlavni mesto Praha",
802
+ "78" => "Jihomoravsky kraj",
803
+ "79" => "Jihocesky kraj",
804
+ "80" => "Vysocina",
805
+ "81" => "Karlovarsky kraj",
806
+ "82" => "Kralovehradecky kraj",
807
+ "83" => "Liberecky kraj",
808
+ "84" => "Olomoucky kraj",
809
+ "85" => "Moravskoslezsky kraj",
810
+ "86" => "Pardubicky kraj",
811
+ "87" => "Plzensky kraj",
812
+ "88" => "Stredocesky kraj",
813
+ "89" => "Ustecky kraj",
814
+ "90" => "Zlinsky kraj"
815
+ ),
816
+ "DE" => array(
817
+ "01" => "Baden-Wurttemberg",
818
+ "02" => "Bayern",
819
+ "03" => "Bremen",
820
+ "04" => "Hamburg",
821
+ "05" => "Hessen",
822
+ "06" => "Niedersachsen",
823
+ "07" => "Nordrhein-Westfalen",
824
+ "08" => "Rheinland-Pfalz",
825
+ "09" => "Saarland",
826
+ "10" => "Schleswig-Holstein",
827
+ "11" => "Brandenburg",
828
+ "12" => "Mecklenburg-Vorpommern",
829
+ "13" => "Sachsen",
830
+ "14" => "Sachsen-Anhalt",
831
+ "15" => "Thuringen",
832
+ "16" => "Berlin"
833
+ ),
834
+ "DJ" => array(
835
+ "01" => "Ali Sabieh",
836
+ "04" => "Obock",
837
+ "05" => "Tadjoura",
838
+ "06" => "Dikhil",
839
+ "07" => "Djibouti",
840
+ "08" => "Arta"
841
+ ),
842
+ "DK" => array(
843
+ "17" => "Hovedstaden",
844
+ "18" => "Midtjylland",
845
+ "19" => "Nordjylland",
846
+ "20" => "Sjelland",
847
+ "21" => "Syddanmark"
848
+ ),
849
+ "DM" => array(
850
+ "02" => "Saint Andrew",
851
+ "03" => "Saint David",
852
+ "04" => "Saint George",
853
+ "05" => "Saint John",
854
+ "06" => "Saint Joseph",
855
+ "07" => "Saint Luke",
856
+ "08" => "Saint Mark",
857
+ "09" => "Saint Patrick",
858
+ "10" => "Saint Paul",
859
+ "11" => "Saint Peter"
860
+ ),
861
+ "DO" => array(
862
+ "01" => "Azua",
863
+ "02" => "Baoruco",
864
+ "03" => "Barahona",
865
+ "04" => "Dajabon",
866
+ "05" => "Distrito Nacional",
867
+ "06" => "Duarte",
868
+ "08" => "Espaillat",
869
+ "09" => "Independencia",
870
+ "10" => "La Altagracia",
871
+ "11" => "Elias Pina",
872
+ "12" => "La Romana",
873
+ "14" => "Maria Trinidad Sanchez",
874
+ "15" => "Monte Cristi",
875
+ "16" => "Pedernales",
876
+ "17" => "Peravia",
877
+ "18" => "Puerto Plata",
878
+ "19" => "Salcedo",
879
+ "20" => "Samana",
880
+ "21" => "Sanchez Ramirez",
881
+ "23" => "San Juan",
882
+ "24" => "San Pedro De Macoris",
883
+ "25" => "Santiago",
884
+ "26" => "Santiago Rodriguez",
885
+ "27" => "Valverde",
886
+ "28" => "El Seibo",
887
+ "29" => "Hato Mayor",
888
+ "30" => "La Vega",
889
+ "31" => "Monsenor Nouel",
890
+ "32" => "Monte Plata",
891
+ "33" => "San Cristobal",
892
+ "34" => "Distrito Nacional",
893
+ "35" => "Peravia",
894
+ "36" => "San Jose de Ocoa",
895
+ "37" => "Santo Domingo"
896
+ ),
897
+ "DZ" => array(
898
+ "01" => "Alger",
899
+ "03" => "Batna",
900
+ "04" => "Constantine",
901
+ "06" => "Medea",
902
+ "07" => "Mostaganem",
903
+ "09" => "Oran",
904
+ "10" => "Saida",
905
+ "12" => "Setif",
906
+ "13" => "Tiaret",
907
+ "14" => "Tizi Ouzou",
908
+ "15" => "Tlemcen",
909
+ "18" => "Bejaia",
910
+ "19" => "Biskra",
911
+ "20" => "Blida",
912
+ "21" => "Bouira",
913
+ "22" => "Djelfa",
914
+ "23" => "Guelma",
915
+ "24" => "Jijel",
916
+ "25" => "Laghouat",
917
+ "26" => "Mascara",
918
+ "27" => "M'sila",
919
+ "29" => "Oum el Bouaghi",
920
+ "30" => "Sidi Bel Abbes",
921
+ "31" => "Skikda",
922
+ "33" => "Tebessa",
923
+ "34" => "Adrar",
924
+ "35" => "Ain Defla",
925
+ "36" => "Ain Temouchent",
926
+ "37" => "Annaba",
927
+ "38" => "Bechar",
928
+ "39" => "Bordj Bou Arreridj",
929
+ "40" => "Boumerdes",
930
+ "41" => "Chlef",
931
+ "42" => "El Bayadh",
932
+ "43" => "El Oued",
933
+ "44" => "El Tarf",
934
+ "45" => "Ghardaia",
935
+ "46" => "Illizi",
936
+ "47" => "Khenchela",
937
+ "48" => "Mila",
938
+ "49" => "Naama",
939
+ "50" => "Ouargla",
940
+ "51" => "Relizane",
941
+ "52" => "Souk Ahras",
942
+ "53" => "Tamanghasset",
943
+ "54" => "Tindouf",
944
+ "55" => "Tipaza",
945
+ "56" => "Tissemsilt"
946
+ ),
947
+ "EC" => array(
948
+ "01" => "Galapagos",
949
+ "02" => "Azuay",
950
+ "03" => "Bolivar",
951
+ "04" => "Canar",
952
+ "05" => "Carchi",
953
+ "06" => "Chimborazo",
954
+ "07" => "Cotopaxi",
955
+ "08" => "El Oro",
956
+ "09" => "Esmeraldas",
957
+ "10" => "Guayas",
958
+ "11" => "Imbabura",
959
+ "12" => "Loja",
960
+ "13" => "Los Rios",
961
+ "14" => "Manabi",
962
+ "15" => "Morona-Santiago",
963
+ "17" => "Pastaza",
964
+ "18" => "Pichincha",
965
+ "19" => "Tungurahua",
966
+ "20" => "Zamora-Chinchipe",
967
+ "22" => "Sucumbios",
968
+ "23" => "Napo",
969
+ "24" => "Orellana"
970
+ ),
971
+ "EE" => array(
972
+ "01" => "Harjumaa",
973
+ "02" => "Hiiumaa",
974
+ "03" => "Ida-Virumaa",
975
+ "04" => "Jarvamaa",
976
+ "05" => "Jogevamaa",
977
+ "06" => "Kohtla-Jarve",
978
+ "07" => "Laanemaa",
979
+ "08" => "Laane-Virumaa",
980
+ "09" => "Narva",
981
+ "10" => "Parnu",
982
+ "11" => "Parnumaa",
983
+ "12" => "Polvamaa",
984
+ "13" => "Raplamaa",
985
+ "14" => "Saaremaa",
986
+ "15" => "Sillamae",
987
+ "16" => "Tallinn",
988
+ "17" => "Tartu",
989
+ "18" => "Tartumaa",
990
+ "19" => "Valgamaa",
991
+ "20" => "Viljandimaa",
992
+ "21" => "Vorumaa"
993
+ ),
994
+ "EG" => array(
995
+ "01" => "Ad Daqahliyah",
996
+ "02" => "Al Bahr al Ahmar",
997
+ "03" => "Al Buhayrah",
998
+ "04" => "Al Fayyum",
999
+ "05" => "Al Gharbiyah",
1000
+ "06" => "Al Iskandariyah",
1001
+ "07" => "Al Isma'iliyah",
1002
+ "08" => "Al Jizah",
1003
+ "09" => "Al Minufiyah",
1004
+ "10" => "Al Minya",
1005
+ "11" => "Al Qahirah",
1006
+ "12" => "Al Qalyubiyah",
1007
+ "13" => "Al Wadi al Jadid",
1008
+ "14" => "Ash Sharqiyah",
1009
+ "15" => "As Suways",
1010
+ "16" => "Aswan",
1011
+ "17" => "Asyut",
1012
+ "18" => "Bani Suwayf",
1013
+ "19" => "Bur Sa'id",
1014
+ "20" => "Dumyat",
1015
+ "21" => "Kafr ash Shaykh",
1016
+ "22" => "Matruh",
1017
+ "23" => "Qina",
1018
+ "24" => "Suhaj",
1019
+ "26" => "Janub Sina'",
1020
+ "27" => "Shamal Sina'"
1021
+ ),
1022
+ "ER" => array(
1023
+ "01" => "Anseba",
1024
+ "02" => "Debub",
1025
+ "03" => "Debubawi K'eyih Bahri",
1026
+ "04" => "Gash Barka",
1027
+ "05" => "Ma'akel",
1028
+ "06" => "Semenawi K'eyih Bahri"
1029
+ ),
1030
+ "ES" => array(
1031
+ "07" => "Islas Baleares",
1032
+ "27" => "La Rioja",
1033
+ "29" => "Madrid",
1034
+ "31" => "Murcia",
1035
+ "32" => "Navarra",
1036
+ "34" => "Asturias",
1037
+ "39" => "Cantabria",
1038
+ "51" => "Andalucia",
1039
+ "52" => "Aragon",
1040
+ "53" => "Canarias",
1041
+ "54" => "Castilla-La Mancha",
1042
+ "55" => "Castilla y Leon",
1043
+ "56" => "Catalonia",
1044
+ "57" => "Extremadura",
1045
+ "58" => "Galicia",
1046
+ "59" => "Pais Vasco",
1047
+ "60" => "Comunidad Valenciana"
1048
+ ),
1049
+ "ET" => array(
1050
+ "44" => "Adis Abeba",
1051
+ "45" => "Afar",
1052
+ "46" => "Amara",
1053
+ "47" => "Binshangul Gumuz",
1054
+ "48" => "Dire Dawa",
1055
+ "49" => "Gambela Hizboch",
1056
+ "50" => "Hareri Hizb",
1057
+ "51" => "Oromiya",
1058
+ "52" => "Sumale",
1059
+ "53" => "Tigray",
1060
+ "54" => "YeDebub Biheroch Bihereseboch na Hizboch"
1061
+ ),
1062
+ "FI" => array(
1063
+ "01" => "Aland",
1064
+ "06" => "Lapland",
1065
+ "08" => "Oulu",
1066
+ "13" => "Southern Finland",
1067
+ "14" => "Eastern Finland",
1068
+ "15" => "Western Finland"
1069
+ ),
1070
+ "FJ" => array(
1071
+ "01" => "Central",
1072
+ "02" => "Eastern",
1073
+ "03" => "Northern",
1074
+ "04" => "Rotuma",
1075
+ "05" => "Western"
1076
+ ),
1077
+ "FM" => array(
1078
+ "01" => "Kosrae",
1079
+ "02" => "Pohnpei",
1080
+ "03" => "Chuuk",
1081
+ "04" => "Yap"
1082
+ ),
1083
+ "FR" => array(
1084
+ "97" => "Aquitaine",
1085
+ "98" => "Auvergne",
1086
+ "99" => "Basse-Normandie",
1087
+ "A1" => "Bourgogne",
1088
+ "A2" => "Bretagne",
1089
+ "A3" => "Centre",
1090
+ "A4" => "Champagne-Ardenne",
1091
+ "A5" => "Corse",
1092
+ "A6" => "Franche-Comte",
1093
+ "A7" => "Haute-Normandie",
1094
+ "A8" => "Ile-de-France",
1095
+ "A9" => "Languedoc-Roussillon",
1096
+ "B1" => "Limousin",
1097
+ "B2" => "Lorraine",
1098
+ "B3" => "Midi-Pyrenees",
1099
+ "B4" => "Nord-Pas-de-Calais",
1100
+ "B5" => "Pays de la Loire",
1101
+ "B6" => "Picardie",
1102
+ "B7" => "Poitou-Charentes",
1103
+ "B8" => "Provence-Alpes-Cote d'Azur",
1104
+ "B9" => "Rhone-Alpes",
1105
+ "C1" => "Alsace"
1106
+ ),
1107
+ "GA" => array(
1108
+ "01" => "Estuaire",
1109
+ "02" => "Haut-Ogooue",
1110
+ "03" => "Moyen-Ogooue",
1111
+ "04" => "Ngounie",
1112
+ "05" => "Nyanga",
1113
+ "06" => "Ogooue-Ivindo",
1114
+ "07" => "Ogooue-Lolo",
1115
+ "08" => "Ogooue-Maritime",
1116
+ "09" => "Woleu-Ntem"
1117
+ ),
1118
+ "GB" => array(
1119
+ "A1" => "Barking and Dagenham",
1120
+ "A2" => "Barnet",
1121
+ "A3" => "Barnsley",
1122
+ "A4" => "Bath and North East Somerset",
1123
+ "A5" => "Bedfordshire",
1124
+ "A6" => "Bexley",
1125
+ "A7" => "Birmingham",
1126
+ "A8" => "Blackburn with Darwen",
1127
+ "A9" => "Blackpool",
1128
+ "B1" => "Bolton",
1129
+ "B2" => "Bournemouth",
1130
+ "B3" => "Bracknell Forest",
1131
+ "B4" => "Bradford",
1132
+ "B5" => "Brent",
1133
+ "B6" => "Brighton and Hove",
1134
+ "B7" => "Bristol, City of",
1135
+ "B8" => "Bromley",
1136
+ "B9" => "Buckinghamshire",
1137
+ "C1" => "Bury",
1138
+ "C2" => "Calderdale",
1139
+ "C3" => "Cambridgeshire",
1140
+ "C4" => "Camden",
1141
+ "C5" => "Cheshire",
1142
+ "C6" => "Cornwall",
1143
+ "C7" => "Coventry",
1144
+ "C8" => "Croydon",
1145
+ "C9" => "Cumbria",
1146
+ "D1" => "Darlington",
1147
+ "D2" => "Derby",
1148
+ "D3" => "Derbyshire",
1149
+ "D4" => "Devon",
1150
+ "D5" => "Doncaster",
1151
+ "D6" => "Dorset",
1152
+ "D7" => "Dudley",
1153
+ "D8" => "Durham",
1154
+ "D9" => "Ealing",
1155
+ "E1" => "East Riding of Yorkshire",
1156
+ "E2" => "East Sussex",
1157
+ "E3" => "Enfield",
1158
+ "E4" => "Essex",
1159
+ "E5" => "Gateshead",
1160
+ "E6" => "Gloucestershire",
1161
+ "E7" => "Greenwich",
1162
+ "E8" => "Hackney",
1163
+ "E9" => "Halton",
1164
+ "F1" => "Hammersmith and Fulham",
1165
+ "F2" => "Hampshire",
1166
+ "F3" => "Haringey",
1167
+ "F4" => "Harrow",
1168
+ "F5" => "Hartlepool",
1169
+ "F6" => "Havering",
1170
+ "F7" => "Herefordshire",
1171
+ "F8" => "Hertford",
1172
+ "F9" => "Hillingdon",
1173
+ "G1" => "Hounslow",
1174
+ "G2" => "Isle of Wight",
1175
+ "G3" => "Islington",
1176
+ "G4" => "Kensington and Chelsea",
1177
+ "G5" => "Kent",
1178
+ "G6" => "Kingston upon Hull, City of",
1179
+ "G7" => "Kingston upon Thames",
1180
+ "G8" => "Kirklees",
1181
+ "G9" => "Knowsley",
1182
+ "H1" => "Lambeth",
1183
+ "H2" => "Lancashire",
1184
+ "H3" => "Leeds",
1185
+ "H4" => "Leicester",
1186
+ "H5" => "Leicestershire",
1187
+ "H6" => "Lewisham",
1188
+ "H7" => "Lincolnshire",
1189
+ "H8" => "Liverpool",
1190
+ "H9" => "London, City of",
1191
+ "I1" => "Luton",
1192
+ "I2" => "Manchester",
1193
+ "I3" => "Medway",
1194
+ "I4" => "Merton",
1195
+ "I5" => "Middlesbrough",
1196
+ "I6" => "Milton Keynes",
1197
+ "I7" => "Newcastle upon Tyne",
1198
+ "I8" => "Newham",
1199
+ "I9" => "Norfolk",
1200
+ "J1" => "Northamptonshire",
1201
+ "J2" => "North East Lincolnshire",
1202
+ "J3" => "North Lincolnshire",
1203
+ "J4" => "North Somerset",
1204
+ "J5" => "North Tyneside",
1205
+ "J6" => "Northumberland",
1206
+ "J7" => "North Yorkshire",
1207
+ "J8" => "Nottingham",
1208
+ "J9" => "Nottinghamshire",
1209
+ "K1" => "Oldham",
1210
+ "K2" => "Oxfordshire",
1211
+ "K3" => "Peterborough",
1212
+ "K4" => "Plymouth",
1213
+ "K5" => "Poole",
1214
+ "K6" => "Portsmouth",
1215
+ "K7" => "Reading",
1216
+ "K8" => "Redbridge",
1217
+ "K9" => "Redcar and Cleveland",
1218
+ "L1" => "Richmond upon Thames",
1219
+ "L2" => "Rochdale",
1220
+ "L3" => "Rotherham",
1221
+ "L4" => "Rutland",
1222
+ "L5" => "Salford",
1223
+ "L6" => "Shropshire",
1224
+ "L7" => "Sandwell",
1225
+ "L8" => "Sefton",
1226
+ "L9" => "Sheffield",
1227
+ "M1" => "Slough",
1228
+ "M2" => "Solihull",
1229
+ "M3" => "Somerset",
1230
+ "M4" => "Southampton",
1231
+ "M5" => "Southend-on-Sea",
1232
+ "M6" => "South Gloucestershire",
1233
+ "M7" => "South Tyneside",
1234
+ "M8" => "Southwark",
1235
+ "M9" => "Staffordshire",
1236
+ "N1" => "St. Helens",
1237
+ "N2" => "Stockport",
1238
+ "N3" => "Stockton-on-Tees",
1239
+ "N4" => "Stoke-on-Trent",
1240
+ "N5" => "Suffolk",
1241
+ "N6" => "Sunderland",
1242
+ "N7" => "Surrey",
1243
+ "N8" => "Sutton",
1244
+ "N9" => "Swindon",
1245
+ "O1" => "Tameside",
1246
+ "O2" => "Telford and Wrekin",
1247
+ "O3" => "Thurrock",
1248
+ "O4" => "Torbay",
1249
+ "O5" => "Tower Hamlets",
1250
+ "O6" => "Trafford",
1251
+ "O7" => "Wakefield",
1252
+ "O8" => "Walsall",
1253
+ "O9" => "Waltham Forest",
1254
+ "P1" => "Wandsworth",
1255
+ "P2" => "Warrington",
1256
+ "P3" => "Warwickshire",
1257
+ "P4" => "West Berkshire",
1258
+ "P5" => "Westminster",
1259
+ "P6" => "West Sussex",
1260
+ "P7" => "Wigan",
1261
+ "P8" => "Wiltshire",
1262
+ "P9" => "Windsor and Maidenhead",
1263
+ "Q1" => "Wirral",
1264
+ "Q2" => "Wokingham",
1265
+ "Q3" => "Wolverhampton",
1266
+ "Q4" => "Worcestershire",
1267
+ "Q5" => "York",
1268
+ "Q6" => "Antrim",
1269
+ "Q7" => "Ards",
1270
+ "Q8" => "Armagh",
1271
+ "Q9" => "Ballymena",
1272
+ "R1" => "Ballymoney",
1273
+ "R2" => "Banbridge",
1274
+ "R3" => "Belfast",
1275
+ "R4" => "Carrickfergus",
1276
+ "R5" => "Castlereagh",
1277
+ "R6" => "Coleraine",
1278
+ "R7" => "Cookstown",
1279
+ "R8" => "Craigavon",
1280
+ "R9" => "Down",
1281
+ "S1" => "Dungannon",
1282
+ "S2" => "Fermanagh",
1283
+ "S3" => "Larne",
1284
+ "S4" => "Limavady",
1285
+ "S5" => "Lisburn",
1286
+ "S6" => "Derry",
1287
+ "S7" => "Magherafelt",
1288
+ "S8" => "Moyle",
1289
+ "S9" => "Newry and Mourne",
1290
+ "T1" => "Newtownabbey",
1291
+ "T2" => "North Down",
1292
+ "T3" => "Omagh",
1293
+ "T4" => "Strabane",
1294
+ "T5" => "Aberdeen City",
1295
+ "T6" => "Aberdeenshire",
1296
+ "T7" => "Angus",
1297
+ "T8" => "Argyll and Bute",
1298
+ "T9" => "Scottish Borders, The",
1299
+ "U1" => "Clackmannanshire",
1300
+ "U2" => "Dumfries and Galloway",
1301
+ "U3" => "Dundee City",
1302
+ "U4" => "East Ayrshire",
1303
+ "U5" => "East Dunbartonshire",
1304
+ "U6" => "East Lothian",
1305
+ "U7" => "East Renfrewshire",
1306
+ "U8" => "Edinburgh, City of",
1307
+ "U9" => "Falkirk",
1308
+ "V1" => "Fife",
1309
+ "V2" => "Glasgow City",
1310
+ "V3" => "Highland",
1311
+ "V4" => "Inverclyde",
1312
+ "V5" => "Midlothian",
1313
+ "V6" => "Moray",
1314
+ "V7" => "North Ayrshire",
1315
+ "V8" => "North Lanarkshire",
1316
+ "V9" => "Orkney",
1317
+ "W1" => "Perth and Kinross",
1318
+ "W2" => "Renfrewshire",
1319
+ "W3" => "Shetland Islands",
1320
+ "W4" => "South Ayrshire",
1321
+ "W5" => "South Lanarkshire",
1322
+ "W6" => "Stirling",
1323
+ "W7" => "West Dunbartonshire",
1324
+ "W8" => "Eilean Siar",
1325
+ "W9" => "West Lothian",
1326
+ "X1" => "Isle of Anglesey",
1327
+ "X2" => "Blaenau Gwent",
1328
+ "X3" => "Bridgend",
1329
+ "X4" => "Caerphilly",
1330
+ "X5" => "Cardiff",
1331
+ "X6" => "Ceredigion",
1332
+ "X7" => "Carmarthenshire",
1333
+ "X8" => "Conwy",
1334
+ "X9" => "Denbighshire",
1335
+ "Y1" => "Flintshire",
1336
+ "Y2" => "Gwynedd",
1337
+ "Y3" => "Merthyr Tydfil",
1338
+ "Y4" => "Monmouthshire",
1339
+ "Y5" => "Neath Port Talbot",
1340
+ "Y6" => "Newport",
1341
+ "Y7" => "Pembrokeshire",
1342
+ "Y8" => "Powys",
1343
+ "Y9" => "Rhondda Cynon Taff",
1344
+ "Z1" => "Swansea",
1345
+ "Z2" => "Torfaen",
1346
+ "Z3" => "Vale of Glamorgan, The",
1347
+ "Z4" => "Wrexham",
1348
+ "Z5" => "Bedfordshire",
1349
+ "Z6" => "Central Bedfordshire",
1350
+ "Z7" => "Cheshire East",
1351
+ "Z8" => "Cheshire West and Chester",
1352
+ "Z9" => "Isles of Scilly"
1353
+ ),
1354
+ "GD" => array(
1355
+ "01" => "Saint Andrew",
1356
+ "02" => "Saint David",
1357
+ "03" => "Saint George",
1358
+ "04" => "Saint John",
1359
+ "05" => "Saint Mark",
1360
+ "06" => "Saint Patrick"
1361
+ ),
1362
+ "GE" => array(
1363
+ "01" => "Abashis Raioni",
1364
+ "02" => "Abkhazia",
1365
+ "03" => "Adigenis Raioni",
1366
+ "04" => "Ajaria",
1367
+ "05" => "Akhalgoris Raioni",
1368
+ "06" => "Akhalk'alak'is Raioni",
1369
+ "07" => "Akhalts'ikhis Raioni",
1370
+ "08" => "Akhmetis Raioni",
1371
+ "09" => "Ambrolauris Raioni",
1372
+ "10" => "Aspindzis Raioni",
1373
+ "11" => "Baghdat'is Raioni",
1374
+ "12" => "Bolnisis Raioni",
1375
+ "13" => "Borjomis Raioni",
1376
+ "14" => "Chiat'ura",
1377
+ "15" => "Ch'khorotsqus Raioni",
1378
+ "16" => "Ch'okhatauris Raioni",
1379
+ "17" => "Dedop'listsqaros Raioni",
1380
+ "18" => "Dmanisis Raioni",
1381
+ "19" => "Dushet'is Raioni",
1382
+ "20" => "Gardabanis Raioni",
1383
+ "21" => "Gori",
1384
+ "22" => "Goris Raioni",
1385
+ "23" => "Gurjaanis Raioni",
1386
+ "24" => "Javis Raioni",
1387
+ "25" => "K'arelis Raioni",
1388
+ "26" => "Kaspis Raioni",
1389
+ "27" => "Kharagaulis Raioni",
1390
+ "28" => "Khashuris Raioni",
1391
+ "29" => "Khobis Raioni",
1392
+ "30" => "Khonis Raioni",
1393
+ "31" => "K'ut'aisi",
1394
+ "32" => "Lagodekhis Raioni",
1395
+ "33" => "Lanch'khut'is Raioni",
1396
+ "34" => "Lentekhis Raioni",
1397
+ "35" => "Marneulis Raioni",
1398
+ "36" => "Martvilis Raioni",
1399
+ "37" => "Mestiis Raioni",
1400
+ "38" => "Mts'khet'is Raioni",
1401
+ "39" => "Ninotsmindis Raioni",
1402
+ "40" => "Onis Raioni",
1403
+ "41" => "Ozurget'is Raioni",
1404
+ "42" => "P'ot'i",
1405
+ "43" => "Qazbegis Raioni",
1406
+ "44" => "Qvarlis Raioni",
1407
+ "45" => "Rust'avi",
1408
+ "46" => "Sach'kheris Raioni",
1409
+ "47" => "Sagarejos Raioni",
1410
+ "48" => "Samtrediis Raioni",
1411
+ "49" => "Senakis Raioni",
1412
+ "50" => "Sighnaghis Raioni",
1413
+ "51" => "T'bilisi",
1414
+ "52" => "T'elavis Raioni",
1415
+ "53" => "T'erjolis Raioni",
1416
+ "54" => "T'et'ritsqaros Raioni",
1417
+ "55" => "T'ianet'is Raioni",
1418
+ "56" => "Tqibuli",
1419
+ "57" => "Ts'ageris Raioni",
1420
+ "58" => "Tsalenjikhis Raioni",
1421
+ "59" => "Tsalkis Raioni",
1422
+ "60" => "Tsqaltubo",
1423
+ "61" => "Vanis Raioni",
1424
+ "62" => "Zestap'onis Raioni",
1425
+ "63" => "Zugdidi",
1426
+ "64" => "Zugdidis Raioni"
1427
+ ),
1428
+ "GH" => array(
1429
+ "01" => "Greater Accra",
1430
+ "02" => "Ashanti",
1431
+ "03" => "Brong-Ahafo",
1432
+ "04" => "Central",
1433
+ "05" => "Eastern",
1434
+ "06" => "Northern",
1435
+ "08" => "Volta",
1436
+ "09" => "Western",
1437
+ "10" => "Upper East",
1438
+ "11" => "Upper West"
1439
+ ),
1440
+ "GL" => array(
1441
+ "01" => "Nordgronland",
1442
+ "02" => "Ostgronland",
1443
+ "03" => "Vestgronland"
1444
+ ),
1445
+ "GM" => array(
1446
+ "01" => "Banjul",
1447
+ "02" => "Lower River",
1448
+ "03" => "Central River",
1449
+ "04" => "Upper River",
1450
+ "05" => "Western",
1451
+ "07" => "North Bank"
1452
+ ),
1453
+ "GN" => array(
1454
+ "01" => "Beyla",
1455
+ "02" => "Boffa",
1456
+ "03" => "Boke",
1457
+ "04" => "Conakry",
1458
+ "05" => "Dabola",
1459
+ "06" => "Dalaba",
1460
+ "07" => "Dinguiraye",
1461
+ "09" => "Faranah",
1462
+ "10" => "Forecariah",
1463
+ "11" => "Fria",
1464
+ "12" => "Gaoual",
1465
+ "13" => "Gueckedou",
1466
+ "15" => "Kerouane",
1467
+ "16" => "Kindia",
1468
+ "17" => "Kissidougou",
1469
+ "18" => "Koundara",
1470
+ "19" => "Kouroussa",
1471
+ "21" => "Macenta",
1472
+ "22" => "Mali",
1473
+ "23" => "Mamou",
1474
+ "25" => "Pita",
1475
+ "27" => "Telimele",
1476
+ "28" => "Tougue",
1477
+ "29" => "Yomou",
1478
+ "30" => "Coyah",
1479
+ "31" => "Dubreka",
1480
+ "32" => "Kankan",
1481
+ "33" => "Koubia",
1482
+ "34" => "Labe",
1483
+ "35" => "Lelouma",
1484
+ "36" => "Lola",
1485
+ "37" => "Mandiana",
1486
+ "38" => "Nzerekore",
1487
+ "39" => "Siguiri"
1488
+ ),
1489
+ "GQ" => array(
1490
+ "03" => "Annobon",
1491
+ "04" => "Bioko Norte",
1492
+ "05" => "Bioko Sur",
1493
+ "06" => "Centro Sur",
1494
+ "07" => "Kie-Ntem",
1495
+ "08" => "Litoral",
1496
+ "09" => "Wele-Nzas"
1497
+ ),
1498
+ "GR" => array(
1499
+ "01" => "Evros",
1500
+ "02" => "Rodhopi",
1501
+ "03" => "Xanthi",
1502
+ "04" => "Drama",
1503
+ "05" => "Serrai",
1504
+ "06" => "Kilkis",
1505
+ "07" => "Pella",
1506
+ "08" => "Florina",
1507
+ "09" => "Kastoria",
1508
+ "10" => "Grevena",
1509
+ "11" => "Kozani",
1510
+ "12" => "Imathia",
1511
+ "13" => "Thessaloniki",
1512
+ "14" => "Kavala",
1513
+ "15" => "Khalkidhiki",
1514
+ "16" => "Pieria",
1515
+ "17" => "Ioannina",
1516
+ "18" => "Thesprotia",
1517
+ "19" => "Preveza",
1518
+ "20" => "Arta",
1519
+ "21" => "Larisa",
1520
+ "22" => "Trikala",
1521
+ "23" => "Kardhitsa",
1522
+ "24" => "Magnisia",
1523
+ "25" => "Kerkira",
1524
+ "26" => "Levkas",
1525
+ "27" => "Kefallinia",
1526
+ "28" => "Zakinthos",
1527
+ "29" => "Fthiotis",
1528
+ "30" => "Evritania",
1529
+ "31" => "Aitolia kai Akarnania",
1530
+ "32" => "Fokis",
1531
+ "33" => "Voiotia",
1532
+ "34" => "Evvoia",
1533
+ "35" => "Attiki",
1534
+ "36" => "Argolis",
1535
+ "37" => "Korinthia",
1536
+ "38" => "Akhaia",
1537
+ "39" => "Ilia",
1538
+ "40" => "Messinia",
1539
+ "41" => "Arkadhia",
1540
+ "42" => "Lakonia",
1541
+ "43" => "Khania",
1542
+ "44" => "Rethimni",
1543
+ "45" => "Iraklion",
1544
+ "46" => "Lasithi",
1545
+ "47" => "Dhodhekanisos",
1546
+ "48" => "Samos",
1547
+ "49" => "Kikladhes",
1548
+ "50" => "Khios",
1549
+ "51" => "Lesvos"
1550
+ ),
1551
+ "GT" => array(
1552
+ "01" => "Alta Verapaz",
1553
+ "02" => "Baja Verapaz",
1554
+ "03" => "Chimaltenango",
1555
+ "04" => "Chiquimula",
1556
+ "05" => "El Progreso",
1557
+ "06" => "Escuintla",
1558
+ "07" => "Guatemala",
1559
+ "08" => "Huehuetenango",
1560
+ "09" => "Izabal",
1561
+ "10" => "Jalapa",
1562
+ "11" => "Jutiapa",
1563
+ "12" => "Peten",
1564
+ "13" => "Quetzaltenango",
1565
+ "14" => "Quiche",
1566
+ "15" => "Retalhuleu",
1567
+ "16" => "Sacatepequez",
1568
+ "17" => "San Marcos",
1569
+ "18" => "Santa Rosa",
1570
+ "19" => "Solola",
1571
+ "20" => "Suchitepequez",
1572
+ "21" => "Totonicapan",
1573
+ "22" => "Zacapa"
1574
+ ),
1575
+ "GW" => array(
1576
+ "01" => "Bafata",
1577
+ "02" => "Quinara",
1578
+ "04" => "Oio",
1579
+ "05" => "Bolama",
1580
+ "06" => "Cacheu",
1581
+ "07" => "Tombali",
1582
+ "10" => "Gabu",
1583
+ "11" => "Bissau",
1584
+ "12" => "Biombo"
1585
+ ),
1586
+ "GY" => array(
1587
+ "10" => "Barima-Waini",
1588
+ "11" => "Cuyuni-Mazaruni",
1589
+ "12" => "Demerara-Mahaica",
1590
+ "13" => "East Berbice-Corentyne",
1591
+ "14" => "Essequibo Islands-West Demerara",
1592
+ "15" => "Mahaica-Berbice",
1593
+ "16" => "Pomeroon-Supenaam",
1594
+ "17" => "Potaro-Siparuni",
1595
+ "18" => "Upper Demerara-Berbice",
1596
+ "19" => "Upper Takutu-Upper Essequibo"
1597
+ ),
1598
+ "HN" => array(
1599
+ "01" => "Atlantida",
1600
+ "02" => "Choluteca",
1601
+ "03" => "Colon",
1602
+ "04" => "Comayagua",
1603
+ "05" => "Copan",
1604
+ "06" => "Cortes",
1605
+ "07" => "El Paraiso",
1606
+ "08" => "Francisco Morazan",
1607
+ "09" => "Gracias a Dios",
1608
+ "10" => "Intibuca",
1609
+ "11" => "Islas de la Bahia",
1610
+ "12" => "La Paz",
1611
+ "13" => "Lempira",
1612
+ "14" => "Ocotepeque",
1613
+ "15" => "Olancho",
1614
+ "16" => "Santa Barbara",
1615
+ "17" => "Valle",
1616
+ "18" => "Yoro"
1617
+ ),
1618
+ "HR" => array(
1619
+ "01" => "Bjelovarsko-Bilogorska",
1620
+ "02" => "Brodsko-Posavska",
1621
+ "03" => "Dubrovacko-Neretvanska",
1622
+ "04" => "Istarska",
1623
+ "05" => "Karlovacka",
1624
+ "06" => "Koprivnicko-Krizevacka",
1625
+ "07" => "Krapinsko-Zagorska",
1626
+ "08" => "Licko-Senjska",
1627
+ "09" => "Medimurska",
1628
+ "10" => "Osjecko-Baranjska",
1629
+ "11" => "Pozesko-Slavonska",
1630
+ "12" => "Primorsko-Goranska",
1631
+ "13" => "Sibensko-Kninska",
1632
+ "14" => "Sisacko-Moslavacka",
1633
+ "15" => "Splitsko-Dalmatinska",
1634
+ "16" => "Varazdinska",
1635
+ "17" => "Viroviticko-Podravska",
1636
+ "18" => "Vukovarsko-Srijemska",
1637
+ "19" => "Zadarska",
1638
+ "20" => "Zagrebacka",
1639
+ "21" => "Grad Zagreb"
1640
+ ),
1641
+ "HT" => array(
1642
+ "03" => "Nord-Ouest",
1643
+ "06" => "Artibonite",
1644
+ "07" => "Centre",
1645
+ "09" => "Nord",
1646
+ "10" => "Nord-Est",
1647
+ "11" => "Ouest",
1648
+ "12" => "Sud",
1649
+ "13" => "Sud-Est",
1650
+ "14" => "Grand' Anse",
1651
+ "15" => "Nippes"
1652
+ ),
1653
+ "HU" => array(
1654
+ "01" => "Bacs-Kiskun",
1655
+ "02" => "Baranya",
1656
+ "03" => "Bekes",
1657
+ "04" => "Borsod-Abauj-Zemplen",
1658
+ "05" => "Budapest",
1659
+ "06" => "Csongrad",
1660
+ "07" => "Debrecen",
1661
+ "08" => "Fejer",
1662
+ "09" => "Gyor-Moson-Sopron",
1663
+ "10" => "Hajdu-Bihar",
1664
+ "11" => "Heves",
1665
+ "12" => "Komarom-Esztergom",
1666
+ "13" => "Miskolc",
1667
+ "14" => "Nograd",
1668
+ "15" => "Pecs",
1669
+ "16" => "Pest",
1670
+ "17" => "Somogy",
1671
+ "18" => "Szabolcs-Szatmar-Bereg",
1672
+ "19" => "Szeged",
1673
+ "20" => "Jasz-Nagykun-Szolnok",
1674
+ "21" => "Tolna",
1675
+ "22" => "Vas",
1676
+ "23" => "Veszprem",
1677
+ "24" => "Zala",
1678
+ "25" => "Gyor",
1679
+ "26" => "Bekescsaba",
1680
+ "27" => "Dunaujvaros",
1681
+ "28" => "Eger",
1682
+ "29" => "Hodmezovasarhely",
1683
+ "30" => "Kaposvar",
1684
+ "31" => "Kecskemet",
1685
+ "32" => "Nagykanizsa",
1686
+ "33" => "Nyiregyhaza",
1687
+ "34" => "Sopron",
1688
+ "35" => "Szekesfehervar",
1689
+ "36" => "Szolnok",
1690
+ "37" => "Szombathely",
1691
+ "38" => "Tatabanya",
1692
+ "39" => "Veszprem",
1693
+ "40" => "Zalaegerszeg",
1694
+ "41" => "Salgotarjan",
1695
+ "42" => "Szekszard",
1696
+ "43" => "Erd"
1697
+ ),
1698
+ "ID" => array(
1699
+ "01" => "Aceh",
1700
+ "02" => "Bali",
1701
+ "03" => "Bengkulu",
1702
+ "04" => "Jakarta Raya",
1703
+ "05" => "Jambi",
1704
+ "07" => "Jawa Tengah",
1705
+ "08" => "Jawa Timur",
1706
+ "10" => "Yogyakarta",
1707
+ "11" => "Kalimantan Barat",
1708
+ "12" => "Kalimantan Selatan",
1709
+ "13" => "Kalimantan Tengah",
1710
+ "14" => "Kalimantan Timur",
1711
+ "15" => "Lampung",
1712
+ "17" => "Nusa Tenggara Barat",
1713
+ "18" => "Nusa Tenggara Timur",
1714
+ "21" => "Sulawesi Tengah",
1715
+ "22" => "Sulawesi Tenggara",
1716
+ "24" => "Sumatera Barat",
1717
+ "26" => "Sumatera Utara",
1718
+ "28" => "Maluku",
1719
+ "29" => "Maluku Utara",
1720
+ "30" => "Jawa Barat",
1721
+ "31" => "Sulawesi Utara",
1722
+ "32" => "Sumatera Selatan",
1723
+ "33" => "Banten",
1724
+ "34" => "Gorontalo",
1725
+ "35" => "Kepulauan Bangka Belitung",
1726
+ "36" => "Papua",
1727
+ "37" => "Riau",
1728
+ "38" => "Sulawesi Selatan",
1729
+ "39" => "Irian Jaya Barat",
1730
+ "40" => "Kepulauan Riau",
1731
+ "41" => "Sulawesi Barat"
1732
+ ),
1733
+ "IE" => array(
1734
+ "01" => "Carlow",
1735
+ "02" => "Cavan",
1736
+ "03" => "Clare",
1737
+ "04" => "Cork",
1738
+ "06" => "Donegal",
1739
+ "07" => "Dublin",
1740
+ "10" => "Galway",
1741
+ "11" => "Kerry",
1742
+ "12" => "Kildare",
1743
+ "13" => "Kilkenny",
1744
+ "14" => "Leitrim",
1745
+ "15" => "Laois",
1746
+ "16" => "Limerick",
1747
+ "18" => "Longford",
1748
+ "19" => "Louth",
1749
+ "20" => "Mayo",
1750
+ "21" => "Meath",
1751
+ "22" => "Monaghan",
1752
+ "23" => "Offaly",
1753
+ "24" => "Roscommon",
1754
+ "25" => "Sligo",
1755
+ "26" => "Tipperary",
1756
+ "27" => "Waterford",
1757
+ "29" => "Westmeath",
1758
+ "30" => "Wexford",
1759
+ "31" => "Wicklow"
1760
+ ),
1761
+ "IL" => array(
1762
+ "01" => "HaDarom",
1763
+ "02" => "HaMerkaz",
1764
+ "03" => "HaZafon",
1765
+ "04" => "Hefa",
1766
+ "05" => "Tel Aviv",
1767
+ "06" => "Yerushalayim"
1768
+ ),
1769
+ "IN" => array(
1770
+ "01" => "Andaman and Nicobar Islands",
1771
+ "02" => "Andhra Pradesh",
1772
+ "03" => "Assam",
1773
+ "05" => "Chandigarh",
1774
+ "06" => "Dadra and Nagar Haveli",
1775
+ "07" => "Delhi",
1776
+ "09" => "Gujarat",
1777
+ "10" => "Haryana",
1778
+ "11" => "Himachal Pradesh",
1779
+ "12" => "Jammu and Kashmir",
1780
+ "13" => "Kerala",
1781
+ "14" => "Lakshadweep",
1782
+ "16" => "Maharashtra",
1783
+ "17" => "Manipur",
1784
+ "18" => "Meghalaya",
1785
+ "19" => "Karnataka",
1786
+ "20" => "Nagaland",
1787
+ "21" => "Orissa",
1788
+ "22" => "Puducherry",
1789
+ "23" => "Punjab",
1790
+ "24" => "Rajasthan",
1791
+ "25" => "Tamil Nadu",
1792
+ "26" => "Tripura",
1793
+ "28" => "West Bengal",
1794
+ "29" => "Sikkim",
1795
+ "30" => "Arunachal Pradesh",
1796
+ "31" => "Mizoram",
1797
+ "32" => "Daman and Diu",
1798
+ "33" => "Goa",
1799
+ "34" => "Bihar",
1800
+ "35" => "Madhya Pradesh",
1801
+ "36" => "Uttar Pradesh",
1802
+ "37" => "Chhattisgarh",
1803
+ "38" => "Jharkhand",
1804
+ "39" => "Uttarakhand"
1805
+ ),
1806
+ "IQ" => array(
1807
+ "01" => "Al Anbar",
1808
+ "02" => "Al Basrah",
1809
+ "03" => "Al Muthanna",
1810
+ "04" => "Al Qadisiyah",
1811
+ "05" => "As Sulaymaniyah",
1812
+ "06" => "Babil",
1813
+ "07" => "Baghdad",
1814
+ "08" => "Dahuk",
1815
+ "09" => "Dhi Qar",
1816
+ "10" => "Diyala",
1817
+ "11" => "Arbil",
1818
+ "12" => "Karbala'",
1819
+ "13" => "At Ta'mim",
1820
+ "14" => "Maysan",
1821
+ "15" => "Ninawa",
1822
+ "16" => "Wasit",
1823
+ "17" => "An Najaf",
1824
+ "18" => "Salah ad Din"
1825
+ ),
1826
+ "IR" => array(
1827
+ "01" => "Azarbayjan-e Bakhtari",
1828
+ "03" => "Chahar Mahall va Bakhtiari",
1829
+ "04" => "Sistan va Baluchestan",
1830
+ "05" => "Kohkiluyeh va Buyer Ahmadi",
1831
+ "07" => "Fars",
1832
+ "08" => "Gilan",
1833
+ "09" => "Hamadan",
1834
+ "10" => "Ilam",
1835
+ "11" => "Hormozgan",
1836
+ "12" => "Kerman",
1837
+ "13" => "Bakhtaran",
1838
+ "15" => "Khuzestan",
1839
+ "16" => "Kordestan",
1840
+ "17" => "Mazandaran",
1841
+ "18" => "Semnan Province",
1842
+ "19" => "Markazi",
1843
+ "21" => "Zanjan",
1844
+ "22" => "Bushehr",
1845
+ "23" => "Lorestan",
1846
+ "24" => "Markazi",
1847
+ "25" => "Semnan",
1848
+ "26" => "Tehran",
1849
+ "27" => "Zanjan",
1850
+ "28" => "Esfahan",
1851
+ "29" => "Kerman",
1852
+ "30" => "Khorasan",
1853
+ "31" => "Yazd",
1854
+ "32" => "Ardabil",
1855
+ "33" => "East Azarbaijan",
1856
+ "34" => "Markazi",
1857
+ "35" => "Mazandaran",
1858
+ "36" => "Zanjan",
1859
+ "37" => "Golestan",
1860
+ "38" => "Qazvin",
1861
+ "39" => "Qom",
1862
+ "40" => "Yazd",
1863
+ "41" => "Khorasan-e Janubi",
1864
+ "42" => "Khorasan-e Razavi",
1865
+ "43" => "Khorasan-e Shemali",
1866
+ "44" => "Alborz"
1867
+ ),
1868
+ "IS" => array(
1869
+ "03" => "Arnessysla",
1870
+ "05" => "Austur-Hunavatnssysla",
1871
+ "06" => "Austur-Skaftafellssysla",
1872
+ "07" => "Borgarfjardarsysla",
1873
+ "09" => "Eyjafjardarsysla",
1874
+ "10" => "Gullbringusysla",
1875
+ "15" => "Kjosarsysla",
1876
+ "17" => "Myrasysla",
1877
+ "20" => "Nordur-Mulasysla",
1878
+ "21" => "Nordur-Tingeyjarsysla",
1879
+ "23" => "Rangarvallasysla",
1880
+ "28" => "Skagafjardarsysla",
1881
+ "29" => "Snafellsnes- og Hnappadalssysla",
1882
+ "30" => "Strandasysla",
1883
+ "31" => "Sudur-Mulasysla",
1884
+ "32" => "Sudur-Tingeyjarsysla",
1885
+ "34" => "Vestur-Bardastrandarsysla",
1886
+ "35" => "Vestur-Hunavatnssysla",
1887
+ "36" => "Vestur-Isafjardarsysla",
1888
+ "37" => "Vestur-Skaftafellssysla",
1889
+ "38" => "Austurland",
1890
+ "39" => "Hofuoborgarsvaoio",
1891
+ "40" => "Norourland Eystra",
1892
+ "41" => "Norourland Vestra",
1893
+ "42" => "Suourland",
1894
+ "43" => "Suournes",
1895
+ "44" => "Vestfiroir",
1896
+ "45" => "Vesturland"
1897
+ ),
1898
+ "IT" => array(
1899
+ "01" => "Abruzzi",
1900
+ "02" => "Basilicata",
1901
+ "03" => "Calabria",
1902
+ "04" => "Campania",
1903
+ "05" => "Emilia-Romagna",
1904
+ "06" => "Friuli-Venezia Giulia",
1905
+ "07" => "Lazio",
1906
+ "08" => "Liguria",
1907
+ "09" => "Lombardia",
1908
+ "10" => "Marche",
1909
+ "11" => "Molise",
1910
+ "12" => "Piemonte",
1911
+ "13" => "Puglia",
1912
+ "14" => "Sardegna",
1913
+ "15" => "Sicilia",
1914
+ "16" => "Toscana",
1915
+ "17" => "Trentino-Alto Adige",
1916
+ "18" => "Umbria",
1917
+ "19" => "Valle d'Aosta",
1918
+ "20" => "Veneto"
1919
+ ),
1920
+ "JM" => array(
1921
+ "01" => "Clarendon",
1922
+ "02" => "Hanover",
1923
+ "04" => "Manchester",
1924
+ "07" => "Portland",
1925
+ "08" => "Saint Andrew",
1926
+ "09" => "Saint Ann",
1927
+ "10" => "Saint Catherine",
1928
+ "11" => "Saint Elizabeth",
1929
+ "12" => "Saint James",
1930
+ "13" => "Saint Mary",
1931
+ "14" => "Saint Thomas",
1932
+ "15" => "Trelawny",
1933
+ "16" => "Westmoreland",
1934
+ "17" => "Kingston"
1935
+ ),
1936
+ "JO" => array(
1937
+ "02" => "Al Balqa'",
1938
+ "09" => "Al Karak",
1939
+ "12" => "At Tafilah",
1940
+ "15" => "Al Mafraq",
1941
+ "16" => "Amman",
1942
+ "17" => "Az Zaraqa",
1943
+ "18" => "Irbid",
1944
+ "19" => "Ma'an",
1945
+ "20" => "Ajlun",
1946
+ "21" => "Al Aqabah",
1947
+ "22" => "Jarash",
1948
+ "23" => "Madaba"
1949
+ ),
1950
+ "JP" => array(
1951
+ "01" => "Aichi",
1952
+ "02" => "Akita",
1953
+ "03" => "Aomori",
1954
+ "04" => "Chiba",
1955
+ "05" => "Ehime",
1956
+ "06" => "Fukui",
1957
+ "07" => "Fukuoka",
1958
+ "08" => "Fukushima",
1959
+ "09" => "Gifu",
1960
+ "10" => "Gumma",
1961
+ "11" => "Hiroshima",
1962
+ "12" => "Hokkaido",
1963
+ "13" => "Hyogo",
1964
+ "14" => "Ibaraki",
1965
+ "15" => "Ishikawa",
1966
+ "16" => "Iwate",
1967
+ "17" => "Kagawa",
1968
+ "18" => "Kagoshima",
1969
+ "19" => "Kanagawa",
1970
+ "20" => "Kochi",
1971
+ "21" => "Kumamoto",
1972
+ "22" => "Kyoto",
1973
+ "23" => "Mie",
1974
+ "24" => "Miyagi",
1975
+ "25" => "Miyazaki",
1976
+ "26" => "Nagano",
1977
+ "27" => "Nagasaki",
1978
+ "28" => "Nara",
1979
+ "29" => "Niigata",
1980
+ "30" => "Oita",
1981
+ "31" => "Okayama",
1982
+ "32" => "Osaka",
1983
+ "33" => "Saga",
1984
+ "34" => "Saitama",
1985
+ "35" => "Shiga",
1986
+ "36" => "Shimane",
1987
+ "37" => "Shizuoka",
1988
+ "38" => "Tochigi",
1989
+ "39" => "Tokushima",
1990
+ "40" => "Tokyo",
1991
+ "41" => "Tottori",
1992
+ "42" => "Toyama",
1993
+ "43" => "Wakayama",
1994
+ "44" => "Yamagata",
1995
+ "45" => "Yamaguchi",
1996
+ "46" => "Yamanashi",
1997
+ "47" => "Okinawa"
1998
+ ),
1999
+ "KE" => array(
2000
+ "01" => "Central",
2001
+ "02" => "Coast",
2002
+ "03" => "Eastern",
2003
+ "05" => "Nairobi Area",
2004
+ "06" => "North-Eastern",
2005
+ "07" => "Nyanza",
2006
+ "08" => "Rift Valley",
2007
+ "09" => "Western"
2008
+ ),
2009
+ "KG" => array(
2010
+ "01" => "Bishkek",
2011
+ "02" => "Chuy",
2012
+ "03" => "Jalal-Abad",
2013
+ "04" => "Naryn",
2014
+ "05" => "Osh",
2015
+ "06" => "Talas",
2016
+ "07" => "Ysyk-Kol",
2017
+ "08" => "Osh",
2018
+ "09" => "Batken"
2019
+ ),
2020
+ "KH" => array(
2021
+ "01" => "Batdambang",
2022
+ "02" => "Kampong Cham",
2023
+ "03" => "Kampong Chhnang",
2024
+ "04" => "Kampong Speu",
2025
+ "05" => "Kampong Thum",
2026
+ "06" => "Kampot",
2027
+ "07" => "Kandal",
2028
+ "08" => "Koh Kong",
2029
+ "09" => "Kracheh",
2030
+ "10" => "Mondulkiri",
2031
+ "11" => "Phnum Penh",
2032
+ "12" => "Pursat",
2033
+ "13" => "Preah Vihear",
2034
+ "14" => "Prey Veng",
2035
+ "15" => "Ratanakiri Kiri",
2036
+ "16" => "Siem Reap",
2037
+ "17" => "Stung Treng",
2038
+ "18" => "Svay Rieng",
2039
+ "19" => "Takeo",
2040
+ "25" => "Banteay Meanchey",
2041
+ "29" => "Batdambang",
2042
+ "30" => "Pailin"
2043
+ ),
2044
+ "KI" => array(
2045
+ "01" => "Gilbert Islands",
2046
+ "02" => "Line Islands",
2047
+ "03" => "Phoenix Islands"
2048
+ ),
2049
+ "KM" => array(
2050
+ "01" => "Anjouan",
2051
+ "02" => "Grande Comore",
2052
+ "03" => "Moheli"
2053
+ ),
2054
+ "KN" => array(
2055
+ "01" => "Christ Church Nichola Town",
2056
+ "02" => "Saint Anne Sandy Point",
2057
+ "03" => "Saint George Basseterre",
2058
+ "04" => "Saint George Gingerland",
2059
+ "05" => "Saint James Windward",
2060
+ "06" => "Saint John Capisterre",
2061
+ "07" => "Saint John Figtree",
2062
+ "08" => "Saint Mary Cayon",
2063
+ "09" => "Saint Paul Capisterre",
2064
+ "10" => "Saint Paul Charlestown",
2065
+ "11" => "Saint Peter Basseterre",
2066
+ "12" => "Saint Thomas Lowland",
2067
+ "13" => "Saint Thomas Middle Island",
2068
+ "15" => "Trinity Palmetto Point"
2069
+ ),
2070
+ "KP" => array(
2071
+ "01" => "Chagang-do",
2072
+ "03" => "Hamgyong-namdo",
2073
+ "06" => "Hwanghae-namdo",
2074
+ "07" => "Hwanghae-bukto",
2075
+ "08" => "Kaesong-si",
2076
+ "09" => "Kangwon-do",
2077
+ "11" => "P'yongan-bukto",
2078
+ "12" => "P'yongyang-si",
2079
+ "13" => "Yanggang-do",
2080
+ "14" => "Namp'o-si",
2081
+ "15" => "P'yongan-namdo",
2082
+ "17" => "Hamgyong-bukto",
2083
+ "18" => "Najin Sonbong-si"
2084
+ ),
2085
+ "KR" => array(
2086
+ "01" => "Cheju-do",
2087
+ "03" => "Cholla-bukto",
2088
+ "05" => "Ch'ungch'ong-bukto",
2089
+ "06" => "Kangwon-do",
2090
+ "10" => "Pusan-jikhalsi",
2091
+ "11" => "Seoul-t'ukpyolsi",
2092
+ "12" => "Inch'on-jikhalsi",
2093
+ "13" => "Kyonggi-do",
2094
+ "14" => "Kyongsang-bukto",
2095
+ "15" => "Taegu-jikhalsi",
2096
+ "16" => "Cholla-namdo",
2097
+ "17" => "Ch'ungch'ong-namdo",
2098
+ "18" => "Kwangju-jikhalsi",
2099
+ "19" => "Taejon-jikhalsi",
2100
+ "20" => "Kyongsang-namdo",
2101
+ "21" => "Ulsan-gwangyoksi"
2102
+ ),
2103
+ "KW" => array(
2104
+ "01" => "Al Ahmadi",
2105
+ "02" => "Al Kuwayt",
2106
+ "05" => "Al Jahra",
2107
+ "07" => "Al Farwaniyah",
2108
+ "08" => "Hawalli",
2109
+ "09" => "Mubarak al Kabir"
2110
+ ),
2111
+ "KY" => array(
2112
+ "01" => "Creek",
2113
+ "02" => "Eastern",
2114
+ "03" => "Midland",
2115
+ "04" => "South Town",
2116
+ "05" => "Spot Bay",
2117
+ "06" => "Stake Bay",
2118
+ "07" => "West End",
2119
+ "08" => "Western"
2120
+ ),
2121
+ "KZ" => array(
2122
+ "01" => "Almaty",
2123
+ "02" => "Almaty City",
2124
+ "03" => "Aqmola",
2125
+ "04" => "Aqtobe",
2126
+ "05" => "Astana",
2127
+ "06" => "Atyrau",
2128
+ "07" => "West Kazakhstan",
2129
+ "08" => "Bayqonyr",
2130
+ "09" => "Mangghystau",
2131
+ "10" => "South Kazakhstan",
2132
+ "11" => "Pavlodar",
2133
+ "12" => "Qaraghandy",
2134
+ "13" => "Qostanay",
2135
+ "14" => "Qyzylorda",
2136
+ "15" => "East Kazakhstan",
2137
+ "16" => "North Kazakhstan",
2138
+ "17" => "Zhambyl"
2139
+ ),
2140
+ "LA" => array(
2141
+ "01" => "Attapu",
2142
+ "02" => "Champasak",
2143
+ "03" => "Houaphan",
2144
+ "04" => "Khammouan",
2145
+ "05" => "Louang Namtha",
2146
+ "07" => "Oudomxai",
2147
+ "08" => "Phongsali",
2148
+ "09" => "Saravan",
2149
+ "10" => "Savannakhet",
2150
+ "11" => "Vientiane",
2151
+ "13" => "Xaignabouri",
2152
+ "14" => "Xiangkhoang",
2153
+ "17" => "Louangphrabang"
2154
+ ),
2155
+ "LB" => array(
2156
+ "01" => "Beqaa",
2157
+ "02" => "Al Janub",
2158
+ "03" => "Liban-Nord",
2159
+ "04" => "Beyrouth",
2160
+ "05" => "Mont-Liban",
2161
+ "06" => "Liban-Sud",
2162
+ "07" => "Nabatiye",
2163
+ "08" => "Beqaa",
2164
+ "09" => "Liban-Nord",
2165
+ "10" => "Aakk,r",
2166
+ "11" => "Baalbek-Hermel"
2167
+ ),
2168
+ "LC" => array(
2169
+ "01" => "Anse-la-Raye",
2170
+ "02" => "Dauphin",
2171
+ "03" => "Castries",
2172
+ "04" => "Choiseul",
2173
+ "05" => "Dennery",
2174
+ "06" => "Gros-Islet",
2175
+ "07" => "Laborie",
2176
+ "08" => "Micoud",
2177
+ "09" => "Soufriere",
2178
+ "10" => "Vieux-Fort",
2179
+ "11" => "Praslin"
2180
+ ),
2181
+ "LI" => array(
2182
+ "01" => "Balzers",
2183
+ "02" => "Eschen",
2184
+ "03" => "Gamprin",
2185
+ "04" => "Mauren",
2186
+ "05" => "Planken",
2187
+ "06" => "Ruggell",
2188
+ "07" => "Schaan",
2189
+ "08" => "Schellenberg",
2190
+ "09" => "Triesen",
2191
+ "10" => "Triesenberg",
2192
+ "11" => "Vaduz",
2193
+ "21" => "Gbarpolu",
2194
+ "22" => "River Gee"
2195
+ ),
2196
+ "LK" => array(
2197
+ "29" => "Central",
2198
+ "30" => "North Central",
2199
+ "32" => "North Western",
2200
+ "33" => "Sabaragamuwa",
2201
+ "34" => "Southern",
2202
+ "35" => "Uva",
2203
+ "36" => "Western",
2204
+ "37" => "Eastern",
2205
+ "38" => "Northern"
2206
+ ),
2207
+ "LR" => array(
2208
+ "01" => "Bong",
2209
+ "04" => "Grand Cape Mount",
2210
+ "05" => "Lofa",
2211
+ "06" => "Maryland",
2212
+ "07" => "Monrovia",
2213
+ "09" => "Nimba",
2214
+ "10" => "Sino",
2215
+ "11" => "Grand Bassa",
2216
+ "12" => "Grand Cape Mount",
2217
+ "13" => "Maryland",
2218
+ "14" => "Montserrado",
2219
+ "17" => "Margibi",
2220
+ "18" => "River Cess",
2221
+ "19" => "Grand Gedeh",
2222
+ "20" => "Lofa",
2223
+ "21" => "Gbarpolu",
2224
+ "22" => "River Gee"
2225
+ ),
2226
+ "LS" => array(
2227
+ "10" => "Berea",
2228
+ "11" => "Butha-Buthe",
2229
+ "12" => "Leribe",
2230
+ "13" => "Mafeteng",
2231
+ "14" => "Maseru",
2232
+ "15" => "Mohales Hoek",
2233
+ "16" => "Mokhotlong",
2234
+ "17" => "Qachas Nek",
2235
+ "18" => "Quthing",
2236
+ "19" => "Thaba-Tseka"
2237
+ ),
2238
+ "LT" => array(
2239
+ "56" => "Alytaus Apskritis",
2240
+ "57" => "Kauno Apskritis",
2241
+ "58" => "Klaipedos Apskritis",
2242
+ "59" => "Marijampoles Apskritis",
2243
+ "60" => "Panevezio Apskritis",
2244
+ "61" => "Siauliu Apskritis",
2245
+ "62" => "Taurages Apskritis",
2246
+ "63" => "Telsiu Apskritis",
2247
+ "64" => "Utenos Apskritis",
2248
+ "65" => "Vilniaus Apskritis"
2249
+ ),
2250
+ "LU" => array(
2251
+ "01" => "Diekirch",
2252
+ "02" => "Grevenmacher",
2253
+ "03" => "Luxembourg"
2254
+ ),
2255
+ "LV" => array(
2256
+ "01" => "Aizkraukles",
2257
+ "02" => "Aluksnes",
2258
+ "03" => "Balvu",
2259
+ "04" => "Bauskas",
2260
+ "05" => "Cesu",
2261
+ "06" => "Daugavpils",
2262
+ "07" => "Daugavpils",
2263
+ "08" => "Dobeles",
2264
+ "09" => "Gulbenes",
2265
+ "10" => "Jekabpils",
2266
+ "11" => "Jelgava",
2267
+ "12" => "Jelgavas",
2268
+ "13" => "Jurmala",
2269
+ "14" => "Kraslavas",
2270
+ "15" => "Kuldigas",
2271
+ "16" => "Liepaja",
2272
+ "17" => "Liepajas",
2273
+ "18" => "Limbazu",
2274
+ "19" => "Ludzas",
2275
+ "20" => "Madonas",
2276
+ "21" => "Ogres",
2277
+ "22" => "Preilu",
2278
+ "23" => "Rezekne",
2279
+ "24" => "Rezeknes",
2280
+ "25" => "Riga",
2281
+ "26" => "Rigas",
2282
+ "27" => "Saldus",
2283
+ "28" => "Talsu",
2284
+ "29" => "Tukuma",
2285
+ "30" => "Valkas",
2286
+ "31" => "Valmieras",
2287
+ "32" => "Ventspils",
2288
+ "33" => "Ventspils"
2289
+ ),
2290
+ "LY" => array(
2291
+ "03" => "Al Aziziyah",
2292
+ "05" => "Al Jufrah",
2293
+ "08" => "Al Kufrah",
2294
+ "13" => "Ash Shati'",
2295
+ "30" => "Murzuq",
2296
+ "34" => "Sabha",
2297
+ "41" => "Tarhunah",
2298
+ "42" => "Tubruq",
2299
+ "45" => "Zlitan",
2300
+ "47" => "Ajdabiya",
2301
+ "48" => "Al Fatih",
2302
+ "49" => "Al Jabal al Akhdar",
2303
+ "50" => "Al Khums",
2304
+ "51" => "An Nuqat al Khams",
2305
+ "52" => "Awbari",
2306
+ "53" => "Az Zawiyah",
2307
+ "54" => "Banghazi",
2308
+ "55" => "Darnah",
2309
+ "56" => "Ghadamis",
2310
+ "57" => "Gharyan",
2311
+ "58" => "Misratah",
2312
+ "59" => "Sawfajjin",
2313
+ "60" => "Surt",
2314
+ "61" => "Tarabulus",
2315
+ "62" => "Yafran"
2316
+ ),
2317
+ "MA" => array(
2318
+ "45" => "Grand Casablanca",
2319
+ "46" => "Fes-Boulemane",
2320
+ "47" => "Marrakech-Tensift-Al Haouz",
2321
+ "48" => "Meknes-Tafilalet",
2322
+ "49" => "Rabat-Sale-Zemmour-Zaer",
2323
+ "50" => "Chaouia-Ouardigha",
2324
+ "51" => "Doukkala-Abda",
2325
+ "52" => "Gharb-Chrarda-Beni Hssen",
2326
+ "53" => "Guelmim-Es Smara",
2327
+ "54" => "Oriental",
2328
+ "55" => "Souss-Massa-Dr,a",
2329
+ "56" => "Tadla-Azilal",
2330
+ "57" => "Tanger-Tetouan",
2331
+ "58" => "Taza-Al Hoceima-Taounate",
2332
+ "59" => "La,youne-Boujdour-Sakia El Hamra"
2333
+ ),
2334
+ "MC" => array(
2335
+ "01" => "La Condamine",
2336
+ "02" => "Monaco",
2337
+ "03" => "Monte-Carlo"
2338
+ ),
2339
+ "MD" => array(
2340
+ "51" => "Gagauzia",
2341
+ "57" => "Chisinau",
2342
+ "58" => "Stinga Nistrului",
2343
+ "59" => "Anenii Noi",
2344
+ "60" => "Balti",
2345
+ "61" => "Basarabeasca",
2346
+ "62" => "Bender",
2347
+ "63" => "Briceni",
2348
+ "64" => "Cahul",
2349
+ "65" => "Cantemir",
2350
+ "66" => "Calarasi",
2351
+ "67" => "Causeni",
2352
+ "68" => "Cimislia",
2353
+ "69" => "Criuleni",
2354
+ "70" => "Donduseni",
2355
+ "71" => "Drochia",
2356
+ "72" => "Dubasari",
2357
+ "73" => "Edinet",
2358
+ "74" => "Falesti",
2359
+ "75" => "Floresti",
2360
+ "76" => "Glodeni",
2361
+ "77" => "Hincesti",
2362
+ "78" => "Ialoveni",
2363
+ "79" => "Leova",
2364
+ "80" => "Nisporeni",
2365
+ "81" => "Ocnita",
2366
+ "82" => "Orhei",
2367
+ "83" => "Rezina",
2368
+ "84" => "Riscani",
2369
+ "85" => "Singerei",
2370
+ "86" => "Soldanesti",
2371
+ "87" => "Soroca",
2372
+ "88" => "Stefan-Voda",
2373
+ "89" => "Straseni",
2374
+ "90" => "Taraclia",
2375
+ "91" => "Telenesti",
2376
+ "92" => "Ungheni"
2377
+ ),
2378
+ "MG" => array(
2379
+ "01" => "Antsiranana",
2380
+ "02" => "Fianarantsoa",
2381
+ "03" => "Mahajanga",
2382
+ "04" => "Toamasina",
2383
+ "05" => "Antananarivo",
2384
+ "06" => "Toliara"
2385
+ ),
2386
+ "MK" => array(
2387
+ "01" => "Aracinovo",
2388
+ "02" => "Bac",
2389
+ "03" => "Belcista",
2390
+ "04" => "Berovo",
2391
+ "05" => "Bistrica",
2392
+ "06" => "Bitola",
2393
+ "07" => "Blatec",
2394
+ "08" => "Bogdanci",
2395
+ "09" => "Bogomila",
2396
+ "10" => "Bogovinje",
2397
+ "11" => "Bosilovo",
2398
+ "12" => "Brvenica",
2399
+ "13" => "Cair",
2400
+ "14" => "Capari",
2401
+ "15" => "Caska",
2402
+ "16" => "Cegrane",
2403
+ "17" => "Centar",
2404
+ "18" => "Centar Zupa",
2405
+ "19" => "Cesinovo",
2406
+ "20" => "Cucer-Sandevo",
2407
+ "21" => "Debar",
2408
+ "22" => "Delcevo",
2409
+ "23" => "Delogozdi",
2410
+ "24" => "Demir Hisar",
2411
+ "25" => "Demir Kapija",
2412
+ "26" => "Dobrusevo",
2413
+ "27" => "Dolna Banjica",
2414
+ "28" => "Dolneni",
2415
+ "29" => "Dorce Petrov",
2416
+ "30" => "Drugovo",
2417
+ "31" => "Dzepciste",
2418
+ "32" => "Gazi Baba",
2419
+ "33" => "Gevgelija",
2420
+ "34" => "Gostivar",
2421
+ "35" => "Gradsko",
2422
+ "36" => "Ilinden",
2423
+ "37" => "Izvor",
2424
+ "38" => "Jegunovce",
2425
+ "39" => "Kamenjane",
2426
+ "40" => "Karbinci",
2427
+ "41" => "Karpos",
2428
+ "42" => "Kavadarci",
2429
+ "43" => "Kicevo",
2430
+ "44" => "Kisela Voda",
2431
+ "45" => "Klecevce",
2432
+ "46" => "Kocani",
2433
+ "47" => "Konce",
2434
+ "48" => "Kondovo",
2435
+ "49" => "Konopiste",
2436
+ "50" => "Kosel",
2437
+ "51" => "Kratovo",
2438
+ "52" => "Kriva Palanka",
2439
+ "53" => "Krivogastani",
2440
+ "54" => "Krusevo",
2441
+ "55" => "Kuklis",
2442
+ "56" => "Kukurecani",
2443
+ "57" => "Kumanovo",
2444
+ "58" => "Labunista",
2445
+ "59" => "Lipkovo",
2446
+ "60" => "Lozovo",
2447
+ "61" => "Lukovo",
2448
+ "62" => "Makedonska Kamenica",
2449
+ "63" => "Makedonski Brod",
2450
+ "64" => "Mavrovi Anovi",
2451
+ "65" => "Meseista",
2452
+ "66" => "Miravci",
2453
+ "67" => "Mogila",
2454
+ "68" => "Murtino",
2455
+ "69" => "Negotino",
2456
+ "70" => "Negotino-Polosko",
2457
+ "71" => "Novaci",
2458
+ "72" => "Novo Selo",
2459
+ "73" => "Oblesevo",
2460
+ "74" => "Ohrid",
2461
+ "75" => "Orasac",
2462
+ "76" => "Orizari",
2463
+ "77" => "Oslomej",
2464
+ "78" => "Pehcevo",
2465
+ "79" => "Petrovec",
2466
+ "80" => "Plasnica",
2467
+ "81" => "Podares",
2468
+ "82" => "Prilep",
2469
+ "83" => "Probistip",
2470
+ "84" => "Radovis",
2471
+ "85" => "Rankovce",
2472
+ "86" => "Resen",
2473
+ "87" => "Rosoman",
2474
+ "88" => "Rostusa",
2475
+ "89" => "Samokov",
2476
+ "90" => "Saraj",
2477
+ "91" => "Sipkovica",
2478
+ "92" => "Sopiste",
2479
+ "93" => "Sopotnica",
2480
+ "94" => "Srbinovo",
2481
+ "95" => "Staravina",
2482
+ "96" => "Star Dojran",
2483
+ "97" => "Staro Nagoricane",
2484
+ "98" => "Stip",
2485
+ "99" => "Struga",
2486
+ "A1" => "Strumica",
2487
+ "A2" => "Studenicani",
2488
+ "A3" => "Suto Orizari",
2489
+ "A4" => "Sveti Nikole",
2490
+ "A5" => "Tearce",
2491
+ "A6" => "Tetovo",
2492
+ "A7" => "Topolcani",
2493
+ "A8" => "Valandovo",
2494
+ "A9" => "Vasilevo",
2495
+ "B1" => "Veles",
2496
+ "B2" => "Velesta",
2497
+ "B3" => "Vevcani",
2498
+ "B4" => "Vinica",
2499
+ "B5" => "Vitoliste",
2500
+ "B6" => "Vranestica",
2501
+ "B7" => "Vrapciste",
2502
+ "B8" => "Vratnica",
2503
+ "B9" => "Vrutok",
2504
+ "C1" => "Zajas",
2505
+ "C2" => "Zelenikovo",
2506
+ "C3" => "Zelino",
2507
+ "C4" => "Zitose",
2508
+ "C5" => "Zletovo",
2509
+ "C6" => "Zrnovci"
2510
+ ),
2511
+ "ML" => array(
2512
+ "01" => "Bamako",
2513
+ "03" => "Kayes",
2514
+ "04" => "Mopti",
2515
+ "05" => "Segou",
2516
+ "06" => "Sikasso",
2517
+ "07" => "Koulikoro",
2518
+ "08" => "Tombouctou",
2519
+ "09" => "Gao",
2520
+ "10" => "Kidal"
2521
+ ),
2522
+ "MM" => array(
2523
+ "01" => "Rakhine State",
2524
+ "02" => "Chin State",
2525
+ "03" => "Irrawaddy",
2526
+ "04" => "Kachin State",
2527
+ "05" => "Karan State",
2528
+ "06" => "Kayah State",
2529
+ "07" => "Magwe",
2530
+ "08" => "Mandalay",
2531
+ "09" => "Pegu",
2532
+ "10" => "Sagaing",
2533
+ "11" => "Shan State",
2534
+ "12" => "Tenasserim",
2535
+ "13" => "Mon State",
2536
+ "14" => "Rangoon",
2537
+ "17" => "Yangon"
2538
+ ),
2539
+ "MN" => array(
2540
+ "01" => "Arhangay",
2541
+ "02" => "Bayanhongor",
2542
+ "03" => "Bayan-Olgiy",
2543
+ "05" => "Darhan",
2544
+ "06" => "Dornod",
2545
+ "07" => "Dornogovi",
2546
+ "08" => "Dundgovi",
2547
+ "09" => "Dzavhan",
2548
+ "10" => "Govi-Altay",
2549
+ "11" => "Hentiy",
2550
+ "12" => "Hovd",
2551
+ "13" => "Hovsgol",
2552
+ "14" => "Omnogovi",
2553
+ "15" => "Ovorhangay",
2554
+ "16" => "Selenge",
2555
+ "17" => "Suhbaatar",
2556
+ "18" => "Tov",
2557
+ "19" => "Uvs",
2558
+ "20" => "Ulaanbaatar",
2559
+ "21" => "Bulgan",
2560
+ "22" => "Erdenet",
2561
+ "23" => "Darhan-Uul",
2562
+ "24" => "Govisumber",
2563
+ "25" => "Orhon"
2564
+ ),
2565
+ "MO" => array(
2566
+ "01" => "Ilhas",
2567
+ "02" => "Macau"
2568
+ ),
2569
+ "MR" => array(
2570
+ "01" => "Hodh Ech Chargui",
2571
+ "02" => "Hodh El Gharbi",
2572
+ "03" => "Assaba",
2573
+ "04" => "Gorgol",
2574
+ "05" => "Brakna",
2575
+ "06" => "Trarza",
2576
+ "07" => "Adrar",
2577
+ "08" => "Dakhlet Nouadhibou",
2578
+ "09" => "Tagant",
2579
+ "10" => "Guidimaka",
2580
+ "11" => "Tiris Zemmour",
2581
+ "12" => "Inchiri"
2582
+ ),
2583
+ "MS" => array(
2584
+ "01" => "Saint Anthony",
2585
+ "02" => "Saint Georges",
2586
+ "03" => "Saint Peter"
2587
+ ),
2588
+ "MU" => array(
2589
+ "12" => "Black River",
2590
+ "13" => "Flacq",
2591
+ "14" => "Grand Port",
2592
+ "15" => "Moka",
2593
+ "16" => "Pamplemousses",
2594
+ "17" => "Plaines Wilhems",
2595
+ "18" => "Port Louis",
2596
+ "19" => "Riviere du Rempart",
2597
+ "20" => "Savanne",
2598
+ "21" => "Agalega Islands",
2599
+ "22" => "Cargados Carajos",
2600
+ "23" => "Rodrigues"
2601
+ ),
2602
+ "MV" => array(
2603
+ "01" => "Seenu",
2604
+ "05" => "Laamu",
2605
+ "30" => "Alifu",
2606
+ "31" => "Baa",
2607
+ "32" => "Dhaalu",
2608
+ "33" => "Faafu ",
2609
+ "34" => "Gaafu Alifu",
2610
+ "35" => "Gaafu Dhaalu",
2611
+ "36" => "Haa Alifu",
2612
+ "37" => "Haa Dhaalu",
2613
+ "38" => "Kaafu",
2614
+ "39" => "Lhaviyani",
2615
+ "40" => "Maale",
2616
+ "41" => "Meemu",
2617
+ "42" => "Gnaviyani",
2618
+ "43" => "Noonu",
2619
+ "44" => "Raa",
2620
+ "45" => "Shaviyani",
2621
+ "46" => "Thaa",
2622
+ "47" => "Vaavu"
2623
+ ),
2624
+ "MW" => array(
2625
+ "02" => "Chikwawa",
2626
+ "03" => "Chiradzulu",
2627
+ "04" => "Chitipa",
2628
+ "05" => "Thyolo",
2629
+ "06" => "Dedza",
2630
+ "07" => "Dowa",
2631
+ "08" => "Karonga",
2632
+ "09" => "Kasungu",
2633
+ "11" => "Lilongwe",
2634
+ "12" => "Mangochi",
2635
+ "13" => "Mchinji",
2636
+ "15" => "Mzimba",
2637
+ "16" => "Ntcheu",
2638
+ "17" => "Nkhata Bay",
2639
+ "18" => "Nkhotakota",
2640
+ "19" => "Nsanje",
2641
+ "20" => "Ntchisi",
2642
+ "21" => "Rumphi",
2643
+ "22" => "Salima",
2644
+ "23" => "Zomba",
2645
+ "24" => "Blantyre",
2646
+ "25" => "Mwanza",
2647
+ "26" => "Balaka",
2648
+ "27" => "Likoma",
2649
+ "28" => "Machinga",
2650
+ "29" => "Mulanje",
2651
+ "30" => "Phalombe"
2652
+ ),
2653
+ "MX" => array(
2654
+ "01" => "Aguascalientes",
2655
+ "02" => "Baja California",
2656
+ "03" => "Baja California Sur",
2657
+ "04" => "Campeche",
2658
+ "05" => "Chiapas",
2659
+ "06" => "Chihuahua",
2660
+ "07" => "Coahuila de Zaragoza",
2661
+ "08" => "Colima",
2662
+ "09" => "Distrito Federal",
2663
+ "10" => "Durango",
2664
+ "11" => "Guanajuato",
2665
+ "12" => "Guerrero",
2666
+ "13" => "Hidalgo",
2667
+ "14" => "Jalisco",
2668
+ "15" => "Mexico",
2669
+ "16" => "Michoacan de Ocampo",
2670
+ "17" => "Morelos",
2671
+ "18" => "Nayarit",
2672
+ "19" => "Nuevo Leon",
2673
+ "20" => "Oaxaca",
2674
+ "21" => "Puebla",
2675
+ "22" => "Queretaro de Arteaga",
2676
+ "23" => "Quintana Roo",
2677
+ "24" => "San Luis Potosi",
2678
+ "25" => "Sinaloa",
2679
+ "26" => "Sonora",
2680
+ "27" => "Tabasco",
2681
+ "28" => "Tamaulipas",
2682
+ "29" => "Tlaxcala",
2683
+ "30" => "Veracruz-Llave",
2684
+ "31" => "Yucatan",
2685
+ "32" => "Zacatecas"
2686
+ ),
2687
+ "MY" => array(
2688
+ "01" => "Johor",
2689
+ "02" => "Kedah",
2690
+ "03" => "Kelantan",
2691
+ "04" => "Melaka",
2692
+ "05" => "Negeri Sembilan",
2693
+ "06" => "Pahang",
2694
+ "07" => "Perak",
2695
+ "08" => "Perlis",
2696
+ "09" => "Pulau Pinang",
2697
+ "11" => "Sarawak",
2698
+ "12" => "Selangor",
2699
+ "13" => "Terengganu",
2700
+ "14" => "Kuala Lumpur",
2701
+ "15" => "Labuan",
2702
+ "16" => "Sabah",
2703
+ "17" => "Putrajaya"
2704
+ ),
2705
+ "MZ" => array(
2706
+ "01" => "Cabo Delgado",
2707
+ "02" => "Gaza",
2708
+ "03" => "Inhambane",
2709
+ "04" => "Maputo",
2710
+ "05" => "Sofala",
2711
+ "06" => "Nampula",
2712
+ "07" => "Niassa",
2713
+ "08" => "Tete",
2714
+ "09" => "Zambezia",
2715
+ "10" => "Manica",
2716
+ "11" => "Maputo"
2717
+ ),
2718
+ "NA" => array(
2719
+ "01" => "Bethanien",
2720
+ "02" => "Caprivi Oos",
2721
+ "03" => "Boesmanland",
2722
+ "04" => "Gobabis",
2723
+ "05" => "Grootfontein",
2724
+ "06" => "Kaokoland",
2725
+ "07" => "Karibib",
2726
+ "08" => "Keetmanshoop",
2727
+ "09" => "Luderitz",
2728
+ "10" => "Maltahohe",
2729
+ "11" => "Okahandja",
2730
+ "12" => "Omaruru",
2731
+ "13" => "Otjiwarongo",
2732
+ "14" => "Outjo",
2733
+ "15" => "Owambo",
2734
+ "16" => "Rehoboth",
2735
+ "17" => "Swakopmund",
2736
+ "18" => "Tsumeb",
2737
+ "20" => "Karasburg",
2738
+ "21" => "Windhoek",
2739
+ "22" => "Damaraland",
2740
+ "23" => "Hereroland Oos",
2741
+ "24" => "Hereroland Wes",
2742
+ "25" => "Kavango",
2743
+ "26" => "Mariental",
2744
+ "27" => "Namaland",
2745
+ "28" => "Caprivi",
2746
+ "29" => "Erongo",
2747
+ "30" => "Hardap",
2748
+ "31" => "Karas",
2749
+ "32" => "Kunene",
2750
+ "33" => "Ohangwena",
2751
+ "34" => "Okavango",
2752
+ "35" => "Omaheke",
2753
+ "36" => "Omusati",
2754
+ "37" => "Oshana",
2755
+ "38" => "Oshikoto",
2756
+ "39" => "Otjozondjupa"
2757
+ ),
2758
+ "NE" => array(
2759
+ "01" => "Agadez",
2760
+ "02" => "Diffa",
2761
+ "03" => "Dosso",
2762
+ "04" => "Maradi",
2763
+ "05" => "Niamey",
2764
+ "06" => "Tahoua",
2765
+ "07" => "Zinder",
2766
+ "08" => "Niamey"
2767
+ ),
2768
+ "NG" => array(
2769
+ "05" => "Lagos",
2770
+ "11" => "Federal Capital Territory",
2771
+ "16" => "Ogun",
2772
+ "21" => "Akwa Ibom",
2773
+ "22" => "Cross River",
2774
+ "23" => "Kaduna",
2775
+ "24" => "Katsina",
2776
+ "25" => "Anambra",
2777
+ "26" => "Benue",
2778
+ "27" => "Borno",
2779
+ "28" => "Imo",
2780
+ "29" => "Kano",
2781
+ "30" => "Kwara",
2782
+ "31" => "Niger",
2783
+ "32" => "Oyo",
2784
+ "35" => "Adamawa",
2785
+ "36" => "Delta",
2786
+ "37" => "Edo",
2787
+ "39" => "Jigawa",
2788
+ "40" => "Kebbi",
2789
+ "41" => "Kogi",
2790
+ "42" => "Osun",
2791
+ "43" => "Taraba",
2792
+ "44" => "Yobe",
2793
+ "45" => "Abia",
2794
+ "46" => "Bauchi",
2795
+ "47" => "Enugu",
2796
+ "48" => "Ondo",
2797
+ "49" => "Plateau",
2798
+ "50" => "Rivers",
2799
+ "51" => "Sokoto",
2800
+ "52" => "Bayelsa",
2801
+ "53" => "Ebonyi",
2802
+ "54" => "Ekiti",
2803
+ "55" => "Gombe",
2804
+ "56" => "Nassarawa",
2805
+ "57" => "Zamfara"
2806
+ ),
2807
+ "NI" => array(
2808
+ "01" => "Boaco",
2809
+ "02" => "Carazo",
2810
+ "03" => "Chinandega",
2811
+ "04" => "Chontales",
2812
+ "05" => "Esteli",
2813
+ "06" => "Granada",
2814
+ "07" => "Jinotega",
2815
+ "08" => "Leon",
2816
+ "09" => "Madriz",
2817
+ "10" => "Managua",
2818
+ "11" => "Masaya",
2819
+ "12" => "Matagalpa",
2820
+ "13" => "Nueva Segovia",
2821
+ "14" => "Rio San Juan",
2822
+ "15" => "Rivas",
2823
+ "16" => "Zelaya",
2824
+ "17" => "Autonoma Atlantico Norte",
2825
+ "18" => "Region Autonoma Atlantico Sur"
2826
+ ),
2827
+ "NL" => array(
2828
+ "01" => "Drenthe",
2829
+ "02" => "Friesland",
2830
+ "03" => "Gelderland",
2831
+ "04" => "Groningen",
2832
+ "05" => "Limburg",
2833
+ "06" => "Noord-Brabant",
2834
+ "07" => "Noord-Holland",
2835
+ "09" => "Utrecht",
2836
+ "10" => "Zeeland",
2837
+ "11" => "Zuid-Holland",
2838
+ "15" => "Overijssel",
2839
+ "16" => "Flevoland"
2840
+ ),
2841
+ "NO" => array(
2842
+ "01" => "Akershus",
2843
+ "02" => "Aust-Agder",
2844
+ "04" => "Buskerud",
2845
+ "05" => "Finnmark",
2846
+ "06" => "Hedmark",
2847
+ "07" => "Hordaland",
2848
+ "08" => "More og Romsdal",
2849
+ "09" => "Nordland",
2850
+ "10" => "Nord-Trondelag",
2851
+ "11" => "Oppland",
2852
+ "12" => "Oslo",
2853
+ "13" => "Ostfold",
2854
+ "14" => "Rogaland",
2855
+ "15" => "Sogn og Fjordane",
2856
+ "16" => "Sor-Trondelag",
2857
+ "17" => "Telemark",
2858
+ "18" => "Troms",
2859
+ "19" => "Vest-Agder",
2860
+ "20" => "Vestfold"
2861
+ ),
2862
+ "NP" => array(
2863
+ "01" => "Bagmati",
2864
+ "02" => "Bheri",
2865
+ "03" => "Dhawalagiri",
2866
+ "04" => "Gandaki",
2867
+ "05" => "Janakpur",
2868
+ "06" => "Karnali",
2869
+ "07" => "Kosi",
2870
+ "08" => "Lumbini",
2871
+ "09" => "Mahakali",
2872
+ "10" => "Mechi",
2873
+ "11" => "Narayani",
2874
+ "12" => "Rapti",
2875
+ "13" => "Sagarmatha",
2876
+ "14" => "Seti"
2877
+ ),
2878
+ "NR" => array(
2879
+ "01" => "Aiwo",
2880
+ "02" => "Anabar",
2881
+ "03" => "Anetan",
2882
+ "04" => "Anibare",
2883
+ "05" => "Baiti",
2884
+ "06" => "Boe",
2885
+ "07" => "Buada",
2886
+ "08" => "Denigomodu",
2887
+ "09" => "Ewa",
2888
+ "10" => "Ijuw",
2889
+ "11" => "Meneng",
2890
+ "12" => "Nibok",
2891
+ "13" => "Uaboe",
2892
+ "14" => "Yaren"
2893
+ ),
2894
+ "NZ" => array(
2895
+ "10" => "Chatham Islands",
2896
+ "E7" => "Auckland",
2897
+ "E8" => "Bay of Plenty",
2898
+ "E9" => "Canterbury",
2899
+ "F1" => "Gisborne",
2900
+ "F2" => "Hawke's Bay",
2901
+ "F3" => "Manawatu-Wanganui",
2902
+ "F4" => "Marlborough",
2903
+ "F5" => "Nelson",
2904
+ "F6" => "Northland",
2905
+ "F7" => "Otago",
2906
+ "F8" => "Southland",
2907
+ "F9" => "Taranaki",
2908
+ "G1" => "Waikato",
2909
+ "G2" => "Wellington",
2910
+ "G3" => "West Coast"
2911
+ ),
2912
+ "OM" => array(
2913
+ "01" => "Ad Dakhiliyah",
2914
+ "02" => "Al Batinah",
2915
+ "03" => "Al Wusta",
2916
+ "04" => "Ash Sharqiyah",
2917
+ "05" => "Az Zahirah",
2918
+ "06" => "Masqat",
2919
+ "07" => "Musandam",
2920
+ "08" => "Zufar"
2921
+ ),
2922
+ "PA" => array(
2923
+ "01" => "Bocas del Toro",
2924
+ "02" => "Chiriqui",
2925
+ "03" => "Cocle",
2926
+ "04" => "Colon",
2927
+ "05" => "Darien",
2928
+ "06" => "Herrera",
2929
+ "07" => "Los Santos",
2930
+ "08" => "Panama",
2931
+ "09" => "San Blas",
2932
+ "10" => "Veraguas"
2933
+ ),
2934
+ "PE" => array(
2935
+ "01" => "Amazonas",
2936
+ "02" => "Ancash",
2937
+ "03" => "Apurimac",
2938
+ "04" => "Arequipa",
2939
+ "05" => "Ayacucho",
2940
+ "06" => "Cajamarca",
2941
+ "07" => "Callao",
2942
+ "08" => "Cusco",
2943
+ "09" => "Huancavelica",
2944
+ "10" => "Huanuco",
2945
+ "11" => "Ica",
2946
+ "12" => "Junin",
2947
+ "13" => "La Libertad",
2948
+ "14" => "Lambayeque",
2949
+ "15" => "Lima",
2950
+ "16" => "Loreto",
2951
+ "17" => "Madre de Dios",
2952
+ "18" => "Moquegua",
2953
+ "19" => "Pasco",
2954
+ "20" => "Piura",
2955
+ "21" => "Puno",
2956
+ "22" => "San Martin",
2957
+ "23" => "Tacna",
2958
+ "24" => "Tumbes",
2959
+ "25" => "Ucayali"
2960
+ ),
2961
+ "PG" => array(
2962
+ "01" => "Central",
2963
+ "02" => "Gulf",
2964
+ "03" => "Milne Bay",
2965
+ "04" => "Northern",
2966
+ "05" => "Southern Highlands",
2967
+ "06" => "Western",
2968
+ "07" => "North Solomons",
2969
+ "08" => "Chimbu",
2970
+ "09" => "Eastern Highlands",
2971
+ "10" => "East New Britain",
2972
+ "11" => "East Sepik",
2973
+ "12" => "Madang",
2974
+ "13" => "Manus",
2975
+ "14" => "Morobe",
2976
+ "15" => "New Ireland",
2977
+ "16" => "Western Highlands",
2978
+ "17" => "West New Britain",
2979
+ "18" => "Sandaun",
2980
+ "19" => "Enga",
2981
+ "20" => "National Capital"
2982
+ ),
2983
+ "PH" => array(
2984
+ "01" => "Abra",
2985
+ "02" => "Agusan del Norte",
2986
+ "03" => "Agusan del Sur",
2987
+ "04" => "Aklan",
2988
+ "05" => "Albay",
2989
+ "06" => "Antique",
2990
+ "07" => "Bataan",
2991
+ "08" => "Batanes",
2992
+ "09" => "Batangas",
2993
+ "10" => "Benguet",
2994
+ "11" => "Bohol",
2995
+ "12" => "Bukidnon",
2996
+ "13" => "Bulacan",
2997
+ "14" => "Cagayan",
2998
+ "15" => "Camarines Norte",
2999
+ "16" => "Camarines Sur",
3000
+ "17" => "Camiguin",
3001
+ "18" => "Capiz",
3002
+ "19" => "Catanduanes",
3003
+ "20" => "Cavite",
3004
+ "21" => "Cebu",
3005
+ "22" => "Basilan",
3006
+ "23" => "Eastern Samar",
3007
+ "24" => "Davao",
3008
+ "25" => "Davao del Sur",
3009
+ "26" => "Davao Oriental",
3010
+ "27" => "Ifugao",
3011
+ "28" => "Ilocos Norte",
3012
+ "29" => "Ilocos Sur",
3013
+ "30" => "Iloilo",
3014
+ "31" => "Isabela",
3015
+ "32" => "Kalinga-Apayao",
3016
+ "33" => "Laguna",
3017
+ "34" => "Lanao del Norte",
3018
+ "35" => "Lanao del Sur",
3019
+ "36" => "La Union",
3020
+ "37" => "Leyte",
3021
+ "38" => "Marinduque",
3022
+ "39" => "Masbate",
3023
+ "40" => "Mindoro Occidental",
3024
+ "41" => "Mindoro Oriental",
3025
+ "42" => "Misamis Occidental",
3026
+ "43" => "Misamis Oriental",
3027
+ "44" => "Mountain",
3028
+ "45" => "Negros Occidental",
3029
+ "46" => "Negros Oriental",
3030
+ "47" => "Nueva Ecija",
3031
+ "48" => "Nueva Vizcaya",
3032
+ "49" => "Palawan",
3033
+ "50" => "Pampanga",
3034
+ "51" => "Pangasinan",
3035
+ "53" => "Rizal",
3036
+ "54" => "Romblon",
3037
+ "55" => "Samar",
3038
+ "56" => "Maguindanao",
3039
+ "57" => "North Cotabato",
3040
+ "58" => "Sorsogon",
3041
+ "59" => "Southern Leyte",
3042
+ "60" => "Sulu",
3043
+ "61" => "Surigao del Norte",
3044
+ "62" => "Surigao del Sur",
3045
+ "63" => "Tarlac",
3046
+ "64" => "Zambales",
3047
+ "65" => "Zamboanga del Norte",
3048
+ "66" => "Zamboanga del Sur",
3049
+ "67" => "Northern Samar",
3050
+ "68" => "Quirino",
3051
+ "69" => "Siquijor",
3052
+ "70" => "South Cotabato",
3053
+ "71" => "Sultan Kudarat",
3054
+ "72" => "Tawitawi",
3055
+ "A1" => "Angeles",
3056
+ "A2" => "Bacolod",
3057
+ "A3" => "Bago",
3058
+ "A4" => "Baguio",
3059
+ "A5" => "Bais",
3060
+ "A6" => "Basilan City",
3061
+ "A7" => "Batangas City",
3062
+ "A8" => "Butuan",
3063
+ "A9" => "Cabanatuan",
3064
+ "B1" => "Cadiz",
3065
+ "B2" => "Cagayan de Oro",
3066
+ "B3" => "Calbayog",
3067
+ "B4" => "Caloocan",
3068
+ "B5" => "Canlaon",
3069
+ "B6" => "Cavite City",
3070
+ "B7" => "Cebu City",
3071
+ "B8" => "Cotabato",
3072
+ "B9" => "Dagupan",
3073
+ "C1" => "Danao",
3074
+ "C2" => "Dapitan",
3075
+ "C3" => "Davao City",
3076
+ "C4" => "Dipolog",
3077
+ "C5" => "Dumaguete",
3078
+ "C6" => "General Santos",
3079
+ "C7" => "Gingoog",
3080
+ "C8" => "Iligan",
3081
+ "C9" => "Iloilo City",
3082
+ "D1" => "Iriga",
3083
+ "D2" => "La Carlota",
3084
+ "D3" => "Laoag",
3085
+ "D4" => "Lapu-Lapu",
3086
+ "D5" => "Legaspi",
3087
+ "D6" => "Lipa",
3088
+ "D7" => "Lucena",
3089
+ "D8" => "Mandaue",
3090
+ "D9" => "Manila",
3091
+ "E1" => "Marawi",
3092
+ "E2" => "Naga",
3093
+ "E3" => "Olongapo",
3094
+ "E4" => "Ormoc",
3095
+ "E5" => "Oroquieta",
3096
+ "E6" => "Ozamis",
3097
+ "E7" => "Pagadian",
3098
+ "E8" => "Palayan",
3099
+ "E9" => "Pasay",
3100
+ "F1" => "Puerto Princesa",
3101
+ "F2" => "Quezon City",
3102
+ "F3" => "Roxas",
3103
+ "F4" => "San Carlos",
3104
+ "F5" => "San Carlos",
3105
+ "F6" => "San Jose",
3106
+ "F7" => "San Pablo",
3107
+ "F8" => "Silay",
3108
+ "F9" => "Surigao",
3109
+ "G1" => "Tacloban",
3110
+ "G2" => "Tagaytay",
3111
+ "G3" => "Tagbilaran",
3112
+ "G4" => "Tangub",
3113
+ "G5" => "Toledo",
3114
+ "G6" => "Trece Martires",
3115
+ "G7" => "Zamboanga",
3116
+ "G8" => "Aurora",
3117
+ "H2" => "Quezon",
3118
+ "H3" => "Negros Occidental",
3119
+ "I6" => "Compostela Valley",
3120
+ "I7" => "Davao del Norte",
3121
+ "J7" => "Kalinga",
3122
+ "K6" => "Malaybalay",
3123
+ "M5" => "San Jose del Monte",
3124
+ "M6" => "San Juan",
3125
+ "M8" => "Santiago",
3126
+ "M9" => "Sarangani",
3127
+ "N1" => "Sipalay",
3128
+ "N3" => "Surigao del Norte",
3129
+ "P1" => "Zambales",
3130
+ "P2" => "Zamboanga"
3131
+ ),
3132
+ "PK" => array(
3133
+ "01" => "Federally Administered Tribal Areas",
3134
+ "02" => "Balochistan",
3135
+ "03" => "North-West Frontier",
3136
+ "04" => "Punjab",
3137
+ "05" => "Sindh",
3138
+ "06" => "Azad Kashmir",
3139
+ "07" => "Northern Areas",
3140
+ "08" => "Islamabad"
3141
+ ),
3142
+ "PL" => array(
3143
+ "72" => "Dolnoslaskie",
3144
+ "73" => "Kujawsko-Pomorskie",
3145
+ "74" => "Lodzkie",
3146
+ "75" => "Lubelskie",
3147
+ "76" => "Lubuskie",
3148
+ "77" => "Malopolskie",
3149
+ "78" => "Mazowieckie",
3150
+ "79" => "Opolskie",
3151
+ "80" => "Podkarpackie",
3152
+ "81" => "Podlaskie",
3153
+ "82" => "Pomorskie",
3154
+ "83" => "Slaskie",
3155
+ "84" => "Swietokrzyskie",
3156
+ "85" => "Warminsko-Mazurskie",
3157
+ "86" => "Wielkopolskie",
3158
+ "87" => "Zachodniopomorskie"
3159
+ ),
3160
+ "PS" => array(
3161
+ "GZ" => "Gaza",
3162
+ "WE" => "West Bank"
3163
+ ),
3164
+ "PT" => array(
3165
+ "02" => "Aveiro",
3166
+ "03" => "Beja",
3167
+ "04" => "Braga",
3168
+ "05" => "Braganca",
3169
+ "06" => "Castelo Branco",
3170
+ "07" => "Coimbra",
3171
+ "08" => "Evora",
3172
+ "09" => "Faro",
3173
+ "10" => "Madeira",
3174
+ "11" => "Guarda",
3175
+ "13" => "Leiria",
3176
+ "14" => "Lisboa",
3177
+ "16" => "Portalegre",
3178
+ "17" => "Porto",
3179
+ "18" => "Santarem",
3180
+ "19" => "Setubal",
3181
+ "20" => "Viana do Castelo",
3182
+ "21" => "Vila Real",
3183
+ "22" => "Viseu",
3184
+ "23" => "Azores"
3185
+ ),
3186
+ "PY" => array(
3187
+ "01" => "Alto Parana",
3188
+ "02" => "Amambay",
3189
+ "03" => "Boqueron",
3190
+ "04" => "Caaguazu",
3191
+ "05" => "Caazapa",
3192
+ "06" => "Central",
3193
+ "07" => "Concepcion",
3194
+ "08" => "Cordillera",
3195
+ "10" => "Guaira",
3196
+ "11" => "Itapua",
3197
+ "12" => "Misiones",
3198
+ "13" => "Neembucu",
3199
+ "15" => "Paraguari",
3200
+ "16" => "Presidente Hayes",
3201
+ "17" => "San Pedro",
3202
+ "19" => "Canindeyu",
3203
+ "20" => "Chaco",
3204
+ "21" => "Nueva Asuncion",
3205
+ "23" => "Alto Paraguay"
3206
+ ),
3207
+ "QA" => array(
3208
+ "01" => "Ad Dawhah",
3209
+ "02" => "Al Ghuwariyah",
3210
+ "03" => "Al Jumaliyah",
3211
+ "04" => "Al Khawr",
3212
+ "05" => "Al Wakrah Municipality",
3213
+ "06" => "Ar Rayyan",
3214
+ "08" => "Madinat ach Shamal",
3215
+ "09" => "Umm Salal",
3216
+ "10" => "Al Wakrah",
3217
+ "11" => "Jariyan al Batnah",
3218
+ "12" => "Umm Sa'id"
3219
+ ),
3220
+ "RO" => array(
3221
+ "01" => "Alba",
3222
+ "02" => "Arad",
3223
+ "03" => "Arges",
3224
+ "04" => "Bacau",
3225
+ "05" => "Bihor",
3226
+ "06" => "Bistrita-Nasaud",
3227
+ "07" => "Botosani",
3228
+ "08" => "Braila",
3229
+ "09" => "Brasov",
3230
+ "10" => "Bucuresti",
3231
+ "11" => "Buzau",
3232
+ "12" => "Caras-Severin",
3233
+ "13" => "Cluj",
3234
+ "14" => "Constanta",
3235
+ "15" => "Covasna",
3236
+ "16" => "Dambovita",
3237
+ "17" => "Dolj",
3238
+ "18" => "Galati",
3239
+ "19" => "Gorj",
3240
+ "20" => "Harghita",
3241
+ "21" => "Hunedoara",
3242
+ "22" => "Ialomita",
3243
+ "23" => "Iasi",
3244
+ "25" => "Maramures",
3245
+ "26" => "Mehedinti",
3246
+ "27" => "Mures",
3247
+ "28" => "Neamt",
3248
+ "29" => "Olt",
3249
+ "30" => "Prahova",
3250
+ "31" => "Salaj",
3251
+ "32" => "Satu Mare",
3252
+ "33" => "Sibiu",
3253
+ "34" => "Suceava",
3254
+ "35" => "Teleorman",
3255
+ "36" => "Timis",
3256
+ "37" => "Tulcea",
3257
+ "38" => "Vaslui",
3258
+ "39" => "Valcea",
3259
+ "40" => "Vrancea",
3260
+ "41" => "Calarasi",
3261
+ "42" => "Giurgiu",
3262
+ "43" => "Ilfov"
3263
+ ),
3264
+ "RS" => array(
3265
+ "01" => "Kosovo",
3266
+ "02" => "Vojvodina"
3267
+ ),
3268
+ "RU" => array(
3269
+ "01" => "Adygeya, Republic of",
3270
+ "02" => "Aginsky Buryatsky AO",
3271
+ "03" => "Gorno-Altay",
3272
+ "04" => "Altaisky krai",
3273
+ "05" => "Amur",
3274
+ "06" => "Arkhangel'sk",
3275
+ "07" => "Astrakhan'",
3276
+ "08" => "Bashkortostan",
3277
+ "09" => "Belgorod",
3278
+ "10" => "Bryansk",
3279
+ "11" => "Buryat",
3280
+ "12" => "Chechnya",
3281
+ "13" => "Chelyabinsk",
3282
+ "14" => "Chita",
3283
+ "15" => "Chukot",
3284
+ "16" => "Chuvashia",
3285
+ "17" => "Dagestan",
3286
+ "18" => "Evenk",
3287
+ "19" => "Ingush",
3288
+ "20" => "Irkutsk",
3289
+ "21" => "Ivanovo",
3290
+ "22" => "Kabardin-Balkar",
3291
+ "23" => "Kaliningrad",
3292
+ "24" => "Kalmyk",
3293
+ "25" => "Kaluga",
3294
+ "26" => "Kamchatka",
3295
+ "27" => "Karachay-Cherkess",
3296
+ "28" => "Karelia",
3297
+ "29" => "Kemerovo",
3298
+ "30" => "Khabarovsk",
3299
+ "31" => "Khakass",
3300
+ "32" => "Khanty-Mansiy",
3301
+ "33" => "Kirov",
3302
+ "34" => "Komi",
3303
+ "35" => "Komi-Permyak",
3304
+ "36" => "Koryak",
3305
+ "37" => "Kostroma",
3306
+ "38" => "Krasnodar",
3307
+ "39" => "Krasnoyarsk",
3308
+ "40" => "Kurgan",
3309
+ "41" => "Kursk",
3310
+ "42" => "Leningrad",
3311
+ "43" => "Lipetsk",
3312
+ "44" => "Magadan",
3313
+ "45" => "Mariy-El",
3314
+ "46" => "Mordovia",
3315
+ "47" => "Moskva",
3316
+ "48" => "Moscow City",
3317
+ "49" => "Murmansk",
3318
+ "50" => "Nenets",
3319
+ "51" => "Nizhegorod",
3320
+ "52" => "Novgorod",
3321
+ "53" => "Novosibirsk",
3322
+ "54" => "Omsk",
3323
+ "55" => "Orenburg",
3324
+ "56" => "Orel",
3325
+ "57" => "Penza",
3326
+ "58" => "Perm'",
3327
+ "59" => "Primor'ye",
3328
+ "60" => "Pskov",
3329
+ "61" => "Rostov",
3330
+ "62" => "Ryazan'",
3331
+ "63" => "Sakha",
3332
+ "64" => "Sakhalin",
3333
+ "65" => "Samara",
3334
+ "66" => "Saint Petersburg City",
3335
+ "67" => "Saratov",
3336
+ "68" => "North Ossetia",
3337
+ "69" => "Smolensk",
3338
+ "70" => "Stavropol'",
3339
+ "71" => "Sverdlovsk",
3340
+ "72" => "Tambovskaya oblast",
3341
+ "73" => "Tatarstan",
3342
+ "74" => "Taymyr",
3343
+ "75" => "Tomsk",
3344
+ "76" => "Tula",
3345
+ "77" => "Tver'",
3346
+ "78" => "Tyumen'",
3347
+ "79" => "Tuva",
3348
+ "80" => "Udmurt",
3349
+ "81" => "Ul'yanovsk",
3350
+ "82" => "Ust-Orda Buryat",
3351
+ "83" => "Vladimir",
3352
+ "84" => "Volgograd",
3353
+ "85" => "Vologda",
3354
+ "86" => "Voronezh",
3355
+ "87" => "Yamal-Nenets",
3356
+ "88" => "Yaroslavl'",
3357
+ "89" => "Yevrey",
3358
+ "90" => "Permskiy Kray",
3359
+ "91" => "Krasnoyarskiy Kray",
3360
+ "92" => "Kamchatskiy Kray",
3361
+ "93" => "Zabaykal'skiy Kray"
3362
+ ),
3363
+ "RW" => array(
3364
+ "01" => "Butare",
3365
+ "06" => "Gitarama",
3366
+ "07" => "Kibungo",
3367
+ "09" => "Kigali",
3368
+ "11" => "Est",
3369
+ "12" => "Kigali",
3370
+ "13" => "Nord",
3371
+ "14" => "Ouest",
3372
+ "15" => "Sud"
3373
+ ),
3374
+ "SA" => array(
3375
+ "02" => "Al Bahah",
3376
+ "05" => "Al Madinah",
3377
+ "06" => "Ash Sharqiyah",
3378
+ "08" => "Al Qasim",
3379
+ "10" => "Ar Riyad",
3380
+ "11" => "Asir Province",
3381
+ "13" => "Ha'il",
3382
+ "14" => "Makkah",
3383
+ "15" => "Al Hudud ash Shamaliyah",
3384
+ "16" => "Najran",
3385
+ "17" => "Jizan",
3386
+ "19" => "Tabuk",
3387
+ "20" => "Al Jawf"
3388
+ ),
3389
+ "SB" => array(
3390
+ "03" => "Malaita",
3391
+ "06" => "Guadalcanal",
3392
+ "07" => "Isabel",
3393
+ "08" => "Makira",
3394
+ "09" => "Temotu",
3395
+ "10" => "Central",
3396
+ "11" => "Western",
3397
+ "12" => "Choiseul",
3398
+ "13" => "Rennell and Bellona"
3399
+ ),
3400
+ "SC" => array(
3401
+ "01" => "Anse aux Pins",
3402
+ "02" => "Anse Boileau",
3403
+ "03" => "Anse Etoile",
3404
+ "04" => "Anse Louis",
3405
+ "05" => "Anse Royale",
3406
+ "06" => "Baie Lazare",
3407
+ "07" => "Baie Sainte Anne",
3408
+ "08" => "Beau Vallon",
3409
+ "09" => "Bel Air",
3410
+ "10" => "Bel Ombre",
3411
+ "11" => "Cascade",
3412
+ "12" => "Glacis",
3413
+ "13" => "Grand' Anse",
3414
+ "14" => "Grand' Anse",
3415
+ "15" => "La Digue",
3416
+ "16" => "La Riviere Anglaise",
3417
+ "17" => "Mont Buxton",
3418
+ "18" => "Mont Fleuri",
3419
+ "19" => "Plaisance",
3420
+ "20" => "Pointe La Rue",
3421
+ "21" => "Port Glaud",
3422
+ "22" => "Saint Louis",
3423
+ "23" => "Takamaka"
3424
+ ),
3425
+ "SD" => array(
3426
+ "27" => "Al Wusta",
3427
+ "28" => "Al Istiwa'iyah",
3428
+ "29" => "Al Khartum",
3429
+ "30" => "Ash Shamaliyah",
3430
+ "31" => "Ash Sharqiyah",
3431
+ "32" => "Bahr al Ghazal",
3432
+ "33" => "Darfur",
3433
+ "34" => "Kurdufan",
3434
+ "35" => "Upper Nile",
3435
+ "40" => "Al Wahadah State",
3436
+ "44" => "Central Equatoria State"
3437
+ ),
3438
+ "SE" => array(
3439
+ "02" => "Blekinge Lan",
3440
+ "03" => "Gavleborgs Lan",
3441
+ "05" => "Gotlands Lan",
3442
+ "06" => "Hallands Lan",
3443
+ "07" => "Jamtlands Lan",
3444
+ "08" => "Jonkopings Lan",
3445
+ "09" => "Kalmar Lan",
3446
+ "10" => "Dalarnas Lan",
3447
+ "12" => "Kronobergs Lan",
3448
+ "14" => "Norrbottens Lan",
3449
+ "15" => "Orebro Lan",
3450
+ "16" => "Ostergotlands Lan",
3451
+ "18" => "Sodermanlands Lan",
3452
+ "21" => "Uppsala Lan",
3453
+ "22" => "Varmlands Lan",
3454
+ "23" => "Vasterbottens Lan",
3455
+ "24" => "Vasternorrlands Lan",
3456
+ "25" => "Vastmanlands Lan",
3457
+ "26" => "Stockholms Lan",
3458
+ "27" => "Skane Lan",
3459
+ "28" => "Vastra Gotaland"
3460
+ ),
3461
+ "SH" => array(
3462
+ "01" => "Ascension",
3463
+ "02" => "Saint Helena",
3464
+ "03" => "Tristan da Cunha"
3465
+ ),
3466
+ "SI" => array(
3467
+ "01" => "Ajdovscina Commune",
3468
+ "02" => "Beltinci Commune",
3469
+ "03" => "Bled Commune",
3470
+ "04" => "Bohinj Commune",
3471
+ "05" => "Borovnica Commune",
3472
+ "06" => "Bovec Commune",
3473
+ "07" => "Brda Commune",
3474
+ "08" => "Brezice Commune",
3475
+ "09" => "Brezovica Commune",
3476
+ "11" => "Celje Commune",
3477
+ "12" => "Cerklje na Gorenjskem Commune",
3478
+ "13" => "Cerknica Commune",
3479
+ "14" => "Cerkno Commune",
3480
+ "15" => "Crensovci Commune",
3481
+ "16" => "Crna na Koroskem Commune",
3482
+ "17" => "Crnomelj Commune",
3483
+ "19" => "Divaca Commune",
3484
+ "20" => "Dobrepolje Commune",
3485
+ "22" => "Dol pri Ljubljani Commune",
3486
+ "24" => "Dornava Commune",
3487
+ "25" => "Dravograd Commune",
3488
+ "26" => "Duplek Commune",
3489
+ "27" => "Gorenja vas-Poljane Commune",
3490
+ "28" => "Gorisnica Commune",
3491
+ "29" => "Gornja Radgona Commune",
3492
+ "30" => "Gornji Grad Commune",
3493
+ "31" => "Gornji Petrovci Commune",
3494
+ "32" => "Grosuplje Commune",
3495
+ "34" => "Hrastnik Commune",
3496
+ "35" => "Hrpelje-Kozina Commune",
3497
+ "36" => "Idrija Commune",
3498
+ "37" => "Ig Commune",
3499
+ "38" => "Ilirska Bistrica Commune",
3500
+ "39" => "Ivancna Gorica Commune",
3501
+ "40" => "Izola-Isola Commune",
3502
+ "42" => "Jursinci Commune",
3503
+ "44" => "Kanal Commune",
3504
+ "45" => "Kidricevo Commune",
3505
+ "46" => "Kobarid Commune",
3506
+ "47" => "Kobilje Commune",
3507
+ "49" => "Komen Commune",
3508
+ "50" => "Koper-Capodistria Urban Commune",
3509
+ "51" => "Kozje Commune",
3510
+ "52" => "Kranj Commune",
3511
+ "53" => "Kranjska Gora Commune",
3512
+ "54" => "Krsko Commune",
3513
+ "55" => "Kungota Commune",
3514
+ "57" => "Lasko Commune",
3515
+ "61" => "Ljubljana Urban Commune",
3516
+ "62" => "Ljubno Commune",
3517
+ "64" => "Logatec Commune",
3518
+ "66" => "Loski Potok Commune",
3519
+ "68" => "Lukovica Commune",
3520
+ "71" => "Medvode Commune",
3521
+ "72" => "Menges Commune",
3522
+ "73" => "Metlika Commune",
3523
+ "74" => "Mezica Commune",
3524
+ "76" => "Mislinja Commune",
3525
+ "77" => "Moravce Commune",
3526
+ "78" => "Moravske Toplice Commune",
3527
+ "79" => "Mozirje Commune",
3528
+ "80" => "Murska Sobota Urban Commune",
3529
+ "81" => "Muta Commune",
3530
+ "82" => "Naklo Commune",
3531
+ "83" => "Nazarje Commune",
3532
+ "84" => "Nova Gorica Urban Commune",
3533
+ "86" => "Odranci Commune",
3534
+ "87" => "Ormoz Commune",
3535
+ "88" => "Osilnica Commune",
3536
+ "89" => "Pesnica Commune",
3537
+ "91" => "Pivka Commune",
3538
+ "92" => "Podcetrtek Commune",
3539
+ "94" => "Postojna Commune",
3540
+ "97" => "Puconci Commune",
3541
+ "98" => "Race-Fram Commune",
3542
+ "99" => "Radece Commune",
3543
+ "A1" => "Radenci Commune",
3544
+ "A2" => "Radlje ob Dravi Commune",
3545
+ "A3" => "Radovljica Commune",
3546
+ "A6" => "Rogasovci Commune",
3547
+ "A7" => "Rogaska Slatina Commune",
3548
+ "A8" => "Rogatec Commune",
3549
+ "B1" => "Semic Commune",
3550
+ "B2" => "Sencur Commune",
3551
+ "B3" => "Sentilj Commune",
3552
+ "B4" => "Sentjernej Commune",
3553
+ "B6" => "Sevnica Commune",
3554
+ "B7" => "Sezana Commune",
3555
+ "B8" => "Skocjan Commune",
3556
+ "B9" => "Skofja Loka Commune",
3557
+ "C1" => "Skofljica Commune",
3558
+ "C2" => "Slovenj Gradec Urban Commune",
3559
+ "C4" => "Slovenske Konjice Commune",
3560
+ "C5" => "Smarje pri Jelsah Commune",
3561
+ "C6" => "Smartno ob Paki Commune",
3562
+ "C7" => "Sostanj Commune",
3563
+ "C8" => "Starse Commune",
3564
+ "C9" => "Store Commune",
3565
+ "D1" => "Sveti Jurij Commune",
3566
+ "D2" => "Tolmin Commune",
3567
+ "D3" => "Trbovlje Commune",
3568
+ "D4" => "Trebnje Commune",
3569
+ "D5" => "Trzic Commune",
3570
+ "D6" => "Turnisce Commune",
3571
+ "D7" => "Velenje Urban Commune",
3572
+ "D8" => "Velike Lasce Commune",
3573
+ "E1" => "Vipava Commune",
3574
+ "E2" => "Vitanje Commune",
3575
+ "E3" => "Vodice Commune",
3576
+ "E5" => "Vrhnika Commune",
3577
+ "E6" => "Vuzenica Commune",
3578
+ "E7" => "Zagorje ob Savi Commune",
3579
+ "E9" => "Zavrc Commune",
3580
+ "F1" => "Zelezniki Commune",
3581
+ "F2" => "Ziri Commune",
3582
+ "F3" => "Zrece Commune",
3583
+ "F4" => "Benedikt Commune",
3584
+ "F5" => "Bistrica ob Sotli Commune",
3585
+ "F6" => "Bloke Commune",
3586
+ "F7" => "Braslovce Commune",
3587
+ "F8" => "Cankova Commune",
3588
+ "F9" => "Cerkvenjak Commune",
3589
+ "G1" => "Destrnik Commune",
3590
+ "G2" => "Dobje Commune",
3591
+ "G3" => "Dobrna Commune",
3592
+ "G4" => "Dobrova-Horjul-Polhov Gradec Commune",
3593
+ "G5" => "Dobrovnik-Dobronak Commune",
3594
+ "G6" => "Dolenjske Toplice Commune",
3595
+ "G7" => "Domzale Commune",
3596
+ "G8" => "Grad Commune",
3597
+ "G9" => "Hajdina Commune",
3598
+ "H1" => "Hoce-Slivnica Commune",
3599
+ "H2" => "Hodos-Hodos Commune",
3600
+ "H3" => "Horjul Commune",
3601
+ "H4" => "Jesenice Commune",
3602
+ "H5" => "Jezersko Commune",
3603
+ "H6" => "Kamnik Commune",
3604
+ "H7" => "Kocevje Commune",
3605
+ "H8" => "Komenda Commune",
3606
+ "H9" => "Kostel Commune",
3607
+ "I1" => "Krizevci Commune",
3608
+ "I2" => "Kuzma Commune",
3609
+ "I3" => "Lenart Commune",
3610
+ "I4" => "Lendava-Lendva Commune",
3611
+ "I5" => "Litija Commune",
3612
+ "I6" => "Ljutomer Commune",
3613
+ "I7" => "Loska Dolina Commune",
3614
+ "I8" => "Lovrenc na Pohorju Commune",
3615
+ "I9" => "Luce Commune",
3616
+ "J1" => "Majsperk Commune",
3617
+ "J2" => "Maribor Commune",
3618
+ "J3" => "Markovci Commune",
3619
+ "J4" => "Miklavz na Dravskem polju Commune",
3620
+ "J5" => "Miren-Kostanjevica Commune",
3621
+ "J6" => "Mirna Pec Commune",
3622
+ "J7" => "Novo mesto Urban Commune",
3623
+ "J8" => "Oplotnica Commune",
3624
+ "J9" => "Piran-Pirano Commune",
3625
+ "K1" => "Podlehnik Commune",
3626
+ "K2" => "Podvelka Commune",
3627
+ "K3" => "Polzela Commune",
3628
+ "K4" => "Prebold Commune",
3629
+ "K5" => "Preddvor Commune",
3630
+ "K6" => "Prevalje Commune",
3631
+ "K7" => "Ptuj Urban Commune",
3632
+ "K8" => "Ravne na Koroskem Commune",
3633
+ "K9" => "Razkrizje Commune",
3634
+ "L1" => "Ribnica Commune",
3635
+ "L2" => "Ribnica na Pohorju Commune",
3636
+ "L3" => "Ruse Commune",
3637
+ "L4" => "Salovci Commune",
3638
+ "L5" => "Selnica ob Dravi Commune",
3639
+ "L6" => "Sempeter-Vrtojba Commune",
3640
+ "L7" => "Sentjur pri Celju Commune",
3641
+ "L8" => "Slovenska Bistrica Commune",
3642
+ "L9" => "Smartno pri Litiji Commune",
3643
+ "M1" => "Sodrazica Commune",
3644
+ "M2" => "Solcava Commune",
3645
+ "M3" => "Sveta Ana Commune",
3646
+ "M4" => "Sveti Andraz v Slovenskih goricah Commune",
3647
+ "M5" => "Tabor Commune",
3648
+ "M6" => "Tisina Commune",
3649
+ "M7" => "Trnovska vas Commune",
3650
+ "M8" => "Trzin Commune",
3651
+ "M9" => "Velika Polana Commune",
3652
+ "N1" => "Verzej Commune",
3653
+ "N2" => "Videm Commune",
3654
+ "N3" => "Vojnik Commune",
3655
+ "N4" => "Vransko Commune",
3656
+ "N5" => "Zalec Commune",
3657
+ "N6" => "Zetale Commune",
3658
+ "N7" => "Zirovnica Commune",
3659
+ "N8" => "Zuzemberk Commune",
3660
+ "N9" => "Apace Commune",
3661
+ "O1" => "Cirkulane Commune"
3662
+ ),
3663
+ "SK" => array(
3664
+ "01" => "Banska Bystrica",
3665
+ "02" => "Bratislava",
3666
+ "03" => "Kosice",
3667
+ "04" => "Nitra",
3668
+ "05" => "Presov",
3669
+ "06" => "Trencin",
3670
+ "07" => "Trnava",
3671
+ "08" => "Zilina"
3672
+ ),
3673
+ "SL" => array(
3674
+ "01" => "Eastern",
3675
+ "02" => "Northern",
3676
+ "03" => "Southern",
3677
+ "04" => "Western Area"
3678
+ ),
3679
+ "SM" => array(
3680
+ "01" => "Acquaviva",
3681
+ "02" => "Chiesanuova",
3682
+ "03" => "Domagnano",
3683
+ "04" => "Faetano",
3684
+ "05" => "Fiorentino",
3685
+ "06" => "Borgo Maggiore",
3686
+ "07" => "San Marino",
3687
+ "08" => "Monte Giardino",
3688
+ "09" => "Serravalle"
3689
+ ),
3690
+ "SN" => array(
3691
+ "01" => "Dakar",
3692
+ "03" => "Diourbel",
3693
+ "05" => "Tambacounda",
3694
+ "07" => "Thies",
3695
+ "09" => "Fatick",
3696
+ "10" => "Kaolack",
3697
+ "11" => "Kolda",
3698
+ "12" => "Ziguinchor",
3699
+ "13" => "Louga",
3700
+ "14" => "Saint-Louis",
3701
+ "15" => "Matam"
3702
+ ),
3703
+ "SO" => array(
3704
+ "01" => "Bakool",
3705
+ "02" => "Banaadir",
3706
+ "03" => "Bari",
3707
+ "04" => "Bay",
3708
+ "05" => "Galguduud",
3709
+ "06" => "Gedo",
3710
+ "07" => "Hiiraan",
3711
+ "08" => "Jubbada Dhexe",
3712
+ "09" => "Jubbada Hoose",
3713
+ "10" => "Mudug",
3714
+ "11" => "Nugaal",
3715
+ "12" => "Sanaag",
3716
+ "13" => "Shabeellaha Dhexe",
3717
+ "14" => "Shabeellaha Hoose",
3718
+ "16" => "Woqooyi Galbeed",
3719
+ "18" => "Nugaal",
3720
+ "19" => "Togdheer",
3721
+ "20" => "Woqooyi Galbeed",
3722
+ "21" => "Awdal",
3723
+ "22" => "Sool"
3724
+ ),
3725
+ "SR" => array(
3726
+ "10" => "Brokopondo",
3727
+ "11" => "Commewijne",
3728
+ "12" => "Coronie",
3729
+ "13" => "Marowijne",
3730
+ "14" => "Nickerie",
3731
+ "15" => "Para",
3732
+ "16" => "Paramaribo",
3733
+ "17" => "Saramacca",
3734
+ "18" => "Sipaliwini",
3735
+ "19" => "Wanica"
3736
+ ),
3737
+ "SS" => array(
3738
+ "01" => "Central Equatoria",
3739
+ "02" => "Eastern Equatoria",
3740
+ "03" => "Jonglei",
3741
+ "04" => "Lakes",
3742
+ "05" => "Northern Bahr el Ghazal",
3743
+ "06" => "Unity",
3744
+ "07" => "Upper Nile",
3745
+ "08" => "Warrap",
3746
+ "09" => "Western Bahr el Ghazal",
3747
+ "10" => "Western Equatoria"
3748
+ ),
3749
+ "ST" => array(
3750
+ "01" => "Principe",
3751
+ "02" => "Sao Tome"
3752
+ ),
3753
+ "SV" => array(
3754
+ "01" => "Ahuachapan",
3755
+ "02" => "Cabanas",
3756
+ "03" => "Chalatenango",
3757
+ "04" => "Cuscatlan",
3758
+ "05" => "La Libertad",
3759
+ "06" => "La Paz",
3760
+ "07" => "La Union",
3761
+ "08" => "Morazan",
3762
+ "09" => "San Miguel",
3763
+ "10" => "San Salvador",
3764
+ "11" => "Santa Ana",
3765
+ "12" => "San Vicente",
3766
+ "13" => "Sonsonate",
3767
+ "14" => "Usulutan"
3768
+ ),
3769
+ "SY" => array(
3770
+ "01" => "Al Hasakah",
3771
+ "02" => "Al Ladhiqiyah",
3772
+ "03" => "Al Qunaytirah",
3773
+ "04" => "Ar Raqqah",
3774
+ "05" => "As Suwayda'",
3775
+ "06" => "Dar",
3776
+ "07" => "Dayr az Zawr",
3777
+ "08" => "Rif Dimashq",
3778
+ "09" => "Halab",
3779
+ "10" => "Hamah",
3780
+ "11" => "Hims",
3781
+ "12" => "Idlib",
3782
+ "13" => "Dimashq",
3783
+ "14" => "Tartus"
3784
+ ),
3785
+ "SZ" => array(
3786
+ "01" => "Hhohho",
3787
+ "02" => "Lubombo",
3788
+ "03" => "Manzini",
3789
+ "04" => "Shiselweni",
3790
+ "05" => "Praslin"
3791
+ ),
3792
+ "TD" => array(
3793
+ "01" => "Batha",
3794
+ "02" => "Biltine",
3795
+ "03" => "Borkou-Ennedi-Tibesti",
3796
+ "04" => "Chari-Baguirmi",
3797
+ "05" => "Guera",
3798
+ "06" => "Kanem",
3799
+ "07" => "Lac",
3800
+ "08" => "Logone Occidental",
3801
+ "09" => "Logone Oriental",
3802
+ "10" => "Mayo-Kebbi",
3803
+ "11" => "Moyen-Chari",
3804
+ "12" => "Ouaddai",
3805
+ "13" => "Salamat",
3806
+ "14" => "Tandjile"
3807
+ ),
3808
+ "TG" => array(
3809
+ "22" => "Centrale",
3810
+ "23" => "Kara",
3811
+ "24" => "Maritime",
3812
+ "25" => "Plateaux",
3813
+ "26" => "Savanes"
3814
+ ),
3815
+ "TH" => array(
3816
+ "01" => "Mae Hong Son",
3817
+ "02" => "Chiang Mai",
3818
+ "03" => "Chiang Rai",
3819
+ "04" => "Nan",
3820
+ "05" => "Lamphun",
3821
+ "06" => "Lampang",
3822
+ "07" => "Phrae",
3823
+ "08" => "Tak",
3824
+ "09" => "Sukhothai",
3825
+ "10" => "Uttaradit",
3826
+ "11" => "Kamphaeng Phet",
3827
+ "12" => "Phitsanulok",
3828
+ "13" => "Phichit",
3829
+ "14" => "Phetchabun",
3830
+ "15" => "Uthai Thani",
3831
+ "16" => "Nakhon Sawan",
3832
+ "17" => "Nong Khai",
3833
+ "18" => "Loei",
3834
+ "20" => "Sakon Nakhon",
3835
+ "21" => "Nakhon Phanom",
3836
+ "22" => "Khon Kaen",
3837
+ "23" => "Kalasin",
3838
+ "24" => "Maha Sarakham",
3839
+ "25" => "Roi Et",
3840
+ "26" => "Chaiyaphum",
3841
+ "27" => "Nakhon Ratchasima",
3842
+ "28" => "Buriram",
3843
+ "29" => "Surin",
3844
+ "30" => "Sisaket",
3845
+ "31" => "Narathiwat",
3846
+ "32" => "Chai Nat",
3847
+ "33" => "Sing Buri",
3848
+ "34" => "Lop Buri",
3849
+ "35" => "Ang Thong",
3850
+ "36" => "Phra Nakhon Si Ayutthaya",
3851
+ "37" => "Saraburi",
3852
+ "38" => "Nonthaburi",
3853
+ "39" => "Pathum Thani",
3854
+ "40" => "Krung Thep",
3855
+ "41" => "Phayao",
3856
+ "42" => "Samut Prakan",
3857
+ "43" => "Nakhon Nayok",
3858
+ "44" => "Chachoengsao",
3859
+ "45" => "Prachin Buri",
3860
+ "46" => "Chon Buri",
3861
+ "47" => "Rayong",
3862
+ "48" => "Chanthaburi",
3863
+ "49" => "Trat",
3864
+ "50" => "Kanchanaburi",
3865
+ "51" => "Suphan Buri",
3866
+ "52" => "Ratchaburi",
3867
+ "53" => "Nakhon Pathom",
3868
+ "54" => "Samut Songkhram",
3869
+ "55" => "Samut Sakhon",
3870
+ "56" => "Phetchaburi",
3871
+ "57" => "Prachuap Khiri Khan",
3872
+ "58" => "Chumphon",
3873
+ "59" => "Ranong",
3874
+ "60" => "Surat Thani",
3875
+ "61" => "Phangnga",
3876
+ "62" => "Phuket",
3877
+ "63" => "Krabi",
3878
+ "64" => "Nakhon Si Thammarat",
3879
+ "65" => "Trang",
3880
+ "66" => "Phatthalung",
3881
+ "67" => "Satun",
3882
+ "68" => "Songkhla",
3883
+ "69" => "Pattani",
3884
+ "70" => "Yala",
3885
+ "71" => "Ubon Ratchathani",
3886
+ "72" => "Yasothon",
3887
+ "73" => "Nakhon Phanom",
3888
+ "74" => "Prachin Buri",
3889
+ "75" => "Ubon Ratchathani",
3890
+ "76" => "Udon Thani",
3891
+ "77" => "Amnat Charoen",
3892
+ "78" => "Mukdahan",
3893
+ "79" => "Nong Bua Lamphu",
3894
+ "80" => "Sa Kaeo"
3895
+ ),
3896
+ "TJ" => array(
3897
+ "01" => "Kuhistoni Badakhshon",
3898
+ "02" => "Khatlon",
3899
+ "03" => "Sughd"
3900
+ ),
3901
+ "TM" => array(
3902
+ "01" => "Ahal",
3903
+ "02" => "Balkan",
3904
+ "03" => "Dashoguz",
3905
+ "04" => "Lebap",
3906
+ "05" => "Mary"
3907
+ ),
3908
+ "TN" => array(
3909
+ "02" => "Kasserine",
3910
+ "03" => "Kairouan",
3911
+ "06" => "Jendouba",
3912
+ "10" => "Qafsah",
3913
+ "14" => "El Kef",
3914
+ "15" => "Al Mahdia",
3915
+ "16" => "Al Munastir",
3916
+ "17" => "Bajah",
3917
+ "18" => "Bizerte",
3918
+ "19" => "Nabeul",
3919
+ "22" => "Siliana",
3920
+ "23" => "Sousse",
3921
+ "27" => "Ben Arous",
3922
+ "28" => "Madanin",
3923
+ "29" => "Gabes",
3924
+ "31" => "Kebili",
3925
+ "32" => "Sfax",
3926
+ "33" => "Sidi Bou Zid",
3927
+ "34" => "Tataouine",
3928
+ "35" => "Tozeur",
3929
+ "36" => "Tunis",
3930
+ "37" => "Zaghouan",
3931
+ "38" => "Aiana",
3932
+ "39" => "Manouba"
3933
+ ),
3934
+ "TO" => array(
3935
+ "01" => "Ha",
3936
+ "02" => "Tongatapu",
3937
+ "03" => "Vava"
3938
+ ),
3939
+ "TR" => array(
3940
+ "02" => "Adiyaman",
3941
+ "03" => "Afyonkarahisar",
3942
+ "04" => "Agri",
3943
+ "05" => "Amasya",
3944
+ "07" => "Antalya",
3945
+ "08" => "Artvin",
3946
+ "09" => "Aydin",
3947
+ "10" => "Balikesir",
3948
+ "11" => "Bilecik",
3949
+ "12" => "Bingol",
3950
+ "13" => "Bitlis",
3951
+ "14" => "Bolu",
3952
+ "15" => "Burdur",
3953
+ "16" => "Bursa",
3954
+ "17" => "Canakkale",
3955
+ "19" => "Corum",
3956
+ "20" => "Denizli",
3957
+ "21" => "Diyarbakir",
3958
+ "22" => "Edirne",
3959
+ "23" => "Elazig",
3960
+ "24" => "Erzincan",
3961
+ "25" => "Erzurum",
3962
+ "26" => "Eskisehir",
3963
+ "28" => "Giresun",
3964
+ "31" => "Hatay",
3965
+ "32" => "Mersin",
3966
+ "33" => "Isparta",
3967
+ "34" => "Istanbul",
3968
+ "35" => "Izmir",
3969
+ "37" => "Kastamonu",
3970
+ "38" => "Kayseri",
3971
+ "39" => "Kirklareli",
3972
+ "40" => "Kirsehir",
3973
+ "41" => "Kocaeli",
3974
+ "43" => "Kutahya",
3975
+ "44" => "Malatya",
3976
+ "45" => "Manisa",
3977
+ "46" => "Kahramanmaras",
3978
+ "48" => "Mugla",
3979
+ "49" => "Mus",
3980
+ "50" => "Nevsehir",
3981
+ "52" => "Ordu",
3982
+ "53" => "Rize",
3983
+ "54" => "Sakarya",
3984
+ "55" => "Samsun",
3985
+ "57" => "Sinop",
3986
+ "58" => "Sivas",
3987
+ "59" => "Tekirdag",
3988
+ "60" => "Tokat",
3989
+ "61" => "Trabzon",
3990
+ "62" => "Tunceli",
3991
+ "63" => "Sanliurfa",
3992
+ "64" => "Usak",
3993
+ "65" => "Van",
3994
+ "66" => "Yozgat",
3995
+ "68" => "Ankara",
3996
+ "69" => "Gumushane",
3997
+ "70" => "Hakkari",
3998
+ "71" => "Konya",
3999
+ "72" => "Mardin",
4000
+ "73" => "Nigde",
4001
+ "74" => "Siirt",
4002
+ "75" => "Aksaray",
4003
+ "76" => "Batman",
4004
+ "77" => "Bayburt",
4005
+ "78" => "Karaman",
4006
+ "79" => "Kirikkale",
4007
+ "80" => "Sirnak",
4008
+ "81" => "Adana",
4009
+ "82" => "Cankiri",
4010
+ "83" => "Gaziantep",
4011
+ "84" => "Kars",
4012
+ "85" => "Zonguldak",
4013
+ "86" => "Ardahan",
4014
+ "87" => "Bartin",
4015
+ "88" => "Igdir",
4016
+ "89" => "Karabuk",
4017
+ "90" => "Kilis",
4018
+ "91" => "Osmaniye",
4019
+ "92" => "Yalova",
4020
+ "93" => "Duzce"
4021
+ ),
4022
+ "TT" => array(
4023
+ "01" => "Arima",
4024
+ "02" => "Caroni",
4025
+ "03" => "Mayaro",
4026
+ "04" => "Nariva",
4027
+ "05" => "Port-of-Spain",
4028
+ "06" => "Saint Andrew",
4029
+ "07" => "Saint David",
4030
+ "08" => "Saint George",
4031
+ "09" => "Saint Patrick",
4032
+ "10" => "San Fernando",
4033
+ "11" => "Tobago",
4034
+ "12" => "Victoria"
4035
+ ),
4036
+ "TW" => array(
4037
+ "01" => "Fu-chien",
4038
+ "02" => "Kao-hsiung",
4039
+ "03" => "T'ai-pei",
4040
+ "04" => "T'ai-wan"
4041
+ ),
4042
+ "TZ" => array(
4043
+ "02" => "Pwani",
4044
+ "03" => "Dodoma",
4045
+ "04" => "Iringa",
4046
+ "05" => "Kigoma",
4047
+ "06" => "Kilimanjaro",
4048
+ "07" => "Lindi",
4049
+ "08" => "Mara",
4050
+ "09" => "Mbeya",
4051
+ "10" => "Morogoro",
4052
+ "11" => "Mtwara",
4053
+ "12" => "Mwanza",
4054
+ "13" => "Pemba North",
4055
+ "14" => "Ruvuma",
4056
+ "15" => "Shinyanga",
4057
+ "16" => "Singida",
4058
+ "17" => "Tabora",
4059
+ "18" => "Tanga",
4060
+ "19" => "Kagera",
4061
+ "20" => "Pemba South",
4062
+ "21" => "Zanzibar Central",
4063
+ "22" => "Zanzibar North",
4064
+ "23" => "Dar es Salaam",
4065
+ "24" => "Rukwa",
4066
+ "25" => "Zanzibar Urban",
4067
+ "26" => "Arusha",
4068
+ "27" => "Manyara"
4069
+ ),
4070
+ "UA" => array(
4071
+ "01" => "Cherkas'ka Oblast'",
4072
+ "02" => "Chernihivs'ka Oblast'",
4073
+ "03" => "Chernivets'ka Oblast'",
4074
+ "04" => "Dnipropetrovs'ka Oblast'",
4075
+ "05" => "Donets'ka Oblast'",
4076
+ "06" => "Ivano-Frankivs'ka Oblast'",
4077
+ "07" => "Kharkivs'ka Oblast'",
4078
+ "08" => "Khersons'ka Oblast'",
4079
+ "09" => "Khmel'nyts'ka Oblast'",
4080
+ "10" => "Kirovohrads'ka Oblast'",
4081
+ "11" => "Krym",
4082
+ "12" => "Kyyiv",
4083
+ "13" => "Kyyivs'ka Oblast'",
4084
+ "14" => "Luhans'ka Oblast'",
4085
+ "15" => "L'vivs'ka Oblast'",
4086
+ "16" => "Mykolayivs'ka Oblast'",
4087
+ "17" => "Odes'ka Oblast'",
4088
+ "18" => "Poltavs'ka Oblast'",
4089
+ "19" => "Rivnens'ka Oblast'",
4090
+ "20" => "Sevastopol'",
4091
+ "21" => "Sums'ka Oblast'",
4092
+ "22" => "Ternopil's'ka Oblast'",
4093
+ "23" => "Vinnyts'ka Oblast'",
4094
+ "24" => "Volyns'ka Oblast'",
4095
+ "25" => "Zakarpats'ka Oblast'",
4096
+ "26" => "Zaporiz'ka Oblast'",
4097
+ "27" => "Zhytomyrs'ka Oblast'"
4098
+ ),
4099
+ "UG" => array(
4100
+ "26" => "Apac",
4101
+ "28" => "Bundibugyo",
4102
+ "29" => "Bushenyi",
4103
+ "30" => "Gulu",
4104
+ "31" => "Hoima",
4105
+ "33" => "Jinja",
4106
+ "36" => "Kalangala",
4107
+ "37" => "Kampala",
4108
+ "38" => "Kamuli",
4109
+ "39" => "Kapchorwa",
4110
+ "40" => "Kasese",
4111
+ "41" => "Kibale",
4112
+ "42" => "Kiboga",
4113
+ "43" => "Kisoro",
4114
+ "45" => "Kotido",
4115
+ "46" => "Kumi",
4116
+ "47" => "Lira",
4117
+ "50" => "Masindi",
4118
+ "52" => "Mbarara",
4119
+ "56" => "Mubende",
4120
+ "58" => "Nebbi",
4121
+ "59" => "Ntungamo",
4122
+ "60" => "Pallisa",
4123
+ "61" => "Rakai",
4124
+ "65" => "Adjumani",
4125
+ "66" => "Bugiri",
4126
+ "67" => "Busia",
4127
+ "69" => "Katakwi",
4128
+ "70" => "Luwero",
4129
+ "71" => "Masaka",
4130
+ "72" => "Moyo",
4131
+ "73" => "Nakasongola",
4132
+ "74" => "Sembabule",
4133
+ "76" => "Tororo",
4134
+ "77" => "Arua",
4135
+ "78" => "Iganga",
4136
+ "79" => "Kabarole",
4137
+ "80" => "Kaberamaido",
4138
+ "81" => "Kamwenge",
4139
+ "82" => "Kanungu",
4140
+ "83" => "Kayunga",
4141
+ "84" => "Kitgum",
4142
+ "85" => "Kyenjojo",
4143
+ "86" => "Mayuge",
4144
+ "87" => "Mbale",
4145
+ "88" => "Moroto",
4146
+ "89" => "Mpigi",
4147
+ "90" => "Mukono",
4148
+ "91" => "Nakapiripirit",
4149
+ "92" => "Pader",
4150
+ "93" => "Rukungiri",
4151
+ "94" => "Sironko",
4152
+ "95" => "Soroti",
4153
+ "96" => "Wakiso",
4154
+ "97" => "Yumbe"
4155
+ ),
4156
+ "US" => array(
4157
+ "AA" => "Armed Forces Americas",
4158
+ "AE" => "Armed Forces Europe, Middle East, & Canada",
4159
+ "AK" => "Alaska",
4160
+ "AL" => "Alabama",
4161
+ "AP" => "Armed Forces Pacific",
4162
+ "AR" => "Arkansas",
4163
+ "AS" => "American Samoa",
4164
+ "AZ" => "Arizona",
4165
+ "CA" => "California",
4166
+ "CO" => "Colorado",
4167
+ "CT" => "Connecticut",
4168
+ "DC" => "District of Columbia",
4169
+ "DE" => "Delaware",
4170
+ "FL" => "Florida",
4171
+ "FM" => "Federated States of Micronesia",
4172
+ "GA" => "Georgia",
4173
+ "GU" => "Guam",
4174
+ "HI" => "Hawaii",
4175
+ "IA" => "Iowa",
4176
+ "ID" => "Idaho",
4177
+ "IL" => "Illinois",
4178
+ "IN" => "Indiana",
4179
+ "KS" => "Kansas",
4180
+ "KY" => "Kentucky",
4181
+ "LA" => "Louisiana",
4182
+ "MA" => "Massachusetts",
4183
+ "MD" => "Maryland",
4184
+ "ME" => "Maine",
4185
+ "MH" => "Marshall Islands",
4186
+ "MI" => "Michigan",
4187
+ "MN" => "Minnesota",
4188
+ "MO" => "Missouri",
4189
+ "MP" => "Northern Mariana Islands",
4190
+ "MS" => "Mississippi",
4191
+ "MT" => "Montana",
4192
+ "NC" => "North Carolina",
4193
+ "ND" => "North Dakota",
4194
+ "NE" => "Nebraska",
4195
+ "NH" => "New Hampshire",
4196
+ "NJ" => "New Jersey",
4197
+ "NM" => "New Mexico",
4198
+ "NV" => "Nevada",
4199
+ "NY" => "New York",
4200
+ "OH" => "Ohio",
4201
+ "OK" => "Oklahoma",
4202
+ "OR" => "Oregon",
4203
+ "PA" => "Pennsylvania",
4204
+ "PR" => "Puerto Rico",
4205
+ "PW" => "Palau",
4206
+ "RI" => "Rhode Island",
4207
+ "SC" => "South Carolina",
4208
+ "SD" => "South Dakota",
4209
+ "TN" => "Tennessee",
4210
+ "TX" => "Texas",
4211
+ "UT" => "Utah",
4212
+ "VA" => "Virginia",
4213
+ "VI" => "Virgin Islands",
4214
+ "VT" => "Vermont",
4215
+ "WA" => "Washington",
4216
+ "WI" => "Wisconsin",
4217
+ "WV" => "West Virginia",
4218
+ "WY" => "Wyoming"
4219
+ ),
4220
+ "UY" => array(
4221
+ "01" => "Artigas",
4222
+ "02" => "Canelones",
4223
+ "03" => "Cerro Largo",
4224
+ "04" => "Colonia",
4225
+ "05" => "Durazno",
4226
+ "06" => "Flores",
4227
+ "07" => "Florida",
4228
+ "08" => "Lavalleja",
4229
+ "09" => "Maldonado",
4230
+ "10" => "Montevideo",
4231
+ "11" => "Paysandu",
4232
+ "12" => "Rio Negro",
4233
+ "13" => "Rivera",
4234
+ "14" => "Rocha",
4235
+ "15" => "Salto",
4236
+ "16" => "San Jose",
4237
+ "17" => "Soriano",
4238
+ "18" => "Tacuarembo",
4239
+ "19" => "Treinta y Tres"
4240
+ ),
4241
+ "UZ" => array(
4242
+ "01" => "Andijon",
4243
+ "02" => "Bukhoro",
4244
+ "03" => "Farghona",
4245
+ "04" => "Jizzakh",
4246
+ "05" => "Khorazm",
4247
+ "06" => "Namangan",
4248
+ "07" => "Nawoiy",
4249
+ "08" => "Qashqadaryo",
4250
+ "09" => "Qoraqalpoghiston",
4251
+ "10" => "Samarqand",
4252
+ "11" => "Sirdaryo",
4253
+ "12" => "Surkhondaryo",
4254
+ "13" => "Toshkent",
4255
+ "14" => "Toshkent"
4256
+ ),
4257
+ "VC" => array(
4258
+ "01" => "Charlotte",
4259
+ "02" => "Saint Andrew",
4260
+ "03" => "Saint David",
4261
+ "04" => "Saint George",
4262
+ "05" => "Saint Patrick",
4263
+ "06" => "Grenadines"
4264
+ ),
4265
+ "VE" => array(
4266
+ "01" => "Amazonas",
4267
+ "02" => "Anzoategui",
4268
+ "03" => "Apure",
4269
+ "04" => "Aragua",
4270
+ "05" => "Barinas",
4271
+ "06" => "Bolivar",
4272
+ "07" => "Carabobo",
4273
+ "08" => "Cojedes",
4274
+ "09" => "Delta Amacuro",
4275
+ "11" => "Falcon",
4276
+ "12" => "Guarico",
4277
+ "13" => "Lara",
4278
+ "14" => "Merida",
4279
+ "15" => "Miranda",
4280
+ "16" => "Monagas",
4281
+ "17" => "Nueva Esparta",
4282
+ "18" => "Portuguesa",
4283
+ "19" => "Sucre",
4284
+ "20" => "Tachira",
4285
+ "21" => "Trujillo",
4286
+ "22" => "Yaracuy",
4287
+ "23" => "Zulia",
4288
+ "24" => "Dependencias Federales",
4289
+ "25" => "Distrito Federal",
4290
+ "26" => "Vargas"
4291
+ ),
4292
+ "VN" => array(
4293
+ "01" => "An Giang",
4294
+ "03" => "Ben Tre",
4295
+ "05" => "Cao Bang",
4296
+ "09" => "Dong Thap",
4297
+ "13" => "Hai Phong",
4298
+ "20" => "Ho Chi Minh",
4299
+ "21" => "Kien Giang",
4300
+ "23" => "Lam Dong",
4301
+ "24" => "Long An",
4302
+ "30" => "Quang Ninh",
4303
+ "32" => "Son La",
4304
+ "33" => "Tay Ninh",
4305
+ "34" => "Thanh Hoa",
4306
+ "35" => "Thai Binh",
4307
+ "37" => "Tien Giang",
4308
+ "39" => "Lang Son",
4309
+ "43" => "Dong Nai",
4310
+ "44" => "Ha Noi",
4311
+ "45" => "Ba Ria-Vung Tau",
4312
+ "46" => "Binh Dinh",
4313
+ "47" => "Binh Thuan",
4314
+ "49" => "Gia Lai",
4315
+ "50" => "Ha Giang",
4316
+ "52" => "Ha Tinh",
4317
+ "53" => "Hoa Binh",
4318
+ "54" => "Khanh Hoa",
4319
+ "55" => "Kon Tum",
4320
+ "58" => "Nghe An",
4321
+ "59" => "Ninh Binh",
4322
+ "60" => "Ninh Thuan",
4323
+ "61" => "Phu Yen",
4324
+ "62" => "Quang Binh",
4325
+ "63" => "Quang Ngai",
4326
+ "64" => "Quang Tri",
4327
+ "65" => "Soc Trang",
4328
+ "66" => "Thua Thien-Hue",
4329
+ "67" => "Tra Vinh",
4330
+ "68" => "Tuyen Quang",
4331
+ "69" => "Vinh Long",
4332
+ "70" => "Yen Bai",
4333
+ "71" => "Bac Giang",
4334
+ "72" => "Bac Kan",
4335
+ "73" => "Bac Lieu",
4336
+ "74" => "Bac Ninh",
4337
+ "75" => "Binh Duong",
4338
+ "76" => "Binh Phuoc",
4339
+ "77" => "Ca Mau",
4340
+ "78" => "Da Nang",
4341
+ "79" => "Hai Duong",
4342
+ "80" => "Ha Nam",
4343
+ "81" => "Hung Yen",
4344
+ "82" => "Nam Dinh",
4345
+ "83" => "Phu Tho",
4346
+ "84" => "Quang Nam",
4347
+ "85" => "Thai Nguyen",
4348
+ "86" => "Vinh Phuc",
4349
+ "87" => "Can Tho",
4350
+ "88" => "Dac Lak",
4351
+ "89" => "Lai Chau",
4352
+ "90" => "Lao Cai",
4353
+ "91" => "Dak Nong",
4354
+ "92" => "Dien Bien",
4355
+ "93" => "Hau Giang"
4356
+ ),
4357
+ "VU" => array(
4358
+ "05" => "Ambrym",
4359
+ "06" => "Aoba",
4360
+ "07" => "Torba",
4361
+ "08" => "Efate",
4362
+ "09" => "Epi",
4363
+ "10" => "Malakula",
4364
+ "11" => "Paama",
4365
+ "12" => "Pentecote",
4366
+ "13" => "Sanma",
4367
+ "14" => "Shepherd",
4368
+ "15" => "Tafea",
4369
+ "16" => "Malampa",
4370
+ "17" => "Penama",
4371
+ "18" => "Shefa"
4372
+ ),
4373
+ "WS" => array(
4374
+ "02" => "Aiga-i-le-Tai",
4375
+ "03" => "Atua",
4376
+ "04" => "Fa",
4377
+ "05" => "Gaga",
4378
+ "06" => "Va",
4379
+ "07" => "Gagaifomauga",
4380
+ "08" => "Palauli",
4381
+ "09" => "Satupa",
4382
+ "10" => "Tuamasaga",
4383
+ "11" => "Vaisigano"
4384
+ ),
4385
+ "YE" => array(
4386
+ "01" => "Abyan",
4387
+ "02" => "Adan",
4388
+ "03" => "Al Mahrah",
4389
+ "04" => "Hadramawt",
4390
+ "05" => "Shabwah",
4391
+ "06" => "Lahij",
4392
+ "07" => "Al Bayda'",
4393
+ "08" => "Al Hudaydah",
4394
+ "09" => "Al Jawf",
4395
+ "10" => "Al Mahwit",
4396
+ "11" => "Dhamar",
4397
+ "12" => "Hajjah",
4398
+ "13" => "Ibb",
4399
+ "14" => "Ma'rib",
4400
+ "15" => "Sa'dah",
4401
+ "16" => "San'a'",
4402
+ "17" => "Taizz",
4403
+ "18" => "Ad Dali",
4404
+ "19" => "Amran",
4405
+ "20" => "Al Bayda'",
4406
+ "21" => "Al Jawf",
4407
+ "22" => "Hajjah",
4408
+ "23" => "Ibb",
4409
+ "24" => "Lahij",
4410
+ "25" => "Taizz"
4411
+ ),
4412
+ "ZA" => array(
4413
+ "01" => "North-Western Province",
4414
+ "02" => "KwaZulu-Natal",
4415
+ "03" => "Free State",
4416
+ "05" => "Eastern Cape",
4417
+ "06" => "Gauteng",
4418
+ "07" => "Mpumalanga",
4419
+ "08" => "Northern Cape",
4420
+ "09" => "Limpopo",
4421
+ "10" => "North-West",
4422
+ "11" => "Western Cape"
4423
+ ),
4424
+ "ZM" => array(
4425
+ "01" => "Western",
4426
+ "02" => "Central",
4427
+ "03" => "Eastern",
4428
+ "04" => "Luapula",
4429
+ "05" => "Northern",
4430
+ "06" => "North-Western",
4431
+ "07" => "Southern",
4432
+ "08" => "Copperbelt",
4433
+ "09" => "Lusaka"
4434
+ ),
4435
+ "ZW" => array(
4436
+ "01" => "Manicaland",
4437
+ "02" => "Midlands",
4438
+ "03" => "Mashonaland Central",
4439
+ "04" => "Mashonaland East",
4440
+ "05" => "Mashonaland West",
4441
+ "06" => "Matabeleland North",
4442
+ "07" => "Matabeleland South",
4443
+ "08" => "Masvingo",
4444
+ "09" => "Bulawayo",
4445
+ "10" => "Harare"
4446
+ )
4447
+ );
vendor/geoip/geoip/src/timezone.php ADDED
@@ -0,0 +1,2235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ function get_time_zone($country, $region)
3
+ {
4
+ switch ($country) {
5
+ case "US":
6
+ switch ($region) {
7
+ case "AL":
8
+ $timezone = "America/Chicago";
9
+ break;
10
+ case "AK":
11
+ $timezone = "America/Anchorage";
12
+ break;
13
+ case "AZ":
14
+ $timezone = "America/Phoenix";
15
+ break;
16
+ case "AR":
17
+ $timezone = "America/Chicago";
18
+ break;
19
+ case "CA":
20
+ $timezone = "America/Los_Angeles";
21
+ break;
22
+ case "CO":
23
+ $timezone = "America/Denver";
24
+ break;
25
+ case "CT":
26
+ $timezone = "America/New_York";
27
+ break;
28
+ case "DE":
29
+ $timezone = "America/New_York";
30
+ break;
31
+ case "DC":
32
+ $timezone = "America/New_York";
33
+ break;
34
+ case "FL":
35
+ $timezone = "America/New_York";
36
+ break;
37
+ case "GA":
38
+ $timezone = "America/New_York";
39
+ break;
40
+ case "HI":
41
+ $timezone = "Pacific/Honolulu";
42
+ break;
43
+ case "ID":
44
+ $timezone = "America/Denver";
45
+ break;
46
+ case "IL":
47
+ $timezone = "America/Chicago";
48
+ break;
49
+ case "IN":
50
+ $timezone = "America/Indiana/Indianapolis";
51
+ break;
52
+ case "IA":
53
+ $timezone = "America/Chicago";
54
+ break;
55
+ case "KS":
56
+ $timezone = "America/Chicago";
57
+ break;
58
+ case "KY":
59
+ $timezone = "America/New_York";
60
+ break;
61
+ case "LA":
62
+ $timezone = "America/Chicago";
63
+ break;
64
+ case "ME":
65
+ $timezone = "America/New_York";
66
+ break;
67
+ case "MD":
68
+ $timezone = "America/New_York";
69
+ break;
70
+ case "MA":
71
+ $timezone = "America/New_York";
72
+ break;
73
+ case "MI":
74
+ $timezone = "America/New_York";
75
+ break;
76
+ case "MN":
77
+ $timezone = "America/Chicago";
78
+ break;
79
+ case "MS":
80
+ $timezone = "America/Chicago";
81
+ break;
82
+ case "MO":
83
+ $timezone = "America/Chicago";
84
+ break;
85
+ case "MT":
86
+ $timezone = "America/Denver";
87
+ break;
88
+ case "NE":
89
+ $timezone = "America/Chicago";
90
+ break;
91
+ case "NV":
92
+ $timezone = "America/Los_Angeles";
93
+ break;
94
+ case "NH":
95
+ $timezone = "America/New_York";
96
+ break;
97
+ case "NJ":
98
+ $timezone = "America/New_York";
99
+ break;
100
+ case "NM":
101
+ $timezone = "America/Denver";
102
+ break;
103
+ case "NY":
104
+ $timezone = "America/New_York";
105
+ break;
106
+ case "NC":
107
+ $timezone = "America/New_York";
108
+ break;
109
+ case "ND":
110
+ $timezone = "America/Chicago";
111
+ break;
112
+ case "OH":
113
+ $timezone = "America/New_York";
114
+ break;
115
+ case "OK":
116
+ $timezone = "America/Chicago";
117
+ break;
118
+ case "OR":
119
+ $timezone = "America/Los_Angeles";
120
+ break;
121
+ case "PA":
122
+ $timezone = "America/New_York";
123
+ break;
124
+ case "RI":
125
+ $timezone = "America/New_York";
126
+ break;
127
+ case "SC":
128
+ $timezone = "America/New_York";
129
+ break;
130
+ case "SD":
131
+ $timezone = "America/Chicago";
132
+ break;
133
+ case "TN":
134
+ $timezone = "America/Chicago";
135
+ break;
136
+ case "TX":
137
+ $timezone = "America/Chicago";
138
+ break;
139
+ case "UT":
140
+ $timezone = "America/Denver";
141
+ break;
142
+ case "VT":
143
+ $timezone = "America/New_York";
144
+ break;
145
+ case "VA":
146
+ $timezone = "America/New_York";
147
+ break;
148
+ case "WA":
149
+ $timezone = "America/Los_Angeles";
150
+ break;
151
+ case "WV":
152
+ $timezone = "America/New_York";
153
+ break;
154
+ case "WI":
155
+ $timezone = "America/Chicago";
156
+ break;
157
+ case "WY":
158
+ $timezone = "America/Denver";
159
+ break;
160
+ }
161
+ break;
162
+ case "CA":
163
+ switch ($region) {
164
+ case "AB":
165
+ $timezone = "America/Edmonton";
166
+ break;
167
+ case "BC":
168
+ $timezone = "America/Vancouver";
169
+ break;
170
+ case "MB":
171
+ $timezone = "America/Winnipeg";
172
+ break;
173
+ case "NB":
174
+ $timezone = "America/Halifax";
175
+ break;
176
+ case "NL":
177
+ $timezone = "America/St_Johns";
178
+ break;
179
+ case "NT":
180
+ $timezone = "America/Yellowknife";
181
+ break;
182
+ case "NS":
183
+ $timezone = "America/Halifax";
184
+ break;
185
+ case "NU":
186
+ $timezone = "America/Rankin_Inlet";
187
+ break;
188
+ case "ON":
189
+ $timezone = "America/Toronto";
190
+ break;
191
+ case "PE":
192
+ $timezone = "America/Halifax";
193
+ break;
194
+ case "QC":
195
+ $timezone = "America/Montreal";
196
+ break;
197
+ case "SK":
198
+ $timezone = "America/Regina";
199
+ break;
200
+ case "YT":
201
+ $timezone = "America/Whitehorse";
202
+ break;
203
+ }
204
+ break;
205
+ case "AU":
206
+ switch ($region) {
207
+ case "01":
208
+ $timezone = "Australia/Sydney";
209
+ break;
210
+ case "02":
211
+ $timezone = "Australia/Sydney";
212
+ break;
213
+ case "03":
214
+ $timezone = "Australia/Darwin";
215
+ break;
216
+ case "04":
217
+ $timezone = "Australia/Brisbane";
218
+ break;
219
+ case "05":
220
+ $timezone = "Australia/Adelaide";
221
+ break;
222
+ case "06":
223
+ $timezone = "Australia/Hobart";
224
+ break;
225
+ case "07":
226
+ $timezone = "Australia/Melbourne";
227
+ break;
228
+ case "08":
229
+ $timezone = "Australia/Perth";
230
+ break;
231
+ }
232
+ break;
233
+ case "AS":
234
+ $timezone = "Pacific/Pago_Pago";
235
+ break;
236
+ case "CI":
237
+ $timezone = "Africa/Abidjan";
238
+ break;
239
+ case "GH":
240
+ $timezone = "Africa/Accra";
241
+ break;
242
+ case "DZ":
243
+ $timezone = "Africa/Algiers";
244
+ break;
245
+ case "ER":
246
+ $timezone = "Africa/Asmara";
247
+ break;
248
+ case "ML":
249
+ $timezone = "Africa/Bamako";
250
+ break;
251
+ case "CF":
252
+ $timezone = "Africa/Bangui";
253
+ break;
254
+ case "GM":
255
+ $timezone = "Africa/Banjul";
256
+ break;
257
+ case "GW":
258
+ $timezone = "Africa/Bissau";
259
+ break;
260
+ case "CG":
261
+ $timezone = "Africa/Brazzaville";
262
+ break;
263
+ case "BI":
264
+ $timezone = "Africa/Bujumbura";
265
+ break;
266
+ case "EG":
267
+ $timezone = "Africa/Cairo";
268
+ break;
269
+ case "MA":
270
+ $timezone = "Africa/Casablanca";
271
+ break;
272
+ case "GN":
273
+ $timezone = "Africa/Conakry";
274
+ break;
275
+ case "SN":
276
+ $timezone = "Africa/Dakar";
277
+ break;
278
+ case "DJ":
279
+ $timezone = "Africa/Djibouti";
280
+ break;
281
+ case "SL":
282
+ $timezone = "Africa/Freetown";
283
+ break;
284
+ case "BW":
285
+ $timezone = "Africa/Gaborone";
286
+ break;
287
+ case "ZW":
288
+ $timezone = "Africa/Harare";
289
+ break;
290
+ case "ZA":
291
+ $timezone = "Africa/Johannesburg";
292
+ break;
293
+ case "UG":
294
+ $timezone = "Africa/Kampala";
295
+ break;
296
+ case "SD":
297
+ $timezone = "Africa/Khartoum";
298
+ break;
299
+ case "SS":
300
+ $timezone = "Africa/Juba";
301
+ break;
302
+ case "RW":
303
+ $timezone = "Africa/Kigali";
304
+ break;
305
+ case "NG":
306
+ $timezone = "Africa/Lagos";
307
+ break;
308
+ case "GA":
309
+ $timezone = "Africa/Libreville";
310
+ break;
311
+ case "TG":
312
+ $timezone = "Africa/Lome";
313
+ break;
314
+ case "AO":
315
+ $timezone = "Africa/Luanda";
316
+ break;
317
+ case "ZM":
318
+ $timezone = "Africa/Lusaka";
319
+ break;
320
+ case "GQ":
321
+ $timezone = "Africa/Malabo";
322
+ break;
323
+ case "MZ":
324
+ $timezone = "Africa/Maputo";
325
+ break;
326
+ case "LS":
327
+ $timezone = "Africa/Maseru";
328
+ break;
329
+ case "SZ":
330
+ $timezone = "Africa/Mbabane";
331
+ break;
332
+ case "SO":
333
+ $timezone = "Africa/Mogadishu";
334
+ break;
335
+ case "LR":
336
+ $timezone = "Africa/Monrovia";
337
+ break;
338
+ case "KE":
339
+ $timezone = "Africa/Nairobi";
340
+ break;
341
+ case "TD":
342
+ $timezone = "Africa/Ndjamena";
343
+ break;
344
+ case "NE":
345
+ $timezone = "Africa/Niamey";
346
+ break;
347
+ case "MR":
348
+ $timezone = "Africa/Nouakchott";
349
+ break;
350
+ case "BF":
351
+ $timezone = "Africa/Ouagadougou";
352
+ break;
353
+ case "ST":
354
+ $timezone = "Africa/Sao_Tome";
355
+ break;
356
+ case "LY":
357
+ $timezone = "Africa/Tripoli";
358
+ break;
359
+ case "TN":
360
+ $timezone = "Africa/Tunis";
361
+ break;
362
+ case "AI":
363
+ $timezone = "America/Anguilla";
364
+ break;
365
+ case "AG":
366
+ $timezone = "America/Antigua";
367
+ break;
368
+ case "AW":
369
+ $timezone = "America/Aruba";
370
+ break;
371
+ case "BB":
372
+ $timezone = "America/Barbados";
373
+ break;
374
+ case "BZ":
375
+ $timezone = "America/Belize";
376
+ break;
377
+ case "CO":
378
+ $timezone = "America/Bogota";
379
+ break;
380
+ case "VE":
381
+ $timezone = "America/Caracas";
382
+ break;
383
+ case "KY":
384
+ $timezone = "America/Cayman";
385
+ break;
386
+ case "CR":
387
+ $timezone = "America/Costa_Rica";
388
+ break;
389
+ case "DM":
390
+ $timezone = "America/Dominica";
391
+ break;
392
+ case "SV":
393
+ $timezone = "America/El_Salvador";
394
+ break;
395
+ case "GD":
396
+ $timezone = "America/Grenada";
397
+ break;
398
+ case "FR":
399
+ $timezone = "Europe/Paris";
400
+ break;
401
+ case "GP":
402
+ $timezone = "America/Guadeloupe";
403
+ break;
404
+ case "GT":
405
+ $timezone = "America/Guatemala";
406
+ break;
407
+ case "GY":
408
+ $timezone = "America/Guyana";
409
+ break;
410
+ case "CU":
411
+ $timezone = "America/Havana";
412
+ break;
413
+ case "JM":
414
+ $timezone = "America/Jamaica";
415
+ break;
416
+ case "BO":
417
+ $timezone = "America/La_Paz";
418
+ break;
419
+ case "PE":
420
+ $timezone = "America/Lima";
421
+ break;
422
+ case "NI":
423
+ $timezone = "America/Managua";
424
+ break;
425
+ case "MQ":
426
+ $timezone = "America/Martinique";
427
+ break;
428
+ case "UY":
429
+ $timezone = "America/Montevideo";
430
+ break;
431
+ case "MS":
432
+ $timezone = "America/Montserrat";
433
+ break;
434
+ case "BS":
435
+ $timezone = "America/Nassau";
436
+ break;
437
+ case "PA":
438
+ $timezone = "America/Panama";
439
+ break;
440
+ case "SR":
441
+ $timezone = "America/Paramaribo";
442
+ break;
443
+ case "PR":
444
+ $timezone = "America/Puerto_Rico";
445
+ break;
446
+ case "KN":
447
+ $timezone = "America/St_Kitts";
448
+ break;
449
+ case "LC":
450
+ $timezone = "America/St_Lucia";
451
+ break;
452
+ case "VC":
453
+ $timezone = "America/St_Vincent";
454
+ break;
455
+ case "HN":
456
+ $timezone = "America/Tegucigalpa";
457
+ break;
458
+ case "YE":
459
+ $timezone = "Asia/Aden";
460
+ break;
461
+ case "JO":
462
+ $timezone = "Asia/Amman";
463
+ break;
464
+ case "TM":
465
+ $timezone = "Asia/Ashgabat";
466
+ break;
467
+ case "IQ":
468
+ $timezone = "Asia/Baghdad";
469
+ break;
470
+ case "BH":
471
+ $timezone = "Asia/Bahrain";
472
+ break;
473
+ case "AZ":
474
+ $timezone = "Asia/Baku";
475
+ break;
476
+ case "TH":
477
+ $timezone = "Asia/Bangkok";
478
+ break;
479
+ case "LB":
480
+ $timezone = "Asia/Beirut";
481
+ break;
482
+ case "KG":
483
+ $timezone = "Asia/Bishkek";
484
+ break;
485
+ case "BN":
486
+ $timezone = "Asia/Brunei";
487
+ break;
488
+ case "IN":
489
+ $timezone = "Asia/Kolkata";
490
+ break;
491
+ case "LK":
492
+ $timezone = "Asia/Colombo";
493
+ break;
494
+ case "BD":
495
+ $timezone = "Asia/Dhaka";
496
+ break;
497
+ case "AE":
498
+ $timezone = "Asia/Dubai";
499
+ break;
500
+ case "TJ":
501
+ $timezone = "Asia/Dushanbe";
502
+ break;
503
+ case "HK":
504
+ $timezone = "Asia/Hong_Kong";
505
+ break;
506
+ case "TR":
507
+ $timezone = "Asia/Istanbul";
508
+ break;
509
+ case "IL":
510
+ $timezone = "Asia/Jerusalem";
511
+ break;
512
+ case "AF":
513
+ $timezone = "Asia/Kabul";
514
+ break;
515
+ case "PK":
516
+ $timezone = "Asia/Karachi";
517
+ break;
518
+ case "NP":
519
+ $timezone = "Asia/Kathmandu";
520
+ break;
521
+ case "KW":
522
+ $timezone = "Asia/Kuwait";
523
+ break;
524
+ case "MO":
525
+ $timezone = "Asia/Macau";
526
+ break;
527
+ case "PH":
528
+ $timezone = "Asia/Manila";
529
+ break;
530
+ case "OM":
531
+ $timezone = "Asia/Muscat";
532
+ break;
533
+ case "CY":
534
+ $timezone = "Asia/Nicosia";
535
+ break;
536
+ case "KP":
537
+ $timezone = "Asia/Pyongyang";
538
+ break;
539
+ case "QA":
540
+ $timezone = "Asia/Qatar";
541
+ break;
542
+ case "MM":
543
+ $timezone = "Asia/Rangoon";
544
+ break;
545
+ case "SA":
546
+ $timezone = "Asia/Riyadh";
547
+ break;
548
+ case "KR":
549
+ $timezone = "Asia/Seoul";
550
+ break;
551
+ case "SG":
552
+ $timezone = "Asia/Singapore";
553
+ break;
554
+ case "TW":
555
+ $timezone = "Asia/Taipei";
556
+ break;
557
+ case "GE":
558
+ $timezone = "Asia/Tbilisi";
559
+ break;
560
+ case "BT":
561
+ $timezone = "Asia/Thimphu";
562
+ break;
563
+ case "JP":
564
+ $timezone = "Asia/Tokyo";
565
+ break;
566
+ case "LA":
567
+ $timezone = "Asia/Vientiane";
568
+ break;
569
+ case "AM":
570
+ $timezone = "Asia/Yerevan";
571
+ break;
572
+ case "BM":
573
+ $timezone = "Atlantic/Bermuda";
574
+ break;
575
+ case "CV":
576
+ $timezone = "Atlantic/Cape_Verde";
577
+ break;
578
+ case "FO":
579
+ $timezone = "Atlantic/Faroe";
580
+ break;
581
+ case "IS":
582
+ $timezone = "Atlantic/Reykjavik";
583
+ break;
584
+ case "GS":
585
+ $timezone = "Atlantic/South_Georgia";
586
+ break;
587
+ case "SH":
588
+ $timezone = "Atlantic/St_Helena";
589
+ break;
590
+ case "CL":
591
+ $timezone = "America/Santiago";
592
+ break;
593
+ case "NL":
594
+ $timezone = "Europe/Amsterdam";
595
+ break;
596
+ case "AD":
597
+ $timezone = "Europe/Andorra";
598
+ break;
599
+ case "GR":
600
+ $timezone = "Europe/Athens";
601
+ break;
602
+ case "YU":
603
+ $timezone = "Europe/Belgrade";
604
+ break;
605
+ case "DE":
606
+ $timezone = "Europe/Berlin";
607
+ break;
608
+ case "SK":
609
+ $timezone = "Europe/Bratislava";
610
+ break;
611
+ case "BE":
612
+ $timezone = "Europe/Brussels";
613
+ break;
614
+ case "RO":
615
+ $timezone = "Europe/Bucharest";
616
+ break;
617
+ case "HU":
618
+ $timezone = "Europe/Budapest";
619
+ break;
620
+ case "DK":
621
+ $timezone = "Europe/Copenhagen";
622
+ break;
623
+ case "IE":
624
+ $timezone = "Europe/Dublin";
625
+ break;
626
+ case "GI":
627
+ $timezone = "Europe/Gibraltar";
628
+ break;
629
+ case "FI":
630
+ $timezone = "Europe/Helsinki";
631
+ break;
632
+ case "SI":
633
+ $timezone = "Europe/Ljubljana";
634
+ break;
635
+ case "GB":
636
+ $timezone = "Europe/London";
637
+ break;
638
+ case "LU":
639
+ $timezone = "Europe/Luxembourg";
640
+ break;
641
+ case "MT":
642
+ $timezone = "Europe/Malta";
643
+ break;
644
+ case "BY":
645
+ $timezone = "Europe/Minsk";
646
+ break;
647
+ case "MC":
648
+ $timezone = "Europe/Monaco";
649
+ break;
650
+ case "NO":
651
+ $timezone = "Europe/Oslo";
652
+ break;
653
+ case "CZ":
654
+ $timezone = "Europe/Prague";
655
+ break;
656
+ case "LV":
657
+ $timezone = "Europe/Riga";
658
+ break;
659
+ case "IT":
660
+ $timezone = "Europe/Rome";
661
+ break;
662
+ case "SM":
663
+ $timezone = "Europe/San_Marino";
664
+ break;
665
+ case "BA":
666
+ $timezone = "Europe/Sarajevo";
667
+ break;
668
+ case "MK":
669
+ $timezone = "Europe/Skopje";
670
+ break;
671
+ case "BG":
672
+ $timezone = "Europe/Sofia";
673
+ break;
674
+ case "SE":
675
+ $timezone = "Europe/Stockholm";
676
+ break;
677
+ case "EE":
678
+ $timezone = "Europe/Tallinn";
679
+ break;
680
+ case "AL":
681
+ $timezone = "Europe/Tirane";
682
+ break;
683
+ case "LI":
684
+ $timezone = "Europe/Vaduz";
685
+ break;
686
+ case "VA":
687
+ $timezone = "Europe/Vatican";
688
+ break;
689
+ case "AT":
690
+ $timezone = "Europe/Vienna";
691
+ break;
692
+ case "LT":
693
+ $timezone = "Europe/Vilnius";
694
+ break;
695
+ case "PL":
696
+ $timezone = "Europe/Warsaw";
697
+ break;
698
+ case "HR":
699
+ $timezone = "Europe/Zagreb";
700
+ break;
701
+ case "IR":
702
+ $timezone = "Asia/Tehran";
703
+ break;
704
+ case "MG":
705
+ $timezone = "Indian/Antananarivo";
706
+ break;
707
+ case "CX":
708
+ $timezone = "Indian/Christmas";
709
+ break;
710
+ case "CC":
711
+ $timezone = "Indian/Cocos";
712
+ break;
713
+ case "KM":
714
+ $timezone = "Indian/Comoro";
715
+ break;
716
+ case "MV":
717
+ $timezone = "Indian/Maldives";
718
+ break;
719
+ case "MU":
720
+ $timezone = "Indian/Mauritius";
721
+ break;
722
+ case "YT":
723
+ $timezone = "Indian/Mayotte";
724
+ break;
725
+ case "RE":
726
+ $timezone = "Indian/Reunion";
727
+ break;
728
+ case "FJ":
729
+ $timezone = "Pacific/Fiji";
730
+ break;
731
+ case "TV":
732
+ $timezone = "Pacific/Funafuti";
733
+ break;
734
+ case "GU":
735
+ $timezone = "Pacific/Guam";
736
+ break;
737
+ case "NR":
738
+ $timezone = "Pacific/Nauru";
739
+ break;
740
+ case "NU":
741
+ $timezone = "Pacific/Niue";
742
+ break;
743
+ case "NF":
744
+ $timezone = "Pacific/Norfolk";
745
+ break;
746
+ case "PW":
747
+ $timezone = "Pacific/Palau";
748
+ break;
749
+ case "PN":
750
+ $timezone = "Pacific/Pitcairn";
751
+ break;
752
+ case "CK":
753
+ $timezone = "Pacific/Rarotonga";
754
+ break;
755
+ case "WS":
756
+ $timezone = "Pacific/Pago_Pago";
757
+ break;
758
+ case "KI":
759
+ $timezone = "Pacific/Tarawa";
760
+ break;
761
+ case "TO":
762
+ $timezone = "Pacific/Tongatapu";
763
+ break;
764
+ case "WF":
765
+ $timezone = "Pacific/Wallis";
766
+ break;
767
+ case "TZ":
768
+ $timezone = "Africa/Dar_es_Salaam";
769
+ break;
770
+ case "VN":
771
+ $timezone = "Asia/Phnom_Penh";
772
+ break;
773
+ case "KH":
774
+ $timezone = "Asia/Phnom_Penh";
775
+ break;
776
+ case "CM":
777
+ $timezone = "Africa/Lagos";
778
+ break;
779
+ case "DO":
780
+ $timezone = "America/Santo_Domingo";
781
+ break;
782
+ case "ET":
783
+ $timezone = "Africa/Addis_Ababa";
784
+ break;
785
+ case "FX":
786
+ $timezone = "Europe/Paris";
787
+ break;
788
+ case "HT":
789
+ $timezone = "America/Port-au-Prince";
790
+ break;
791
+ case "CH":
792
+ $timezone = "Europe/Zurich";
793
+ break;
794
+ case "AN":
795
+ $timezone = "America/Curacao";
796
+ break;
797
+ case "BJ":
798
+ $timezone = "Africa/Porto-Novo";
799
+ break;
800
+ case "EH":
801
+ $timezone = "Africa/El_Aaiun";
802
+ break;
803
+ case "FK":
804
+ $timezone = "Atlantic/Stanley";
805
+ break;
806
+ case "GF":
807
+ $timezone = "America/Cayenne";
808
+ break;
809
+ case "IO":
810
+ $timezone = "Indian/Chagos";
811
+ break;
812
+ case "MD":
813
+ $timezone = "Europe/Chisinau";
814
+ break;
815
+ case "MP":
816
+ $timezone = "Pacific/Saipan";
817
+ break;
818
+ case "MW":
819
+ $timezone = "Africa/Blantyre";
820
+ break;
821
+ case "NA":
822
+ $timezone = "Africa/Windhoek";
823
+ break;
824
+ case "NC":
825
+ $timezone = "Pacific/Noumea";
826
+ break;
827
+ case "PG":
828
+ $timezone = "Pacific/Port_Moresby";
829
+ break;
830
+ case "PM":
831
+ $timezone = "America/Miquelon";
832
+ break;
833
+ case "PS":
834
+ $timezone = "Asia/Gaza";
835
+ break;
836
+ case "PY":
837
+ $timezone = "America/Asuncion";
838
+ break;
839
+ case "SB":
840
+ $timezone = "Pacific/Guadalcanal";
841
+ break;
842
+ case "SC":
843
+ $timezone = "Indian/Mahe";
844
+ break;
845
+ case "SJ":
846
+ $timezone = "Arctic/Longyearbyen";
847
+ break;
848
+ case "SY":
849
+ $timezone = "Asia/Damascus";
850
+ break;
851
+ case "TC":
852
+ $timezone = "America/Grand_Turk";
853
+ break;
854
+ case "TF":
855
+ $timezone = "Indian/Kerguelen";
856
+ break;
857
+ case "TK":
858
+ $timezone = "Pacific/Fakaofo";
859
+ break;
860
+ case "TT":
861
+ $timezone = "America/Port_of_Spain";
862
+ break;
863
+ case "VG":
864
+ $timezone = "America/Tortola";
865
+ break;
866
+ case "VI":
867
+ $timezone = "America/St_Thomas";
868
+ break;
869
+ case "VU":
870
+ $timezone = "Pacific/Efate";
871
+ break;
872
+ case "RS":
873
+ $timezone = "Europe/Belgrade";
874
+ break;
875
+ case "ME":
876
+ $timezone = "Europe/Podgorica";
877
+ break;
878
+ case "AX":
879
+ $timezone = "Europe/Mariehamn";
880
+ break;
881
+ case "GG":
882
+ $timezone = "Europe/Guernsey";
883
+ break;
884
+ case "IM":
885
+ $timezone = "Europe/Isle_of_Man";
886
+ break;
887
+ case "JE":
888
+ $timezone = "Europe/Jersey";
889
+ break;
890
+ case "BL":
891
+ $timezone = "America/St_Barthelemy";
892
+ break;
893
+ case "MF":
894
+ $timezone = "America/Marigot";
895
+ break;
896
+ case "MH":
897
+ $timezone = "Pacific/Kwajalein";
898
+ break;
899
+ case "UM":
900
+ $timezone = "Pacific/Wake";
901
+ break;
902
+ case "AR":
903
+ switch ($region) {
904
+ case "01":
905
+ $timezone = "America/Argentina/Buenos_Aires";
906
+ break;
907
+ case "02":
908
+ $timezone = "America/Argentina/Catamarca";
909
+ break;
910
+ case "03":
911
+ $timezone = "America/Argentina/Tucuman";
912
+ break;
913
+ case "04":
914
+ $timezone = "America/Argentina/Rio_Gallegos";
915
+ break;
916
+ case "05":
917
+ $timezone = "America/Argentina/Cordoba";
918
+ break;
919
+ case "06":
920
+ $timezone = "America/Argentina/Tucuman";
921
+ break;
922
+ case "07":
923
+ $timezone = "America/Argentina/Buenos_Aires";
924
+ break;
925
+ case "08":
926
+ $timezone = "America/Argentina/Buenos_Aires";
927
+ break;
928
+ case "09":
929
+ $timezone = "America/Argentina/Tucuman";
930
+ break;
931
+ case "10":
932
+ $timezone = "America/Argentina/Jujuy";
933
+ break;
934
+ case "11":
935
+ $timezone = "America/Argentina/San_Luis";
936
+ break;
937
+ case "12":
938
+ $timezone = "America/Argentina/La_Rioja";
939
+ break;
940
+ case "13":
941
+ $timezone = "America/Argentina/Mendoza";
942
+ break;
943
+ case "14":
944
+ $timezone = "America/Argentina/Buenos_Aires";
945
+ break;
946
+ case "15":
947
+ $timezone = "America/Argentina/San_Luis";
948
+ break;
949
+ case "16":
950
+ $timezone = "America/Argentina/Buenos_Aires";
951
+ break;
952
+ case "17":
953
+ $timezone = "America/Argentina/Salta";
954
+ break;
955
+ case "18":
956
+ $timezone = "America/Argentina/San_Juan";
957
+ break;
958
+ case "19":
959
+ $timezone = "America/Argentina/San_Luis";
960
+ break;
961
+ case "20":
962
+ $timezone = "America/Argentina/Rio_Gallegos";
963
+ break;
964
+ case "21":
965
+ $timezone = "America/Argentina/Buenos_Aires";
966
+ break;
967
+ case "22":
968
+ $timezone = "America/Argentina/Catamarca";
969
+ break;
970
+ case "23":
971
+ $timezone = "America/Argentina/Ushuaia";
972
+ break;
973
+ case "24":
974
+ $timezone = "America/Argentina/Tucuman";
975
+ break;
976
+ }
977
+ break;
978
+ case "BR":
979
+ switch ($region) {
980
+ case "01":
981
+ $timezone = "America/Rio_Branco";
982
+ break;
983
+ case "02":
984
+ $timezone = "America/Maceio";
985
+ break;
986
+ case "03":
987
+ $timezone = "America/Sao_Paulo";
988
+ break;
989
+ case "04":
990
+ $timezone = "America/Manaus";
991
+ break;
992
+ case "05":
993
+ $timezone = "America/Bahia";
994
+ break;
995
+ case "06":
996
+ $timezone = "America/Fortaleza";
997
+ break;
998
+ case "07":
999
+ $timezone = "America/Sao_Paulo";
1000
+ break;
1001
+ case "08":
1002
+ $timezone = "America/Sao_Paulo";
1003
+ break;
1004
+ case "11":
1005
+ $timezone = "America/Campo_Grande";
1006
+ break;
1007
+ case "13":
1008
+ $timezone = "America/Belem";
1009
+ break;
1010
+ case "14":
1011
+ $timezone = "America/Cuiaba";
1012
+ break;
1013
+ case "15":
1014
+ $timezone = "America/Sao_Paulo";
1015
+ break;
1016
+ case "16":
1017
+ $timezone = "America/Belem";
1018
+ break;
1019
+ case "17":
1020
+ $timezone = "America/Recife";
1021
+ break;
1022
+ case "18":
1023
+ $timezone = "America/Sao_Paulo";
1024
+ break;
1025
+ case "20":
1026
+ $timezone = "America/Fortaleza";
1027
+ break;
1028
+ case "21":
1029
+ $timezone = "America/Sao_Paulo";
1030
+ break;
1031
+ case "22":
1032
+ $timezone = "America/Recife";
1033
+ break;
1034
+ case "23":
1035
+ $timezone = "America/Sao_Paulo";
1036
+ break;
1037
+ case "24":
1038
+ $timezone = "America/Porto_Velho";
1039
+ break;
1040
+ case "25":
1041
+ $timezone = "America/Boa_Vista";
1042
+ break;
1043
+ case "26":
1044
+ $timezone = "America/Sao_Paulo";
1045
+ break;
1046
+ case "27":
1047
+ $timezone = "America/Sao_Paulo";
1048
+ break;
1049
+ case "28":
1050
+ $timezone = "America/Maceio";
1051
+ break;
1052
+ case "29":
1053
+ $timezone = "America/Sao_Paulo";
1054
+ break;
1055
+ case "30":
1056
+ $timezone = "America/Recife";
1057
+ break;
1058
+ case "31":
1059
+ $timezone = "America/Araguaina";
1060
+ break;
1061
+ }
1062
+ break;
1063
+ case "CD":
1064
+ switch ($region) {
1065
+ case "01":
1066
+ $timezone = "Africa/Kinshasa";
1067
+ break;
1068
+ case "02":
1069
+ $timezone = "Africa/Kinshasa";
1070
+ break;
1071
+ case "03":
1072
+ $timezone = "Africa/Kinshasa";
1073
+ break;
1074
+ case "04":
1075
+ $timezone = "Africa/Lubumbashi";
1076
+ break;
1077
+ case "05":
1078
+ $timezone = "Africa/Lubumbashi";
1079
+ break;
1080
+ case "06":
1081
+ $timezone = "Africa/Kinshasa";
1082
+ break;
1083
+ case "07":
1084
+ $timezone = "Africa/Lubumbashi";
1085
+ break;
1086
+ case "08":
1087
+ $timezone = "Africa/Kinshasa";
1088
+ break;
1089
+ case "09":
1090
+ $timezone = "Africa/Lubumbashi";
1091
+ break;
1092
+ case "10":
1093
+ $timezone = "Africa/Lubumbashi";
1094
+ break;
1095
+ case "11":
1096
+ $timezone = "Africa/Lubumbashi";
1097
+ break;
1098
+ case "12":
1099
+ $timezone = "Africa/Lubumbashi";
1100
+ break;
1101
+ }
1102
+ break;
1103
+ case "CN":
1104
+ switch ($region) {
1105
+ case "01":
1106
+ $timezone = "Asia/Shanghai";
1107
+ break;
1108
+ case "02":
1109
+ $timezone = "Asia/Shanghai";
1110
+ break;
1111
+ case "03":
1112
+ $timezone = "Asia/Shanghai";
1113
+ break;
1114
+ case "04":
1115
+ $timezone = "Asia/Shanghai";
1116
+ break;
1117
+ case "05":
1118
+ $timezone = "Asia/Harbin";
1119
+ break;
1120
+ case "06":
1121
+ $timezone = "Asia/Chongqing";
1122
+ break;
1123
+ case "07":
1124
+ $timezone = "Asia/Shanghai";
1125
+ break;
1126
+ case "08":
1127
+ $timezone = "Asia/Harbin";
1128
+ break;
1129
+ case "09":
1130
+ $timezone = "Asia/Shanghai";
1131
+ break;
1132
+ case "10":
1133
+ $timezone = "Asia/Shanghai";
1134
+ break;
1135
+ case "11":
1136
+ $timezone = "Asia/Chongqing";
1137
+ break;
1138
+ case "12":
1139
+ $timezone = "Asia/Shanghai";
1140
+ break;
1141
+ case "13":
1142
+ $timezone = "Asia/Urumqi";
1143
+ break;
1144
+ case "14":
1145
+ $timezone = "Asia/Chongqing";
1146
+ break;
1147
+ case "15":
1148
+ $timezone = "Asia/Chongqing";
1149
+ break;
1150
+ case "16":
1151
+ $timezone = "Asia/Chongqing";
1152
+ break;
1153
+ case "18":
1154
+ $timezone = "Asia/Chongqing";
1155
+ break;
1156
+ case "19":
1157
+ $timezone = "Asia/Harbin";
1158
+ break;
1159
+ case "20":
1160
+ $timezone = "Asia/Harbin";
1161
+ break;
1162
+ case "21":
1163
+ $timezone = "Asia/Chongqing";
1164
+ break;
1165
+ case "22":
1166
+ $timezone = "Asia/Harbin";
1167
+ break;
1168
+ case "23":
1169
+ $timezone = "Asia/Shanghai";
1170
+ break;
1171
+ case "24":
1172
+ $timezone = "Asia/Chongqing";
1173
+ break;
1174
+ case "25":
1175
+ $timezone = "Asia/Shanghai";
1176
+ break;
1177
+ case "26":
1178
+ $timezone = "Asia/Chongqing";
1179
+ break;
1180
+ case "28":
1181
+ $timezone = "Asia/Shanghai";
1182
+ break;
1183
+ case "29":
1184
+ $timezone = "Asia/Chongqing";
1185
+ break;
1186
+ case "30":
1187
+ $timezone = "Asia/Chongqing";
1188
+ break;
1189
+ case "31":
1190
+ $timezone = "Asia/Chongqing";
1191
+ break;
1192
+ case "32":
1193
+ $timezone = "Asia/Chongqing";
1194
+ break;
1195
+ case "33":
1196
+ $timezone = "Asia/Chongqing";
1197
+ break;
1198
+ }
1199
+ break;
1200
+ case "EC":
1201
+ switch ($region) {
1202
+ case "01":
1203
+ $timezone = "Pacific/Galapagos";
1204
+ break;
1205
+ case "02":
1206
+ $timezone = "America/Guayaquil";
1207
+ break;
1208
+ case "03":
1209
+ $timezone = "America/Guayaquil";
1210
+ break;
1211
+ case "04":
1212
+ $timezone = "America/Guayaquil";
1213
+ break;
1214
+ case "05":
1215
+ $timezone = "America/Guayaquil";
1216
+ break;
1217
+ case "06":
1218
+ $timezone = "America/Guayaquil";
1219
+ break;
1220
+ case "07":
1221
+ $timezone = "America/Guayaquil";
1222
+ break;
1223
+ case "08":
1224
+ $timezone = "America/Guayaquil";
1225
+ break;
1226
+ case "09":
1227
+ $timezone = "America/Guayaquil";
1228
+ break;
1229
+ case "10":
1230
+ $timezone = "America/Guayaquil";
1231
+ break;
1232
+ case "11":
1233
+ $timezone = "America/Guayaquil";
1234
+ break;
1235
+ case "12":
1236
+ $timezone = "America/Guayaquil";
1237
+ break;
1238
+ case "13":
1239
+ $timezone = "America/Guayaquil";
1240
+ break;
1241
+ case "14":
1242
+ $timezone = "America/Guayaquil";
1243
+ break;
1244
+ case "15":
1245
+ $timezone = "America/Guayaquil";
1246
+ break;
1247
+ case "17":
1248
+ $timezone = "America/Guayaquil";
1249
+ break;
1250
+ case "18":
1251
+ $timezone = "America/Guayaquil";
1252
+ break;
1253
+ case "19":
1254
+ $timezone = "America/Guayaquil";
1255
+ break;
1256
+ case "20":
1257
+ $timezone = "America/Guayaquil";
1258
+ break;
1259
+ case "22":
1260
+ $timezone = "America/Guayaquil";
1261
+ break;
1262
+ case "24":
1263
+ $timezone = "America/Guayaquil";
1264
+ break;
1265
+ }
1266
+ break;
1267
+ case "ES":
1268
+ switch ($region) {
1269
+ case "07":
1270
+ $timezone = "Europe/Madrid";
1271
+ break;
1272
+ case "27":
1273
+ $timezone = "Europe/Madrid";
1274
+ break;
1275
+ case "29":
1276
+ $timezone = "Europe/Madrid";
1277
+ break;
1278
+ case "31":
1279
+ $timezone = "Europe/Madrid";
1280
+ break;
1281
+ case "32":
1282
+ $timezone = "Europe/Madrid";
1283
+ break;
1284
+ case "34":
1285
+ $timezone = "Europe/Madrid";
1286
+ break;
1287
+ case "39":
1288
+ $timezone = "Europe/Madrid";
1289
+ break;
1290
+ case "51":
1291
+ $timezone = "Africa/Ceuta";
1292
+ break;
1293
+ case "52":
1294
+ $timezone = "Europe/Madrid";
1295
+ break;
1296
+ case "53":
1297
+ $timezone = "Atlantic/Canary";
1298
+ break;
1299
+ case "54":
1300
+ $timezone = "Europe/Madrid";
1301
+ break;
1302
+ case "55":
1303
+ $timezone = "Europe/Madrid";
1304
+ break;
1305
+ case "56":
1306
+ $timezone = "Europe/Madrid";
1307
+ break;
1308
+ case "57":
1309
+ $timezone = "Europe/Madrid";
1310
+ break;
1311
+ case "58":
1312
+ $timezone = "Europe/Madrid";
1313
+ break;
1314
+ case "59":
1315
+ $timezone = "Europe/Madrid";
1316
+ break;
1317
+ case "60":
1318
+ $timezone = "Europe/Madrid";
1319
+ break;
1320
+ }
1321
+ break;
1322
+ case "GL":
1323
+ switch ($region) {
1324
+ case "01":
1325
+ $timezone = "America/Thule";
1326
+ break;
1327
+ case "02":
1328
+ $timezone = "America/Godthab";
1329
+ break;
1330
+ case "03":
1331
+ $timezone = "America/Godthab";
1332
+ break;
1333
+ }
1334
+ break;
1335
+ case "ID":
1336
+ switch ($region) {
1337
+ case "01":
1338
+ $timezone = "Asia/Pontianak";
1339
+ break;
1340
+ case "02":
1341
+ $timezone = "Asia/Makassar";
1342
+ break;
1343
+ case "03":
1344
+ $timezone = "Asia/Jakarta";
1345
+ break;
1346
+ case "04":
1347
+ $timezone = "Asia/Jakarta";
1348
+ break;
1349
+ case "05":
1350
+ $timezone = "Asia/Jakarta";
1351
+ break;
1352
+ case "06":
1353
+ $timezone = "Asia/Jakarta";
1354
+ break;
1355
+ case "07":
1356
+ $timezone = "Asia/Jakarta";
1357
+ break;
1358
+ case "08":
1359
+ $timezone = "Asia/Jakarta";
1360
+ break;
1361
+ case "09":
1362
+ $timezone = "Asia/Jayapura";
1363
+ break;
1364
+ case "10":
1365
+ $timezone = "Asia/Jakarta";
1366
+ break;
1367
+ case "11":
1368
+ $timezone = "Asia/Pontianak";
1369
+ break;
1370
+ case "12":
1371
+ $timezone = "Asia/Makassar";
1372
+ break;
1373
+ case "13":
1374
+ $timezone = "Asia/Makassar";
1375
+ break;
1376
+ case "14":
1377
+ $timezone = "Asia/Makassar";
1378
+ break;
1379
+ case "15":
1380
+ $timezone = "Asia/Jakarta";
1381
+ break;
1382
+ case "16":
1383
+ $timezone = "Asia/Makassar";
1384
+ break;
1385
+ case "17":
1386
+ $timezone = "Asia/Makassar";
1387
+ break;
1388
+ case "18":
1389
+ $timezone = "Asia/Makassar";
1390
+ break;
1391
+ case "19":
1392
+ $timezone = "Asia/Pontianak";
1393
+ break;
1394
+ case "20":
1395
+ $timezone = "Asia/Makassar";
1396
+ break;
1397
+ case "21":
1398
+ $timezone = "Asia/Makassar";
1399
+ break;
1400
+ case "22":
1401
+ $timezone = "Asia/Makassar";
1402
+ break;
1403
+ case "23":
1404
+ $timezone = "Asia/Makassar";
1405
+ break;
1406
+ case "24":
1407
+ $timezone = "Asia/Jakarta";
1408
+ break;
1409
+ case "25":
1410
+ $timezone = "Asia/Pontianak";
1411
+ break;
1412
+ case "26":
1413
+ $timezone = "Asia/Pontianak";
1414
+ break;
1415
+ case "28":
1416
+ $timezone = "Asia/Jayapura";
1417
+ break;
1418
+ case "29":
1419
+ $timezone = "Asia/Makassar";
1420
+ break;
1421
+ case "30":
1422
+ $timezone = "Asia/Jakarta";
1423
+ break;
1424
+ case "31":
1425
+ $timezone = "Asia/Makassar";
1426
+ break;
1427
+ case "32":
1428
+ $timezone = "Asia/Jakarta";
1429
+ break;
1430
+ case "33":
1431
+ $timezone = "Asia/Jakarta";
1432
+ break;
1433
+ case "34":
1434
+ $timezone = "Asia/Makassar";
1435
+ break;
1436
+ case "35":
1437
+ $timezone = "Asia/Pontianak";
1438
+ break;
1439
+ case "36":
1440
+ $timezone = "Asia/Jayapura";
1441
+ break;
1442
+ case "37":
1443
+ $timezone = "Asia/Pontianak";
1444
+ break;
1445
+ case "38":
1446
+ $timezone = "Asia/Makassar";
1447
+ break;
1448
+ case "39":
1449
+ $timezone = "Asia/Jayapura";
1450
+ break;
1451
+ case "40":
1452
+ $timezone = "Asia/Pontianak";
1453
+ break;
1454
+ case "41":
1455
+ $timezone = "Asia/Makassar";
1456
+ break;
1457
+ }
1458
+ break;
1459
+ case "KZ":
1460
+ switch ($region) {
1461
+ case "01":
1462
+ $timezone = "Asia/Almaty";
1463
+ break;
1464
+ case "02":
1465
+ $timezone = "Asia/Almaty";
1466
+ break;
1467
+ case "03":
1468
+ $timezone = "Asia/Qyzylorda";
1469
+ break;
1470
+ case "04":
1471
+ $timezone = "Asia/Aqtobe";
1472
+ break;
1473
+ case "05":
1474
+ $timezone = "Asia/Qyzylorda";
1475
+ break;
1476
+ case "06":
1477
+ $timezone = "Asia/Aqtau";
1478
+ break;
1479
+ case "07":
1480
+ $timezone = "Asia/Oral";
1481
+ break;
1482
+ case "08":
1483
+ $timezone = "Asia/Qyzylorda";
1484
+ break;
1485
+ case "09":
1486
+ $timezone = "Asia/Aqtau";
1487
+ break;
1488
+ case "10":
1489
+ $timezone = "Asia/Qyzylorda";
1490
+ break;
1491
+ case "11":
1492
+ $timezone = "Asia/Almaty";
1493
+ break;
1494
+ case "12":
1495
+ $timezone = "Asia/Qyzylorda";
1496
+ break;
1497
+ case "13":
1498
+ $timezone = "Asia/Aqtobe";
1499
+ break;
1500
+ case "14":
1501
+ $timezone = "Asia/Qyzylorda";
1502
+ break;
1503
+ case "15":
1504
+ $timezone = "Asia/Almaty";
1505
+ break;
1506
+ case "16":
1507
+ $timezone = "Asia/Aqtobe";
1508
+ break;
1509
+ case "17":
1510
+ $timezone = "Asia/Almaty";
1511
+ break;
1512
+ }
1513
+ break;
1514
+ case "MN":
1515
+ switch ($region) {
1516
+ case "06":
1517
+ $timezone = "Asia/Choibalsan";
1518
+ break;
1519
+ case "11":
1520
+ $timezone = "Asia/Ulaanbaatar";
1521
+ break;
1522
+ case "17":
1523
+ $timezone = "Asia/Choibalsan";
1524
+ break;
1525
+ case "19":
1526
+ $timezone = "Asia/Hovd";
1527
+ break;
1528
+ case "20":
1529
+ $timezone = "Asia/Ulaanbaatar";
1530
+ break;
1531
+ case "21":
1532
+ $timezone = "Asia/Ulaanbaatar";
1533
+ break;
1534
+ case "25":
1535
+ $timezone = "Asia/Ulaanbaatar";
1536
+ break;
1537
+ }
1538
+ break;
1539
+ case "MX":
1540
+ switch ($region) {
1541
+ case "01":
1542
+ $timezone = "America/Mexico_City";
1543
+ break;
1544
+ case "02":
1545
+ $timezone = "America/Tijuana";
1546
+ break;
1547
+ case "03":
1548
+ $timezone = "America/Hermosillo";
1549
+ break;
1550
+ case "04":
1551
+ $timezone = "America/Merida";
1552
+ break;
1553
+ case "05":
1554
+ $timezone = "America/Mexico_City";
1555
+ break;
1556
+ case "06":
1557
+ $timezone = "America/Chihuahua";
1558
+ break;
1559
+ case "07":
1560
+ $timezone = "America/Monterrey";
1561
+ break;
1562
+ case "08":
1563
+ $timezone = "America/Mexico_City";
1564
+ break;
1565
+ case "09":
1566
+ $timezone = "America/Mexico_City";
1567
+ break;
1568
+ case "10":
1569
+ $timezone = "America/Mazatlan";
1570
+ break;
1571
+ case "11":
1572
+ $timezone = "America/Mexico_City";
1573
+ break;
1574
+ case "12":
1575
+ $timezone = "America/Mexico_City";
1576
+ break;
1577
+ case "13":
1578
+ $timezone = "America/Mexico_City";
1579
+ break;
1580
+ case "14":
1581
+ $timezone = "America/Mazatlan";
1582
+ break;
1583
+ case "15":
1584
+ $timezone = "America/Chihuahua";
1585
+ break;
1586
+ case "16":
1587
+ $timezone = "America/Mexico_City";
1588
+ break;
1589
+ case "17":
1590
+ $timezone = "America/Mexico_City";
1591
+ break;
1592
+ case "18":
1593
+ $timezone = "America/Mazatlan";
1594
+ break;
1595
+ case "19":
1596
+ $timezone = "America/Monterrey";
1597
+ break;
1598
+ case "20":
1599
+ $timezone = "America/Mexico_City";
1600
+ break;
1601
+ case "21":
1602
+ $timezone = "America/Mexico_City";
1603
+ break;
1604
+ case "22":
1605
+ $timezone = "America/Mexico_City";
1606
+ break;
1607
+ case "23":
1608
+ $timezone = "America/Cancun";
1609
+ break;
1610
+ case "24":
1611
+ $timezone = "America/Mexico_City";
1612
+ break;
1613
+ case "25":
1614
+ $timezone = "America/Mazatlan";
1615
+ break;
1616
+ case "26":
1617
+ $timezone = "America/Hermosillo";
1618
+ break;
1619
+ case "27":
1620
+ $timezone = "America/Merida";
1621
+ break;
1622
+ case "28":
1623
+ $timezone = "America/Monterrey";
1624
+ break;
1625
+ case "29":
1626
+ $timezone = "America/Mexico_City";
1627
+ break;
1628
+ case "30":
1629
+ $timezone = "America/Mexico_City";
1630
+ break;
1631
+ case "31":
1632
+ $timezone = "America/Merida";
1633
+ break;
1634
+ case "32":
1635
+ $timezone = "America/Monterrey";
1636
+ break;
1637
+ }
1638
+ break;
1639
+ case "MY":
1640
+ switch ($region) {
1641
+ case "01":
1642
+ $timezone = "Asia/Kuala_Lumpur";
1643
+ break;
1644
+ case "02":
1645
+ $timezone = "Asia/Kuala_Lumpur";
1646
+ break;
1647
+ case "03":
1648
+ $timezone = "Asia/Kuala_Lumpur";
1649
+ break;
1650
+ case "04":
1651
+ $timezone = "Asia/Kuala_Lumpur";
1652
+ break;
1653
+ case "05":
1654
+ $timezone = "Asia/Kuala_Lumpur";
1655
+ break;
1656
+ case "06":
1657
+ $timezone = "Asia/Kuala_Lumpur";
1658
+ break;
1659
+ case "07":
1660
+ $timezone = "Asia/Kuala_Lumpur";
1661
+ break;
1662
+ case "08":
1663
+ $timezone = "Asia/Kuala_Lumpur";
1664
+ break;
1665
+ case "09":
1666
+ $timezone = "Asia/Kuala_Lumpur";
1667
+ break;
1668
+ case "11":
1669
+ $timezone = "Asia/Kuching";
1670
+ break;
1671
+ case "12":
1672
+ $timezone = "Asia/Kuala_Lumpur";
1673
+ break;
1674
+ case "13":
1675
+ $timezone = "Asia/Kuala_Lumpur";
1676
+ break;
1677
+ case "14":
1678
+ $timezone = "Asia/Kuala_Lumpur";
1679
+ break;
1680
+ case "15":
1681
+ $timezone = "Asia/Kuching";
1682
+ break;
1683
+ case "16":
1684
+ $timezone = "Asia/Kuching";
1685
+ break;
1686
+ }
1687
+ break;
1688
+ case "NZ":
1689
+ switch ($region) {
1690
+ case "85":
1691
+ $timezone = "Pacific/Auckland";
1692
+ break;
1693
+ case "E7":
1694
+ $timezone = "Pacific/Auckland";
1695
+ break;
1696
+ case "E8":
1697
+ $timezone = "Pacific/Auckland";
1698
+ break;
1699
+ case "E9":
1700
+ $timezone = "Pacific/Auckland";
1701
+ break;
1702
+ case "F1":
1703
+ $timezone = "Pacific/Auckland";
1704
+ break;
1705
+ case "F2":
1706
+ $timezone = "Pacific/Auckland";
1707
+ break;
1708
+ case "F3":
1709
+ $timezone = "Pacific/Auckland";
1710
+ break;
1711
+ case "F4":
1712
+ $timezone = "Pacific/Auckland";
1713
+ break;
1714
+ case "F5":
1715
+ $timezone = "Pacific/Auckland";
1716
+ break;
1717
+ case "F6":
1718
+ $timezone = "Pacific/Auckland";
1719
+ break;
1720
+ case "F7":
1721
+ $timezone = "Pacific/Chatham";
1722
+ break;
1723
+ case "F8":
1724
+ $timezone = "Pacific/Auckland";
1725
+ break;
1726
+ case "F9":
1727
+ $timezone = "Pacific/Auckland";
1728
+ break;
1729
+ case "G1":
1730
+ $timezone = "Pacific/Auckland";
1731
+ break;
1732
+ case "G2":
1733
+ $timezone = "Pacific/Auckland";
1734
+ break;
1735
+ case "G3":
1736
+ $timezone = "Pacific/Auckland";
1737
+ break;
1738
+ }
1739
+ break;
1740
+ case "PT":
1741
+ switch ($region) {
1742
+ case "02":
1743
+ $timezone = "Europe/Lisbon";
1744
+ break;
1745
+ case "03":
1746
+ $timezone = "Europe/Lisbon";
1747
+ break;
1748
+ case "04":
1749
+ $timezone = "Europe/Lisbon";
1750
+ break;
1751
+ case "05":
1752
+ $timezone = "Europe/Lisbon";
1753
+ break;
1754
+ case "06":
1755
+ $timezone = "Europe/Lisbon";
1756
+ break;
1757
+ case "07":
1758
+ $timezone = "Europe/Lisbon";
1759
+ break;
1760
+ case "08":
1761
+ $timezone = "Europe/Lisbon";
1762
+ break;
1763
+ case "09":
1764
+ $timezone = "Europe/Lisbon";
1765
+ break;
1766
+ case "10":
1767
+ $timezone = "Atlantic/Madeira";
1768
+ break;
1769
+ case "11":
1770
+ $timezone = "Europe/Lisbon";
1771
+ break;
1772
+ case "13":
1773
+ $timezone = "Europe/Lisbon";
1774
+ break;
1775
+ case "14":
1776
+ $timezone = "Europe/Lisbon";
1777
+ break;
1778
+ case "16":
1779
+ $timezone = "Europe/Lisbon";
1780
+ break;
1781
+ case "17":
1782
+ $timezone = "Europe/Lisbon";
1783
+ break;
1784
+ case "18":
1785
+ $timezone = "Europe/Lisbon";
1786
+ break;
1787
+ case "19":
1788
+ $timezone = "Europe/Lisbon";
1789
+ break;
1790
+ case "20":
1791
+ $timezone = "Europe/Lisbon";
1792
+ break;
1793
+ case "21":
1794
+ $timezone = "Europe/Lisbon";
1795
+ break;
1796
+ case "22":
1797
+ $timezone = "Europe/Lisbon";
1798
+ break;
1799
+ case "23":
1800
+ $timezone = "Atlantic/Azores";
1801
+ break;
1802
+ }
1803
+ break;
1804
+ case "RU":
1805
+ switch ($region) {
1806
+ case "01":
1807
+ $timezone = "Europe/Volgograd";
1808
+ break;
1809
+ case "02":
1810
+ $timezone = "Asia/Irkutsk";
1811
+ break;
1812
+ case "03":
1813
+ $timezone = "Asia/Novokuznetsk";
1814
+ break;
1815
+ case "04":
1816
+ $timezone = "Asia/Novosibirsk";
1817
+ break;
1818
+ case "05":
1819
+ $timezone = "Asia/Vladivostok";
1820
+ break;
1821
+ case "06":
1822
+ $timezone = "Europe/Moscow";
1823
+ break;
1824
+ case "07":
1825
+ $timezone = "Europe/Volgograd";
1826
+ break;
1827
+ case "08":
1828
+ $timezone = "Europe/Samara";
1829
+ break;
1830
+ case "09":
1831
+ $timezone = "Europe/Moscow";
1832
+ break;
1833
+ case "10":
1834
+ $timezone = "Europe/Moscow";
1835
+ break;
1836
+ case "11":
1837
+ $timezone = "Asia/Irkutsk";
1838
+ break;
1839
+ case "12":
1840
+ $timezone = "Europe/Volgograd";
1841
+ break;
1842
+ case "13":
1843
+ $timezone = "Asia/Yekaterinburg";
1844
+ break;
1845
+ case "14":
1846
+ $timezone = "Asia/Irkutsk";
1847
+ break;
1848
+ case "15":
1849
+ $timezone = "Asia/Anadyr";
1850
+ break;
1851
+ case "16":
1852
+ $timezone = "Europe/Samara";
1853
+ break;
1854
+ case "17":
1855
+ $timezone = "Europe/Volgograd";
1856
+ break;
1857
+ case "18":
1858
+ $timezone = "Asia/Krasnoyarsk";
1859
+ break;
1860
+ case "20":
1861
+ $timezone = "Asia/Irkutsk";
1862
+ break;
1863
+ case "21":
1864
+ $timezone = "Europe/Moscow";
1865
+ break;
1866
+ case "22":
1867
+ $timezone = "Europe/Volgograd";
1868
+ break;
1869
+ case "23":
1870
+ $timezone = "Europe/Kaliningrad";
1871
+ break;
1872
+ case "24":
1873
+ $timezone = "Europe/Volgograd";
1874
+ break;
1875
+ case "25":
1876
+ $timezone = "Europe/Moscow";
1877
+ break;
1878
+ case "26":
1879
+ $timezone = "Asia/Kamchatka";
1880
+ break;
1881
+ case "27":
1882
+ $timezone = "Europe/Volgograd";
1883
+ break;
1884
+ case "28":
1885
+ $timezone = "Europe/Moscow";
1886
+ break;
1887
+ case "29":
1888
+ $timezone = "Asia/Novokuznetsk";
1889
+ break;
1890
+ case "30":
1891
+ $timezone = "Asia/Vladivostok";
1892
+ break;
1893
+ case "31":
1894
+ $timezone = "Asia/Krasnoyarsk";
1895
+ break;
1896
+ case "32":
1897
+ $timezone = "Asia/Omsk";
1898
+ break;
1899
+ case "33":
1900
+ $timezone = "Asia/Yekaterinburg";
1901
+ break;
1902
+ case "34":
1903
+ $timezone = "Asia/Yekaterinburg";
1904
+ break;
1905
+ case "35":
1906
+ $timezone = "Asia/Yekaterinburg";
1907
+ break;
1908
+ case "36":
1909
+ $timezone = "Asia/Anadyr";
1910
+ break;
1911
+ case "37":
1912
+ $timezone = "Europe/Moscow";
1913
+ break;
1914
+ case "38":
1915
+ $timezone = "Europe/Volgograd";
1916
+ break;
1917
+ case "39":
1918
+ $timezone = "Asia/Krasnoyarsk";
1919
+ break;
1920
+ case "40":
1921
+ $timezone = "Asia/Yekaterinburg";
1922
+ break;
1923
+ case "41":
1924
+ $timezone = "Europe/Moscow";
1925
+ break;
1926
+ case "42":
1927
+ $timezone = "Europe/Moscow";
1928
+ break;
1929
+ case "43":
1930
+ $timezone = "Europe/Moscow";
1931
+ break;
1932
+ case "44":
1933
+ $timezone = "Asia/Magadan";
1934
+ break;
1935
+ case "45":
1936
+ $timezone = "Europe/Samara";
1937
+ break;
1938
+ case "46":
1939
+ $timezone = "Europe/Samara";
1940
+ break;
1941
+ case "47":
1942
+ $timezone = "Europe/Moscow";
1943
+ break;
1944
+ case "48":
1945
+ $timezone = "Europe/Moscow";
1946
+ break;
1947
+ case "49":
1948
+ $timezone = "Europe/Moscow";
1949
+ break;
1950
+ case "50":
1951
+ $timezone = "Asia/Yekaterinburg";
1952
+ break;
1953
+ case "51":
1954
+ $timezone = "Europe/Moscow";
1955
+ break;
1956
+ case "52":
1957
+ $timezone = "Europe/Moscow";
1958
+ break;
1959
+ case "53":
1960
+ $timezone = "Asia/Novosibirsk";
1961
+ break;
1962
+ case "54":
1963
+ $timezone = "Asia/Omsk";
1964
+ break;
1965
+ case "55":
1966
+ $timezone = "Europe/Samara";
1967
+ break;
1968
+ case "56":
1969
+ $timezone = "Europe/Moscow";
1970
+ break;
1971
+ case "57":
1972
+ $timezone = "Europe/Samara";
1973
+ break;
1974
+ case "58":
1975
+ $timezone = "Asia/Yekaterinburg";
1976
+ break;
1977
+ case "59":
1978
+ $timezone = "Asia/Vladivostok";
1979
+ break;
1980
+ case "60":
1981
+ $timezone = "Europe/Kaliningrad";
1982
+ break;
1983
+ case "61":
1984
+ $timezone = "Europe/Volgograd";
1985
+ break;
1986
+ case "62":
1987
+ $timezone = "Europe/Moscow";
1988
+ break;
1989
+ case "63":
1990
+ $timezone = "Asia/Yakutsk";
1991
+ break;
1992
+ case "64":
1993
+ $timezone = "Asia/Sakhalin";
1994
+ break;
1995
+ case "65":
1996
+ $timezone = "Europe/Samara";
1997
+ break;
1998
+ case "66":
1999
+ $timezone = "Europe/Moscow";
2000
+ break;
2001
+ case "67":
2002
+ $timezone = "Europe/Samara";
2003
+ break;
2004
+ case "68":
2005
+ $timezone = "Europe/Volgograd";
2006
+ break;
2007
+ case "69":
2008
+ $timezone = "Europe/Moscow";
2009
+ break;
2010
+ case "70":
2011
+ $timezone = "Europe/Volgograd";
2012
+ break;
2013
+ case "71":
2014
+ $timezone = "Asia/Yekaterinburg";
2015
+ break;
2016
+ case "72":
2017
+ $timezone = "Europe/Moscow";
2018
+ break;
2019
+ case "73":
2020
+ $timezone = "Europe/Samara";
2021
+ break;
2022
+ case "74":
2023
+ $timezone = "Asia/Krasnoyarsk";
2024
+ break;
2025
+ case "75":
2026
+ $timezone = "Asia/Novosibirsk";
2027
+ break;
2028
+ case "76":
2029
+ $timezone = "Europe/Moscow";
2030
+ break;
2031
+ case "77":
2032
+ $timezone = "Europe/Moscow";
2033
+ break;
2034
+ case "78":
2035
+ $timezone = "Asia/Yekaterinburg";
2036
+ break;
2037
+ case "79":
2038
+ $timezone = "Asia/Irkutsk";
2039
+ break;
2040
+ case "80":
2041
+ $timezone = "Asia/Yekaterinburg";
2042
+ break;
2043
+ case "81":
2044
+ $timezone = "Europe/Samara";
2045
+ break;
2046
+ case "82":
2047
+ $timezone = "Asia/Irkutsk";
2048
+ break;
2049
+ case "83":
2050
+ $timezone = "Europe/Moscow";
2051
+ break;
2052
+ case "84":
2053
+ $timezone = "Europe/Volgograd";
2054
+ break;
2055
+ case "85":
2056
+ $timezone = "Europe/Moscow";
2057
+ break;
2058
+ case "86":
2059
+ $timezone = "Europe/Moscow";
2060
+ break;
2061
+ case "87":
2062
+ $timezone = "Asia/Novosibirsk";
2063
+ break;
2064
+ case "88":
2065
+ $timezone = "Europe/Moscow";
2066
+ break;
2067
+ case "89":
2068
+ $timezone = "Asia/Vladivostok";
2069
+ break;
2070
+ case "90":
2071
+ $timezone = "Asia/Yekaterinburg";
2072
+ break;
2073
+ case "91":
2074
+ $timezone = "Asia/Krasnoyarsk";
2075
+ break;
2076
+ case "92":
2077
+ $timezone = "Asia/Anadyr";
2078
+ break;
2079
+ case "93":
2080
+ $timezone = "Asia/Irkutsk";
2081
+ break;
2082
+ }
2083
+ break;
2084
+ case "UA":
2085
+ switch ($region) {
2086
+ case "01":
2087
+ $timezone = "Europe/Kiev";
2088
+ break;
2089
+ case "02":
2090
+ $timezone = "Europe/Kiev";
2091
+ break;
2092
+ case "03":
2093
+ $timezone = "Europe/Uzhgorod";
2094
+ break;
2095
+ case "04":
2096
+ $timezone = "Europe/Zaporozhye";
2097
+ break;
2098
+ case "05":
2099
+ $timezone = "Europe/Zaporozhye";
2100
+ break;
2101
+ case "06":
2102
+ $timezone = "Europe/Uzhgorod";
2103
+ break;
2104
+ case "07":
2105
+ $timezone = "Europe/Zaporozhye";
2106
+ break;
2107
+ case "08":
2108
+ $timezone = "Europe/Simferopol";
2109
+ break;
2110
+ case "09":
2111
+ $timezone = "Europe/Kiev";
2112
+ break;
2113
+ case "10":
2114
+ $timezone = "Europe/Zaporozhye";
2115
+ break;
2116
+ case "11":
2117
+ $timezone = "Europe/Simferopol";
2118
+ break;
2119
+ case "12":
2120
+ $timezone = "Europe/Kiev";
2121
+ break;
2122
+ case "13":
2123
+ $timezone = "Europe/Kiev";
2124
+ break;
2125
+ case "14":
2126
+ $timezone = "Europe/Zaporozhye";
2127
+ break;
2128
+ case "15":
2129
+ $timezone = "Europe/Uzhgorod";
2130
+ break;
2131
+ case "16":
2132
+ $timezone = "Europe/Zaporozhye";
2133
+ break;
2134
+ case "17":
2135
+ $timezone = "Europe/Simferopol";
2136
+ break;
2137
+ case "18":
2138
+ $timezone = "Europe/Zaporozhye";
2139
+ break;
2140
+ case "19":
2141
+ $timezone = "Europe/Kiev";
2142
+ break;
2143
+ case "20":
2144
+ $timezone = "Europe/Simferopol";
2145
+ break;
2146
+ case "21":
2147
+ $timezone = "Europe/Kiev";
2148
+ break;
2149
+ case "22":
2150
+ $timezone = "Europe/Uzhgorod";
2151
+ break;
2152
+ case "23":
2153
+ $timezone = "Europe/Kiev";
2154
+ break;
2155
+ case "24":
2156
+ $timezone = "Europe/Uzhgorod";
2157
+ break;
2158
+ case "25":
2159
+ $timezone = "Europe/Uzhgorod";
2160
+ break;
2161
+ case "26":
2162
+ $timezone = "Europe/Zaporozhye";
2163
+ break;
2164
+ case "27":
2165
+ $timezone = "Europe/Kiev";
2166
+ break;
2167
+ }
2168
+ break;
2169
+ case "UZ":
2170
+ switch ($region) {
2171
+ case "01":
2172
+ $timezone = "Asia/Tashkent";
2173
+ break;
2174
+ case "02":
2175
+ $timezone = "Asia/Samarkand";
2176
+ break;
2177
+ case "03":
2178
+ $timezone = "Asia/Tashkent";
2179
+ break;
2180
+ case "05":
2181
+ $timezone = "Asia/Samarkand";
2182
+ break;
2183
+ case "06":
2184
+ $timezone = "Asia/Tashkent";
2185
+ break;
2186
+ case "07":
2187
+ $timezone = "Asia/Samarkand";
2188
+ break;
2189
+ case "08":
2190
+ $timezone = "Asia/Samarkand";
2191
+ break;
2192
+ case "09":
2193
+ $timezone = "Asia/Samarkand";
2194
+ break;
2195
+ case "10":
2196
+ $timezone = "Asia/Samarkand";
2197
+ break;
2198
+ case "12":
2199
+ $timezone = "Asia/Samarkand";
2200
+ break;
2201
+ case "13":
2202
+ $timezone = "Asia/Tashkent";
2203
+ break;
2204
+ case "14":
2205
+ $timezone = "Asia/Tashkent";
2206
+ break;
2207
+ }
2208
+ break;
2209
+ case "TL":
2210
+ $timezone = "Asia/Dili";
2211
+ break;
2212
+ case "PF":
2213
+ $timezone = "Pacific/Marquesas";
2214
+ break;
2215
+ case "SX":
2216
+ $timezone = "America/Curacao";
2217
+ break;
2218
+ case "BQ":
2219
+ $timezone = "America/Curacao";
2220
+ break;
2221
+ case "CW":
2222
+ $timezone = "America/Curacao";
2223
+ break;
2224
+ case "AQ":
2225
+ $timezone = "Antarctica/South_Pole";
2226
+ break;
2227
+ case "BV":
2228
+ $timezone = "Antarctica/Syowa";
2229
+ break;
2230
+ case "FM":
2231
+ $timezone = "Pacific/Pohnpei";
2232
+ break;
2233
+ }
2234
+ return $timezone;
2235
+ }
vendor/geoip/geoip/timezone/make_time_zone_php_code.pl ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/perl
2
+
3
+ use strict;
4
+
5
+ my $old_country;
6
+ my $old_region;
7
+
8
+ # Obtain timezone.txt from http://www.maxmind.com/timezone.txt
9
+ open(FILE,"timezone.txt");
10
+ my $str = <FILE>;
11
+ print "<?php\n";
12
+ print "function get_time_zone(\$country,\$region) {\n";
13
+ print " switch (\$country) {\n";
14
+
15
+ while ($str = <FILE>) {
16
+ $str =~ s!\s*$!!;
17
+ my ($country,$region,$timezone) = split("\t",$str);
18
+ #print $country . "," . $region . "," . $timezone . "\n";
19
+ if ($country ne $old_country) {
20
+ if ($old_region ne "") {
21
+ print " }\n";
22
+ print " break;\n";
23
+ }
24
+ print "case " . qq(") . $country . qq(") . ":\n";
25
+ if ($region ne "") {
26
+ print " switch (\$region) {\n";
27
+ }
28
+ }
29
+ if ($region ne "") {
30
+ print " case " . qq(") . $region . qq(") . ":\n ";
31
+ }
32
+ print qq( \$timezone = ") . $timezone . qq(") . ";\n";
33
+ if ($region ne "") {
34
+ print " break;\n";
35
+ } else {
36
+ print " break;\n";
37
+ }
38
+ $old_country = $country;
39
+ $old_region = $region;
40
+ }
41
+ print " }\n";
42
+ print " return \$timezone;\n";
43
+
44
+ print "}\n";
45
+
46
+ print "?>\n";
47
+
48
+ close(FILE);
vendor/geoip/geoip/timezone/test_timezone.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ #!/usr/bin/php -q
2
+ <?php
3
+ require("timezone.php");
4
+ print get_time_zone("US", "WV");
5
+ ?>
vendor/geoip/geoip/timezone/timezone.php ADDED
@@ -0,0 +1,2274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ function get_time_zone($country,$region) {
3
+ switch ($country) {
4
+ case "US":
5
+ switch ($region) {
6
+ case "AL":
7
+ $timezone = "America/Chicago";
8
+ break;
9
+ case "AK":
10
+ $timezone = "America/Anchorage";
11
+ break;
12
+ case "AZ":
13
+ $timezone = "America/Phoenix";
14
+ break;
15
+ case "AR":
16
+ $timezone = "America/Chicago";
17
+ break;
18
+ case "CA":
19
+ $timezone = "America/Los_Angeles";
20
+ break;
21
+ case "CO":
22
+ $timezone = "America/Denver";
23
+ break;
24
+ case "CT":
25
+ $timezone = "America/New_York";
26
+ break;
27
+ case "DE":
28
+ $timezone = "America/New_York";
29
+ break;
30
+ case "DC":
31
+ $timezone = "America/New_York";
32
+ break;
33
+ case "FL":
34
+ $timezone = "America/New_York";
35
+ break;
36
+ case "GA":
37
+ $timezone = "America/New_York";
38
+ break;
39
+ case "HI":
40
+ $timezone = "Pacific/Honolulu";
41
+ break;
42
+ case "ID":
43
+ $timezone = "America/Denver";
44
+ break;
45
+ case "IL":
46
+ $timezone = "America/Chicago";
47
+ break;
48
+ case "IN":
49
+ $timezone = "America/Indianapolis";
50
+ break;
51
+ case "IA":
52
+ $timezone = "America/Chicago";
53
+ break;
54
+ case "KS":
55
+ $timezone = "America/Chicago";
56
+ break;
57
+ case "KY":
58
+ $timezone = "America/New_York";
59
+ break;
60
+ case "LA":
61
+ $timezone = "America/Chicago";
62
+ break;
63
+ case "ME":
64
+ $timezone = "America/New_York";
65
+ break;
66
+ case "MD":
67
+ $timezone = "America/New_York";
68
+ break;
69
+ case "MA":
70
+ $timezone = "America/New_York";
71
+ break;
72
+ case "MI":
73
+ $timezone = "America/New_York";
74
+ break;
75
+ case "MN":
76
+ $timezone = "America/Chicago";
77
+ break;
78
+ case "MS":
79
+ $timezone = "America/Chicago";
80
+ break;
81
+ case "MO":
82
+ $timezone = "America/Chicago";
83
+ break;
84
+ case "MT":
85
+ $timezone = "America/Denver";
86
+ break;
87
+ case "NE":
88
+ $timezone = "America/Chicago";
89
+ break;
90
+ case "NV":
91
+ $timezone = "America/Los_Angeles";
92
+ break;
93
+ case "NH":
94
+ $timezone = "America/New_York";
95
+ break;
96
+ case "NJ":
97
+ $timezone = "America/New_York";
98
+ break;
99
+ case "NM":
100
+ $timezone = "America/Denver";
101
+ break;
102
+ case "NY":
103
+ $timezone = "America/New_York";
104
+ break;
105
+ case "NC":
106
+ $timezone = "America/New_York";
107
+ break;
108
+ case "ND":
109
+ $timezone = "America/Chicago";
110
+ break;
111
+ case "OH":
112
+ $timezone = "America/New_York";
113
+ break;
114
+ case "OK":
115
+ $timezone = "America/Chicago";
116
+ break;
117
+ case "OR":
118
+ $timezone = "America/Los_Angeles";
119
+ break;
120
+ case "PA":
121
+ $timezone = "America/New_York";
122
+ break;
123
+ case "RI":
124
+ $timezone = "America/New_York";
125
+ break;
126
+ case "SC":
127
+ $timezone = "America/New_York";
128
+ break;
129
+ case "SD":
130
+ $timezone = "America/Chicago";
131
+ break;
132
+ case "TN":
133
+ $timezone = "America/Chicago";
134
+ break;
135
+ case "TX":
136
+ $timezone = "America/Chicago";
137
+ break;
138
+ case "UT":
139
+ $timezone = "America/Denver";
140
+ break;
141
+ case "VT":
142
+ $timezone = "America/New_York";
143
+ break;
144
+ case "VA":
145
+ $timezone = "America/New_York";
146
+ break;
147
+ case "WA":
148
+ $timezone = "America/Los_Angeles";
149
+ break;
150
+ case "WV":
151
+ $timezone = "America/New_York";
152
+ break;
153
+ case "WI":
154
+ $timezone = "America/Chicago";
155
+ break;
156
+ case "WY":
157
+ $timezone = "America/Denver";
158
+ break;
159
+ }
160
+ break;
161
+ case "CA":
162
+ switch ($region) {
163
+ case "AB":
164
+ $timezone = "America/Edmonton";
165
+ break;
166
+ case "BC":
167
+ $timezone = "America/Vancouver";
168
+ break;
169
+ case "MB":
170
+ $timezone = "America/Winnipeg";
171
+ break;
172
+ case "NB":
173
+ $timezone = "America/Moncton";
174
+ break;
175
+ case "NL":
176
+ $timezone = "America/St_Johns";
177
+ break;
178
+ case "NT":
179
+ $timezone = "America/Yellowknife";
180
+ break;
181
+ case "NS":
182
+ $timezone = "America/Halifax";
183
+ break;
184
+ case "NU":
185
+ $timezone = "America/Iqaluit";
186
+ break;
187
+ case "ON":
188
+ $timezone = "America/Montreal";
189
+ break;
190
+ case "PE":
191
+ $timezone = "America/Halifax";
192
+ break;
193
+ case "QC":
194
+ $timezone = "America/Moncton";
195
+ break;
196
+ case "SK":
197
+ $timezone = "America/Regina";
198
+ break;
199
+ case "YT":
200
+ $timezone = "America/Whitehorse";
201
+ break;
202
+ }
203
+ break;
204
+ case "AU":
205
+ switch ($region) {
206
+ case "01":
207
+ $timezone = "Australia/Sydney";
208
+ break;
209
+ case "02":
210
+ $timezone = "Australia/Sydney";
211
+ break;
212
+ case "03":
213
+ $timezone = "Australia/Darwin";
214
+ break;
215
+ case "04":
216
+ $timezone = "Australia/Brisbane";
217
+ break;
218
+ case "05":
219
+ $timezone = "Australia/Adelaide";
220
+ break;
221
+ case "06":
222
+ $timezone = "Australia/Hobart";
223
+ break;
224
+ case "07":
225
+ $timezone = "Australia/Melbourne";
226
+ break;
227
+ case "08":
228
+ $timezone = "Australia/Perth";
229
+ break;
230
+ }
231
+ break;
232
+ case "AS":
233
+ $timezone = "Pacific/Pago_Pago";
234
+ break;
235
+ case "CI":
236
+ $timezone = "Africa/Abidjan";
237
+ break;
238
+ case "GH":
239
+ $timezone = "Africa/Accra";
240
+ break;
241
+ case "DZ":
242
+ $timezone = "Africa/Algiers";
243
+ break;
244
+ case "ER":
245
+ $timezone = "Africa/Asmara";
246
+ break;
247
+ case "ML":
248
+ $timezone = "Africa/Bamako";
249
+ break;
250
+ case "CF":
251
+ $timezone = "Africa/Bangui";
252
+ break;
253
+ case "GM":
254
+ $timezone = "Africa/Banjul";
255
+ break;
256
+ case "GW":
257
+ $timezone = "Africa/Bissau";
258
+ break;
259
+ case "CG":
260
+ $timezone = "Africa/Brazzaville";
261
+ break;
262
+ case "BI":
263
+ $timezone = "Africa/Bujumbura";
264
+ break;
265
+ case "EG":
266
+ $timezone = "Africa/Cairo";
267
+ break;
268
+ case "MA":
269
+ $timezone = "Africa/Casablanca";
270
+ break;
271
+ case "GN":
272
+ $timezone = "Africa/Conakry";
273
+ break;
274
+ case "SN":
275
+ $timezone = "Africa/Dakar";
276
+ break;
277
+ case "DJ":
278
+ $timezone = "Africa/Djibouti";
279
+ break;
280
+ case "SL":
281
+ $timezone = "Africa/Freetown";
282
+ break;
283
+ case "BW":
284
+ $timezone = "Africa/Gaborone";
285
+ break;
286
+ case "ZW":
287
+ $timezone = "Africa/Harare";
288
+ break;
289
+ case "ZA":
290
+ $timezone = "Africa/Johannesburg";
291
+ break;
292
+ case "UG":
293
+ $timezone = "Africa/Kampala";
294
+ break;
295
+ case "UM":
296
+ $timezone = "Pacific/Wake";
297
+ break;
298
+ case "SD":
299
+ $timezone = "Africa/Khartoum";
300
+ break;
301
+ case "SS":
302
+ $timezone = "Africa/Juba";
303
+ break;
304
+ case "RW":
305
+ $timezone = "Africa/Kigali";
306
+ break;
307
+ case "NG":
308
+ $timezone = "Africa/Lagos";
309
+ break;
310
+ case "GA":
311
+ $timezone = "Africa/Libreville";
312
+ break;
313
+ case "TG":
314
+ $timezone = "Africa/Lome";
315
+ break;
316
+ case "AO":
317
+ $timezone = "Africa/Luanda";
318
+ break;
319
+ case "AQ":
320
+ $timezone = "Antarctica/South_Pole";
321
+ break;
322
+ case "ZM":
323
+ $timezone = "Africa/Lusaka";
324
+ break;
325
+ case "GQ":
326
+ $timezone = "Africa/Malabo";
327
+ break;
328
+ case "MZ":
329
+ $timezone = "Africa/Maputo";
330
+ break;
331
+ case "LS":
332
+ $timezone = "Africa/Maseru";
333
+ break;
334
+ case "SZ":
335
+ $timezone = "Africa/Mbabane";
336
+ break;
337
+ case "SO":
338
+ $timezone = "Africa/Mogadishu";
339
+ break;
340
+ case "LR":
341
+ $timezone = "Africa/Monrovia";
342
+ break;
343
+ case "KE":
344
+ $timezone = "Africa/Nairobi";
345
+ break;
346
+ case "TD":
347
+ $timezone = "Africa/Ndjamena";
348
+ break;
349
+ case "NE":
350
+ $timezone = "Africa/Niamey";
351
+ break;
352
+ case "MR":
353
+ $timezone = "Africa/Nouakchott";
354
+ break;
355
+ case "BF":
356
+ $timezone = "Africa/Ouagadougou";
357
+ break;
358
+ case "ST":
359
+ $timezone = "Africa/Sao_Tome";
360
+ break;
361
+ case "LY":
362
+ $timezone = "Africa/Tripoli";
363
+ break;
364
+ case "TN":
365
+ $timezone = "Africa/Tunis";
366
+ break;
367
+ case "AI":
368
+ $timezone = "America/Anguilla";
369
+ break;
370
+ case "AG":
371
+ $timezone = "America/Antigua";
372
+ break;
373
+ case "AW":
374
+ $timezone = "America/Aruba";
375
+ break;
376
+ case "BB":
377
+ $timezone = "America/Barbados";
378
+ break;
379
+ case "BZ":
380
+ $timezone = "America/Belize";
381
+ break;
382
+ case "CO":
383
+ $timezone = "America/Bogota";
384
+ break;
385
+ case "VE":
386
+ $timezone = "America/Caracas";
387
+ break;
388
+ case "KY":
389
+ $timezone = "America/Cayman";
390
+ break;
391
+ case "CR":
392
+ $timezone = "America/Costa_Rica";
393
+ break;
394
+ case "DM":
395
+ $timezone = "America/Dominica";
396
+ break;
397
+ case "SV":
398
+ $timezone = "America/El_Salvador";
399
+ break;
400
+ case "GD":
401
+ $timezone = "America/Grenada";
402
+ break;
403
+ case "FR":
404
+ $timezone = "Europe/Paris";
405
+ break;
406
+ case "GP":
407
+ $timezone = "America/Guadeloupe";
408
+ break;
409
+ case "GT":
410
+ $timezone = "America/Guatemala";
411
+ break;
412
+ case "GY":
413
+ $timezone = "America/Guyana";
414
+ break;
415
+ case "CU":
416
+ $timezone = "America/Havana";
417
+ break;
418
+ case "JM":
419
+ $timezone = "America/Jamaica";
420
+ break;
421
+ case "BO":
422
+ $timezone = "America/La_Paz";
423
+ break;
424
+ case "PE":
425
+ $timezone = "America/Lima";
426
+ break;
427
+ case "NI":
428
+ $timezone = "America/Managua";
429
+ break;
430
+ case "MQ":
431
+ $timezone = "America/Martinique";
432
+ break;
433
+ case "UY":
434
+ $timezone = "America/Montevideo";
435
+ break;
436
+ case "MS":
437
+ $timezone = "America/Montserrat";
438
+ break;
439
+ case "BS":
440
+ $timezone = "America/Nassau";
441
+ break;
442
+ case "PA":
443
+ $timezone = "America/Panama";
444
+ break;
445
+ case "SR":
446
+ $timezone = "America/Paramaribo";
447
+ break;
448
+ case "PR":
449
+ $timezone = "America/Puerto_Rico";
450
+ break;
451
+ case "KN":
452
+ $timezone = "America/St_Kitts";
453
+ break;
454
+ case "LC":
455
+ $timezone = "America/St_Lucia";
456
+ break;
457
+ case "VC":
458
+ $timezone = "America/St_Vincent";
459
+ break;
460
+ case "HN":
461
+ $timezone = "America/Tegucigalpa";
462
+ break;
463
+ case "YE":
464
+ $timezone = "Asia/Aden";
465
+ break;
466
+ case "JO":
467
+ $timezone = "Asia/Amman";
468
+ break;
469
+ case "TM":
470
+ $timezone = "Asia/Ashgabat";
471
+ break;
472
+ case "IQ":
473
+ $timezone = "Asia/Baghdad";
474
+ break;
475
+ case "BH":
476
+ $timezone = "Asia/Bahrain";
477
+ break;
478
+ case "AZ":
479
+ $timezone = "Asia/Baku";
480
+ break;
481
+ case "TH":
482
+ $timezone = "Asia/Bangkok";
483
+ break;
484
+ case "LB":
485
+ $timezone = "Asia/Beirut";
486
+ break;
487
+ case "KG":
488
+ $timezone = "Asia/Bishkek";
489
+ break;
490
+ case "BN":
491
+ $timezone = "Asia/Brunei";
492
+ break;
493
+ case "IN":
494
+ $timezone = "Asia/Kolkata";
495
+ break;
496
+ case "MN":
497
+ switch ($region) {
498
+ case "06":
499
+ $timezone = "Asia/Choibalsan";
500
+ break;
501
+ case "11":
502
+ $timezone = "Asia/Ulaanbaatar";
503
+ break;
504
+ case "17":
505
+ $timezone = "Asia/Choibalsan";
506
+ break;
507
+ case "19":
508
+ $timezone = "Asia/Hovd";
509
+ break;
510
+ case "20":
511
+ $timezone = "Asia/Ulaanbaatar";
512
+ break;
513
+ case "21":
514
+ $timezone = "Asia/Ulaanbaatar";
515
+ break;
516
+ case "25":
517
+ $timezone = "Asia/Ulaanbaatar";
518
+ break;
519
+ }
520
+ break;
521
+ case "MO":
522
+ $timezone = "Asia/Macau";
523
+ break;
524
+ case "LK":
525
+ $timezone = "Asia/Colombo";
526
+ break;
527
+ case "BD":
528
+ $timezone = "Asia/Dhaka";
529
+ break;
530
+ case "AE":
531
+ $timezone = "Asia/Dubai";
532
+ break;
533
+ case "TJ":
534
+ $timezone = "Asia/Dushanbe";
535
+ break;
536
+ case "HK":
537
+ $timezone = "Asia/Hong_Kong";
538
+ break;
539
+ case "TR":
540
+ $timezone = "Europe/Istanbul";
541
+ break;
542
+ case "IL":
543
+ $timezone = "Asia/Jerusalem";
544
+ break;
545
+ case "AF":
546
+ $timezone = "Asia/Kabul";
547
+ break;
548
+ case "PK":
549
+ $timezone = "Asia/Karachi";
550
+ break;
551
+ case "NP":
552
+ $timezone = "Asia/Kathmandu";
553
+ break;
554
+ case "KW":
555
+ $timezone = "Asia/Kuwait";
556
+ break;
557
+ case "MO":
558
+ $timezone = "Asia/Macao";
559
+ break;
560
+ case "PH":
561
+ $timezone = "Asia/Manila";
562
+ break;
563
+ case "OM":
564
+ $timezone = "Asia/Muscat";
565
+ break;
566
+ case "CY":
567
+ $timezone = "Asia/Nicosia";
568
+ break;
569
+ case "KP":
570
+ $timezone = "Asia/Pyongyang";
571
+ break;
572
+ case "QA":
573
+ $timezone = "Asia/Qatar";
574
+ break;
575
+ case "MM":
576
+ $timezone = "Asia/Rangoon";
577
+ break;
578
+ case "SA":
579
+ $timezone = "Asia/Riyadh";
580
+ break;
581
+ case "KR":
582
+ $timezone = "Asia/Seoul";
583
+ break;
584
+ case "SG":
585
+ $timezone = "Asia/Singapore";
586
+ break;
587
+ case "TW":
588
+ $timezone = "Asia/Taipei";
589
+ break;
590
+ case "GE":
591
+ $timezone = "Asia/Tbilisi";
592
+ break;
593
+ case "BT":
594
+ $timezone = "Asia/Thimphu";
595
+ break;
596
+ case "BV":
597
+ $timezone = "Antarctica/Syowa";
598
+ break;
599
+ case "JP":
600
+ $timezone = "Asia/Tokyo";
601
+ break;
602
+ case "LA":
603
+ $timezone = "Asia/Vientiane";
604
+ break;
605
+ case "AM":
606
+ $timezone = "Asia/Yerevan";
607
+ break;
608
+ case "BM":
609
+ $timezone = "Atlantic/Bermuda";
610
+ break;
611
+ case "CV":
612
+ $timezone = "Atlantic/Cape_Verde";
613
+ break;
614
+ case "FO":
615
+ $timezone = "Atlantic/Faroe";
616
+ break;
617
+ case "FM":
618
+ $timezone = "Pacific/Pohnpei";
619
+ break;
620
+ case "IS":
621
+ $timezone = "Atlantic/Reykjavik";
622
+ break;
623
+ case "GS":
624
+ $timezone = "Atlantic/South_Georgia";
625
+ break;
626
+ case "SH":
627
+ $timezone = "Atlantic/St_Helena";
628
+ break;
629
+ case "CL":
630
+ $timezone = "Chile/Santiago";
631
+ break;
632
+ case "NL":
633
+ $timezone = "Europe/Amsterdam";
634
+ break;
635
+ case "AD":
636
+ $timezone = "Europe/Andorra";
637
+ break;
638
+ case "GR":
639
+ $timezone = "Europe/Athens";
640
+ break;
641
+ case "YU":
642
+ $timezone = "Europe/Belgrade";
643
+ break;
644
+ case "DE":
645
+ $timezone = "Europe/Berlin";
646
+ break;
647
+ case "SK":
648
+ $timezone = "Europe/Bratislava";
649
+ break;
650
+ case "BE":
651
+ $timezone = "Europe/Brussels";
652
+ break;
653
+ case "RO":
654
+ $timezone = "Europe/Bucharest";
655
+ break;
656
+ case "HU":
657
+ $timezone = "Europe/Budapest";
658
+ break;
659
+ case "DK":
660
+ $timezone = "Europe/Copenhagen";
661
+ break;
662
+ case "IE":
663
+ $timezone = "Europe/Dublin";
664
+ break;
665
+ case "GI":
666
+ $timezone = "Europe/Gibraltar";
667
+ break;
668
+ case "FI":
669
+ $timezone = "Europe/Helsinki";
670
+ break;
671
+ case "SI":
672
+ $timezone = "Europe/Ljubljana";
673
+ break;
674
+ case "GB":
675
+ $timezone = "Europe/London";
676
+ break;
677
+ case "LU":
678
+ $timezone = "Europe/Luxembourg";
679
+ break;
680
+ case "MT":
681
+ $timezone = "Europe/Malta";
682
+ break;
683
+ case "BY":
684
+ $timezone = "Europe/Minsk";
685
+ break;
686
+ case "MC":
687
+ $timezone = "Europe/Monaco";
688
+ break;
689
+ case "NO":
690
+ $timezone = "Europe/Oslo";
691
+ break;
692
+ case "CZ":
693
+ $timezone = "Europe/Prague";
694
+ break;
695
+ case "LV":
696
+ $timezone = "Europe/Riga";
697
+ break;
698
+ case "IT":
699
+ $timezone = "Europe/Rome";
700
+ break;
701
+ case "SM":
702
+ $timezone = "Europe/San_Marino";
703
+ break;
704
+ case "BA":
705
+ $timezone = "Europe/Sarajevo";
706
+ break;
707
+ case "MK":
708
+ $timezone = "Europe/Skopje";
709
+ break;
710
+ case "BG":
711
+ $timezone = "Europe/Sofia";
712
+ break;
713
+ case "SE":
714
+ $timezone = "Europe/Stockholm";
715
+ break;
716
+ case "EE":
717
+ $timezone = "Europe/Tallinn";
718
+ break;
719
+ case "AL":
720
+ $timezone = "Europe/Tirane";
721
+ break;
722
+ case "LI":
723
+ $timezone = "Europe/Vaduz";
724
+ break;
725
+ case "VA":
726
+ $timezone = "Europe/Vatican";
727
+ break;
728
+ case "AT":
729
+ $timezone = "Europe/Vienna";
730
+ break;
731
+ case "LT":
732
+ $timezone = "Europe/Vilnius";
733
+ break;
734
+ case "PL":
735
+ $timezone = "Europe/Warsaw";
736
+ break;
737
+ case "HR":
738
+ $timezone = "Europe/Zagreb";
739
+ break;
740
+ case "IR":
741
+ $timezone = "Asia/Tehran";
742
+ break;
743
+ case "MG":
744
+ $timezone = "Indian/Antananarivo";
745
+ break;
746
+ case "CX":
747
+ $timezone = "Indian/Christmas";
748
+ break;
749
+ case "CC":
750
+ $timezone = "Indian/Cocos";
751
+ break;
752
+ case "KM":
753
+ $timezone = "Indian/Comoro";
754
+ break;
755
+ case "MV":
756
+ $timezone = "Indian/Maldives";
757
+ break;
758
+ case "MU":
759
+ $timezone = "Indian/Mauritius";
760
+ break;
761
+ case "YT":
762
+ $timezone = "Indian/Mayotte";
763
+ break;
764
+ case "RE":
765
+ $timezone = "Indian/Reunion";
766
+ break;
767
+ case "FJ":
768
+ $timezone = "Pacific/Fiji";
769
+ break;
770
+ case "TV":
771
+ $timezone = "Pacific/Funafuti";
772
+ break;
773
+ case "GU":
774
+ $timezone = "Pacific/Guam";
775
+ break;
776
+ case "NR":
777
+ $timezone = "Pacific/Nauru";
778
+ break;
779
+ case "NU":
780
+ $timezone = "Pacific/Niue";
781
+ break;
782
+ case "NF":
783
+ $timezone = "Pacific/Norfolk";
784
+ break;
785
+ case "PW":
786
+ $timezone = "Pacific/Palau";
787
+ break;
788
+ case "PN":
789
+ $timezone = "Pacific/Pitcairn";
790
+ break;
791
+ case "CK":
792
+ $timezone = "Pacific/Rarotonga";
793
+ break;
794
+ case "WS":
795
+ $timezone = "Pacific/Apia";
796
+ break;
797
+ case "KI":
798
+ $timezone = "Pacific/Tarawa";
799
+ break;
800
+ case "TO":
801
+ $timezone = "Pacific/Tongatapu";
802
+ break;
803
+ case "WF":
804
+ $timezone = "Pacific/Wallis";
805
+ break;
806
+ case "TZ":
807
+ $timezone = "Africa/Dar_es_Salaam";
808
+ break;
809
+ case "VN":
810
+ $timezone = "Asia/Ho_Chi_Minh";
811
+ break;
812
+ case "KH":
813
+ $timezone = "Asia/Phnom_Penh";
814
+ break;
815
+ case "CM":
816
+ $timezone = "Africa/Douala";
817
+ break;
818
+ case "DO":
819
+ $timezone = "America/Santo_Domingo";
820
+ break;
821
+ case "TL":
822
+ $timezone = "Asia/Jakarta";
823
+ break;
824
+ case "ET":
825
+ $timezone = "Africa/Addis_Ababa";
826
+ break;
827
+ case "FX":
828
+ $timezone = "Europe/Paris";
829
+ break;
830
+ case "HT":
831
+ $timezone = "America/Port-au-Prince";
832
+ break;
833
+ case "CH":
834
+ $timezone = "Europe/Zurich";
835
+ break;
836
+ case "AN":
837
+ $timezone = "America/Curacao";
838
+ break;
839
+ case "BJ":
840
+ $timezone = "Africa/Porto-Novo";
841
+ break;
842
+ case "EH":
843
+ $timezone = "Africa/El_Aaiun";
844
+ break;
845
+ case "FK":
846
+ $timezone = "Atlantic/Stanley";
847
+ break;
848
+ case "GF":
849
+ $timezone = "America/Cayenne";
850
+ break;
851
+ case "IO":
852
+ $timezone = "Indian/Chagos";
853
+ break;
854
+ case "MD":
855
+ $timezone = "Europe/Chisinau";
856
+ break;
857
+ case "MP":
858
+ $timezone = "Pacific/Saipan";
859
+ break;
860
+ case "MW":
861
+ $timezone = "Africa/Blantyre";
862
+ break;
863
+ case "NA":
864
+ $timezone = "Africa/Windhoek";
865
+ break;
866
+ case "NC":
867
+ $timezone = "Pacific/Noumea";
868
+ break;
869
+ case "PG":
870
+ $timezone = "Pacific/Port_Moresby";
871
+ break;
872
+ case "PM":
873
+ $timezone = "America/Miquelon";
874
+ break;
875
+ case "PS":
876
+ $timezone = "Asia/Gaza";
877
+ break;
878
+ case "PY":
879
+ $timezone = "America/Asuncion";
880
+ break;
881
+ case "SB":
882
+ $timezone = "Pacific/Guadalcanal";
883
+ break;
884
+ case "SC":
885
+ $timezone = "Indian/Mahe";
886
+ break;
887
+ case "SJ":
888
+ $timezone = "Arctic/Longyearbyen";
889
+ break;
890
+ case "SY":
891
+ $timezone = "Asia/Damascus";
892
+ break;
893
+ case "TC":
894
+ $timezone = "America/Grand_Turk";
895
+ break;
896
+ case "TF":
897
+ $timezone = "Indian/Kerguelen";
898
+ break;
899
+ case "TK":
900
+ $timezone = "Pacific/Fakaofo";
901
+ break;
902
+ case "TT":
903
+ $timezone = "America/Port_of_Spain";
904
+ break;
905
+ case "VG":
906
+ $timezone = "America/Tortola";
907
+ break;
908
+ case "VI":
909
+ $timezone = "America/St_Thomas";
910
+ break;
911
+ case "VU":
912
+ $timezone = "Pacific/Efate";
913
+ break;
914
+ case "RS":
915
+ $timezone = "Europe/Belgrade";
916
+ break;
917
+ case "ME":
918
+ $timezone = "Europe/Podgorica";
919
+ break;
920
+ case "AX":
921
+ $timezone = "Europe/Mariehamn";
922
+ break;
923
+ case "GG":
924
+ $timezone = "Europe/Guernsey";
925
+ break;
926
+ case "IM":
927
+ $timezone = "Europe/Isle_of_Man";
928
+ break;
929
+ case "JE":
930
+ $timezone = "Europe/Jersey";
931
+ break;
932
+ case "BL":
933
+ $timezone = "America/St_Barthelemy";
934
+ break;
935
+ case "MF":
936
+ $timezone = "America/Marigot";
937
+ break;
938
+ case "AR":
939
+ switch ($region) {
940
+ case "01":
941
+ $timezone = "America/Argentina/Buenos_Aires";
942
+ break;
943
+ case "02":
944
+ $timezone = "America/Argentina/Catamarca";
945
+ break;
946
+ case "03":
947
+ $timezone = "America/Argentina/Tucuman";
948
+ break;
949
+ case "04":
950
+ $timezone = "America/Argentina/Rio_Gallegos";
951
+ break;
952
+ case "05":
953
+ $timezone = "America/Argentina/Cordoba";
954
+ break;
955
+ case "06":
956
+ $timezone = "America/Argentina/Tucuman";
957
+ break;
958
+ case "07":
959
+ $timezone = "America/Argentina/Buenos_Aires";
960
+ break;
961
+ case "08":
962
+ $timezone = "America/Argentina/Buenos_Aires";
963
+ break;
964
+ case "09":
965
+ $timezone = "America/Argentina/Tucuman";
966
+ break;
967
+ case "10":
968
+ $timezone = "America/Argentina/Jujuy";
969
+ break;
970
+ case "11":
971
+ $timezone = "America/Argentina/San_Luis";
972
+ break;
973
+ case "12":
974
+ $timezone = "America/Argentina/La_Rioja";
975
+ break;
976
+ case "13":
977
+ $timezone = "America/Argentina/Mendoza";
978
+ break;
979
+ case "14":
980
+ $timezone = "America/Argentina/Buenos_Aires";
981
+ break;
982
+ case "15":
983
+ $timezone = "America/Argentina/San_Luis";
984
+ break;
985
+ case "16":
986
+ $timezone = "America/Argentina/Mendoza";
987
+ break;
988
+ case "17":
989
+ $timezone = "America/Argentina/Salta";
990
+ break;
991
+ case "18":
992
+ $timezone = "America/Argentina/San_Juan";
993
+ break;
994
+ case "19":
995
+ $timezone = "America/Argentina/San_Luis";
996
+ break;
997
+ case "20":
998
+ $timezone = "America/Argentina/Rio_Gallegos";
999
+ break;
1000
+ case "21":
1001
+ $timezone = "America/Argentina/Buenos_Aires";
1002
+ break;
1003
+ case "22":
1004
+ $timezone = "America/Argentina/Tucuman";
1005
+ break;
1006
+ case "23":
1007
+ $timezone = "America/Argentina/Ushuaia";
1008
+ break;
1009
+ case "24":
1010
+ $timezone = "America/Argentina/Tucuman";
1011
+ break;
1012
+ }
1013
+ break;
1014
+ case "BR":
1015
+ switch ($region) {
1016
+ case "01":
1017
+ $timezone = "America/Rio_Branco";
1018
+ break;
1019
+ case "02":
1020
+ $timezone = "America/Maceio";
1021
+ break;
1022
+ case "03":
1023
+ $timezone = "America/Belem";
1024
+ break;
1025
+ case "04":
1026
+ $timezone = "America/Manaus";
1027
+ break;
1028
+ case "05":
1029
+ $timezone = "America/Bahia";
1030
+ break;
1031
+ case "06":
1032
+ $timezone = "America/Fortaleza";
1033
+ break;
1034
+ case "07":
1035
+ $timezone = "America/Sao_Paulo";
1036
+ break;
1037
+ case "08":
1038
+ $timezone = "America/Sao_Paulo";
1039
+ break;
1040
+ case "11":
1041
+ $timezone = "America/Campo_Grande";
1042
+ break;
1043
+ case "13":
1044
+ $timezone = "America/Belem";
1045
+ break;
1046
+ case "14":
1047
+ $timezone = "America/Cuiaba";
1048
+ break;
1049
+ case "15":
1050
+ $timezone = "America/Sao_Paulo";
1051
+ break;
1052
+ case "16":
1053
+ $timezone = "America/Belem";
1054
+ break;
1055
+ case "17":
1056
+ $timezone = "America/Recife";
1057
+ break;
1058
+ case "18":
1059
+ $timezone = "America/Sao_Paulo";
1060
+ break;
1061
+ case "20":
1062
+ $timezone = "America/Fortaleza";
1063
+ break;
1064
+ case "21":
1065
+ $timezone = "America/Sao_Paulo";
1066
+ break;
1067
+ case "22":
1068
+ $timezone = "America/Recife";
1069
+ break;
1070
+ case "23":
1071
+ $timezone = "America/Sao_Paulo";
1072
+ break;
1073
+ case "24":
1074
+ $timezone = "America/Porto_Velho";
1075
+ break;
1076
+ case "25":
1077
+ $timezone = "America/Boa_Vista";
1078
+ break;
1079
+ case "26":
1080
+ $timezone = "America/Sao_Paulo";
1081
+ break;
1082
+ case "27":
1083
+ $timezone = "America/Sao_Paulo";
1084
+ break;
1085
+ case "28":
1086
+ $timezone = "America/Maceio";
1087
+ break;
1088
+ case "29":
1089
+ $timezone = "America/Campo_Grande";
1090
+ break;
1091
+ case "30":
1092
+ $timezone = "America/Recife";
1093
+ break;
1094
+ case "31":
1095
+ $timezone = "America/Araguaina";
1096
+ break;
1097
+ }
1098
+ break;
1099
+ case "CD":
1100
+ switch ($region) {
1101
+ case "01":
1102
+ $timezone = "Africa/Kinshasa";
1103
+ break;
1104
+ case "02":
1105
+ $timezone = "Africa/Kinshasa";
1106
+ break;
1107
+ case "03":
1108
+ $timezone = "Africa/Kinshasa";
1109
+ break;
1110
+ case "04":
1111
+ $timezone = "Africa/Lubumbashi";
1112
+ break;
1113
+ case "05":
1114
+ $timezone = "Africa/Lubumbashi";
1115
+ break;
1116
+ case "06":
1117
+ $timezone = "Africa/Kinshasa";
1118
+ break;
1119
+ case "07":
1120
+ $timezone = "Africa/Lubumbashi";
1121
+ break;
1122
+ case "08":
1123
+ $timezone = "Africa/Kinshasa";
1124
+ break;
1125
+ case "09":
1126
+ $timezone = "Africa/Lubumbashi";
1127
+ break;
1128
+ case "10":
1129
+ $timezone = "Africa/Lubumbashi";
1130
+ break;
1131
+ case "11":
1132
+ $timezone = "Africa/Lubumbashi";
1133
+ break;
1134
+ case "12":
1135
+ $timezone = "Africa/Lubumbashi";
1136
+ break;
1137
+ }
1138
+ break;
1139
+ case "CN":
1140
+ switch ($region) {
1141
+ case "01":
1142
+ $timezone = "Asia/Shanghai";
1143
+ break;
1144
+ case "02":
1145
+ $timezone = "Asia/Shanghai";
1146
+ break;
1147
+ case "03":
1148
+ $timezone = "Asia/Shanghai";
1149
+ break;
1150
+ case "04":
1151
+ $timezone = "Asia/Shanghai";
1152
+ break;
1153
+ case "05":
1154
+ $timezone = "Asia/Harbin";
1155
+ break;
1156
+ case "06":
1157
+ $timezone = "Asia/Chongqing";
1158
+ break;
1159
+ case "07":
1160
+ $timezone = "Asia/Shanghai";
1161
+ break;
1162
+ case "08":
1163
+ $timezone = "Asia/Harbin";
1164
+ break;
1165
+ case "09":
1166
+ $timezone = "Asia/Shanghai";
1167
+ break;
1168
+ case "10":
1169
+ $timezone = "Asia/Shanghai";
1170
+ break;
1171
+ case "11":
1172
+ $timezone = "Asia/Chongqing";
1173
+ break;
1174
+ case "12":
1175
+ $timezone = "Asia/Shanghai";
1176
+ break;
1177
+ case "13":
1178
+ $timezone = "Asia/Urumqi";
1179
+ break;
1180
+ case "14":
1181
+ $timezone = "Asia/Kashgar";
1182
+ break;
1183
+ case "15":
1184
+ $timezone = "Asia/Chongqing";
1185
+ break;
1186
+ case "16":
1187
+ $timezone = "Asia/Chongqing";
1188
+ break;
1189
+ case "18":
1190
+ $timezone = "Asia/Chongqing";
1191
+ break;
1192
+ case "19":
1193
+ $timezone = "Asia/Harbin";
1194
+ break;
1195
+ case "20":
1196
+ $timezone = "Asia/Harbin";
1197
+ break;
1198
+ case "21":
1199
+ $timezone = "Asia/Chongqing";
1200
+ break;
1201
+ case "22":
1202
+ $timezone = "Asia/Harbin";
1203
+ break;
1204
+ case "23":
1205
+ $timezone = "Asia/Shanghai";
1206
+ break;
1207
+ case "24":
1208
+ $timezone = "Asia/Chongqing";
1209
+ break;
1210
+ case "25":
1211
+ $timezone = "Asia/Shanghai";
1212
+ break;
1213
+ case "26":
1214
+ $timezone = "Asia/Chongqing";
1215
+ break;
1216
+ case "28":
1217
+ $timezone = "Asia/Shanghai";
1218
+ break;
1219
+ case "29":
1220
+ $timezone = "Asia/Chongqing";
1221
+ break;
1222
+ case "30":
1223
+ $timezone = "Asia/Chongqing";
1224
+ break;
1225
+ case "31":
1226
+ $timezone = "Asia/Chongqing";
1227
+ break;
1228
+ case "32":
1229
+ $timezone = "Asia/Chongqing";
1230
+ break;
1231
+ case "33":
1232
+ $timezone = "Asia/Chongqing";
1233
+ break;
1234
+ }
1235
+ break;
1236
+ case "EC":
1237
+ switch ($region) {
1238
+ case "01":
1239
+ $timezone = "Pacific/Galapagos";
1240
+ break;
1241
+ case "02":
1242
+ $timezone = "America/Guayaquil";
1243
+ break;
1244
+ case "03":
1245
+ $timezone = "America/Guayaquil";
1246
+ break;
1247
+ case "04":
1248
+ $timezone = "America/Guayaquil";
1249
+ break;
1250
+ case "05":
1251
+ $timezone = "America/Guayaquil";
1252
+ break;
1253
+ case "06":
1254
+ $timezone = "America/Guayaquil";
1255
+ break;
1256
+ case "07":
1257
+ $timezone = "America/Guayaquil";
1258
+ break;
1259
+ case "08":
1260
+ $timezone = "America/Guayaquil";
1261
+ break;
1262
+ case "09":
1263
+ $timezone = "America/Guayaquil";
1264
+ break;
1265
+ case "10":
1266
+ $timezone = "America/Guayaquil";
1267
+ break;
1268
+ case "11":
1269
+ $timezone = "America/Guayaquil";
1270
+ break;
1271
+ case "12":
1272
+ $timezone = "America/Guayaquil";
1273
+ break;
1274
+ case "13":
1275
+ $timezone = "America/Guayaquil";
1276
+ break;
1277
+ case "14":
1278
+ $timezone = "America/Guayaquil";
1279
+ break;
1280
+ case "15":
1281
+ $timezone = "America/Guayaquil";
1282
+ break;
1283
+ case "17":
1284
+ $timezone = "America/Guayaquil";
1285
+ break;
1286
+ case "18":
1287
+ $timezone = "America/Guayaquil";
1288
+ break;
1289
+ case "19":
1290
+ $timezone = "America/Guayaquil";
1291
+ break;
1292
+ case "20":
1293
+ $timezone = "America/Guayaquil";
1294
+ break;
1295
+ case "22":
1296
+ $timezone = "America/Guayaquil";
1297
+ break;
1298
+ case "24":
1299
+ $timezone = "America/Guayaquil";
1300
+ break;
1301
+ }
1302
+ break;
1303
+ case "ES":
1304
+ switch ($region) {
1305
+ case "07":
1306
+ $timezone = "Europe/Madrid";
1307
+ break;
1308
+ case "27":
1309
+ $timezone = "Europe/Madrid";
1310
+ break;
1311
+ case "29":
1312
+ $timezone = "Europe/Madrid";
1313
+ break;
1314
+ case "31":
1315
+ $timezone = "Europe/Madrid";
1316
+ break;
1317
+ case "32":
1318
+ $timezone = "Europe/Madrid";
1319
+ break;
1320
+ case "34":
1321
+ $timezone = "Europe/Madrid";
1322
+ break;
1323
+ case "39":
1324
+ $timezone = "Europe/Madrid";
1325
+ break;
1326
+ case "51":
1327
+ $timezone = "Africa/Ceuta";
1328
+ break;
1329
+ case "52":
1330
+ $timezone = "Europe/Madrid";
1331
+ break;
1332
+ case "53":
1333
+ $timezone = "Atlantic/Canary";
1334
+ break;
1335
+ case "54":
1336
+ $timezone = "Europe/Madrid";
1337
+ break;
1338
+ case "55":
1339
+ $timezone = "Europe/Madrid";
1340
+ break;
1341
+ case "56":
1342
+ $timezone = "Europe/Madrid";
1343
+ break;
1344
+ case "57":
1345
+ $timezone = "Europe/Madrid";
1346
+ break;
1347
+ case "58":
1348
+ $timezone = "Europe/Madrid";
1349
+ break;
1350
+ case "59":
1351
+ $timezone = "Europe/Madrid";
1352
+ break;
1353
+ case "60":
1354
+ $timezone = "Europe/Madrid";
1355
+ break;
1356
+ }
1357
+ break;
1358
+ case "GL":
1359
+ switch ($region) {
1360
+ case "01":
1361
+ $timezone = "America/Thule";
1362
+ break;
1363
+ case "02":
1364
+ $timezone = "America/Godthab";
1365
+ break;
1366
+ case "03":
1367
+ $timezone = "America/Godthab";
1368
+ break;
1369
+ }
1370
+ break;
1371
+ case "ID":
1372
+ switch ($region) {
1373
+ case "01":
1374
+ $timezone = "Asia/Pontianak";
1375
+ break;
1376
+ case "02":
1377
+ $timezone = "Asia/Makassar";
1378
+ break;
1379
+ case "03":
1380
+ $timezone = "Asia/Jakarta";
1381
+ break;
1382
+ case "04":
1383
+ $timezone = "Asia/Jakarta";
1384
+ break;
1385
+ case "05":
1386
+ $timezone = "Asia/Jakarta";
1387
+ break;
1388
+ case "06":
1389
+ $timezone = "Asia/Jakarta";
1390
+ break;
1391
+ case "07":
1392
+ $timezone = "Asia/Jakarta";
1393
+ break;
1394
+ case "08":
1395
+ $timezone = "Asia/Jakarta";
1396
+ break;
1397
+ case "09":
1398
+ $timezone = "Asia/Jayapura";
1399
+ break;
1400
+ case "10":
1401
+ $timezone = "Asia/Jakarta";
1402
+ break;
1403
+ case "11":
1404
+ $timezone = "Asia/Pontianak";
1405
+ break;
1406
+ case "12":
1407
+ $timezone = "Asia/Makassar";
1408
+ break;
1409
+ case "13":
1410
+ $timezone = "Asia/Pontianak";
1411
+ break;
1412
+ case "14":
1413
+ $timezone = "Asia/Makassar";
1414
+ break;
1415
+ case "15":
1416
+ $timezone = "Asia/Jakarta";
1417
+ break;
1418
+ case "16":
1419
+ $timezone = "Asia/Makassar";
1420
+ break;
1421
+ case "17":
1422
+ $timezone = "Asia/Makassar";
1423
+ break;
1424
+ case "18":
1425
+ $timezone = "Asia/Makassar";
1426
+ break;
1427
+ case "19":
1428
+ $timezone = "Asia/Pontianak";
1429
+ break;
1430
+ case "20":
1431
+ $timezone = "Asia/Makassar";
1432
+ break;
1433
+ case "21":
1434
+ $timezone = "Asia/Makassar";
1435
+ break;
1436
+ case "22":
1437
+ $timezone = "Asia/Makassar";
1438
+ break;
1439
+ case "23":
1440
+ $timezone = "Asia/Makassar";
1441
+ break;
1442
+ case "24":
1443
+ $timezone = "Asia/Jakarta";
1444
+ break;
1445
+ case "25":
1446
+ $timezone = "Asia/Pontianak";
1447
+ break;
1448
+ case "26":
1449
+ $timezone = "Asia/Pontianak";
1450
+ break;
1451
+ case "28":
1452
+ $timezone = "Asia/Makassar";
1453
+ break;
1454
+ case "29":
1455
+ $timezone = "Asia/Makassar";
1456
+ break;
1457
+ case "30":
1458
+ $timezone = "Asia/Jakarta";
1459
+ break;
1460
+ case "31":
1461
+ $timezone = "Asia/Makassar";
1462
+ break;
1463
+ case "32":
1464
+ $timezone = "Asia/Jakarta";
1465
+ break;
1466
+ case "33":
1467
+ $timezone = "Asia/Jakarta";
1468
+ break;
1469
+ case "34":
1470
+ $timezone = "Asia/Makassar";
1471
+ break;
1472
+ case "35":
1473
+ $timezone = "Asia/Pontianak";
1474
+ break;
1475
+ case "36":
1476
+ $timezone = "Asia/Jayapura";
1477
+ break;
1478
+ case "37":
1479
+ $timezone = "Asia/Pontianak";
1480
+ break;
1481
+ case "38":
1482
+ $timezone = "Asia/Makassar";
1483
+ break;
1484
+ case "39":
1485
+ $timezone = "Asia/Jayapura";
1486
+ break;
1487
+ case "40":
1488
+ $timezone = "Asia/Pontianak";
1489
+ break;
1490
+ case "41":
1491
+ $timezone = "Asia/Makassar";
1492
+ break;
1493
+ }
1494
+ break;
1495
+ case "KZ":
1496
+ switch ($region) {
1497
+ case "01":
1498
+ $timezone = "Asia/Almaty";
1499
+ break;
1500
+ case "02":
1501
+ $timezone = "Asia/Almaty";
1502
+ break;
1503
+ case "03":
1504
+ $timezone = "Asia/Qyzylorda";
1505
+ break;
1506
+ case "04":
1507
+ $timezone = "Asia/Aqtobe";
1508
+ break;
1509
+ case "05":
1510
+ $timezone = "Asia/Qyzylorda";
1511
+ break;
1512
+ case "06":
1513
+ $timezone = "Asia/Aqtau";
1514
+ break;
1515
+ case "07":
1516
+ $timezone = "Asia/Oral";
1517
+ break;
1518
+ case "08":
1519
+ $timezone = "Asia/Qyzylorda";
1520
+ break;
1521
+ case "09":
1522
+ $timezone = "Asia/Aqtau";
1523
+ break;
1524
+ case "10":
1525
+ $timezone = "Asia/Qyzylorda";
1526
+ break;
1527
+ case "11":
1528
+ $timezone = "Asia/Almaty";
1529
+ break;
1530
+ case "12":
1531
+ $timezone = "Asia/Almaty";
1532
+ break;
1533
+ case "13":
1534
+ $timezone = "Asia/Aqtobe";
1535
+ break;
1536
+ case "14":
1537
+ $timezone = "Asia/Qyzylorda";
1538
+ break;
1539
+ case "15":
1540
+ $timezone = "Asia/Almaty";
1541
+ break;
1542
+ case "16":
1543
+ $timezone = "Asia/Aqtobe";
1544
+ break;
1545
+ case "17":
1546
+ $timezone = "Asia/Almaty";
1547
+ break;
1548
+ }
1549
+ break;
1550
+ case "MX":
1551
+ switch ($region) {
1552
+ case "01":
1553
+ $timezone = "America/Bahia_Banderas";
1554
+ break;
1555
+ case "02":
1556
+ $timezone = "America/Tijuana";
1557
+ break;
1558
+ case "03":
1559
+ $timezone = "America/Mazatlan";
1560
+ break;
1561
+ case "04":
1562
+ $timezone = "America/Merida";
1563
+ break;
1564
+ case "05":
1565
+ $timezone = "America/Merida";
1566
+ break;
1567
+ case "06":
1568
+ $timezone = "America/Chihuahua";
1569
+ break;
1570
+ case "07":
1571
+ $timezone = "America/Monterrey";
1572
+ break;
1573
+ case "08":
1574
+ $timezone = "America/Bahia_Banderas";
1575
+ break;
1576
+ case "09":
1577
+ $timezone = "America/Mexico_City";
1578
+ break;
1579
+ case "10":
1580
+ $timezone = "America/Mazatlan";
1581
+ break;
1582
+ case "11":
1583
+ $timezone = "America/Mexico_City";
1584
+ break;
1585
+ case "12":
1586
+ $timezone = "America/Mexico_City";
1587
+ break;
1588
+ case "13":
1589
+ $timezone = "America/Mexico_City";
1590
+ break;
1591
+ case "14":
1592
+ $timezone = "America/Bahia_Banderas";
1593
+ break;
1594
+ case "15":
1595
+ $timezone = "America/Ojinaga";
1596
+ break;
1597
+ case "16":
1598
+ $timezone = "America/Mexico_City";
1599
+ break;
1600
+ case "17":
1601
+ $timezone = "America/Mexico_City";
1602
+ break;
1603
+ case "18":
1604
+ $timezone = "America/Bahia_Banderas";
1605
+ break;
1606
+ case "19":
1607
+ $timezone = "America/Monterrey";
1608
+ break;
1609
+ case "20":
1610
+ $timezone = "America/Mexico_City";
1611
+ break;
1612
+ case "21":
1613
+ $timezone = "America/Mexico_City";
1614
+ break;
1615
+ case "22":
1616
+ $timezone = "America/Mexico_City";
1617
+ break;
1618
+ case "23":
1619
+ $timezone = "America/Cancun";
1620
+ break;
1621
+ case "24":
1622
+ $timezone = "America/Mexico_City";
1623
+ break;
1624
+ case "25":
1625
+ $timezone = "America/Mazatlan";
1626
+ break;
1627
+ case "26":
1628
+ $timezone = "America/Hermosillo";
1629
+ break;
1630
+ case "27":
1631
+ $timezone = "America/Merida";
1632
+ break;
1633
+ case "28":
1634
+ $timezone = "America/Matamoros";
1635
+ break;
1636
+ case "29":
1637
+ $timezone = "America/Mexico_City";
1638
+ break;
1639
+ case "30":
1640
+ $timezone = "America/Mexico_City";
1641
+ break;
1642
+ case "31":
1643
+ $timezone = "America/Merida";
1644
+ break;
1645
+ case "32":
1646
+ $timezone = "America/Bahia_Banderas";
1647
+ break;
1648
+ }
1649
+ break;
1650
+ case "MY":
1651
+ switch ($region) {
1652
+ case "01":
1653
+ $timezone = "Asia/Kuala_Lumpur";
1654
+ break;
1655
+ case "02":
1656
+ $timezone = "Asia/Kuala_Lumpur";
1657
+ break;
1658
+ case "03":
1659
+ $timezone = "Asia/Kuala_Lumpur";
1660
+ break;
1661
+ case "04":
1662
+ $timezone = "Asia/Kuala_Lumpur";
1663
+ break;
1664
+ case "05":
1665
+ $timezone = "Asia/Kuala_Lumpur";
1666
+ break;
1667
+ case "06":
1668
+ $timezone = "Asia/Kuala_Lumpur";
1669
+ break;
1670
+ case "07":
1671
+ $timezone = "Asia/Kuala_Lumpur";
1672
+ break;
1673
+ case "08":
1674
+ $timezone = "Asia/Kuala_Lumpur";
1675
+ break;
1676
+ case "09":
1677
+ $timezone = "Asia/Kuala_Lumpur";
1678
+ break;
1679
+ case "11":
1680
+ $timezone = "Asia/Kuching";
1681
+ break;
1682
+ case "12":
1683
+ $timezone = "Asia/Kuala_Lumpur";
1684
+ break;
1685
+ case "13":
1686
+ $timezone = "Asia/Kuala_Lumpur";
1687
+ break;
1688
+ case "14":
1689
+ $timezone = "Asia/Kuala_Lumpur";
1690
+ break;
1691
+ case "15":
1692
+ $timezone = "Asia/Kuching";
1693
+ break;
1694
+ case "16":
1695
+ $timezone = "Asia/Kuching";
1696
+ break;
1697
+ }
1698
+ break;
1699
+ case "NZ":
1700
+ switch ($region) {
1701
+ case "85":
1702
+ $timezone = "Pacific/Auckland";
1703
+ break;
1704
+ case "E7":
1705
+ $timezone = "Pacific/Auckland";
1706
+ break;
1707
+ case "E8":
1708
+ $timezone = "Pacific/Auckland";
1709
+ break;
1710
+ case "E9":
1711
+ $timezone = "Pacific/Auckland";
1712
+ break;
1713
+ case "F1":
1714
+ $timezone = "Pacific/Auckland";
1715
+ break;
1716
+ case "F2":
1717
+ $timezone = "Pacific/Auckland";
1718
+ break;
1719
+ case "F3":
1720
+ $timezone = "Pacific/Auckland";
1721
+ break;
1722
+ case "F4":
1723
+ $timezone = "Pacific/Auckland";
1724
+ break;
1725
+ case "F5":
1726
+ $timezone = "Pacific/Auckland";
1727
+ break;
1728
+ case "F6":
1729
+ $timezone = "Pacific/Auckland";
1730
+ break;
1731
+ case "F7":
1732
+ $timezone = "Pacific/Chatham";
1733
+ break;
1734
+ case "F8":
1735
+ $timezone = "Pacific/Auckland";
1736
+ break;
1737
+ case "F9":
1738
+ $timezone = "Pacific/Auckland";
1739
+ break;
1740
+ case "G1":
1741
+ $timezone = "Pacific/Auckland";
1742
+ break;
1743
+ case "G2":
1744
+ $timezone = "Pacific/Auckland";
1745
+ break;
1746
+ case "G3":
1747
+ $timezone = "Pacific/Auckland";
1748
+ break;
1749
+ }
1750
+ break;
1751
+ case "PT":
1752
+ switch ($region) {
1753
+ case "02":
1754
+ $timezone = "Europe/Lisbon";
1755
+ break;
1756
+ case "03":
1757
+ $timezone = "Europe/Lisbon";
1758
+ break;
1759
+ case "04":
1760
+ $timezone = "Europe/Lisbon";
1761
+ break;
1762
+ case "05":
1763
+ $timezone = "Europe/Lisbon";
1764
+ break;
1765
+ case "06":
1766
+ $timezone = "Europe/Lisbon";
1767
+ break;
1768
+ case "07":
1769
+ $timezone = "Europe/Lisbon";
1770
+ break;
1771
+ case "08":
1772
+ $timezone = "Europe/Lisbon";
1773
+ break;
1774
+ case "09":
1775
+ $timezone = "Europe/Lisbon";
1776
+ break;
1777
+ case "10":
1778
+ $timezone = "Atlantic/Madeira";
1779
+ break;
1780
+ case "11":
1781
+ $timezone = "Europe/Lisbon";
1782
+ break;
1783
+ case "13":
1784
+ $timezone = "Europe/Lisbon";
1785
+ break;
1786
+ case "14":
1787
+ $timezone = "Europe/Lisbon";
1788
+ break;
1789
+ case "16":
1790
+ $timezone = "Europe/Lisbon";
1791
+ break;
1792
+ case "17":
1793
+ $timezone = "Europe/Lisbon";
1794
+ break;
1795
+ case "18":
1796
+ $timezone = "Europe/Lisbon";
1797
+ break;
1798
+ case "19":
1799
+ $timezone = "Europe/Lisbon";
1800
+ break;
1801
+ case "20":
1802
+ $timezone = "Europe/Lisbon";
1803
+ break;
1804
+ case "21":
1805
+ $timezone = "Europe/Lisbon";
1806
+ break;
1807
+ case "22":
1808
+ $timezone = "Europe/Lisbon";
1809
+ break;
1810
+ case "23":
1811
+ $timezone = "Atlantic/Azores";
1812
+ break;
1813
+ }
1814
+ break;
1815
+ case "RU":
1816
+ switch ($region) {
1817
+ case "01":
1818
+ $timezone = "Europe/Volgograd";
1819
+ break;
1820
+ case "02":
1821
+ $timezone = "Asia/Irkutsk";
1822
+ break;
1823
+ case "03":
1824
+ $timezone = "Asia/Novokuznetsk";
1825
+ break;
1826
+ case "04":
1827
+ $timezone = "Asia/Novosibirsk";
1828
+ break;
1829
+ case "05":
1830
+ $timezone = "Asia/Vladivostok";
1831
+ break;
1832
+ case "06":
1833
+ $timezone = "Europe/Moscow";
1834
+ break;
1835
+ case "07":
1836
+ $timezone = "Europe/Volgograd";
1837
+ break;
1838
+ case "08":
1839
+ $timezone = "Europe/Yekaterinburg";
1840
+ break;
1841
+ case "09":
1842
+ $timezone = "Europe/Moscow";
1843
+ break;
1844
+ case "10":
1845
+ $timezone = "Europe/Moscow";
1846
+ break;
1847
+ case "11":
1848
+ $timezone = "Asia/Irkutsk";
1849
+ break;
1850
+ case "12":
1851
+ $timezone = "Europe/Volgograd";
1852
+ break;
1853
+ case "13":
1854
+ $timezone = "Asia/Yekaterinburg";
1855
+ break;
1856
+ case "14":
1857
+ $timezone = "Asia/Irkutsk";
1858
+ break;
1859
+ case "15":
1860
+ $timezone = "Asia/Anadyr";
1861
+ break;
1862
+ case "16":
1863
+ $timezone = "Europe/Samara";
1864
+ break;
1865
+ case "17":
1866
+ $timezone = "Europe/Volgograd";
1867
+ break;
1868
+ case "18":
1869
+ $timezone = "Asia/Krasnoyarsk";
1870
+ break;
1871
+ case "20":
1872
+ $timezone = "Asia/Irkutsk";
1873
+ break;
1874
+ case "21":
1875
+ $timezone = "Europe/Moscow";
1876
+ break;
1877
+ case "22":
1878
+ $timezone = "Europe/Volgograd";
1879
+ break;
1880
+ case "23":
1881
+ $timezone = "Europe/Kaliningrad";
1882
+ break;
1883
+ case "24":
1884
+ $timezone = "Europe/Volgograd";
1885
+ break;
1886
+ case "25":
1887
+ $timezone = "Europe/Moscow";
1888
+ break;
1889
+ case "26":
1890
+ $timezone = "Asia/Kamchatka";
1891
+ break;
1892
+ case "27":
1893
+ $timezone = "Europe/Volgograd";
1894
+ break;
1895
+ case "28":
1896
+ $timezone = "Europe/Moscow";
1897
+ break;
1898
+ case "29":
1899
+ $timezone = "Asia/Novokuznetsk";
1900
+ break;
1901
+ case "30":
1902
+ $timezone = "Asia/Sakhalin";
1903
+ break;
1904
+ case "31":
1905
+ $timezone = "Asia/Krasnoyarsk";
1906
+ break;
1907
+ case "32":
1908
+ $timezone = "Asia/Omsk";
1909
+ break;
1910
+ case "33":
1911
+ $timezone = "Europe/Samara";
1912
+ break;
1913
+ case "34":
1914
+ $timezone = "Asia/Yekaterinburg";
1915
+ break;
1916
+ case "35":
1917
+ $timezone = "Asia/Yekaterinburg";
1918
+ break;
1919
+ case "36":
1920
+ $timezone = "Asia/Magadan";
1921
+ break;
1922
+ case "37":
1923
+ $timezone = "Europe/Moscow";
1924
+ break;
1925
+ case "38":
1926
+ $timezone = "Europe/Volgograd";
1927
+ break;
1928
+ case "39":
1929
+ $timezone = "Asia/Krasnoyarsk";
1930
+ break;
1931
+ case "40":
1932
+ $timezone = "Asia/Yekaterinburg";
1933
+ break;
1934
+ case "41":
1935
+ $timezone = "Europe/Moscow";
1936
+ break;
1937
+ case "42":
1938
+ $timezone = "Europe/Moscow";
1939
+ break;
1940
+ case "43":
1941
+ $timezone = "Europe/Moscow";
1942
+ break;
1943
+ case "44":
1944
+ $timezone = "Asia/Magadan";
1945
+ break;
1946
+ case "45":
1947
+ $timezone = "Europe/Samara";
1948
+ break;
1949
+ case "46":
1950
+ $timezone = "Europe/Samara";
1951
+ break;
1952
+ case "47":
1953
+ $timezone = "Europe/Moscow";
1954
+ break;
1955
+ case "48":
1956
+ $timezone = "Europe/Moscow";
1957
+ break;
1958
+ case "49":
1959
+ $timezone = "Europe/Moscow";
1960
+ break;
1961
+ case "50":
1962
+ $timezone = "Asia/Yekaterinburg";
1963
+ break;
1964
+ case "51":
1965
+ $timezone = "Europe/Moscow";
1966
+ break;
1967
+ case "52":
1968
+ $timezone = "Europe/Moscow";
1969
+ break;
1970
+ case "53":
1971
+ $timezone = "Asia/Novosibirsk";
1972
+ break;
1973
+ case "54":
1974
+ $timezone = "Asia/Omsk";
1975
+ break;
1976
+ case "55":
1977
+ $timezone = "Europe/Samara";
1978
+ break;
1979
+ case "56":
1980
+ $timezone = "Europe/Moscow";
1981
+ break;
1982
+ case "57":
1983
+ $timezone = "Europe/Samara";
1984
+ break;
1985
+ case "58":
1986
+ $timezone = "Asia/Yekaterinburg";
1987
+ break;
1988
+ case "59":
1989
+ $timezone = "Asia/Vladivostok";
1990
+ break;
1991
+ case "60":
1992
+ $timezone = "Europe/Kaliningrad";
1993
+ break;
1994
+ case "61":
1995
+ $timezone = "Europe/Volgograd";
1996
+ break;
1997
+ case "62":
1998
+ $timezone = "Europe/Moscow";
1999
+ break;
2000
+ case "63":
2001
+ $timezone = "Asia/Yakutsk";
2002
+ break;
2003
+ case "64":
2004
+ $timezone = "Asia/Sakhalin";
2005
+ break;
2006
+ case "65":
2007
+ $timezone = "Europe/Samara";
2008
+ break;
2009
+ case "66":
2010
+ $timezone = "Europe/Moscow";
2011
+ break;
2012
+ case "67":
2013
+ $timezone = "Europe/Volgograd";
2014
+ break;
2015
+ case "68":
2016
+ $timezone = "Europe/Volgograd";
2017
+ break;
2018
+ case "69":
2019
+ $timezone = "Europe/Moscow";
2020
+ break;
2021
+ case "70":
2022
+ $timezone = "Europe/Volgograd";
2023
+ break;
2024
+ case "71":
2025
+ $timezone = "Asia/Yekaterinburg";
2026
+ break;
2027
+ case "72":
2028
+ $timezone = "Europe/Moscow";
2029
+ break;
2030
+ case "73":
2031
+ $timezone = "Europe/Samara";
2032
+ break;
2033
+ case "74":
2034
+ $timezone = "Asia/Yakutsk";
2035
+ break;
2036
+ case "75":
2037
+ $timezone = "Asia/Novosibirsk";
2038
+ break;
2039
+ case "76":
2040
+ $timezone = "Europe/Moscow";
2041
+ break;
2042
+ case "77":
2043
+ $timezone = "Europe/Moscow";
2044
+ break;
2045
+ case "78":
2046
+ $timezone = "Asia/Yekaterinburg";
2047
+ break;
2048
+ case "79":
2049
+ $timezone = "Asia/Krasnoyarsk";
2050
+ break;
2051
+ case "80":
2052
+ $timezone = "Asia/Yekaterinburg";
2053
+ break;
2054
+ case "81":
2055
+ $timezone = "Europe/Samara";
2056
+ break;
2057
+ case "82":
2058
+ $timezone = "Asia/Irkutsk";
2059
+ break;
2060
+ case "83":
2061
+ $timezone = "Europe/Moscow";
2062
+ break;
2063
+ case "84":
2064
+ $timezone = "Europe/Volgograd";
2065
+ break;
2066
+ case "85":
2067
+ $timezone = "Europe/Moscow";
2068
+ break;
2069
+ case "86":
2070
+ $timezone = "Europe/Moscow";
2071
+ break;
2072
+ case "87":
2073
+ $timezone = "Asia/Omsk";
2074
+ break;
2075
+ case "88":
2076
+ $timezone = "Europe/Moscow";
2077
+ break;
2078
+ case "89":
2079
+ $timezone = "Asia/Vladivostok";
2080
+ break;
2081
+ case "90":
2082
+ $timezone = "Asia/Yekaterinburg";
2083
+ break;
2084
+ case "91":
2085
+ $timezone = "Asia/Krasnoyarsk";
2086
+ break;
2087
+ case "92":
2088
+ $timezone = "Asia/Kamchatka";
2089
+ break;
2090
+ case "93":
2091
+ $timezone = "Asia/Irkutsk";
2092
+ break;
2093
+ case "CI":
2094
+ $timezone = "Europe/Volgograd";
2095
+ break;
2096
+ case "JA":
2097
+ $timezone = "Asia/Sakhalin";
2098
+ break;
2099
+ }
2100
+ break;
2101
+ case "UA":
2102
+ switch ($region) {
2103
+ case "01":
2104
+ $timezone = "Europe/Kiev";
2105
+ break;
2106
+ case "02":
2107
+ $timezone = "Europe/Kiev";
2108
+ break;
2109
+ case "03":
2110
+ $timezone = "Europe/Uzhgorod";
2111
+ break;
2112
+ case "04":
2113
+ $timezone = "Europe/Zaporozhye";
2114
+ break;
2115
+ case "05":
2116
+ $timezone = "Europe/Zaporozhye";
2117
+ break;
2118
+ case "06":
2119
+ $timezone = "Europe/Uzhgorod";
2120
+ break;
2121
+ case "07":
2122
+ $timezone = "Europe/Zaporozhye";
2123
+ break;
2124
+ case "08":
2125
+ $timezone = "Europe/Simferopol";
2126
+ break;
2127
+ case "09":
2128
+ $timezone = "Europe/Kiev";
2129
+ break;
2130
+ case "10":
2131
+ $timezone = "Europe/Zaporozhye";
2132
+ break;
2133
+ case "11":
2134
+ $timezone = "Europe/Simferopol";
2135
+ break;
2136
+ case "12":
2137
+ $timezone = "Europe/Kiev";
2138
+ break;
2139
+ case "13":
2140
+ $timezone = "Europe/Kiev";
2141
+ break;
2142
+ case "14":
2143
+ $timezone = "Europe/Zaporozhye";
2144
+ break;
2145
+ case "15":
2146
+ $timezone = "Europe/Uzhgorod";
2147
+ break;
2148
+ case "16":
2149
+ $timezone = "Europe/Zaporozhye";
2150
+ break;
2151
+ case "17":
2152
+ $timezone = "Europe/Simferopol";
2153
+ break;
2154
+ case "18":
2155
+ $timezone = "Europe/Zaporozhye";
2156
+ break;
2157
+ case "19":
2158
+ $timezone = "Europe/Kiev";
2159
+ break;
2160
+ case "20":
2161
+ $timezone = "Europe/Simferopol";
2162
+ break;
2163
+ case "21":
2164
+ $timezone = "Europe/Kiev";
2165
+ break;
2166
+ case "22":
2167
+ $timezone = "Europe/Uzhgorod";
2168
+ break;
2169
+ case "23":
2170
+ $timezone = "Europe/Kiev";
2171
+ break;
2172
+ case "24":
2173
+ $timezone = "Europe/Uzhgorod";
2174
+ break;
2175
+ case "25":
2176
+ $timezone = "Europe/Uzhgorod";
2177
+ break;
2178
+ case "26":
2179
+ $timezone = "Europe/Zaporozhye";
2180
+ break;
2181
+ case "27":
2182
+ $timezone = "Europe/Kiev";
2183
+ break;
2184
+ }
2185
+ break;
2186
+ case "UZ":
2187
+ switch ($region) {
2188
+ case "01":
2189
+ $timezone = "Asia/Tashkent";
2190
+ break;
2191
+ case "02":
2192
+ $timezone = "Asia/Samarkand";
2193
+ break;
2194
+ case "03":
2195
+ $timezone = "Asia/Tashkent";
2196
+ break;
2197
+ case "05":
2198
+ $timezone = "Asia/Samarkand";
2199
+ break;
2200
+ case "06":
2201
+ $timezone = "Asia/Tashkent";
2202
+ break;
2203
+ case "07":
2204
+ $timezone = "Asia/Samarkand";
2205
+ break;
2206
+ case "08":
2207
+ $timezone = "Asia/Samarkand";
2208
+ break;
2209
+ case "09":
2210
+ $timezone = "Asia/Samarkand";
2211
+ break;
2212
+ case "10":
2213
+ $timezone = "Asia/Samarkand";
2214
+ break;
2215
+ case "12":
2216
+ $timezone = "Asia/Samarkand";
2217
+ break;
2218
+ case "13":
2219
+ $timezone = "Asia/Tashkent";
2220
+ break;
2221
+ case "14":
2222
+ $timezone = "Asia/Tashkent";
2223
+ break;
2224
+ }
2225
+ break;
2226
+ case "SH":
2227
+ $timezone = "Atlantic/St_Helena";
2228
+ break;
2229
+ case "CC":
2230
+ $timezone = "Indian/Cocos";
2231
+ break;
2232
+ case "TF":
2233
+ $timezone = "Indian/Kerguelen";
2234
+ break;
2235
+ case "SJ":
2236
+ $timezone = "Arctic/Longyearbyen";
2237
+ break;
2238
+ case "GS":
2239
+ $timezone = "Atlantic/South_Georgia";
2240
+ break;
2241
+ case "CX":
2242
+ $timezone = "Indian/Christmas";
2243
+ break;
2244
+ case "PN":
2245
+ $timezone = "Pacific/Pitcairn";
2246
+ break;
2247
+ case "MF":
2248
+ $timezone = "America/Marigot";
2249
+ break;
2250
+ case "BL":
2251
+ $timezone = "America/St_Barthelemy";
2252
+ break;
2253
+ case "EH":
2254
+ $timezone = "Africa/El_Aaiun";
2255
+ break;
2256
+ case "TL":
2257
+ $timezone = "Asia/Dili";
2258
+ break;
2259
+ case "PF":
2260
+ $timezone = "Pacific/Marquesas";
2261
+ break;
2262
+ case "SX":
2263
+ $timezone = "America/Curacao";
2264
+ break;
2265
+ case "BQ":
2266
+ $timezone = "America/Curacao";
2267
+ break;
2268
+ case "CW":
2269
+ $timezone = "America/Curacao";
2270
+ break;
2271
+ }
2272
+ return $timezone;
2273
+ }
2274
+ ?>
views/plugin_page.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $date_format = get_option('date_format') . ' ' . get_option('time_format')
3
+ ?>
4
+ <div class="wrap">
5
+ <h2><?php _e('GeoIP Detect', 'geoip-detect');?></h2>
6
+
7
+ <?php if (!empty($message)): ?>
8
+ <p class="error" style="margin-top:10px;">
9
+ <?php echo $message; ?>
10
+ </p>
11
+ <?php endif; ?>
12
+
13
+ <p>
14
+ <?php printf(__('Last updated: %s', 'geoip-detect'), $last_update ? date_i18n($date_format, $last_update) : __('Never', 'geoip-detect')); ?>
15
+ </p>
16
+
17
+ <?php if (!defined('GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED') || !GEOIP_DETECT_AUTO_UPDATE_DEACTIVATED) : ?>
18
+ <p>
19
+ <?php printf(__('Next update: %s', 'geoip-detect'), $next_cron_update ? date_i18n($date_format, $next_cron_update) : __('Never', 'geoip-detect')); ?><br />
20
+ <em><?php _e('(The file is updated automatically once a week.)', 'geoip-detect'); ?></em>
21
+ </p>
22
+ <?php endif; ?>
23
+
24
+ <form method="post" action="#">
25
+ <input type="hidden" name="action" value="update" />
26
+ <input type="submit" class="button button-primary" value="<?php _e('Update now'); ?>" />
27
+ </form>
28
+
29
+ <br/>
30
+ <h3>GeoIP Lookup</h3>
31
+ <form method="post" action="#">
32
+ <input type="hidden" name="action" value="lookup" />
33
+ <input type="text" name="ip" value="<?php echo isset($_REQUEST['ip']) ? esc_attr($_REQUEST['ip']) : esc_attr(geoip_detect_get_client_ip()); ?>" />
34
+ <input type="submit" class="button button-secondary" value="<?php _e('Lookup', 'geoip-detect'); ?>" />
35
+ </form>
36
+ <?php if ($ip_lookup_result !== false) :
37
+ if (is_object($ip_lookup_result)) : ?>
38
+ <p>
39
+ <?php printf(__('The function %s returns an object:', 'geoip-detect'), "<code>geoip_detect_get_info_from_ip('" . esc_html($_POST['ip']) . "')</code>"); ?>
40
+ </p>
41
+ <table>
42
+ <thead>
43
+ <th><?php _e('Key', 'geoip-detect'); ?></th>
44
+ <th><?php _e('Property Value', 'geoip-detect'); ?></th>
45
+ </thead>
46
+ <?php
47
+ foreach ($ip_lookup_result as $key => $value)
48
+ {
49
+ ?>
50
+ <tr>
51
+ <td><?php echo esc_html($key);?></td>
52
+ <td><?php echo esc_html($value);?></td>
53
+ </tr>
54
+ <?php
55
+ }
56
+ ?>
57
+ </table>
58
+ <?php elseif ($ip_lookup_result == 0) : ?>
59
+ <p>
60
+ <?php _e('No information found about this IP.', 'geoip-detect')?>
61
+ </p>
62
+ <?php endif; ?>
63
+ <?php endif; ?>
64
+
65
+ <br /><br />
66
+ <h3>Options</h3>
67
+ <form method="post" action="#">
68
+ <input type="hidden" name="action" value="options" />
69
+
70
+ <p>
71
+ <input type="checkbox" name="options[set_css_country]" value="1" <?php if ($options['set_css_country']) { echo 'checked="checked"'; } ?>>&nbsp;<?php _e('Add a country-specific CSS class to the &lt;body&gt;-Tag.', 'geoip-detect'); ?><br />
72
+ </p>
73
+ <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) : ?>
74
+ <p>
75
+ <input type="checkbox" name="options[has_reverse_proxy]" value="1" <?php if ($options['has_reverse_proxy']) { echo 'checked="checked"'; } ?>>&nbsp;<?php printf(__('The server is behind a reverse proxy (With Proxy: %s - Without Proxy: %s)', 'geoip-detect'), $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR']); ?><br />
76
+ </p>
77
+ <?php endif; ?>
78
+ <p>
79
+ <input type="submit" class="button button-primary" value="<?php _e('Save', 'geoip-detect'); ?>" />
80
+ </p>
81
+ </form>
82
+ <p>
83
+ <br />
84
+ <small><em>This product includes GeoLite data created by MaxMind, available from <a href="http://www.maxmind.com/">http://www.maxmind.com</a>.</em></small>
85
+ </p>
86
+ </div>