diff --git a/COPYRIGHT b/COPYRIGHT
index cfff467553496f56c39f9ef999adf7c1b0f6d279..10a28002d8e21301796717952adc6c9d05149b15 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -17,6 +17,7 @@ FPDF              1.53     Public domain               Yes              PDF gene
 FPDF_TPL          1.1.2    Apache Software License 2.0 No GPL3 only     PDF templates management
 FPDI              1.2.1    Apache Software License 2.0 No GPL3 only     PDF templates management
 FPDI_Protection   1.0.2    Apache Software License 2.0 No GPL3 only     PDF encryption (8 files)
+GeoIP             x.x                                  Yes              GeoIP Maxmind conversion
 MagPieRss         0.72     GPL 2.0                     Yes              Load RSS
 NuSoap            0.6.5    LGPL 2.1                    Yes              Interfaces with third tools
 PHP_WriteExcel    0.3.0    LGPL 2.1                    Yes              Excel files generation
diff --git a/ChangeLog b/ChangeLog
index 6b33f272ba22e556d8910af7adbc63f13aed1e50..6ce6b8391e8336ba6b9dac69d4d277c086d38d59 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -176,6 +176,7 @@ For developers:
 - Rewrite clone feature for supplier invoice to work like other clone features.
 - First change to manage a future feature "stock PMP value".
 - A module can add a new tab in third party view tabs.
+- First change for future geoip module.
 
 
 ***** Changelog for 2.5 compared to 2.4 *****
diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php
index 9b5e22ce297c472cffe2cb5136788a266e85491d..8d7dd5b284b4261519a9b273af8c25c268aa2546 100644
--- a/htdocs/admin/tools/listevents.php
+++ b/htdocs/admin/tools/listevents.php
@@ -130,6 +130,7 @@ if ($result)
 	print '<input class="flat" type="text" size="10" name="search_code" value="'.$_GET["search_code"].'">';
 	print '</td>';
 
+	// IP
 	print '<td align="left" class="liste_titre">';
 	print '<input class="flat" type="text" size="10" name="search_ip" value="'.$_GET["search_ip"].'">';
 	print '</td>';
@@ -166,7 +167,30 @@ if ($result)
 		print '<td>'.$obj->type.'</td>';
 
 		// IP
-		print '<td>'.$obj->ip.'</td>';
+		print '<td>';
+		print $obj->ip;
+
+		if (! empty($conf->geoip_maxmind->enabled))
+		{
+			$datafile=$conf->global->GEOIP_MAXMIND_COUNTRY_DATAFILE;
+			$ip=$obj->ip;
+
+			$ip='24.24.24.24';
+			$datafile='E:\Mes Sites\Web\Admin1\awstats\maxmind\GeoIP.dat';
+
+			include_once(DOL_DOCUMENT_ROOT.'/lib/dolgeoip.class.php');
+			$geoip=new DolGeoIP('country',$datafile);
+			$countrycode=$geoip->getCountryCodeFromIP($ip);
+			if ($countrycode)	// If success, countrycode is us, fr, ...
+			{
+				if (file_exists(DOL_DOCUMENT_ROOT.'/theme/common/flags/'.$countrycode.'.png'))
+				{
+					print ' '.img_picto($langs->trans("AccordingToGeoIPDatabase"),DOL_URL_ROOT.'/theme/common/flags/'.$countrycode.'.png','',1);
+				}
+				else print ' ('.$countrycode.')';
+			}
+		}
+		print '</td>';
 
 		// Login
 		print '<td>';
diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
index 66e3dc4269d8a910fdbc6ac059bbf4016721b5c3..df05b3887765e707e0502cadc422140fd77e3ac0 100644
--- a/htdocs/imports/import.php
+++ b/htdocs/imports/import.php
@@ -570,9 +570,9 @@ if ($step == 3 && $datatoimport)
     		print '</a>';
 			print '</td>';
 			// Affiche taille fichier
-			print '<td align="right">'.dol_print_size(dol_filesize($newdir.'/'.$newfile)).'</td>';
+			print '<td align="right">'.dol_print_size(dol_filesize($dir.'/'.$file)).'</td>';
 			// Affiche date fichier
-			print '<td align="right">'.dol_print_date(dol_filemtime($newdir.'/'.$newfile),'dayhour').'</td>';
+			print '<td align="right">'.dol_print_date(dol_filemtime($dir.'/'.$file),'dayhour').'</td>';
 			// Del button
 			print '<td align="right"><a href="'.DOL_URL_ROOT.'/document.php?action=remove_file&step=3&format='.$format.'&modulepart='.$modulepart.'&file='.urlencode($relativepath);
 			print '&amp;urlsource='.urlencode($urlsource);
@@ -1069,7 +1069,9 @@ if ($step == 5 && $datatoimport)
 		$obj->import_close_file();
 	}
 
-	$param='&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport);
+	$nboflines=dol_count_nb_of_line($conf->import->dir_temp.'/'.$filetoimport);
+
+	$param='&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport).'&nboflines='.$nboflines;
 
 	llxHeader('',$langs->trans("NewImport"),'EN:Module_Imports_En|FR:Module_Imports|ES:M&oacute;dulo_Importaciones');
 
@@ -1140,7 +1142,6 @@ if ($step == 5 && $datatoimport)
 	print '<tr><td>';
 	print $langs->trans("NbOfSourceLines");
 	print '</td><td>';
-	$nboflines=dol_count_nb_of_line($conf->import->dir_temp.'/'.$filetoimport);
 	print $nboflines;
 	print '</td></tr>';
 
@@ -1275,7 +1276,9 @@ if ($step == 6 && $datatoimport)
 		$obj->import_close_file();
 	}
 
-	$param='&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport);
+	$nboflines=(! empty($_GET["nboflines"])?$_GET["nboflines"]:dol_count_nb_of_line($conf->import->dir_temp.'/'.$filetoimport));
+
+	$param='&format='.$format.'&datatoimport='.$datatoimport.'&filetoimport='.urlencode($filetoimport).'&nboflines='.$nboflines;
 
 	llxHeader('',$langs->trans("NewImport"),'EN:Module_Imports_En|FR:Module_Imports|ES:M&oacute;dulo_Importaciones');
 
@@ -1318,7 +1321,7 @@ if ($step == 6 && $datatoimport)
 	print '</td></tr>';
 
 	// Lot de donnees a importer
-	print '<tr><td width="25%">'.$langs->trans("DatasetToImport").'</td>';
+	print '<tr><td>'.$langs->trans("DatasetToImport").'</td>';
 	print '<td>';
 	print img_object($objimport->array_import_module[0]->getName(),$objimport->array_import_icon[0]).' ';
 	print $objimport->array_import_label[0];
@@ -1330,7 +1333,7 @@ if ($step == 6 && $datatoimport)
 	//print '<tr><td colspan="2"><b>'.$langs->trans("InformationOnSourceFile").'</b></td></tr>';
 
 	// Source file format
-	print '<tr><td width="40%">'.$langs->trans("SourceFileFormat").'</td>';
+	print '<tr><td width="25%">'.$langs->trans("SourceFileFormat").'</td>';
 	print '<td>';
     $text=$objmodelimport->getDriverDesc($format);
     print $html->textwithpicto($objmodelimport->getDriverLabel($format),$text);
@@ -1350,7 +1353,6 @@ if ($step == 6 && $datatoimport)
 	print '<tr><td>';
 	print $langs->trans("NbOfSourceLines");
 	print '</td><td>';
-	$nboflines=dol_count_nb_of_line($conf->import->dir_temp.'/'.$filetoimport);
 	print $nboflines;
 	print '</td></tr>';
 
@@ -1367,7 +1369,7 @@ if ($step == 6 && $datatoimport)
 	//print '<tr><td colspan="2"><b>'.$langs->trans("InformationOnTargetTables").'</b></td></tr>';
 
 	// Tables imported
-	print '<tr><td width="40%">';
+	print '<tr><td width="25%">';
 	print $langs->trans("TablesTarget");
 	print '</td><td>';
 	$listtables=array();
@@ -1434,11 +1436,13 @@ if ($step == 6 && $datatoimport)
 	$maxnbofwarnings=empty($conf->global->IMPORT_MAX_NB_OF_WARNINGS)?100:$conf->global->IMPORT_MAX_NB_OF_WARNINGS;
 	$nboferrors=0;
 	$nbofwarnings=0;
-	
+
+	$importid=dol_print_date(dol_now('tzserver'),'%Y%m%d%H%M%S');
+
 	$db->begin();
 
 	//var_dump($array_match_file_to_database);
-	
+
 	// Open input file
 	$pathfile=$conf->import->dir_temp.'/'.$filetoimport;
 	$result=$obj->import_open_file($pathfile,$langs);
@@ -1449,14 +1453,14 @@ if ($step == 6 && $datatoimport)
 		while ($arrayrecord=$obj->import_read_record())
 		{
 			$sourcelinenb++;
-			$result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,sizeof($fieldssource));
+			$result=$obj->import_insert($arrayrecord,$array_match_file_to_database,$objimport,sizeof($fieldssource),$importid);
 			if (sizeof($obj->errors))
 			{
-				$arrayoferrors[$sourcelinenb]=$obj->errors;	
+				$arrayoferrors[$sourcelinenb]=$obj->errors;
 			}
 			if (sizeof($obj->warnings))
 			{
-				$arrayofwarnings[$sourcelinenb]=$obj->warnings;	
+				$arrayofwarnings[$sourcelinenb]=$obj->warnings;
 			}
 		}
 		// Close file
diff --git a/htdocs/includes/geoip/README.txt b/htdocs/includes/geoip/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8456d2b0e350872f4b788b5187bbb8704aa15bd2
--- /dev/null
+++ b/htdocs/includes/geoip/README.txt
@@ -0,0 +1,43 @@
+Requirements
+
+None (only the 'GeoIP.dat' file is needed).  To download a free GeoIP Standard Country
+database, go to
+http://maxmind.com/download/geoip/database/
+
+Install
+
+Just place the 'geoip.inc' file somewhere according to the 'include_path' directive of
+your 'php.ini' file, or just place it in the same directory as your PHP scripts.
+
+Usage
+
+Gets country name by hostname :
+
+include("geoip.inc");
+
+$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
+
+echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
+     geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
+echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
+     geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
+
+geoip_close($gi);
+
+Memory Caching:
+To enable memory caching, pass GEOIP_SHARED_MEMORY or
+GEOIP_MEMORY_CACHE to the second argument of geoip_open
+
+For GEOIP_SHARED_MEMORY, requires php >= 4.0.4,
+and --enable-shmop passed at configure time, see
+http://us2.php.net/manual/en/ref.shmop.php
+In addition, you should call geoip_load_shared_mem
+before calling geoip_open.  See sample_city.php for an
+example of shared memory caching.
+
+Working with PHP5.
+geoip_country_code_by_addr should work
+with PHP.  For help with the other
+routines, please contact support@maxmind.com
+
+Thanks to Jim Winstead.
diff --git a/htdocs/includes/geoip/geoip.inc b/htdocs/includes/geoip/geoip.inc
new file mode 100644
index 0000000000000000000000000000000000000000..6f1c45d135d17f19c21b53347d80f6ad625fdf48
--- /dev/null
+++ b/htdocs/includes/geoip/geoip.inc
@@ -0,0 +1,501 @@
+<?php
+
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
+/* geoip.inc
+ *
+ * Copyright (C) 2007 MaxMind LLC
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+define("GEOIP_COUNTRY_BEGIN", 16776960);
+define("GEOIP_STATE_BEGIN_REV0", 16700000);
+define("GEOIP_STATE_BEGIN_REV1", 16000000);
+define("GEOIP_STANDARD", 0);
+define("GEOIP_MEMORY_CACHE", 1);
+define("GEOIP_SHARED_MEMORY", 2);
+define("STRUCTURE_INFO_MAX_SIZE", 20);
+define("DATABASE_INFO_MAX_SIZE", 100);
+define("GEOIP_COUNTRY_EDITION", 106);
+define("GEOIP_PROXY_EDITION", 8);
+define("GEOIP_ASNUM_EDITION", 9);
+define("GEOIP_NETSPEED_EDITION", 10);
+define("GEOIP_REGION_EDITION_REV0", 112);
+define("GEOIP_REGION_EDITION_REV1", 3);
+define("GEOIP_CITY_EDITION_REV0", 111);
+define("GEOIP_CITY_EDITION_REV1", 2);
+define("GEOIP_ORG_EDITION", 110);
+define("GEOIP_ISP_EDITION", 4);
+define("SEGMENT_RECORD_LENGTH", 3);
+define("STANDARD_RECORD_LENGTH", 3);
+define("ORG_RECORD_LENGTH", 4);
+define("MAX_RECORD_LENGTH", 4);
+define("MAX_ORG_RECORD_LENGTH", 300);
+define("GEOIP_SHM_KEY", 0x4f415401);
+define("US_OFFSET", 1);
+define("CANADA_OFFSET", 677);
+define("WORLD_OFFSET", 1353);
+define("FIPS_RANGE", 360);
+define("GEOIP_UNKNOWN_SPEED", 0);
+define("GEOIP_DIALUP_SPEED", 1);
+define("GEOIP_CABLEDSL_SPEED", 2);
+define("GEOIP_CORPORATE_SPEED", 3);
+
+class GeoIP {
+    var $flags;
+    var $filehandle;
+    var $memory_buffer;
+    var $databaseType;
+    var $databaseSegments;
+    var $record_length;
+    var $shmid;
+    var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
+"" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5, 
+"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "AN" => 10, "AO" => 11, 
+"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17, 
+"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23, 
+"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29, 
+"BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35, 
+"BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41, 
+"CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47, 
+"CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53, 
+"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59, 
+"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65, 
+"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71, 
+"FM" => 72, "FO" => 73, "FR" => 74, "FX" => 75, "GA" => 76, "GB" => 77,
+"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83, 
+"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89, 
+"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95, 
+"HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101, 
+"IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107, 
+"IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113, 
+"KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119, 
+"KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125, 
+"LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131, 
+"LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137, 
+"MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143, 
+"MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149, 
+"MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
+"NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161, 
+"NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167, 
+"PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173, 
+"PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179, 
+"PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185, 
+"RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191, 
+"SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197, 
+"SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203, 
+"SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209, 
+"TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215, 
+"TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221, 
+"UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227, 
+"VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
+"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239, 
+"ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245, 
+"O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251,
+"MF" => 252
+);
+    var $GEOIP_COUNTRY_CODES = array(
+"", "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ",
+"AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH",
+"BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA",
+"CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU",
+"CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG",
+"EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB",
+"GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT",
+"GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN",
+"IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM",
+"KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS",
+"LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", "MM", "MN",
+"MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA",
+"NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA",
+"PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY",
+"QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI",
+"SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD",
+"TF", "TG", "TH", "TJ", "TK", "TM", "TN", "TO", "TL", "TR", "TT", "TV", "TW",
+"TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN",
+"VU", "WF", "WS", "YE", "YT", "RS", "ZA", "ZM", "ME", "ZW", "A1", "A2", "O1",
+"AX", "GG", "IM", "JE", "BL", "MF"
+);
+    var $GEOIP_COUNTRY_CODES3 = array(
+"","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","AQ","ARG",
+"ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI",
+"BEN","BMU","BRN","BOL","BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC",
+"COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV",
+"CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH",
+"ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD",
+"GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM","GUM",
+"GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IO",
+"IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA",
+"PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
+"LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC",
+"MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL",
+"NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER",
+"PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT",
+"REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM",
+"SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF",
+"TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA",
+"UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT",
+"WLF","WSM","YEM","YT","SRB","ZAF","ZMB","MNE","ZWE","A1","A2","O1",
+"ALA","GGY","IMN","JEY","BLM","MAF"
+    );
+    var $GEOIP_COUNTRY_NAMES = array(
+"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates",
+"Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia",
+"Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa",
+"Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina",
+"Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain",
+"Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil",
+"Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize",
+"Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the",
+"Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook Islands",
+"Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape Verde",
+"Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti",
+"Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia",
+"Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji",
+"Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe Islands",
+"France", "France, Metropolitan", "Gabon", "United Kingdom",
+"Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland",
+"Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia and the South Sandwich Islands",
+"Guatemala", "Guam", "Guinea-Bissau",
+"Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras",
+"Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India",
+"British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of",
+"Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan",
+"Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic People's Republic of",
+"Korea, Republic of", "Kuwait", "Cayman Islands",
+"Kazakhstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia",
+"Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg",
+"Latvia", "Libyan Arab Jamahiriya", "Morocco", "Monaco", "Moldova, Republic of",
+"Madagascar", "Marshall Islands", "Macedonia",
+"Mali", "Myanmar", "Mongolia", "Macau", "Northern Mariana Islands",
+"Martinique", "Mauritania", "Montserrat", "Malta", "Mauritius", "Maldives",
+"Malawi", "Mexico", "Malaysia", "Mozambique", "Namibia", "New Caledonia",
+"Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Netherlands", "Norway",
+"Nepal", "Nauru", "Niue", "New Zealand", "Oman", "Panama", "Peru", "French Polynesia",
+"Papua New Guinea", "Philippines", "Pakistan", "Poland", "Saint Pierre and Miquelon",
+"Pitcairn Islands", "Puerto Rico", "Palestinian Territory",
+"Portugal", "Palau", "Paraguay", "Qatar", "Reunion", "Romania",
+"Russian Federation", "Rwanda", "Saudi Arabia", "Solomon Islands",
+"Seychelles", "Sudan", "Sweden", "Singapore", "Saint Helena", "Slovenia",
+"Svalbard and Jan Mayen", "Slovakia", "Sierra Leone", "San Marino", "Senegal",
+"Somalia", "Suriname", "Sao Tome and Principe", "El Salvador", "Syrian Arab Republic",
+"Swaziland", "Turks and Caicos Islands", "Chad", "French Southern Territories",
+"Togo", "Thailand", "Tajikistan", "Tokelau", "Turkmenistan",
+"Tunisia", "Tonga", "Timor-Leste", "Turkey", "Trinidad and Tobago", "Tuvalu",
+"Taiwan", "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", "Virgin Islands, British", "Virgin Islands, U.S.",
+"Vietnam", "Vanuatu", "Wallis and Futuna", "Samoa", "Yemen", "Mayotte",
+"Serbia", "South Africa", "Zambia", "Montenegro", "Zimbabwe",
+"Anonymous Proxy","Satellite Provider","Other",
+"Aland Islands","Guernsey","Isle of Man","Jersey","Saint Barthelemy","Saint Martin"
+);
+}
+function geoip_load_shared_mem ($file) {
+
+  $fp = fopen($file, "rb");
+  if (!$fp) {
+    print "error opening $file: $php_errormsg\n";
+    exit;
+  }
+  $s_array = fstat($fp);
+  $size = $s_array['size'];
+  if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
+    shmop_delete ($shmid);
+    shmop_close ($shmid);
+  }
+  $shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
+  shmop_write ($shmid, fread($fp, $size), 0);
+  shmop_close ($shmid);
+}
+
+function _setup_segments($gi){
+  $gi->databaseType = GEOIP_COUNTRY_EDITION;
+  $gi->record_length = STANDARD_RECORD_LENGTH;
+  if ($gi->flags & GEOIP_SHARED_MEMORY) {
+    $offset = @shmop_size ($gi->shmid) - 3;
+    for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
+        $delim = @shmop_read ($gi->shmid, $offset, 3);
+        $offset += 3;
+        if ($delim == (chr(255).chr(255).chr(255))) {
+            $gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
+            $offset++;
+
+            if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
+                $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
+            } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
+                $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
+	    } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
+                     ($gi->databaseType == GEOIP_CITY_EDITION_REV1) 
+                    || ($gi->databaseType == GEOIP_ORG_EDITION)
+		    || ($gi->databaseType == GEOIP_ISP_EDITION)
+		    || ($gi->databaseType == GEOIP_ASNUM_EDITION)){
+                $gi->databaseSegments = 0;
+                $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
+                for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
+                    $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
+                }
+	            if (($gi->databaseType == GEOIP_ORG_EDITION)||
+			($gi->databaseType == GEOIP_ISP_EDITION)) {
+	                $gi->record_length = ORG_RECORD_LENGTH;
+                }
+            }
+            break;
+        } else {
+            $offset -= 4;
+        }
+    }
+    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
+        ($gi->databaseType == GEOIP_PROXY_EDITION)||
+        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
+        $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
+    }
+  } else {
+    $filepos = ftell($gi->filehandle);
+    fseek($gi->filehandle, -3, SEEK_END);
+    for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
+        $delim = fread($gi->filehandle,3);
+        if ($delim == (chr(255).chr(255).chr(255))){
+        $gi->databaseType = ord(fread($gi->filehandle,1));
+        if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
+            $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
+        }
+        else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
+	    $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
+                }  else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) ||
+                 ($gi->databaseType == GEOIP_CITY_EDITION_REV1) || 
+                 ($gi->databaseType == GEOIP_ORG_EDITION) || 
+		 ($gi->databaseType == GEOIP_ISP_EDITION) || 
+                 ($gi->databaseType == GEOIP_ASNUM_EDITION)){
+            $gi->databaseSegments = 0;
+            $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
+            for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
+            $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
+            }
+	    if ($gi->databaseType == GEOIP_ORG_EDITION ||
+		$gi->databaseType == GEOIP_ISP_EDITION) {
+	    $gi->record_length = ORG_RECORD_LENGTH;
+            }
+        }
+        break;
+        } else {
+        fseek($gi->filehandle, -4, SEEK_CUR);
+        }
+    }
+    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
+        ($gi->databaseType == GEOIP_PROXY_EDITION)||
+        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
+         $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
+    }
+    fseek($gi->filehandle,$filepos,SEEK_SET);
+  }
+  return $gi;
+}
+
+function geoip_open($filename, $flags) {
+  $gi = new GeoIP;
+  $gi->flags = $flags;
+  if ($gi->flags & GEOIP_SHARED_MEMORY) {
+    $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
+    } else {
+    $gi->filehandle = fopen($filename,"rb") or die( "Can not open $filename\n" );
+    if ($gi->flags & GEOIP_MEMORY_CACHE) {
+        $s_array = fstat($gi->filehandle);
+        $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
+    }
+  }
+
+  $gi = _setup_segments($gi);
+  return $gi;
+}
+
+function geoip_close($gi) {
+  if ($gi->flags & GEOIP_SHARED_MEMORY) {
+    return true;
+  }
+
+  return fclose($gi->filehandle);
+}
+
+function geoip_country_id_by_name($gi, $name) {
+  $addr = gethostbyname($name);
+  if (!$addr || $addr == $name) {
+    return false;
+  }
+  return geoip_country_id_by_addr($gi, $addr);
+}
+
+function geoip_country_code_by_name($gi, $name) {
+  $country_id = geoip_country_id_by_name($gi,$name);
+  if ($country_id !== false) {
+        return $gi->GEOIP_COUNTRY_CODES[$country_id];
+  }
+  return false;
+}
+
+function geoip_country_name_by_name($gi, $name) {
+  $country_id = geoip_country_id_by_name($gi,$name);
+  if ($country_id !== false) {
+        return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+  }
+  return false;
+}
+
+function geoip_country_id_by_addr($gi, $addr) {
+  $ipnum = ip2long($addr);
+  return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
+}
+
+function geoip_country_code_by_addr($gi, $addr) {
+  if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
+    $record = geoip_record_by_addr($gi,$addr);
+    if ( $record !== false ) {
+      return $record->country_code;
+    }
+  } else {
+    $country_id = geoip_country_id_by_addr($gi,$addr);
+    if ($country_id !== false) {
+      return $gi->GEOIP_COUNTRY_CODES[$country_id];
+    }
+  }
+  return false;
+}
+
+function geoip_country_name_by_addr($gi, $addr) {
+  if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
+    $record = geoip_record_by_addr($gi,$addr);
+    return $record->country_name;
+  } else {
+    $country_id = geoip_country_id_by_addr($gi,$addr);
+    if ($country_id !== false) {
+      return $gi->GEOIP_COUNTRY_NAMES[$country_id];
+    }
+  }
+  return false;
+}
+
+function _geoip_seek_country($gi, $ipnum) {
+  $offset = 0;
+  for ($depth = 31; $depth >= 0; --$depth) {
+    if ($gi->flags & GEOIP_MEMORY_CACHE) {
+      $buf = substr($gi->memory_buffer,
+                            2 * $gi->record_length * $offset,
+                            2 * $gi->record_length);
+        } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
+      $buf = @shmop_read ($gi->shmid, 
+                            2 * $gi->record_length * $offset,
+                            2 * $gi->record_length );
+        } else {
+      fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
+        or die("fseek failed");
+      $buf = fread($gi->filehandle, 2 * $gi->record_length);
+    }
+    $x = array(0,0);
+    for ($i = 0; $i < 2; ++$i) {
+      for ($j = 0; $j < $gi->record_length; ++$j) {
+        $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
+      }
+    }
+    if ($ipnum & (1 << $depth)) {
+      if ($x[1] >= $gi->databaseSegments) {
+        return $x[1];
+      }
+      $offset = $x[1];
+        } else {
+      if ($x[0] >= $gi->databaseSegments) {
+        return $x[0];
+      }
+      $offset = $x[0];
+    }
+  }
+  trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
+  return false;
+}
+
+function _get_org($gi,$ipnum){
+  $seek_org = _geoip_seek_country($gi,$ipnum);
+  if ($seek_org == $gi->databaseSegments) {
+    return NULL;
+  }
+  $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
+  if ($gi->flags & GEOIP_SHARED_MEMORY) {
+    $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
+    } else {
+    fseek($gi->filehandle, $record_pointer, SEEK_SET);
+    $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
+  }
+  $org_buf = substr($org_buf, 0, strpos($org_buf, 0));
+  return $org_buf;
+}
+
+function geoip_org_by_addr ($gi,$addr) {
+  if ($addr == NULL) {
+    return 0;
+  }
+  $ipnum = ip2long($addr);
+  return _get_org($gi, $ipnum);
+}
+
+function _get_region($gi,$ipnum){
+  if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
+    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
+    if ($seek_region >= 1000){
+      $country_code = "US";
+      $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
+    } else {
+            $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
+      $region = "";
+    }
+  return array ($country_code,$region);
+    }  else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
+    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
+    //print $seek_region;
+    if ($seek_region < US_OFFSET){
+      $country_code = "";
+      $region = "";  
+        } else if ($seek_region < CANADA_OFFSET) {
+      $country_code = "US";
+      $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
+        } else if ($seek_region < WORLD_OFFSET) {
+      $country_code = "CA";
+      $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
+    } else {
+            $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
+      $region = "";
+    }
+  return array ($country_code,$region);
+  }
+}
+
+function geoip_region_by_addr ($gi,$addr) {
+  if ($addr == NULL) {
+    return 0;
+  }
+  $ipnum = ip2long($addr);
+  return _get_region($gi, $ipnum);
+}
+
+function getdnsattributes ($l,$ip){
+  $r = new Net_DNS_Resolver();
+  $r->nameservers = array("ws1.maxmind.com");
+  $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
+  $str = is_object($p->answer[0])?$p->answer[0]->string():'';
+  ereg("\"(.*)\"",$str,$regs);
+  $str = $regs[1];
+  return $str;
+}
+
+?>
diff --git a/htdocs/includes/geoip/geoipcity.inc b/htdocs/includes/geoip/geoipcity.inc
new file mode 100644
index 0000000000000000000000000000000000000000..3c21c694cabf850344a0356cbdd4291751ff4c09
--- /dev/null
+++ b/htdocs/includes/geoip/geoipcity.inc
@@ -0,0 +1,208 @@
+<?php
+
+/* geoipcity.inc
+ *
+ * Copyright (C) 2004 Maxmind LLC
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+/*
+ * Changelog:
+ *
+ * 2005-01-13   Andrew Hill, Awarez Ltd. (http://www.awarez.net)
+ *              Formatted file according to PEAR library standards.
+ *              Changed inclusion of geoip.inc file to require_once, so that
+ *                  this library can be used in the same script as geoip.inc.
+ */
+
+define("FULL_RECORD_LENGTH",50);
+
+require_once 'geoip.inc';
+require_once 'geoipregionvars.php';
+
+class geoiprecord {
+  var $country_code;
+  var $country_code3;
+  var $country_name;
+  var $region;
+  var $city;
+  var $postal_code;
+  var $latitude;
+  var $longitude;
+  var $area_code;
+  var $dma_code;   # metro and dma code are the same. use metro_code
+  var $metro_code;
+}
+
+class geoipdnsrecord {
+  var $country_code;
+  var $country_code3;
+  var $country_name;
+  var $region;
+  var $regionname;
+  var $city;
+  var $postal_code;
+  var $latitude;
+  var $longitude;
+  var $areacode;
+  var $dmacode;
+  var $isp;
+  var $org;
+  var $metrocode;
+}
+
+function getrecordwithdnsservice($str){
+  $record = new geoipdnsrecord;
+  $keyvalue = split(";",$str);
+  foreach ($keyvalue as $keyvalue2){
+    list($key,$value) = split("=",$keyvalue2);
+    if ($key == "co"){
+      $record->country_code = $value;
+    }
+    if ($key == "ci"){
+      $record->city = $value;
+    }
+    if ($key == "re"){
+      $record->region = $value;
+    }
+    if ($key == "ac"){
+      $record->areacode = $value;
+    }
+    if ($key == "dm" || $key == "me" ){
+      $record->dmacode   = $value;
+      $record->metrocode = $value;
+    }
+    if ($key == "is"){
+      $record->isp = $value;
+    }
+    if ($key == "or"){
+      $record->org = $value;
+    }
+    if ($key == "zi"){
+      $record->postal_code = $value;
+    }
+    if ($key == "la"){
+      $record->latitude = $value;
+    }
+    if ($key == "lo"){
+      $record->longitude = $value;
+    }
+  }
+  $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
+  $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
+  $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
+  if ($record->region != "") {
+    if (($record->country_code == "US") || ($record->country_code == "CA")){
+      $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
+    } else {
+      $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
+    }
+  }
+  return $record;
+}
+
+function _get_record($gi,$ipnum){
+  $seek_country = _geoip_seek_country($gi,$ipnum);
+  if ($seek_country == $gi->databaseSegments) {
+    return NULL;
+  }
+  $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
+  
+  if ($gi->flags & GEOIP_MEMORY_CACHE) {
+    $record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
+  } elseif ($gi->flags & GEOIP_SHARED_MEMORY){
+    $record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
+  } else {
+    fseek($gi->filehandle, $record_pointer, SEEK_SET);
+    $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
+  }
+  $record = new geoiprecord;
+  $record_buf_pos = 0;
+  $char = ord(substr($record_buf,$record_buf_pos,1));
+    $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
+    $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
+    $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
+  $record_buf_pos++;
+  $str_length = 0;
+    // Get region
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->region = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get city
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->city = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get postal code
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get latitude and longitude
+  $latitude = 0;
+  $longitude = 0;
+  for ($j = 0;$j < 3; ++$j){
+    $char = ord(substr($record_buf,$record_buf_pos++,1));
+    $latitude += ($char << ($j * 8));
+  }
+  $record->latitude = ($latitude/10000) - 180;
+  for ($j = 0;$j < 3; ++$j){
+    $char = ord(substr($record_buf,$record_buf_pos++,1));
+    $longitude += ($char << ($j * 8));
+  }
+  $record->longitude = ($longitude/10000) - 180;
+  if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
+    $metroarea_combo = 0;
+    if ($record->country_code == "US"){
+      for ($j = 0;$j < 3;++$j){
+        $char = ord(substr($record_buf,$record_buf_pos++,1));
+        $metroarea_combo += ($char << ($j * 8));
+      }
+      $record->metro_code = $record->dma_code = floor($metroarea_combo/1000);
+      $record->area_code = $metroarea_combo%1000;
+    }
+  }
+  return $record;
+}
+
+function GeoIP_record_by_addr ($gi,$addr){
+  if ($addr == NULL){
+     return 0;
+  }
+  $ipnum = ip2long($addr);
+  return _get_record($gi, $ipnum);
+}
+
+?>
diff --git a/htdocs/includes/geoip/geoipregionvars.php b/htdocs/includes/geoip/geoipregionvars.php
new file mode 100644
index 0000000000000000000000000000000000000000..7747c668af9305728a95dcad386c66c6e980065a
--- /dev/null
+++ b/htdocs/includes/geoip/geoipregionvars.php
@@ -0,0 +1,4456 @@
+<?php
+# Copyright 2009 Maxmind LLC All Rights Reserved
+$GEOIP_REGION_NAME = array(
+"AD" => array(
+  "02" => "Canillo",
+  "03" => "Encamp",
+  "04" => "La Massana",
+  "05" => "Ordino",
+  "06" => "Sant Julia de Loria",
+  "07" => "Andorra la Vella",
+  "08" => "Escaldes-Engordany"),
+"AE" => array(
+  "01" => "Abu Dhabi",
+  "02" => "Ajman",
+  "03" => "Dubai",
+  "04" => "Fujairah",
+  "05" => "Ras Al Khaimah",
+  "06" => "Sharjah",
+  "07" => "Umm Al Quwain"),
+"AF" => array(
+  "01" => "Badakhshan",
+  "02" => "Badghis",
+  "03" => "Baghlan",
+  "05" => "Bamian",
+  "06" => "Farah",
+  "07" => "Faryab",
+  "08" => "Ghazni",
+  "09" => "Ghowr",
+  "10" => "Helmand",
+  "11" => "Herat",
+  "13" => "Kabol",
+  "14" => "Kapisa",
+  "15" => "Konar",
+  "16" => "Laghman",
+  "17" => "Lowgar",
+  "18" => "Nangarhar",
+  "19" => "Nimruz",
+  "21" => "Paktia",
+  "22" => "Parvan",
+  "23" => "Kandahar",
+  "24" => "Kondoz",
+  "26" => "Takhar",
+  "27" => "Vardak",
+  "28" => "Zabol",
+  "29" => "Paktika",
+  "30" => "Balkh",
+  "31" => "Jowzjan",
+  "32" => "Samangan",
+  "33" => "Sar-e Pol",
+  "34" => "Konar",
+  "35" => "Laghman",
+  "36" => "Paktia",
+  "37" => "Khowst",
+  "38" => "Nurestan",
+  "39" => "Oruzgan",
+  "40" => "Parvan",
+  "41" => "Daykondi",
+  "42" => "Panjshir"),
+"AG" => array(
+  "01" => "Barbuda",
+  "03" => "Saint George",
+  "04" => "Saint John",
+  "05" => "Saint Mary",
+  "06" => "Saint Paul",
+  "07" => "Saint Peter",
+  "08" => "Saint Philip"),
+"AL" => array(
+  "40" => "Berat",
+  "41" => "Diber",
+  "42" => "Durres",
+  "43" => "Elbasan",
+  "44" => "Fier",
+  "45" => "Gjirokaster",
+  "46" => "Korce",
+  "47" => "Kukes",
+  "48" => "Lezhe",
+  "49" => "Shkoder",
+  "50" => "Tirane",
+  "51" => "Vlore"),
+"AM" => array(
+  "01" => "Aragatsotn",
+  "02" => "Ararat",
+  "03" => "Armavir",
+  "04" => "Geghark'unik'",
+  "05" => "Kotayk'",
+  "06" => "Lorri",
+  "07" => "Shirak",
+  "08" => "Syunik'",
+  "09" => "Tavush",
+  "10" => "Vayots' Dzor",
+  "11" => "Yerevan"),
+"AO" => array(
+  "01" => "Benguela",
+  "02" => "Bie",
+  "03" => "Cabinda",
+  "04" => "Cuando Cubango",
+  "05" => "Cuanza Norte",
+  "06" => "Cuanza Sul",
+  "07" => "Cunene",
+  "08" => "Huambo",
+  "09" => "Huila",
+  "10" => "Luanda",
+  "12" => "Malanje",
+  "13" => "Namibe",
+  "14" => "Moxico",
+  "15" => "Uige",
+  "16" => "Zaire",
+  "17" => "Lunda Norte",
+  "18" => "Lunda Sul",
+  "19" => "Bengo",
+  "20" => "Luanda"),
+"AR" => array(
+  "01" => "Buenos Aires",
+  "02" => "Catamarca",
+  "03" => "Chaco",
+  "04" => "Chubut",
+  "05" => "Cordoba",
+  "06" => "Corrientes",
+  "07" => "Distrito Federal",
+  "08" => "Entre Rios",
+  "09" => "Formosa",
+  "10" => "Jujuy",
+  "11" => "La Pampa",
+  "12" => "La Rioja",
+  "13" => "Mendoza",
+  "14" => "Misiones",
+  "15" => "Neuquen",
+  "16" => "Rio Negro",
+  "17" => "Salta",
+  "18" => "San Juan",
+  "19" => "San Luis",
+  "20" => "Santa Cruz",
+  "21" => "Santa Fe",
+  "22" => "Santiago del Estero",
+  "23" => "Tierra del Fuego",
+  "24" => "Tucuman"),
+"AT" => array(
+  "01" => "Burgenland",
+  "02" => "Karnten",
+  "03" => "Niederosterreich",
+  "04" => "Oberosterreich",
+  "05" => "Salzburg",
+  "06" => "Steiermark",
+  "07" => "Tirol",
+  "08" => "Vorarlberg",
+  "09" => "Wien"),
+"AU" => array(
+  "01" => "Australian Capital Territory",
+  "02" => "New South Wales",
+  "03" => "Northern Territory",
+  "04" => "Queensland",
+  "05" => "South Australia",
+  "06" => "Tasmania",
+  "07" => "Victoria",
+  "08" => "Western Australia"),
+"AZ" => array(
+  "01" => "Abseron",
+  "02" => "Agcabadi",
+  "03" => "Agdam",
+  "04" => "Agdas",
+  "05" => "Agstafa",
+  "06" => "Agsu",
+  "07" => "Ali Bayramli",
+  "08" => "Astara",
+  "09" => "Baki",
+  "10" => "Balakan",
+  "11" => "Barda",
+  "12" => "Beylaqan",
+  "13" => "Bilasuvar",
+  "14" => "Cabrayil",
+  "15" => "Calilabad",
+  "16" => "Daskasan",
+  "17" => "Davaci",
+  "18" => "Fuzuli",
+  "19" => "Gadabay",
+  "20" => "Ganca",
+  "21" => "Goranboy",
+  "22" => "Goycay",
+  "23" => "Haciqabul",
+  "24" => "Imisli",
+  "25" => "Ismayilli",
+  "26" => "Kalbacar",
+  "27" => "Kurdamir",
+  "28" => "Lacin",
+  "29" => "Lankaran",
+  "30" => "Lankaran",
+  "31" => "Lerik",
+  "32" => "Masalli",
+  "33" => "Mingacevir",
+  "34" => "Naftalan",
+  "35" => "Naxcivan",
+  "36" => "Neftcala",
+  "37" => "Oguz",
+  "38" => "Qabala",
+  "39" => "Qax",
+  "40" => "Qazax",
+  "41" => "Qobustan",
+  "42" => "Quba",
+  "43" => "Qubadli",
+  "44" => "Qusar",
+  "45" => "Saatli",
+  "46" => "Sabirabad",
+  "47" => "Saki",
+  "48" => "Saki",
+  "49" => "Salyan",
+  "50" => "Samaxi",
+  "51" => "Samkir",
+  "52" => "Samux",
+  "53" => "Siyazan",
+  "54" => "Sumqayit",
+  "55" => "Susa",
+  "56" => "Susa",
+  "57" => "Tartar",
+  "58" => "Tovuz",
+  "59" => "Ucar",
+  "60" => "Xacmaz",
+  "61" => "Xankandi",
+  "62" => "Xanlar",
+  "63" => "Xizi",
+  "64" => "Xocali",
+  "65" => "Xocavand",
+  "66" => "Yardimli",
+  "67" => "Yevlax",
+  "68" => "Yevlax",
+  "69" => "Zangilan",
+  "70" => "Zaqatala",
+  "71" => "Zardab"),
+"BA" => array(
+  "01" => "Federation of Bosnia and Herzegovina",
+  "02" => "Republika Srpska"),
+"BB" => array(
+  "01" => "Christ Church",
+  "02" => "Saint Andrew",
+  "03" => "Saint George",
+  "04" => "Saint James",
+  "05" => "Saint John",
+  "06" => "Saint Joseph",
+  "07" => "Saint Lucy",
+  "08" => "Saint Michael",
+  "09" => "Saint Peter",
+  "10" => "Saint Philip",
+  "11" => "Saint Thomas"),
+"BD" => array(
+  "01" => "Barisal",
+  "04" => "Bandarban",
+  "05" => "Comilla",
+  "12" => "Mymensingh",
+  "13" => "Noakhali",
+  "15" => "Patuakhali",
+  "22" => "Bagerhat",
+  "23" => "Bhola",
+  "24" => "Bogra",
+  "25" => "Barguna",
+  "26" => "Brahmanbaria",
+  "27" => "Chandpur",
+  "28" => "Chapai Nawabganj",
+  "29" => "Chattagram",
+  "30" => "Chuadanga",
+  "31" => "Cox's Bazar",
+  "32" => "Dhaka",
+  "33" => "Dinajpur",
+  "34" => "Faridpur",
+  "35" => "Feni",
+  "36" => "Gaibandha",
+  "37" => "Gazipur",
+  "38" => "Gopalganj",
+  "39" => "Habiganj",
+  "40" => "Jaipurhat",
+  "41" => "Jamalpur",
+  "42" => "Jessore",
+  "43" => "Jhalakati",
+  "44" => "Jhenaidah",
+  "45" => "Khagrachari",
+  "46" => "Khulna",
+  "47" => "Kishorganj",
+  "48" => "Kurigram",
+  "49" => "Kushtia",
+  "50" => "Laksmipur",
+  "51" => "Lalmonirhat",
+  "52" => "Madaripur",
+  "53" => "Magura",
+  "54" => "Manikganj",
+  "55" => "Meherpur",
+  "56" => "Moulavibazar",
+  "57" => "Munshiganj",
+  "58" => "Naogaon",
+  "59" => "Narail",
+  "60" => "Narayanganj",
+  "61" => "Narsingdi",
+  "62" => "Nator",
+  "63" => "Netrakona",
+  "64" => "Nilphamari",
+  "65" => "Pabna",
+  "66" => "Panchagar",
+  "67" => "Parbattya Chattagram",
+  "68" => "Pirojpur",
+  "69" => "Rajbari",
+  "70" => "Rajshahi",
+  "71" => "Rangpur",
+  "72" => "Satkhira",
+  "73" => "Shariyatpur",
+  "74" => "Sherpur",
+  "75" => "Sirajganj",
+  "76" => "Sunamganj",
+  "77" => "Sylhet",
+  "78" => "Tangail",
+  "79" => "Thakurgaon",
+  "81" => "Dhaka",
+  "82" => "Khulna",
+  "83" => "Rajshahi",
+  "84" => "Chittagong",
+  "85" => "Barisal",
+  "86" => "Sylhet"),
+"BE" => array(
+  "01" => "Antwerpen",
+  "02" => "Brabant",
+  "03" => "Hainaut",
+  "04" => "Liege",
+  "05" => "Limburg",
+  "06" => "Luxembourg",
+  "07" => "Namur",
+  "08" => "Oost-Vlaanderen",
+  "09" => "West-Vlaanderen",
+  "10" => "Brabant Wallon",
+  "11" => "Brussels Hoofdstedelijk Gewest",
+  "12" => "Vlaams-Brabant"),
+"BF" => array(
+  "15" => "Bam",
+  "19" => "Boulkiemde",
+  "20" => "Ganzourgou",
+  "21" => "Gnagna",
+  "28" => "Kouritenga",
+  "33" => "Oudalan",
+  "34" => "Passore",
+  "36" => "Sanguie",
+  "40" => "Soum",
+  "42" => "Tapoa",
+  "44" => "Zoundweogo",
+  "45" => "Bale",
+  "46" => "Banwa",
+  "47" => "Bazega",
+  "48" => "Bougouriba",
+  "49" => "Boulgou",
+  "50" => "Gourma",
+  "51" => "Houet",
+  "52" => "Ioba",
+  "53" => "Kadiogo",
+  "54" => "Kenedougou",
+  "55" => "Komoe",
+  "56" => "Komondjari",
+  "57" => "Kompienga",
+  "58" => "Kossi",
+  "59" => "Koulpelogo",
+  "60" => "Kourweogo",
+  "61" => "Leraba",
+  "62" => "Loroum",
+  "63" => "Mouhoun",
+  "64" => "Namentenga",
+  "65" => "Naouri",
+  "66" => "Nayala",
+  "67" => "Noumbiel",
+  "68" => "Oubritenga",
+  "69" => "Poni",
+  "70" => "Sanmatenga",
+  "71" => "Seno",
+  "72" => "Sissili",
+  "73" => "Sourou",
+  "74" => "Tuy",
+  "75" => "Yagha",
+  "76" => "Yatenga",
+  "77" => "Ziro",
+  "78" => "Zondoma"),
+"BG" => array(
+  "33" => "Mikhaylovgrad",
+  "38" => "Blagoevgrad",
+  "39" => "Burgas",
+  "40" => "Dobrich",
+  "41" => "Gabrovo",
+  "42" => "Grad Sofiya",
+  "43" => "Khaskovo",
+  "44" => "Kurdzhali",
+  "45" => "Kyustendil",
+  "46" => "Lovech",
+  "47" => "Montana",
+  "48" => "Pazardzhik",
+  "49" => "Pernik",
+  "50" => "Pleven",
+  "51" => "Plovdiv",
+  "52" => "Razgrad",
+  "53" => "Ruse",
+  "54" => "Shumen",
+  "55" => "Silistra",
+  "56" => "Sliven",
+  "57" => "Smolyan",
+  "58" => "Sofiya",
+  "59" => "Stara Zagora",
+  "60" => "Turgovishte",
+  "61" => "Varna",
+  "62" => "Veliko Turnovo",
+  "63" => "Vidin",
+  "64" => "Vratsa",
+  "65" => "Yambol"),
+"BH" => array(
+  "01" => "Al Hadd",
+  "02" => "Al Manamah",
+  "03" => "Al Muharraq",
+  "05" => "Jidd Hafs",
+  "06" => "Sitrah",
+  "07" => "Ar Rifa' wa al Mintaqah al Janubiyah",
+  "08" => "Al Mintaqah al Gharbiyah",
+  "09" => "Mintaqat Juzur Hawar",
+  "10" => "Al Mintaqah ash Shamaliyah",
+  "11" => "Al Mintaqah al Wusta",
+  "12" => "Madinat",
+  "13" => "Ar Rifa",
+  "14" => "Madinat Hamad",
+  "15" => "Al Muharraq",
+  "16" => "Al Asimah",
+  "17" => "Al Janubiyah",
+  "18" => "Ash Shamaliyah",
+  "19" => "Al Wusta"),
+"BI" => array(
+  "02" => "Bujumbura",
+  "09" => "Bubanza",
+  "10" => "Bururi",
+  "11" => "Cankuzo",
+  "12" => "Cibitoke",
+  "13" => "Gitega",
+  "14" => "Karuzi",
+  "15" => "Kayanza",
+  "16" => "Kirundo",
+  "17" => "Makamba",
+  "18" => "Muyinga",
+  "19" => "Ngozi",
+  "20" => "Rutana",
+  "21" => "Ruyigi",
+  "22" => "Muramvya",
+  "23" => "Mwaro"),
+"BJ" => array(
+  "01" => "Atakora",
+  "02" => "Atlantique",
+  "03" => "Borgou",
+  "04" => "Mono",
+  "05" => "Oueme",
+  "06" => "Zou",
+  "07" => "Alibori",
+  "08" => "Atakora",
+  "09" => "Atlanyique",
+  "10" => "Borgou",
+  "11" => "Collines",
+  "12" => "Kouffo",
+  "13" => "Donga",
+  "14" => "Littoral",
+  "15" => "Mono",
+  "16" => "Oueme",
+  "17" => "Plateau",
+  "18" => "Zou"),
+"BM" => array(
+  "01" => "Devonshire",
+  "02" => "Hamilton",
+  "03" => "Hamilton",
+  "04" => "Paget",
+  "05" => "Pembroke",
+  "06" => "Saint George",
+  "07" => "Saint George's",
+  "08" => "Sandys",
+  "09" => "Smiths",
+  "10" => "Southampton",
+  "11" => "Warwick"),
+"BN" => array(
+  "07" => "Alibori",
+  "08" => "Belait",
+  "09" => "Brunei and Muara",
+  "10" => "Temburong",
+  "11" => "Collines",
+  "12" => "Kouffo",
+  "13" => "Donga",
+  "14" => "Littoral",
+  "15" => "Tutong",
+  "16" => "Oueme",
+  "17" => "Plateau",
+  "18" => "Zou"),
+"BO" => array(
+  "01" => "Chuquisaca",
+  "02" => "Cochabamba",
+  "03" => "El Beni",
+  "04" => "La Paz",
+  "05" => "Oruro",
+  "06" => "Pando",
+  "07" => "Potosi",
+  "08" => "Santa Cruz",
+  "09" => "Tarija"),
+"BR" => array(
+  "01" => "Acre",
+  "02" => "Alagoas",
+  "03" => "Amapa",
+  "04" => "Amazonas",
+  "05" => "Bahia",
+  "06" => "Ceara",
+  "07" => "Distrito Federal",
+  "08" => "Espirito Santo",
+  "11" => "Mato Grosso do Sul",
+  "13" => "Maranhao",
+  "14" => "Mato Grosso",
+  "15" => "Minas Gerais",
+  "16" => "Para",
+  "17" => "Paraiba",
+  "18" => "Parana",
+  "20" => "Piaui",
+  "21" => "Rio de Janeiro",
+  "22" => "Rio Grande do Norte",
+  "23" => "Rio Grande do Sul",
+  "24" => "Rondonia",
+  "25" => "Roraima",
+  "26" => "Santa Catarina",
+  "27" => "Sao Paulo",
+  "28" => "Sergipe",
+  "29" => "Goias",
+  "30" => "Pernambuco",
+  "31" => "Tocantins"),
+"BS" => array(
+  "05" => "Bimini",
+  "06" => "Cat Island",
+  "10" => "Exuma",
+  "13" => "Inagua",
+  "15" => "Long Island",
+  "16" => "Mayaguana",
+  "18" => "Ragged Island",
+  "22" => "Harbour Island",
+  "23" => "New Providence",
+  "24" => "Acklins and Crooked Islands",
+  "25" => "Freeport",
+  "26" => "Fresh Creek",
+  "27" => "Governor's Harbour",
+  "28" => "Green Turtle Cay",
+  "29" => "High Rock",
+  "30" => "Kemps Bay",
+  "31" => "Marsh Harbour",
+  "32" => "Nichollstown and Berry Islands",
+  "33" => "Rock Sound",
+  "34" => "Sandy Point",
+  "35" => "San Salvador and Rum Cay"),
+"BT" => array(
+  "05" => "Bumthang",
+  "06" => "Chhukha",
+  "07" => "Chirang",
+  "08" => "Daga",
+  "09" => "Geylegphug",
+  "10" => "Ha",
+  "11" => "Lhuntshi",
+  "12" => "Mongar",
+  "13" => "Paro",
+  "14" => "Pemagatsel",
+  "15" => "Punakha",
+  "16" => "Samchi",
+  "17" => "Samdrup",
+  "18" => "Shemgang",
+  "19" => "Tashigang",
+  "20" => "Thimphu",
+  "21" => "Tongsa",
+  "22" => "Wangdi Phodrang"),
+"BW" => array(
+  "01" => "Central",
+  "03" => "Ghanzi",
+  "04" => "Kgalagadi",
+  "05" => "Kgatleng",
+  "06" => "Kweneng",
+  "08" => "North-East",
+  "09" => "South-East",
+  "10" => "Southern",
+  "11" => "North-West"),
+"BY" => array(
+  "01" => "Brestskaya Voblasts'",
+  "02" => "Homyel'skaya Voblasts'",
+  "03" => "Hrodzyenskaya Voblasts'",
+  "04" => "Minsk",
+  "05" => "Minskaya Voblasts'",
+  "06" => "Mahilyowskaya Voblasts'",
+  "07" => "Vitsyebskaya Voblasts'"),
+"BZ" => array(
+  "01" => "Belize",
+  "02" => "Cayo",
+  "03" => "Corozal",
+  "04" => "Orange Walk",
+  "05" => "Stann Creek",
+  "06" => "Toledo"),
+"CA" => array(
+  "AB" => "Alberta",
+  "BC" => "British Columbia",
+  "MB" => "Manitoba",
+  "NB" => "New Brunswick",
+  "NL" => "Newfoundland",
+  "NS" => "Nova Scotia",
+  "NT" => "Northwest Territories",
+  "NU" => "Nunavut",
+  "ON" => "Ontario",
+  "PE" => "Prince Edward Island",
+  "QC" => "Quebec",
+  "SK" => "Saskatchewan",
+  "YT" => "Yukon Territory"),
+"CD" => array(
+  "01" => "Bandundu",
+  "02" => "Equateur",
+  "04" => "Kasai-Oriental",
+  "05" => "Katanga",
+  "06" => "Kinshasa",
+  "07" => "Kivu",
+  "08" => "Bas-Congo",
+  "09" => "Orientale",
+  "10" => "Maniema",
+  "11" => "Nord-Kivu",
+  "12" => "Sud-Kivu",
+  "13" => "Cuvette"),
+"CF" => array(
+  "01" => "Bamingui-Bangoran",
+  "02" => "Basse-Kotto",
+  "03" => "Haute-Kotto",
+  "04" => "Mambere-Kadei",
+  "05" => "Haut-Mbomou",
+  "06" => "Kemo",
+  "07" => "Lobaye",
+  "08" => "Mbomou",
+  "09" => "Nana-Mambere",
+  "11" => "Ouaka",
+  "12" => "Ouham",
+  "13" => "Ouham-Pende",
+  "14" => "Cuvette-Ouest",
+  "15" => "Nana-Grebizi",
+  "16" => "Sangha-Mbaere",
+  "17" => "Ombella-Mpoko",
+  "18" => "Bangui"),
+"CG" => array(
+  "01" => "Bouenza",
+  "03" => "Cuvette",
+  "04" => "Kouilou",
+  "05" => "Lekoumou",
+  "06" => "Likouala",
+  "07" => "Niari",
+  "08" => "Plateaux",
+  "10" => "Sangha",
+  "11" => "Pool",
+  "12" => "Brazzaville"),
+"CH" => array(
+  "01" => "Aargau",
+  "02" => "Ausser-Rhoden",
+  "03" => "Basel-Landschaft",
+  "04" => "Basel-Stadt",
+  "05" => "Bern",
+  "06" => "Fribourg",
+  "07" => "Geneve",
+  "08" => "Glarus",
+  "09" => "Graubunden",
+  "10" => "Inner-Rhoden",
+  "11" => "Luzern",
+  "12" => "Neuchatel",
+  "13" => "Nidwalden",
+  "14" => "Obwalden",
+  "15" => "Sankt Gallen",
+  "16" => "Schaffhausen",
+  "17" => "Schwyz",
+  "18" => "Solothurn",
+  "19" => "Thurgau",
+  "20" => "Ticino",
+  "21" => "Uri",
+  "22" => "Valais",
+  "23" => "Vaud",
+  "24" => "Zug",
+  "25" => "Zurich",
+  "26" => "Jura"),
+"CI" => array(
+  "05" => "Atacama",
+  "06" => "Biobio",
+  "51" => "Sassandra",
+  "61" => "Abidjan",
+  "74" => "Agneby",
+  "75" => "Bafing",
+  "76" => "Bas-Sassandra",
+  "77" => "Denguele",
+  "78" => "Dix-Huit Montagnes",
+  "79" => "Fromager",
+  "80" => "Haut-Sassandra",
+  "81" => "Lacs",
+  "82" => "Lagunes",
+  "83" => "Marahoue",
+  "84" => "Moyen-Cavally",
+  "85" => "Moyen-Comoe",
+  "86" => "N'zi-Comoe",
+  "87" => "Savanes",
+  "88" => "Sud-Bandama",
+  "89" => "Sud-Comoe",
+  "90" => "Vallee du Bandama",
+  "91" => "Worodougou",
+  "92" => "Zanzan"),
+"CL" => array(
+  "01" => "Valparaiso",
+  "02" => "Aisen del General Carlos Ibanez del Campo",
+  "03" => "Antofagasta",
+  "04" => "Araucania",
+  "05" => "Atacama",
+  "06" => "Bio-Bio",
+  "07" => "Coquimbo",
+  "08" => "Libertador General Bernardo O'Higgins",
+  "09" => "Los Lagos",
+  "10" => "Magallanes y de la Antartica Chilena",
+  "11" => "Maule",
+  "12" => "Region Metropolitana",
+  "13" => "Tarapaca"),
+"CM" => array(
+  "04" => "Est",
+  "05" => "Littoral",
+  "07" => "Nord-Ouest",
+  "08" => "Ouest",
+  "09" => "Sud-Ouest",
+  "10" => "Adamaoua",
+  "11" => "Centre",
+  "12" => "Extreme-Nord",
+  "13" => "Nord",
+  "14" => "Sud"),
+"CN" => array(
+  "01" => "Anhui",
+  "02" => "Zhejiang",
+  "03" => "Jiangxi",
+  "04" => "Jiangsu",
+  "05" => "Jilin",
+  "06" => "Qinghai",
+  "07" => "Fujian",
+  "08" => "Heilongjiang",
+  "09" => "Henan",
+  "10" => "Hebei",
+  "11" => "Hunan",
+  "12" => "Hubei",
+  "13" => "Xinjiang",
+  "14" => "Xizang",
+  "15" => "Gansu",
+  "16" => "Guangxi",
+  "18" => "Guizhou",
+  "19" => "Liaoning",
+  "20" => "Nei Mongol",
+  "21" => "Ningxia",
+  "22" => "Beijing",
+  "23" => "Shanghai",
+  "24" => "Shanxi",
+  "25" => "Shandong",
+  "26" => "Shaanxi",
+  "28" => "Tianjin",
+  "29" => "Yunnan",
+  "30" => "Guangdong",
+  "31" => "Hainan",
+  "32" => "Sichuan",
+  "33" => "Chongqing"),
+"CO" => array(
+  "01" => "Amazonas",
+  "02" => "Antioquia",
+  "03" => "Arauca",
+  "04" => "Atlantico",
+  "05" => "Bolivar Department",
+  "06" => "Boyaca Department",
+  "07" => "Caldas Department",
+  "08" => "Caqueta",
+  "09" => "Cauca",
+  "10" => "Cesar",
+  "11" => "Choco",
+  "12" => "Cordoba",
+  "14" => "Guaviare",
+  "15" => "Guainia",
+  "16" => "Huila",
+  "17" => "La Guajira",
+  "18" => "Magdalena Department",
+  "19" => "Meta",
+  "20" => "Narino",
+  "21" => "Norte de Santander",
+  "22" => "Putumayo",
+  "23" => "Quindio",
+  "24" => "Risaralda",
+  "25" => "San Andres y Providencia",
+  "26" => "Santander",
+  "27" => "Sucre",
+  "28" => "Tolima",
+  "29" => "Valle del Cauca",
+  "30" => "Vaupes",
+  "31" => "Vichada",
+  "32" => "Casanare",
+  "33" => "Cundinamarca",
+  "34" => "Distrito Especial",
+  "35" => "Bolivar",
+  "36" => "Boyaca",
+  "37" => "Caldas",
+  "38" => "Magdalena"),
+"CR" => array(
+  "01" => "Alajuela",
+  "02" => "Cartago",
+  "03" => "Guanacaste",
+  "04" => "Heredia",
+  "06" => "Limon",
+  "07" => "Puntarenas",
+  "08" => "San Jose"),
+"CU" => array(
+  "01" => "Pinar del Rio",
+  "02" => "Ciudad de la Habana",
+  "03" => "Matanzas",
+  "04" => "Isla de la Juventud",
+  "05" => "Camaguey",
+  "07" => "Ciego de Avila",
+  "08" => "Cienfuegos",
+  "09" => "Granma",
+  "10" => "Guantanamo",
+  "11" => "La Habana",
+  "12" => "Holguin",
+  "13" => "Las Tunas",
+  "14" => "Sancti Spiritus",
+  "15" => "Santiago de Cuba",
+  "16" => "Villa Clara"),
+"CV" => array(
+  "01" => "Boa Vista",
+  "02" => "Brava",
+  "04" => "Maio",
+  "05" => "Paul",
+  "07" => "Ribeira Grande",
+  "08" => "Sal",
+  "10" => "Sao Nicolau",
+  "11" => "Sao Vicente",
+  "13" => "Mosteiros",
+  "14" => "Praia",
+  "15" => "Santa Catarina",
+  "16" => "Santa Cruz",
+  "17" => "Sao Domingos",
+  "18" => "Sao Filipe",
+  "19" => "Sao Miguel",
+  "20" => "Tarrafal"),
+"CY" => array(
+  "01" => "Famagusta",
+  "02" => "Kyrenia",
+  "03" => "Larnaca",
+  "04" => "Nicosia",
+  "05" => "Limassol",
+  "06" => "Paphos"),
+"CZ" => array(
+  "03" => "Blansko",
+  "04" => "Breclav",
+  "20" => "Hradec Kralove",
+  "21" => "Jablonec nad Nisou",
+  "23" => "Jicin",
+  "24" => "Jihlava",
+  "30" => "Kolin",
+  "33" => "Liberec",
+  "36" => "Melnik",
+  "37" => "Mlada Boleslav",
+  "39" => "Nachod",
+  "41" => "Nymburk",
+  "45" => "Pardubice",
+  "52" => "Hlavni mesto Praha",
+  "61" => "Semily",
+  "70" => "Trutnov",
+  "78" => "Jihomoravsky kraj",
+  "79" => "Jihocesky kraj",
+  "80" => "Vysocina",
+  "81" => "Karlovarsky kraj",
+  "82" => "Kralovehradecky kraj",
+  "83" => "Liberecky kraj",
+  "84" => "Olomoucky kraj",
+  "85" => "Moravskoslezsky kraj",
+  "86" => "Pardubicky kraj",
+  "87" => "Plzensky kraj",
+  "88" => "Stredocesky kraj",
+  "89" => "Ustecky kraj",
+  "90" => "Zlinsky kraj"),
+"DE" => array(
+  "01" => "Baden-Wurttemberg",
+  "02" => "Bayern",
+  "03" => "Bremen",
+  "04" => "Hamburg",
+  "05" => "Hessen",
+  "06" => "Niedersachsen",
+  "07" => "Nordrhein-Westfalen",
+  "08" => "Rheinland-Pfalz",
+  "09" => "Saarland",
+  "10" => "Schleswig-Holstein",
+  "11" => "Brandenburg",
+  "12" => "Mecklenburg-Vorpommern",
+  "13" => "Sachsen",
+  "14" => "Sachsen-Anhalt",
+  "15" => "Thuringen",
+  "16" => "Berlin"),
+"DJ" => array(
+  "01" => "Ali Sabieh",
+  "04" => "Obock",
+  "05" => "Tadjoura",
+  "06" => "Dikhil",
+  "07" => "Djibouti",
+  "08" => "Arta"),
+"DK" => array(
+  "01" => "Arhus",
+  "02" => "Bornholm",
+  "03" => "Frederiksborg",
+  "04" => "Fyn",
+  "05" => "Kobenhavn",
+  "06" => "Staden Kobenhavn",
+  "07" => "Nordjylland",
+  "08" => "Ribe",
+  "09" => "Ringkobing",
+  "10" => "Roskilde",
+  "11" => "Sonderjylland",
+  "12" => "Storstrom",
+  "13" => "Vejle",
+  "14" => "Vestsjalland",
+  "15" => "Viborg",
+  "17" => "Hovedstaden",
+  "18" => "Midtjyllen",
+  "19" => "Nordjylland",
+  "20" => "Sjelland",
+  "21" => "Syddanmark"),
+"DM" => array(
+  "02" => "Saint Andrew",
+  "03" => "Saint David",
+  "04" => "Saint George",
+  "05" => "Saint John",
+  "06" => "Saint Joseph",
+  "07" => "Saint Luke",
+  "08" => "Saint Mark",
+  "09" => "Saint Patrick",
+  "10" => "Saint Paul",
+  "11" => "Saint Peter"),
+"DO" => array(
+  "01" => "Azua",
+  "02" => "Baoruco",
+  "03" => "Barahona",
+  "04" => "Dajabon",
+  "05" => "Distrito Nacional",
+  "06" => "Duarte",
+  "08" => "Espaillat",
+  "09" => "Independencia",
+  "10" => "La Altagracia",
+  "11" => "Elias Pina",
+  "12" => "La Romana",
+  "14" => "Maria Trinidad Sanchez",
+  "15" => "Monte Cristi",
+  "16" => "Pedernales",
+  "17" => "Peravia",
+  "18" => "Puerto Plata",
+  "19" => "Salcedo",
+  "20" => "Samana",
+  "21" => "Sanchez Ramirez",
+  "23" => "San Juan",
+  "24" => "San Pedro De Macoris",
+  "25" => "Santiago",
+  "26" => "Santiago Rodriguez",
+  "27" => "Valverde",
+  "28" => "El Seibo",
+  "29" => "Hato Mayor",
+  "30" => "La Vega",
+  "31" => "Monsenor Nouel",
+  "32" => "Monte Plata",
+  "33" => "San Cristobal",
+  "34" => "Distrito Nacional",
+  "35" => "Peravia",
+  "36" => "San Jose de Ocoa",
+  "37" => "Santo Domingo"),
+"DZ" => array(
+  "01" => "Alger",
+  "03" => "Batna",
+  "04" => "Constantine",
+  "06" => "Medea",
+  "07" => "Mostaganem",
+  "09" => "Oran",
+  "10" => "Saida",
+  "12" => "Setif",
+  "13" => "Tiaret",
+  "14" => "Tizi Ouzou",
+  "15" => "Tlemcen",
+  "18" => "Bejaia",
+  "19" => "Biskra",
+  "20" => "Blida",
+  "21" => "Bouira",
+  "22" => "Djelfa",
+  "23" => "Guelma",
+  "24" => "Jijel",
+  "25" => "Laghouat",
+  "26" => "Mascara",
+  "27" => "M'sila",
+  "29" => "Oum el Bouaghi",
+  "30" => "Sidi Bel Abbes",
+  "31" => "Skikda",
+  "33" => "Tebessa",
+  "34" => "Adrar",
+  "35" => "Ain Defla",
+  "36" => "Ain Temouchent",
+  "37" => "Annaba",
+  "38" => "Bechar",
+  "39" => "Bordj Bou Arreridj",
+  "40" => "Boumerdes",
+  "41" => "Chlef",
+  "42" => "El Bayadh",
+  "43" => "El Oued",
+  "44" => "El Tarf",
+  "45" => "Ghardaia",
+  "46" => "Illizi",
+  "47" => "Khenchela",
+  "48" => "Mila",
+  "49" => "Naama",
+  "50" => "Ouargla",
+  "51" => "Relizane",
+  "52" => "Souk Ahras",
+  "53" => "Tamanghasset",
+  "54" => "Tindouf",
+  "55" => "Tipaza",
+  "56" => "Tissemsilt"),
+"EC" => array(
+  "01" => "Galapagos",
+  "02" => "Azuay",
+  "03" => "Bolivar",
+  "04" => "Canar",
+  "05" => "Carchi",
+  "06" => "Chimborazo",
+  "07" => "Cotopaxi",
+  "08" => "El Oro",
+  "09" => "Esmeraldas",
+  "10" => "Guayas",
+  "11" => "Imbabura",
+  "12" => "Loja",
+  "13" => "Los Rios",
+  "14" => "Manabi",
+  "15" => "Morona-Santiago",
+  "17" => "Pastaza",
+  "18" => "Pichincha",
+  "19" => "Tungurahua",
+  "20" => "Zamora-Chinchipe",
+  "22" => "Sucumbios",
+  "23" => "Napo",
+  "24" => "Orellana"),
+"EE" => array(
+  "01" => "Harjumaa",
+  "02" => "Hiiumaa",
+  "03" => "Ida-Virumaa",
+  "04" => "Jarvamaa",
+  "05" => "Jogevamaa",
+  "06" => "Kohtla-Jarve",
+  "07" => "Laanemaa",
+  "08" => "Laane-Virumaa",
+  "09" => "Narva",
+  "10" => "Parnu",
+  "11" => "Parnumaa",
+  "12" => "Polvamaa",
+  "13" => "Raplamaa",
+  "14" => "Saaremaa",
+  "15" => "Sillamae",
+  "16" => "Tallinn",
+  "17" => "Tartu",
+  "18" => "Tartumaa",
+  "19" => "Valgamaa",
+  "20" => "Viljandimaa",
+  "21" => "Vorumaa"),
+"EG" => array(
+  "01" => "Ad Daqahliyah",
+  "02" => "Al Bahr al Ahmar",
+  "03" => "Al Buhayrah",
+  "04" => "Al Fayyum",
+  "05" => "Al Gharbiyah",
+  "06" => "Al Iskandariyah",
+  "07" => "Al Isma'iliyah",
+  "08" => "Al Jizah",
+  "09" => "Al Minufiyah",
+  "10" => "Al Minya",
+  "11" => "Al Qahirah",
+  "12" => "Al Qalyubiyah",
+  "13" => "Al Wadi al Jadid",
+  "14" => "Ash Sharqiyah",
+  "15" => "As Suways",
+  "16" => "Aswan",
+  "17" => "Asyut",
+  "18" => "Bani Suwayf",
+  "19" => "Bur Sa'id",
+  "20" => "Dumyat",
+  "21" => "Kafr ash Shaykh",
+  "22" => "Matruh",
+  "23" => "Qina",
+  "24" => "Suhaj",
+  "26" => "Janub Sina'",
+  "27" => "Shamal Sina'"),
+"ER" => array(
+  "01" => "Anseba",
+  "02" => "Debub",
+  "03" => "Debubawi K'eyih Bahri",
+  "04" => "Gash Barka",
+  "05" => "Ma'akel",
+  "06" => "Semenawi K'eyih Bahri"),
+"ES" => array(
+  "07" => "Islas Baleares",
+  "27" => "La Rioja",
+  "29" => "Madrid",
+  "31" => "Murcia",
+  "32" => "Navarra",
+  "34" => "Asturias",
+  "39" => "Cantabria",
+  "51" => "Andalucia",
+  "52" => "Aragon",
+  "53" => "Canarias",
+  "54" => "Castilla-La Mancha",
+  "55" => "Castilla y Leon",
+  "56" => "Catalonia",
+  "57" => "Extremadura",
+  "58" => "Galicia",
+  "59" => "Pais Vasco",
+  "60" => "Comunidad Valenciana"),
+"ET" => array(
+  "02" => "Amhara",
+  "07" => "Somali",
+  "08" => "Gambella",
+  "10" => "Addis Abeba",
+  "11" => "Southern",
+  "12" => "Tigray",
+  "13" => "Benishangul",
+  "14" => "Afar",
+  "44" => "Adis Abeba",
+  "45" => "Afar",
+  "46" => "Amara",
+  "47" => "Binshangul Gumuz",
+  "48" => "Dire Dawa",
+  "49" => "Gambela Hizboch",
+  "50" => "Hareri Hizb",
+  "51" => "Oromiya",
+  "52" => "Sumale",
+  "53" => "Tigray",
+  "54" => "YeDebub Biheroch Bihereseboch na Hizboch"),
+"FI" => array(
+  "01" => "Aland",
+  "06" => "Lapland",
+  "08" => "Oulu",
+  "13" => "Southern Finland",
+  "14" => "Eastern Finland",
+  "15" => "Western Finland"),
+"FJ" => array(
+  "01" => "Central",
+  "02" => "Eastern",
+  "03" => "Northern",
+  "04" => "Rotuma",
+  "05" => "Western"),
+"FM" => array(
+  "01" => "Kosrae",
+  "02" => "Pohnpei",
+  "03" => "Chuuk",
+  "04" => "Yap"),
+"FR" => array(
+  "97" => "Aquitaine",
+  "98" => "Auvergne",
+  "99" => "Basse-Normandie",
+  "A1" => "Bourgogne",
+  "A2" => "Bretagne",
+  "A3" => "Centre",
+  "A4" => "Champagne-Ardenne",
+  "A5" => "Corse",
+  "A6" => "Franche-Comte",
+  "A7" => "Haute-Normandie",
+  "A8" => "Ile-de-France",
+  "A9" => "Languedoc-Roussillon",
+  "B1" => "Limousin",
+  "B2" => "Lorraine",
+  "B3" => "Midi-Pyrenees",
+  "B4" => "Nord-Pas-de-Calais",
+  "B5" => "Pays de la Loire",
+  "B6" => "Picardie",
+  "B7" => "Poitou-Charentes",
+  "B8" => "Provence-Alpes-Cote d'Azur",
+  "B9" => "Rhone-Alpes",
+  "C1" => "Alsace"),
+"GA" => array(
+  "01" => "Estuaire",
+  "02" => "Haut-Ogooue",
+  "03" => "Moyen-Ogooue",
+  "04" => "Ngounie",
+  "05" => "Nyanga",
+  "06" => "Ogooue-Ivindo",
+  "07" => "Ogooue-Lolo",
+  "08" => "Ogooue-Maritime",
+  "09" => "Woleu-Ntem"),
+"GB" => array(
+  "01" => "Avon",
+  "03" => "Berkshire",
+  "07" => "Cleveland",
+  "17" => "Greater London",
+  "18" => "Greater Manchester",
+  "20" => "Hereford and Worcester",
+  "22" => "Humberside",
+  "28" => "Merseyside",
+  "37" => "South Yorkshire",
+  "41" => "Tyne and Wear",
+  "43" => "West Midlands",
+  "45" => "West Yorkshire",
+  "79" => "Central",
+  "82" => "Grampian",
+  "84" => "Lothian",
+  "87" => "Strathclyde",
+  "88" => "Tayside",
+  "90" => "Clwyd",
+  "91" => "Dyfed",
+  "92" => "Gwent",
+  "94" => "Mid Glamorgan",
+  "96" => "South Glamorgan",
+  "97" => "West Glamorgan",
+  "A1" => "Barking and Dagenham",
+  "A2" => "Barnet",
+  "A3" => "Barnsley",
+  "A4" => "Bath and North East Somerset",
+  "A5" => "Bedfordshire",
+  "A6" => "Bexley",
+  "A7" => "Birmingham",
+  "A8" => "Blackburn with Darwen",
+  "A9" => "Blackpool",
+  "B1" => "Bolton",
+  "B2" => "Bournemouth",
+  "B3" => "Bracknell Forest",
+  "B4" => "Bradford",
+  "B5" => "Brent",
+  "B6" => "Brighton and Hove",
+  "B7" => "Bristol, City of",
+  "B8" => "Bromley",
+  "B9" => "Buckinghamshire",
+  "C1" => "Bury",
+  "C2" => "Calderdale",
+  "C3" => "Cambridgeshire",
+  "C4" => "Camden",
+  "C5" => "Cheshire",
+  "C6" => "Cornwall",
+  "C7" => "Coventry",
+  "C8" => "Croydon",
+  "C9" => "Cumbria",
+  "D1" => "Darlington",
+  "D2" => "Derby",
+  "D3" => "Derbyshire",
+  "D4" => "Devon",
+  "D5" => "Doncaster",
+  "D6" => "Dorset",
+  "D7" => "Dudley",
+  "D8" => "Durham",
+  "D9" => "Ealing",
+  "E1" => "East Riding of Yorkshire",
+  "E2" => "East Sussex",
+  "E3" => "Enfield",
+  "E4" => "Essex",
+  "E5" => "Gateshead",
+  "E6" => "Gloucestershire",
+  "E7" => "Greenwich",
+  "E8" => "Hackney",
+  "E9" => "Halton",
+  "F1" => "Hammersmith and Fulham",
+  "F2" => "Hampshire",
+  "F3" => "Haringey",
+  "F4" => "Harrow",
+  "F5" => "Hartlepool",
+  "F6" => "Havering",
+  "F7" => "Herefordshire",
+  "F8" => "Hertford",
+  "F9" => "Hillingdon",
+  "G1" => "Hounslow",
+  "G2" => "Isle of Wight",
+  "G3" => "Islington",
+  "G4" => "Kensington and Chelsea",
+  "G5" => "Kent",
+  "G6" => "Kingston upon Hull, City of",
+  "G7" => "Kingston upon Thames",
+  "G8" => "Kirklees",
+  "G9" => "Knowsley",
+  "H1" => "Lambeth",
+  "H2" => "Lancashire",
+  "H3" => "Leeds",
+  "H4" => "Leicester",
+  "H5" => "Leicestershire",
+  "H6" => "Lewisham",
+  "H7" => "Lincolnshire",
+  "H8" => "Liverpool",
+  "H9" => "London, City of",
+  "I1" => "Luton",
+  "I2" => "Manchester",
+  "I3" => "Medway",
+  "I4" => "Merton",
+  "I5" => "Middlesbrough",
+  "I6" => "Milton Keynes",
+  "I7" => "Newcastle upon Tyne",
+  "I8" => "Newham",
+  "I9" => "Norfolk",
+  "J1" => "Northamptonshire",
+  "J2" => "North East Lincolnshire",
+  "J3" => "North Lincolnshire",
+  "J4" => "North Somerset",
+  "J5" => "North Tyneside",
+  "J6" => "Northumberland",
+  "J7" => "North Yorkshire",
+  "J8" => "Nottingham",
+  "J9" => "Nottinghamshire",
+  "K1" => "Oldham",
+  "K2" => "Oxfordshire",
+  "K3" => "Peterborough",
+  "K4" => "Plymouth",
+  "K5" => "Poole",
+  "K6" => "Portsmouth",
+  "K7" => "Reading",
+  "K8" => "Redbridge",
+  "K9" => "Redcar and Cleveland",
+  "L1" => "Richmond upon Thames",
+  "L2" => "Rochdale",
+  "L3" => "Rotherham",
+  "L4" => "Rutland",
+  "L5" => "Salford",
+  "L6" => "Shropshire",
+  "L7" => "Sandwell",
+  "L8" => "Sefton",
+  "L9" => "Sheffield",
+  "M1" => "Slough",
+  "M2" => "Solihull",
+  "M3" => "Somerset",
+  "M4" => "Southampton",
+  "M5" => "Southend-on-Sea",
+  "M6" => "South Gloucestershire",
+  "M7" => "South Tyneside",
+  "M8" => "Southwark",
+  "M9" => "Staffordshire",
+  "N1" => "St. Helens",
+  "N2" => "Stockport",
+  "N3" => "Stockton-on-Tees",
+  "N4" => "Stoke-on-Trent",
+  "N5" => "Suffolk",
+  "N6" => "Sunderland",
+  "N7" => "Surrey",
+  "N8" => "Sutton",
+  "N9" => "Swindon",
+  "O1" => "Tameside",
+  "O2" => "Telford and Wrekin",
+  "O3" => "Thurrock",
+  "O4" => "Torbay",
+  "O5" => "Tower Hamlets",
+  "O6" => "Trafford",
+  "O7" => "Wakefield",
+  "O8" => "Walsall",
+  "O9" => "Waltham Forest",
+  "P1" => "Wandsworth",
+  "P2" => "Warrington",
+  "P3" => "Warwickshire",
+  "P4" => "West Berkshire",
+  "P5" => "Westminster",
+  "P6" => "West Sussex",
+  "P7" => "Wigan",
+  "P8" => "Wiltshire",
+  "P9" => "Windsor and Maidenhead",
+  "Q1" => "Wirral",
+  "Q2" => "Wokingham",
+  "Q3" => "Wolverhampton",
+  "Q4" => "Worcestershire",
+  "Q5" => "York",
+  "Q6" => "Antrim",
+  "Q7" => "Ards",
+  "Q8" => "Armagh",
+  "Q9" => "Ballymena",
+  "R1" => "Ballymoney",
+  "R2" => "Banbridge",
+  "R3" => "Belfast",
+  "R4" => "Carrickfergus",
+  "R5" => "Castlereagh",
+  "R6" => "Coleraine",
+  "R7" => "Cookstown",
+  "R8" => "Craigavon",
+  "R9" => "Down",
+  "S1" => "Dungannon",
+  "S2" => "Fermanagh",
+  "S3" => "Larne",
+  "S4" => "Limavady",
+  "S5" => "Lisburn",
+  "S6" => "Derry",
+  "S7" => "Magherafelt",
+  "S8" => "Moyle",
+  "S9" => "Newry and Mourne",
+  "T1" => "Newtownabbey",
+  "T2" => "North Down",
+  "T3" => "Omagh",
+  "T4" => "Strabane",
+  "T5" => "Aberdeen City",
+  "T6" => "Aberdeenshire",
+  "T7" => "Angus",
+  "T8" => "Argyll and Bute",
+  "T9" => "Scottish Borders, The",
+  "U1" => "Clackmannanshire",
+  "U2" => "Dumfries and Galloway",
+  "U3" => "Dundee City",
+  "U4" => "East Ayrshire",
+  "U5" => "East Dunbartonshire",
+  "U6" => "East Lothian",
+  "U7" => "East Renfrewshire",
+  "U8" => "Edinburgh, City of",
+  "U9" => "Falkirk",
+  "V1" => "Fife",
+  "V2" => "Glasgow City",
+  "V3" => "Highland",
+  "V4" => "Inverclyde",
+  "V5" => "Midlothian",
+  "V6" => "Moray",
+  "V7" => "North Ayrshire",
+  "V8" => "North Lanarkshire",
+  "V9" => "Orkney",
+  "W1" => "Perth and Kinross",
+  "W2" => "Renfrewshire",
+  "W3" => "Shetland Islands",
+  "W4" => "South Ayrshire",
+  "W5" => "South Lanarkshire",
+  "W6" => "Stirling",
+  "W7" => "West Dunbartonshire",
+  "W8" => "Eilean Siar",
+  "W9" => "West Lothian",
+  "X1" => "Isle of Anglesey",
+  "X2" => "Blaenau Gwent",
+  "X3" => "Bridgend",
+  "X4" => "Caerphilly",
+  "X5" => "Cardiff",
+  "X6" => "Ceredigion",
+  "X7" => "Carmarthenshire",
+  "X8" => "Conwy",
+  "X9" => "Denbighshire",
+  "Y1" => "Flintshire",
+  "Y2" => "Gwynedd",
+  "Y3" => "Merthyr Tydfil",
+  "Y4" => "Monmouthshire",
+  "Y5" => "Neath Port Talbot",
+  "Y6" => "Newport",
+  "Y7" => "Pembrokeshire",
+  "Y8" => "Powys",
+  "Y9" => "Rhondda Cynon Taff",
+  "Z1" => "Swansea",
+  "Z2" => "Torfaen",
+  "Z3" => "Vale of Glamorgan, The",
+  "Z4" => "Wrexham"),
+"GD" => array(
+  "01" => "Saint Andrew",
+  "02" => "Saint David",
+  "03" => "Saint George",
+  "04" => "Saint John",
+  "05" => "Saint Mark",
+  "06" => "Saint Patrick"),
+"GE" => array(
+  "01" => "Abashis Raioni",
+  "02" => "Abkhazia",
+  "03" => "Adigenis Raioni",
+  "04" => "Ajaria",
+  "05" => "Akhalgoris Raioni",
+  "06" => "Akhalk'alak'is Raioni",
+  "07" => "Akhalts'ikhis Raioni",
+  "08" => "Akhmetis Raioni",
+  "09" => "Ambrolauris Raioni",
+  "10" => "Aspindzis Raioni",
+  "11" => "Baghdat'is Raioni",
+  "12" => "Bolnisis Raioni",
+  "13" => "Borjomis Raioni",
+  "14" => "Chiat'ura",
+  "15" => "Ch'khorotsqus Raioni",
+  "16" => "Ch'okhatauris Raioni",
+  "17" => "Dedop'listsqaros Raioni",
+  "18" => "Dmanisis Raioni",
+  "19" => "Dushet'is Raioni",
+  "20" => "Gardabanis Raioni",
+  "21" => "Gori",
+  "22" => "Goris Raioni",
+  "23" => "Gurjaanis Raioni",
+  "24" => "Javis Raioni",
+  "25" => "K'arelis Raioni",
+  "26" => "Kaspis Raioni",
+  "27" => "Kharagaulis Raioni",
+  "28" => "Khashuris Raioni",
+  "29" => "Khobis Raioni",
+  "30" => "Khonis Raioni",
+  "31" => "K'ut'aisi",
+  "32" => "Lagodekhis Raioni",
+  "33" => "Lanch'khut'is Raioni",
+  "34" => "Lentekhis Raioni",
+  "35" => "Marneulis Raioni",
+  "36" => "Martvilis Raioni",
+  "37" => "Mestiis Raioni",
+  "38" => "Mts'khet'is Raioni",
+  "39" => "Ninotsmindis Raioni",
+  "40" => "Onis Raioni",
+  "41" => "Ozurget'is Raioni",
+  "42" => "P'ot'i",
+  "43" => "Qazbegis Raioni",
+  "44" => "Qvarlis Raioni",
+  "45" => "Rust'avi",
+  "46" => "Sach'kheris Raioni",
+  "47" => "Sagarejos Raioni",
+  "48" => "Samtrediis Raioni",
+  "49" => "Senakis Raioni",
+  "50" => "Sighnaghis Raioni",
+  "51" => "T'bilisi",
+  "52" => "T'elavis Raioni",
+  "53" => "T'erjolis Raioni",
+  "54" => "T'et'ritsqaros Raioni",
+  "55" => "T'ianet'is Raioni",
+  "56" => "Tqibuli",
+  "57" => "Ts'ageris Raioni",
+  "58" => "Tsalenjikhis Raioni",
+  "59" => "Tsalkis Raioni",
+  "60" => "Tsqaltubo",
+  "61" => "Vanis Raioni",
+  "62" => "Zestap'onis Raioni",
+  "63" => "Zugdidi",
+  "64" => "Zugdidis Raioni"),
+"GH" => array(
+  "01" => "Greater Accra",
+  "02" => "Ashanti",
+  "03" => "Brong-Ahafo",
+  "04" => "Central",
+  "05" => "Eastern",
+  "06" => "Northern",
+  "08" => "Volta",
+  "09" => "Western",
+  "10" => "Upper East",
+  "11" => "Upper West"),
+"GL" => array(
+  "01" => "Nordgronland",
+  "02" => "Ostgronland",
+  "03" => "Vestgronland"),
+"GM" => array(
+  "01" => "Banjul",
+  "02" => "Lower River",
+  "03" => "Central River",
+  "04" => "Upper River",
+  "05" => "Western",
+  "07" => "North Bank"),
+"GN" => array(
+  "01" => "Beyla",
+  "02" => "Boffa",
+  "03" => "Boke",
+  "04" => "Conakry",
+  "05" => "Dabola",
+  "06" => "Dalaba",
+  "07" => "Dinguiraye",
+  "09" => "Faranah",
+  "10" => "Forecariah",
+  "11" => "Fria",
+  "12" => "Gaoual",
+  "13" => "Gueckedou",
+  "15" => "Kerouane",
+  "16" => "Kindia",
+  "17" => "Kissidougou",
+  "18" => "Koundara",
+  "19" => "Kouroussa",
+  "21" => "Macenta",
+  "22" => "Mali",
+  "23" => "Mamou",
+  "25" => "Pita",
+  "27" => "Telimele",
+  "28" => "Tougue",
+  "29" => "Yomou",
+  "30" => "Coyah",
+  "31" => "Dubreka",
+  "32" => "Kankan",
+  "33" => "Koubia",
+  "34" => "Labe",
+  "35" => "Lelouma",
+  "36" => "Lola",
+  "37" => "Mandiana",
+  "38" => "Nzerekore",
+  "39" => "Siguiri"),
+"GQ" => array(
+  "03" => "Annobon",
+  "04" => "Bioko Norte",
+  "05" => "Bioko Sur",
+  "06" => "Centro Sur",
+  "07" => "Kie-Ntem",
+  "08" => "Litoral",
+  "09" => "Wele-Nzas"),
+"GR" => array(
+  "01" => "Evros",
+  "02" => "Rodhopi",
+  "03" => "Xanthi",
+  "04" => "Drama",
+  "05" => "Serrai",
+  "06" => "Kilkis",
+  "07" => "Pella",
+  "08" => "Florina",
+  "09" => "Kastoria",
+  "10" => "Grevena",
+  "11" => "Kozani",
+  "12" => "Imathia",
+  "13" => "Thessaloniki",
+  "14" => "Kavala",
+  "15" => "Khalkidhiki",
+  "16" => "Pieria",
+  "17" => "Ioannina",
+  "18" => "Thesprotia",
+  "19" => "Preveza",
+  "20" => "Arta",
+  "21" => "Larisa",
+  "22" => "Trikala",
+  "23" => "Kardhitsa",
+  "24" => "Magnisia",
+  "25" => "Kerkira",
+  "26" => "Levkas",
+  "27" => "Kefallinia",
+  "28" => "Zakinthos",
+  "29" => "Fthiotis",
+  "30" => "Evritania",
+  "31" => "Aitolia kai Akarnania",
+  "32" => "Fokis",
+  "33" => "Voiotia",
+  "34" => "Evvoia",
+  "35" => "Attiki",
+  "36" => "Argolis",
+  "37" => "Korinthia",
+  "38" => "Akhaia",
+  "39" => "Ilia",
+  "40" => "Messinia",
+  "41" => "Arkadhia",
+  "42" => "Lakonia",
+  "43" => "Khania",
+  "44" => "Rethimni",
+  "45" => "Iraklion",
+  "46" => "Lasithi",
+  "47" => "Dhodhekanisos",
+  "48" => "Samos",
+  "49" => "Kikladhes",
+  "50" => "Khios",
+  "51" => "Lesvos"),
+"GT" => array(
+  "01" => "Alta Verapaz",
+  "02" => "Baja Verapaz",
+  "03" => "Chimaltenango",
+  "04" => "Chiquimula",
+  "05" => "El Progreso",
+  "06" => "Escuintla",
+  "07" => "Guatemala",
+  "08" => "Huehuetenango",
+  "09" => "Izabal",
+  "10" => "Jalapa",
+  "11" => "Jutiapa",
+  "12" => "Peten",
+  "13" => "Quetzaltenango",
+  "14" => "Quiche",
+  "15" => "Retalhuleu",
+  "16" => "Sacatepequez",
+  "17" => "San Marcos",
+  "18" => "Santa Rosa",
+  "19" => "Solola",
+  "20" => "Suchitepequez",
+  "21" => "Totonicapan",
+  "22" => "Zacapa"),
+"GW" => array(
+  "01" => "Bafata",
+  "02" => "Quinara",
+  "04" => "Oio",
+  "05" => "Bolama",
+  "06" => "Cacheu",
+  "07" => "Tombali",
+  "10" => "Gabu",
+  "11" => "Bissau",
+  "12" => "Biombo"),
+"GY" => array(
+  "10" => "Barima-Waini",
+  "11" => "Cuyuni-Mazaruni",
+  "12" => "Demerara-Mahaica",
+  "13" => "East Berbice-Corentyne",
+  "14" => "Essequibo Islands-West Demerara",
+  "15" => "Mahaica-Berbice",
+  "16" => "Pomeroon-Supenaam",
+  "17" => "Potaro-Siparuni",
+  "18" => "Upper Demerara-Berbice",
+  "19" => "Upper Takutu-Upper Essequibo"),
+"HN" => array(
+  "01" => "Atlantida",
+  "02" => "Choluteca",
+  "03" => "Colon",
+  "04" => "Comayagua",
+  "05" => "Copan",
+  "06" => "Cortes",
+  "07" => "El Paraiso",
+  "08" => "Francisco Morazan",
+  "09" => "Gracias a Dios",
+  "10" => "Intibuca",
+  "11" => "Islas de la Bahia",
+  "12" => "La Paz",
+  "13" => "Lempira",
+  "14" => "Ocotepeque",
+  "15" => "Olancho",
+  "16" => "Santa Barbara",
+  "17" => "Valle",
+  "18" => "Yoro"),
+"HR" => array(
+  "01" => "Bjelovarsko-Bilogorska",
+  "02" => "Brodsko-Posavska",
+  "03" => "Dubrovacko-Neretvanska",
+  "04" => "Istarska",
+  "05" => "Karlovacka",
+  "06" => "Koprivnicko-Krizevacka",
+  "07" => "Krapinsko-Zagorska",
+  "08" => "Licko-Senjska",
+  "09" => "Medimurska",
+  "10" => "Osjecko-Baranjska",
+  "11" => "Pozesko-Slavonska",
+  "12" => "Primorsko-Goranska",
+  "13" => "Sibensko-Kninska",
+  "14" => "Sisacko-Moslavacka",
+  "15" => "Splitsko-Dalmatinska",
+  "16" => "Varazdinska",
+  "17" => "Viroviticko-Podravska",
+  "18" => "Vukovarsko-Srijemska",
+  "19" => "Zadarska",
+  "20" => "Zagrebacka",
+  "21" => "Grad Zagreb"),
+"HT" => array(
+  "03" => "Nord-Ouest",
+  "06" => "Artibonite",
+  "07" => "Centre",
+  "09" => "Nord",
+  "10" => "Nord-Est",
+  "11" => "Ouest",
+  "12" => "Sud",
+  "13" => "Sud-Est",
+  "14" => "Grand' Anse",
+  "15" => "Nippes"),
+"HU" => array(
+  "01" => "Bacs-Kiskun",
+  "02" => "Baranya",
+  "03" => "Bekes",
+  "04" => "Borsod-Abauj-Zemplen",
+  "05" => "Budapest",
+  "06" => "Csongrad",
+  "07" => "Debrecen",
+  "08" => "Fejer",
+  "09" => "Gyor-Moson-Sopron",
+  "10" => "Hajdu-Bihar",
+  "11" => "Heves",
+  "12" => "Komarom-Esztergom",
+  "13" => "Miskolc",
+  "14" => "Nograd",
+  "15" => "Pecs",
+  "16" => "Pest",
+  "17" => "Somogy",
+  "18" => "Szabolcs-Szatmar-Bereg",
+  "19" => "Szeged",
+  "20" => "Jasz-Nagykun-Szolnok",
+  "21" => "Tolna",
+  "22" => "Vas",
+  "23" => "Veszprem",
+  "24" => "Zala",
+  "25" => "Gyor",
+  "26" => "Bekescsaba",
+  "27" => "Dunaujvaros",
+  "28" => "Eger",
+  "29" => "Hodmezovasarhely",
+  "30" => "Kaposvar",
+  "31" => "Kecskemet",
+  "32" => "Nagykanizsa",
+  "33" => "Nyiregyhaza",
+  "34" => "Sopron",
+  "35" => "Szekesfehervar",
+  "36" => "Szolnok",
+  "37" => "Szombathely",
+  "38" => "Tatabanya",
+  "39" => "Veszprem",
+  "40" => "Zalaegerszeg",
+  "41" => "Salgotarjan",
+  "42" => "Szekszard"),
+"ID" => array(
+  "01" => "Aceh",
+  "02" => "Bali",
+  "03" => "Bengkulu",
+  "04" => "Jakarta Raya",
+  "05" => "Jambi",
+  "06" => "Jawa Barat",
+  "07" => "Jawa Tengah",
+  "08" => "Jawa Timur",
+  "09" => "Papua",
+  "10" => "Yogyakarta",
+  "11" => "Kalimantan Barat",
+  "12" => "Kalimantan Selatan",
+  "13" => "Kalimantan Tengah",
+  "14" => "Kalimantan Timur",
+  "15" => "Lampung",
+  "16" => "Maluku",
+  "17" => "Nusa Tenggara Barat",
+  "18" => "Nusa Tenggara Timur",
+  "19" => "Riau",
+  "20" => "Sulawesi Selatan",
+  "21" => "Sulawesi Tengah",
+  "22" => "Sulawesi Tenggara",
+  "23" => "Sulawesi Utara",
+  "24" => "Sumatera Barat",
+  "25" => "Sumatera Selatan",
+  "26" => "Sumatera Utara",
+  "28" => "Maluku",
+  "29" => "Maluku Utara",
+  "30" => "Jawa Barat",
+  "31" => "Sulawesi Utara",
+  "32" => "Sumatera Selatan",
+  "33" => "Banten",
+  "34" => "Gorontalo",
+  "35" => "Kepulauan Bangka Belitung",
+  "36" => "Papua",
+  "37" => "Riau",
+  "38" => "Sulawesi Selatan",
+  "39" => "Irian Jaya Barat",
+  "40" => "Kepulauan Riau",
+  "41" => "Sulawesi Barat"),
+"IE" => array(
+  "01" => "Carlow",
+  "02" => "Cavan",
+  "03" => "Clare",
+  "04" => "Cork",
+  "06" => "Donegal",
+  "07" => "Dublin",
+  "10" => "Galway",
+  "11" => "Kerry",
+  "12" => "Kildare",
+  "13" => "Kilkenny",
+  "14" => "Leitrim",
+  "15" => "Laois",
+  "16" => "Limerick",
+  "18" => "Longford",
+  "19" => "Louth",
+  "20" => "Mayo",
+  "21" => "Meath",
+  "22" => "Monaghan",
+  "23" => "Offaly",
+  "24" => "Roscommon",
+  "25" => "Sligo",
+  "26" => "Tipperary",
+  "27" => "Waterford",
+  "29" => "Westmeath",
+  "30" => "Wexford",
+  "31" => "Wicklow"),
+"IL" => array(
+  "01" => "HaDarom",
+  "02" => "HaMerkaz",
+  "03" => "HaZafon",
+  "04" => "Hefa",
+  "05" => "Tel Aviv",
+  "06" => "Yerushalayim"),
+"IN" => array(
+  "01" => "Andaman and Nicobar Islands",
+  "02" => "Andhra Pradesh",
+  "03" => "Assam",
+  "05" => "Chandigarh",
+  "06" => "Dadra and Nagar Haveli",
+  "07" => "Delhi",
+  "09" => "Gujarat",
+  "10" => "Haryana",
+  "11" => "Himachal Pradesh",
+  "12" => "Jammu and Kashmir",
+  "13" => "Kerala",
+  "14" => "Lakshadweep",
+  "16" => "Maharashtra",
+  "17" => "Manipur",
+  "18" => "Meghalaya",
+  "19" => "Karnataka",
+  "20" => "Nagaland",
+  "21" => "Orissa",
+  "22" => "Puducherry",
+  "23" => "Punjab",
+  "24" => "Rajasthan",
+  "25" => "Tamil Nadu",
+  "26" => "Tripura",
+  "28" => "West Bengal",
+  "29" => "Sikkim",
+  "30" => "Arunachal Pradesh",
+  "31" => "Mizoram",
+  "32" => "Daman and Diu",
+  "33" => "Goa",
+  "34" => "Bihar",
+  "35" => "Madhya Pradesh",
+  "36" => "Uttar Pradesh",
+  "37" => "Chhattisgarh",
+  "38" => "Jharkhand",
+  "39" => "Uttarakhand"),
+"IQ" => array(
+  "01" => "Al Anbar",
+  "02" => "Al Basrah",
+  "03" => "Al Muthanna",
+  "04" => "Al Qadisiyah",
+  "05" => "As Sulaymaniyah",
+  "06" => "Babil",
+  "07" => "Baghdad",
+  "08" => "Dahuk",
+  "09" => "Dhi Qar",
+  "10" => "Diyala",
+  "11" => "Arbil",
+  "12" => "Karbala'",
+  "13" => "At Ta'mim",
+  "14" => "Maysan",
+  "15" => "Ninawa",
+  "16" => "Wasit",
+  "17" => "An Najaf",
+  "18" => "Salah ad Din"),
+"IR" => array(
+  "01" => "Azarbayjan-e Bakhtari",
+  "02" => "Azarbayjan-e Khavari",
+  "03" => "Chahar Mahall va Bakhtiari",
+  "04" => "Sistan va Baluchestan",
+  "05" => "Kohkiluyeh va Buyer Ahmadi",
+  "07" => "Fars",
+  "08" => "Gilan",
+  "09" => "Hamadan",
+  "10" => "Ilam",
+  "11" => "Hormozgan",
+  "12" => "Kerman",
+  "13" => "Bakhtaran",
+  "15" => "Khuzestan",
+  "16" => "Kordestan",
+  "17" => "Mazandaran",
+  "18" => "Semnan Province",
+  "19" => "Markazi",
+  "21" => "Zanjan",
+  "22" => "Bushehr",
+  "23" => "Lorestan",
+  "24" => "Markazi",
+  "25" => "Semnan",
+  "26" => "Tehran",
+  "27" => "Zanjan",
+  "28" => "Esfahan",
+  "29" => "Kerman",
+  "30" => "Khorasan",
+  "31" => "Yazd",
+  "32" => "Ardabil",
+  "33" => "East Azarbaijan",
+  "34" => "Markazi",
+  "35" => "Mazandaran",
+  "36" => "Zanjan",
+  "37" => "Golestan",
+  "38" => "Qazvin",
+  "39" => "Qom",
+  "40" => "Yazd",
+  "41" => "Khorasan-e Janubi",
+  "42" => "Khorasan-e Razavi",
+  "43" => "Khorasan-e Shemali"),
+"IS" => array(
+  "03" => "Arnessysla",
+  "05" => "Austur-Hunavatnssysla",
+  "06" => "Austur-Skaftafellssysla",
+  "07" => "Borgarfjardarsysla",
+  "09" => "Eyjafjardarsysla",
+  "10" => "Gullbringusysla",
+  "15" => "Kjosarsysla",
+  "17" => "Myrasysla",
+  "20" => "Nordur-Mulasysla",
+  "21" => "Nordur-Tingeyjarsysla",
+  "23" => "Rangarvallasysla",
+  "28" => "Skagafjardarsysla",
+  "29" => "Snafellsnes- og Hnappadalssysla",
+  "30" => "Strandasysla",
+  "31" => "Sudur-Mulasysla",
+  "32" => "Sudur-Tingeyjarsysla",
+  "34" => "Vestur-Bardastrandarsysla",
+  "35" => "Vestur-Hunavatnssysla",
+  "36" => "Vestur-Isafjardarsysla",
+  "37" => "Vestur-Skaftafellssysla",
+  "40" => "Norourland Eystra",
+  "41" => "Norourland Vestra",
+  "42" => "Suourland",
+  "43" => "Suournes",
+  "44" => "Vestfiroir",
+  "45" => "Vesturland"),
+"IT" => array(
+  "01" => "Abruzzi",
+  "02" => "Basilicata",
+  "03" => "Calabria",
+  "04" => "Campania",
+  "05" => "Emilia-Romagna",
+  "06" => "Friuli-Venezia Giulia",
+  "07" => "Lazio",
+  "08" => "Liguria",
+  "09" => "Lombardia",
+  "10" => "Marche",
+  "11" => "Molise",
+  "12" => "Piemonte",
+  "13" => "Puglia",
+  "14" => "Sardegna",
+  "15" => "Sicilia",
+  "16" => "Toscana",
+  "17" => "Trentino-Alto Adige",
+  "18" => "Umbria",
+  "19" => "Valle d'Aosta",
+  "20" => "Veneto"),
+"JM" => array(
+  "01" => "Clarendon",
+  "02" => "Hanover",
+  "04" => "Manchester",
+  "07" => "Portland",
+  "08" => "Saint Andrew",
+  "09" => "Saint Ann",
+  "10" => "Saint Catherine",
+  "11" => "Saint Elizabeth",
+  "12" => "Saint James",
+  "13" => "Saint Mary",
+  "14" => "Saint Thomas",
+  "15" => "Trelawny",
+  "16" => "Westmoreland",
+  "17" => "Kingston"),
+"JO" => array(
+  "02" => "Al Balqa'",
+  "07" => "Ma",
+  "09" => "Al Karak",
+  "10" => "Al Mafraq",
+  "11" => "Amman Governorate",
+  "12" => "At Tafilah",
+  "13" => "Az Zarqa",
+  "14" => "Irbid",
+  "16" => "Amman"),
+"JP" => array(
+  "01" => "Aichi",
+  "02" => "Akita",
+  "03" => "Aomori",
+  "04" => "Chiba",
+  "05" => "Ehime",
+  "06" => "Fukui",
+  "07" => "Fukuoka",
+  "08" => "Fukushima",
+  "09" => "Gifu",
+  "10" => "Gumma",
+  "11" => "Hiroshima",
+  "12" => "Hokkaido",
+  "13" => "Hyogo",
+  "14" => "Ibaraki",
+  "15" => "Ishikawa",
+  "16" => "Iwate",
+  "17" => "Kagawa",
+  "18" => "Kagoshima",
+  "19" => "Kanagawa",
+  "20" => "Kochi",
+  "21" => "Kumamoto",
+  "22" => "Kyoto",
+  "23" => "Mie",
+  "24" => "Miyagi",
+  "25" => "Miyazaki",
+  "26" => "Nagano",
+  "27" => "Nagasaki",
+  "28" => "Nara",
+  "29" => "Niigata",
+  "30" => "Oita",
+  "31" => "Okayama",
+  "32" => "Osaka",
+  "33" => "Saga",
+  "34" => "Saitama",
+  "35" => "Shiga",
+  "36" => "Shimane",
+  "37" => "Shizuoka",
+  "38" => "Tochigi",
+  "39" => "Tokushima",
+  "40" => "Tokyo",
+  "41" => "Tottori",
+  "42" => "Toyama",
+  "43" => "Wakayama",
+  "44" => "Yamagata",
+  "45" => "Yamaguchi",
+  "46" => "Yamanashi",
+  "47" => "Okinawa"),
+"KE" => array(
+  "01" => "Central",
+  "02" => "Coast",
+  "03" => "Eastern",
+  "05" => "Nairobi Area",
+  "06" => "North-Eastern",
+  "07" => "Nyanza",
+  "08" => "Rift Valley",
+  "09" => "Western"),
+"KG" => array(
+  "01" => "Bishkek",
+  "02" => "Chuy",
+  "03" => "Jalal-Abad",
+  "04" => "Naryn",
+  "05" => "Osh",
+  "06" => "Talas",
+  "07" => "Ysyk-Kol",
+  "08" => "Osh",
+  "09" => "Batken"),
+"KH" => array(
+  "00" => "Banteay Meanchey",
+  "01" => "Batdambang",
+  "02" => "Kampong Cham",
+  "03" => "Kampong Chhnang",
+  "04" => "Kampong Speu",
+  "05" => "Kampong Thum",
+  "06" => "Kampot",
+  "07" => "Kandal",
+  "08" => "Koh Kong",
+  "09" => "Kracheh",
+  "10" => "Mondulkiri",
+  "11" => "Phnum Penh",
+  "12" => "Pursat",
+  "13" => "Preah Vihear",
+  "14" => "Prey Veng",
+  "15" => "Ratanakiri Kiri",
+  "16" => "Siem Reap",
+  "17" => "Stung Treng",
+  "18" => "Svay Rieng",
+  "19" => "Takeo",
+  "29" => "Batdambang",
+  "30" => "Pailin"),
+"KI" => array(
+  "01" => "Gilbert Islands",
+  "02" => "Line Islands",
+  "03" => "Phoenix Islands"),
+"KM" => array(
+  "01" => "Anjouan",
+  "02" => "Grande Comore",
+  "03" => "Moheli"),
+"KN" => array(
+  "01" => "Christ Church Nichola Town",
+  "02" => "Saint Anne Sandy Point",
+  "03" => "Saint George Basseterre",
+  "04" => "Saint George Gingerland",
+  "05" => "Saint James Windward",
+  "06" => "Saint John Capisterre",
+  "07" => "Saint John Figtree",
+  "08" => "Saint Mary Cayon",
+  "09" => "Saint Paul Capisterre",
+  "10" => "Saint Paul Charlestown",
+  "11" => "Saint Peter Basseterre",
+  "12" => "Saint Thomas Lowland",
+  "13" => "Saint Thomas Middle Island",
+  "15" => "Trinity Palmetto Point"),
+"KP" => array(
+  "01" => "Chagang-do",
+  "03" => "Hamgyong-namdo",
+  "06" => "Hwanghae-namdo",
+  "07" => "Hwanghae-bukto",
+  "08" => "Kaesong-si",
+  "09" => "Kangwon-do",
+  "11" => "P'yongan-bukto",
+  "12" => "P'yongyang-si",
+  "13" => "Yanggang-do",
+  "14" => "Namp'o-si",
+  "15" => "P'yongan-namdo",
+  "17" => "Hamgyong-bukto",
+  "18" => "Najin Sonbong-si"),
+"KR" => array(
+  "01" => "Cheju-do",
+  "03" => "Cholla-bukto",
+  "05" => "Ch'ungch'ong-bukto",
+  "06" => "Kangwon-do",
+  "10" => "Pusan-jikhalsi",
+  "11" => "Seoul-t'ukpyolsi",
+  "12" => "Inch'on-jikhalsi",
+  "13" => "Kyonggi-do",
+  "14" => "Kyongsang-bukto",
+  "15" => "Taegu-jikhalsi",
+  "16" => "Cholla-namdo",
+  "17" => "Ch'ungch'ong-namdo",
+  "18" => "Kwangju-jikhalsi",
+  "19" => "Taejon-jikhalsi",
+  "20" => "Kyongsang-namdo",
+  "21" => "Ulsan-gwangyoksi"),
+"KW" => array(
+  "01" => "Al Ahmadi",
+  "02" => "Al Kuwayt",
+  "05" => "Al Jahra",
+  "07" => "Al Farwaniyah",
+  "08" => "Hawalli",
+  "09" => "Mubarak al Kabir"),
+"KY" => array(
+  "01" => "Creek",
+  "02" => "Eastern",
+  "03" => "Midland",
+  "04" => "South Town",
+  "05" => "Spot Bay",
+  "06" => "Stake Bay",
+  "07" => "West End",
+  "08" => "Western"),
+"KZ" => array(
+  "01" => "Almaty",
+  "02" => "Almaty City",
+  "03" => "Aqmola",
+  "04" => "Aqtobe",
+  "05" => "Astana",
+  "06" => "Atyrau",
+  "07" => "West Kazakhstan",
+  "08" => "Bayqonyr",
+  "09" => "Mangghystau",
+  "10" => "South Kazakhstan",
+  "11" => "Pavlodar",
+  "12" => "Qaraghandy",
+  "13" => "Qostanay",
+  "14" => "Qyzylorda",
+  "15" => "East Kazakhstan",
+  "16" => "North Kazakhstan",
+  "17" => "Zhambyl"),
+"LA" => array(
+  "01" => "Attapu",
+  "02" => "Champasak",
+  "03" => "Houaphan",
+  "04" => "Khammouan",
+  "05" => "Louang Namtha",
+  "07" => "Oudomxai",
+  "08" => "Phongsali",
+  "09" => "Saravan",
+  "10" => "Savannakhet",
+  "11" => "Vientiane",
+  "13" => "Xaignabouri",
+  "14" => "Xiangkhoang",
+  "17" => "Louangphrabang"),
+"LB" => array(
+  "01" => "Beqaa",
+  "02" => "Al Janub",
+  "03" => "Liban-Nord",
+  "04" => "Beyrouth",
+  "05" => "Mont-Liban",
+  "06" => "Liban-Sud",
+  "07" => "Nabatiye",
+  "08" => "Beqaa",
+  "09" => "Liban-Nord",
+  "10" => "Aakk,r",
+  "11" => "Baalbek-Hermel"),
+"LC" => array(
+  "01" => "Anse-la-Raye",
+  "02" => "Dauphin",
+  "03" => "Castries",
+  "04" => "Choiseul",
+  "05" => "Dennery",
+  "06" => "Gros-Islet",
+  "07" => "Laborie",
+  "08" => "Micoud",
+  "09" => "Soufriere",
+  "10" => "Vieux-Fort",
+  "11" => "Praslin"),
+"LI" => array(
+  "01" => "Balzers",
+  "02" => "Eschen",
+  "03" => "Gamprin",
+  "04" => "Mauren",
+  "05" => "Planken",
+  "06" => "Ruggell",
+  "07" => "Schaan",
+  "08" => "Schellenberg",
+  "09" => "Triesen",
+  "10" => "Triesenberg",
+  "11" => "Vaduz",
+  "21" => "Gbarpolu",
+  "22" => "River Gee"),
+"LK" => array(
+  "01" => "Amparai",
+  "02" => "Anuradhapura",
+  "03" => "Badulla",
+  "04" => "Batticaloa",
+  "06" => "Galle",
+  "07" => "Hambantota",
+  "09" => "Kalutara",
+  "10" => "Kandy",
+  "11" => "Kegalla",
+  "12" => "Kurunegala",
+  "14" => "Matale",
+  "15" => "Matara",
+  "16" => "Moneragala",
+  "17" => "Nuwara Eliya",
+  "18" => "Polonnaruwa",
+  "19" => "Puttalam",
+  "20" => "Ratnapura",
+  "21" => "Trincomalee",
+  "23" => "Colombo",
+  "24" => "Gampaha",
+  "25" => "Jaffna",
+  "26" => "Mannar",
+  "27" => "Mullaittivu",
+  "28" => "Vavuniya",
+  "29" => "Central",
+  "30" => "North Central",
+  "31" => "Northern",
+  "32" => "North Western",
+  "33" => "Sabaragamuwa",
+  "34" => "Southern",
+  "35" => "Uva",
+  "36" => "Western"),
+"LR" => array(
+  "01" => "Bong",
+  "04" => "Grand Cape Mount",
+  "05" => "Lofa",
+  "06" => "Maryland",
+  "07" => "Monrovia",
+  "09" => "Nimba",
+  "10" => "Sino",
+  "11" => "Grand Bassa",
+  "12" => "Grand Cape Mount",
+  "13" => "Maryland",
+  "14" => "Montserrado",
+  "17" => "Margibi",
+  "18" => "River Cess",
+  "19" => "Grand Gedeh",
+  "20" => "Lofa",
+  "21" => "Gbarpolu",
+  "22" => "River Gee"),
+"LS" => array(
+  "10" => "Berea",
+  "11" => "Butha-Buthe",
+  "12" => "Leribe",
+  "13" => "Mafeteng",
+  "14" => "Maseru",
+  "15" => "Mohales Hoek",
+  "16" => "Mokhotlong",
+  "17" => "Qachas Nek",
+  "18" => "Quthing",
+  "19" => "Thaba-Tseka"),
+"LT" => array(
+  "56" => "Alytaus Apskritis",
+  "57" => "Kauno Apskritis",
+  "58" => "Klaipedos Apskritis",
+  "59" => "Marijampoles Apskritis",
+  "60" => "Panevezio Apskritis",
+  "61" => "Siauliu Apskritis",
+  "62" => "Taurages Apskritis",
+  "63" => "Telsiu Apskritis",
+  "64" => "Utenos Apskritis",
+  "65" => "Vilniaus Apskritis"),
+"LU" => array(
+  "01" => "Diekirch",
+  "02" => "Grevenmacher",
+  "03" => "Luxembourg"),
+"LV" => array(
+  "01" => "Aizkraukles",
+  "02" => "Aluksnes",
+  "03" => "Balvu",
+  "04" => "Bauskas",
+  "05" => "Cesu",
+  "06" => "Daugavpils",
+  "07" => "Daugavpils",
+  "08" => "Dobeles",
+  "09" => "Gulbenes",
+  "10" => "Jekabpils",
+  "11" => "Jelgava",
+  "12" => "Jelgavas",
+  "13" => "Jurmala",
+  "14" => "Kraslavas",
+  "15" => "Kuldigas",
+  "16" => "Liepaja",
+  "17" => "Liepajas",
+  "18" => "Limbazu",
+  "19" => "Ludzas",
+  "20" => "Madonas",
+  "21" => "Ogres",
+  "22" => "Preilu",
+  "23" => "Rezekne",
+  "24" => "Rezeknes",
+  "25" => "Riga",
+  "26" => "Rigas",
+  "27" => "Saldus",
+  "28" => "Talsu",
+  "29" => "Tukuma",
+  "30" => "Valkas",
+  "31" => "Valmieras",
+  "32" => "Ventspils",
+  "33" => "Ventspils"),
+"LY" => array(
+  "03" => "Al Aziziyah",
+  "05" => "Al Jufrah",
+  "08" => "Al Kufrah",
+  "13" => "Ash Shati'",
+  "30" => "Murzuq",
+  "34" => "Sabha",
+  "41" => "Tarhunah",
+  "42" => "Tubruq",
+  "45" => "Zlitan",
+  "47" => "Ajdabiya",
+  "48" => "Al Fatih",
+  "49" => "Al Jabal al Akhdar",
+  "50" => "Al Khums",
+  "51" => "An Nuqat al Khams",
+  "52" => "Awbari",
+  "53" => "Az Zawiyah",
+  "54" => "Banghazi",
+  "55" => "Darnah",
+  "56" => "Ghadamis",
+  "57" => "Gharyan",
+  "58" => "Misratah",
+  "59" => "Sawfajjin",
+  "60" => "Surt",
+  "61" => "Tarabulus",
+  "62" => "Yafran"),
+"MA" => array(
+  "01" => "Agadir",
+  "02" => "Al Hoceima",
+  "03" => "Azilal",
+  "04" => "Ben Slimane",
+  "05" => "Beni Mellal",
+  "06" => "Boulemane",
+  "07" => "Casablanca",
+  "08" => "Chaouen",
+  "09" => "El Jadida",
+  "10" => "El Kelaa des Srarhna",
+  "11" => "Er Rachidia",
+  "12" => "Essaouira",
+  "13" => "Fes",
+  "14" => "Figuig",
+  "15" => "Kenitra",
+  "16" => "Khemisset",
+  "17" => "Khenifra",
+  "18" => "Khouribga",
+  "19" => "Marrakech",
+  "20" => "Meknes",
+  "21" => "Nador",
+  "22" => "Ouarzazate",
+  "23" => "Oujda",
+  "24" => "Rabat-Sale",
+  "25" => "Safi",
+  "26" => "Settat",
+  "27" => "Tanger",
+  "29" => "Tata",
+  "30" => "Taza",
+  "32" => "Tiznit",
+  "33" => "Guelmim",
+  "34" => "Ifrane",
+  "35" => "Laayoune",
+  "36" => "Tan-Tan",
+  "37" => "Taounate",
+  "38" => "Sidi Kacem",
+  "39" => "Taroudannt",
+  "40" => "Tetouan",
+  "41" => "Larache",
+  "45" => "Grand Casablanca",
+  "46" => "Fes-Boulemane",
+  "47" => "Marrakech-Tensift-Al Haouz",
+  "48" => "Meknes-Tafilalet",
+  "49" => "Rabat-Sale-Zemmour-Zaer",
+  "50" => "Chaouia-Ouardigha",
+  "51" => "Doukkala-Abda",
+  "52" => "Gharb-Chrarda-Beni Hssen",
+  "53" => "Guelmim-Es Smara",
+  "54" => "Oriental",
+  "55" => "Souss-Massa-Dr,a",
+  "56" => "Tadla-Azilal",
+  "57" => "Tanger-Tetouan",
+  "58" => "Taza-Al Hoceima-Taounate",
+  "59" => "La,youne-Boujdour-Sakia El Hamra"),
+"MC" => array(
+  "01" => "La Condamine",
+  "02" => "Monaco",
+  "03" => "Monte-Carlo"),
+"MD" => array(
+  "46" => "Balti",
+  "47" => "Cahul",
+  "48" => "Chisinau",
+  "49" => "Stinga Nistrului",
+  "50" => "Edinet",
+  "51" => "Gagauzia",
+  "52" => "Lapusna",
+  "53" => "Orhei",
+  "54" => "Soroca",
+  "55" => "Tighina",
+  "56" => "Ungheni",
+  "58" => "Stinga Nistrului",
+  "59" => "Anenii Noi",
+  "60" => "Balti",
+  "61" => "Basarabeasca",
+  "62" => "Bender",
+  "63" => "Briceni",
+  "64" => "Cahul",
+  "65" => "Cantemir",
+  "66" => "Calarasi",
+  "67" => "Causeni",
+  "68" => "Cimislia",
+  "69" => "Criuleni",
+  "70" => "Donduseni",
+  "71" => "Drochia",
+  "72" => "Dubasari",
+  "73" => "Edinet",
+  "74" => "Falesti",
+  "75" => "Floresti",
+  "76" => "Glodeni",
+  "77" => "Hincesti",
+  "78" => "Ialoveni",
+  "79" => "Leova",
+  "80" => "Nisporeni",
+  "81" => "Ocnita",
+  "83" => "Rezina",
+  "84" => "Riscani",
+  "85" => "Singerei",
+  "86" => "Soldanesti",
+  "87" => "Soroca",
+  "88" => "Stefan-Voda",
+  "89" => "Straseni",
+  "90" => "Taraclia",
+  "91" => "Telenesti",
+  "92" => "Ungheni"),
+"MG" => array(
+  "01" => "Antsiranana",
+  "02" => "Fianarantsoa",
+  "03" => "Mahajanga",
+  "04" => "Toamasina",
+  "05" => "Antananarivo",
+  "06" => "Toliara"),
+"MK" => array(
+  "01" => "Aracinovo",
+  "02" => "Bac",
+  "03" => "Belcista",
+  "04" => "Berovo",
+  "05" => "Bistrica",
+  "06" => "Bitola",
+  "07" => "Blatec",
+  "08" => "Bogdanci",
+  "09" => "Bogomila",
+  "10" => "Bogovinje",
+  "11" => "Bosilovo",
+  "12" => "Brvenica",
+  "13" => "Cair",
+  "14" => "Capari",
+  "15" => "Caska",
+  "16" => "Cegrane",
+  "17" => "Centar",
+  "18" => "Centar Zupa",
+  "19" => "Cesinovo",
+  "20" => "Cucer-Sandevo",
+  "21" => "Debar",
+  "22" => "Delcevo",
+  "23" => "Delogozdi",
+  "24" => "Demir Hisar",
+  "25" => "Demir Kapija",
+  "26" => "Dobrusevo",
+  "27" => "Dolna Banjica",
+  "28" => "Dolneni",
+  "29" => "Dorce Petrov",
+  "30" => "Drugovo",
+  "31" => "Dzepciste",
+  "32" => "Gazi Baba",
+  "33" => "Gevgelija",
+  "34" => "Gostivar",
+  "35" => "Gradsko",
+  "36" => "Ilinden",
+  "37" => "Izvor",
+  "38" => "Jegunovce",
+  "39" => "Kamenjane",
+  "40" => "Karbinci",
+  "41" => "Karpos",
+  "42" => "Kavadarci",
+  "43" => "Kicevo",
+  "44" => "Kisela Voda",
+  "45" => "Klecevce",
+  "46" => "Kocani",
+  "47" => "Konce",
+  "48" => "Kondovo",
+  "49" => "Konopiste",
+  "50" => "Kosel",
+  "51" => "Kratovo",
+  "52" => "Kriva Palanka",
+  "53" => "Krivogastani",
+  "54" => "Krusevo",
+  "55" => "Kuklis",
+  "56" => "Kukurecani",
+  "57" => "Kumanovo",
+  "58" => "Labunista",
+  "59" => "Lipkovo",
+  "60" => "Lozovo",
+  "61" => "Lukovo",
+  "62" => "Makedonska Kamenica",
+  "63" => "Makedonski Brod",
+  "64" => "Mavrovi Anovi",
+  "65" => "Meseista",
+  "66" => "Miravci",
+  "67" => "Mogila",
+  "68" => "Murtino",
+  "69" => "Negotino",
+  "70" => "Negotino-Polosko",
+  "71" => "Novaci",
+  "72" => "Novo Selo",
+  "73" => "Oblesevo",
+  "74" => "Ohrid",
+  "75" => "Orasac",
+  "76" => "Orizari",
+  "77" => "Oslomej",
+  "78" => "Pehcevo",
+  "79" => "Petrovec",
+  "80" => "Plasnica",
+  "81" => "Podares",
+  "82" => "Prilep",
+  "83" => "Probistip",
+  "84" => "Radovis",
+  "85" => "Rankovce",
+  "86" => "Resen",
+  "87" => "Rosoman",
+  "88" => "Rostusa",
+  "89" => "Samokov",
+  "90" => "Saraj",
+  "91" => "Sipkovica",
+  "92" => "Sopiste",
+  "93" => "Sopotnica",
+  "94" => "Srbinovo",
+  "95" => "Staravina",
+  "96" => "Star Dojran",
+  "97" => "Staro Nagoricane",
+  "98" => "Stip",
+  "99" => "Struga",
+  "A1" => "Strumica",
+  "A2" => "Studenicani",
+  "A3" => "Suto Orizari",
+  "A4" => "Sveti Nikole",
+  "A5" => "Tearce",
+  "A6" => "Tetovo",
+  "A7" => "Topolcani",
+  "A8" => "Valandovo",
+  "A9" => "Vasilevo",
+  "B1" => "Veles",
+  "B2" => "Velesta",
+  "B3" => "Vevcani",
+  "B4" => "Vinica",
+  "B5" => "Vitoliste",
+  "B6" => "Vranestica",
+  "B7" => "Vrapciste",
+  "B8" => "Vratnica",
+  "B9" => "Vrutok",
+  "C1" => "Zajas",
+  "C2" => "Zelenikovo",
+  "C3" => "Zelino",
+  "C4" => "Zitose",
+  "C5" => "Zletovo",
+  "C6" => "Zrnovci"),
+"ML" => array(
+  "01" => "Bamako",
+  "03" => "Kayes",
+  "04" => "Mopti",
+  "05" => "Segou",
+  "06" => "Sikasso",
+  "07" => "Koulikoro",
+  "08" => "Tombouctou",
+  "09" => "Gao",
+  "10" => "Kidal"),
+"MM" => array(
+  "01" => "Rakhine State",
+  "02" => "Chin State",
+  "03" => "Irrawaddy",
+  "04" => "Kachin State",
+  "05" => "Karan State",
+  "06" => "Kayah State",
+  "07" => "Magwe",
+  "08" => "Mandalay",
+  "09" => "Pegu",
+  "10" => "Sagaing",
+  "11" => "Shan State",
+  "12" => "Tenasserim",
+  "13" => "Mon State",
+  "14" => "Rangoon",
+  "17" => "Yangon"),
+"MN" => array(
+  "01" => "Arhangay",
+  "02" => "Bayanhongor",
+  "03" => "Bayan-Olgiy",
+  "05" => "Darhan",
+  "06" => "Dornod",
+  "07" => "Dornogovi",
+  "08" => "Dundgovi",
+  "09" => "Dzavhan",
+  "10" => "Govi-Altay",
+  "11" => "Hentiy",
+  "12" => "Hovd",
+  "13" => "Hovsgol",
+  "14" => "Omnogovi",
+  "15" => "Ovorhangay",
+  "16" => "Selenge",
+  "17" => "Suhbaatar",
+  "18" => "Tov",
+  "19" => "Uvs",
+  "20" => "Ulaanbaatar",
+  "21" => "Bulgan",
+  "22" => "Erdenet",
+  "23" => "Darhan-Uul",
+  "24" => "Govisumber",
+  "25" => "Orhon"),
+"MO" => array(
+  "01" => "Ilhas",
+  "02" => "Macau"),
+"MR" => array(
+  "01" => "Hodh Ech Chargui",
+  "02" => "Hodh El Gharbi",
+  "03" => "Assaba",
+  "04" => "Gorgol",
+  "05" => "Brakna",
+  "06" => "Trarza",
+  "07" => "Adrar",
+  "08" => "Dakhlet Nouadhibou",
+  "09" => "Tagant",
+  "10" => "Guidimaka",
+  "11" => "Tiris Zemmour",
+  "12" => "Inchiri"),
+"MS" => array(
+  "01" => "Saint Anthony",
+  "02" => "Saint Georges",
+  "03" => "Saint Peter"),
+"MU" => array(
+  "12" => "Black River",
+  "13" => "Flacq",
+  "14" => "Grand Port",
+  "15" => "Moka",
+  "16" => "Pamplemousses",
+  "17" => "Plaines Wilhems",
+  "18" => "Port Louis",
+  "19" => "Riviere du Rempart",
+  "20" => "Savanne",
+  "21" => "Agalega Islands",
+  "22" => "Cargados Carajos",
+  "23" => "Rodrigues"),
+"MV" => array(
+  "01" => "Seenu",
+  "02" => "Aliff",
+  "03" => "Laviyani",
+  "04" => "Waavu",
+  "05" => "Laamu",
+  "07" => "Haa Aliff",
+  "08" => "Thaa",
+  "12" => "Meemu",
+  "13" => "Raa",
+  "14" => "Faafu",
+  "17" => "Daalu",
+  "20" => "Baa",
+  "23" => "Haa Daalu",
+  "24" => "Shaviyani",
+  "25" => "Noonu",
+  "26" => "Kaafu",
+  "27" => "Gaafu Aliff",
+  "28" => "Gaafu Daalu",
+  "29" => "Naviyani",
+  "40" => "Male"),
+"MW" => array(
+  "02" => "Chikwawa",
+  "03" => "Chiradzulu",
+  "04" => "Chitipa",
+  "05" => "Thyolo",
+  "06" => "Dedza",
+  "07" => "Dowa",
+  "08" => "Karonga",
+  "09" => "Kasungu",
+  "11" => "Lilongwe",
+  "12" => "Mangochi",
+  "13" => "Mchinji",
+  "15" => "Mzimba",
+  "16" => "Ntcheu",
+  "17" => "Nkhata Bay",
+  "18" => "Nkhotakota",
+  "19" => "Nsanje",
+  "20" => "Ntchisi",
+  "21" => "Rumphi",
+  "22" => "Salima",
+  "23" => "Zomba",
+  "24" => "Blantyre",
+  "25" => "Mwanza",
+  "26" => "Balaka",
+  "27" => "Likoma",
+  "28" => "Machinga",
+  "29" => "Mulanje",
+  "30" => "Phalombe"),
+"MX" => array(
+  "01" => "Aguascalientes",
+  "02" => "Baja California",
+  "03" => "Baja California Sur",
+  "04" => "Campeche",
+  "05" => "Chiapas",
+  "06" => "Chihuahua",
+  "07" => "Coahuila de Zaragoza",
+  "08" => "Colima",
+  "09" => "Distrito Federal",
+  "10" => "Durango",
+  "11" => "Guanajuato",
+  "12" => "Guerrero",
+  "13" => "Hidalgo",
+  "14" => "Jalisco",
+  "15" => "Mexico",
+  "16" => "Michoacan de Ocampo",
+  "17" => "Morelos",
+  "18" => "Nayarit",
+  "19" => "Nuevo Leon",
+  "20" => "Oaxaca",
+  "21" => "Puebla",
+  "22" => "Queretaro de Arteaga",
+  "23" => "Quintana Roo",
+  "24" => "San Luis Potosi",
+  "25" => "Sinaloa",
+  "26" => "Sonora",
+  "27" => "Tabasco",
+  "28" => "Tamaulipas",
+  "29" => "Tlaxcala",
+  "30" => "Veracruz-Llave",
+  "31" => "Yucatan",
+  "32" => "Zacatecas"),
+"MY" => array(
+  "01" => "Johor",
+  "02" => "Kedah",
+  "03" => "Kelantan",
+  "04" => "Melaka",
+  "05" => "Negeri Sembilan",
+  "06" => "Pahang",
+  "07" => "Perak",
+  "08" => "Perlis",
+  "09" => "Pulau Pinang",
+  "11" => "Sarawak",
+  "12" => "Selangor",
+  "13" => "Terengganu",
+  "14" => "Kuala Lumpur",
+  "15" => "Labuan",
+  "16" => "Sabah",
+  "17" => "Putrajaya"),
+"MZ" => array(
+  "01" => "Cabo Delgado",
+  "02" => "Gaza",
+  "03" => "Inhambane",
+  "04" => "Maputo",
+  "05" => "Sofala",
+  "06" => "Nampula",
+  "07" => "Niassa",
+  "08" => "Tete",
+  "09" => "Zambezia",
+  "10" => "Manica",
+  "11" => "Maputo"),
+"NA" => array(
+  "01" => "Bethanien",
+  "02" => "Caprivi Oos",
+  "03" => "Boesmanland",
+  "04" => "Gobabis",
+  "05" => "Grootfontein",
+  "06" => "Kaokoland",
+  "07" => "Karibib",
+  "08" => "Keetmanshoop",
+  "09" => "Luderitz",
+  "10" => "Maltahohe",
+  "11" => "Okahandja",
+  "12" => "Omaruru",
+  "13" => "Otjiwarongo",
+  "14" => "Outjo",
+  "15" => "Owambo",
+  "16" => "Rehoboth",
+  "17" => "Swakopmund",
+  "18" => "Tsumeb",
+  "20" => "Karasburg",
+  "21" => "Windhoek",
+  "22" => "Damaraland",
+  "23" => "Hereroland Oos",
+  "24" => "Hereroland Wes",
+  "25" => "Kavango",
+  "26" => "Mariental",
+  "27" => "Namaland",
+  "28" => "Caprivi",
+  "29" => "Erongo",
+  "30" => "Hardap",
+  "31" => "Karas",
+  "32" => "Kunene",
+  "33" => "Ohangwena",
+  "34" => "Okavango",
+  "35" => "Omaheke",
+  "36" => "Omusati",
+  "37" => "Oshana",
+  "38" => "Oshikoto",
+  "39" => "Otjozondjupa"),
+"NE" => array(
+  "01" => "Agadez",
+  "02" => "Diffa",
+  "03" => "Dosso",
+  "04" => "Maradi",
+  "05" => "Niamey",
+  "06" => "Tahoua",
+  "07" => "Zinder",
+  "08" => "Niamey"),
+"NG" => array(
+  "05" => "Lagos",
+  "10" => "Rivers",
+  "11" => "Federal Capital Territory",
+  "12" => "Gongola",
+  "16" => "Ogun",
+  "17" => "Ondo",
+  "18" => "Oyo",
+  "21" => "Akwa Ibom",
+  "22" => "Cross River",
+  "23" => "Kaduna",
+  "24" => "Katsina",
+  "25" => "Anambra",
+  "26" => "Benue",
+  "27" => "Borno",
+  "28" => "Imo",
+  "29" => "Kano",
+  "30" => "Kwara",
+  "31" => "Niger",
+  "32" => "Oyo",
+  "35" => "Adamawa",
+  "36" => "Delta",
+  "37" => "Edo",
+  "39" => "Jigawa",
+  "40" => "Kebbi",
+  "41" => "Kogi",
+  "42" => "Osun",
+  "43" => "Taraba",
+  "44" => "Yobe",
+  "45" => "Abia",
+  "46" => "Bauchi",
+  "47" => "Enugu",
+  "48" => "Ondo",
+  "49" => "Plateau",
+  "50" => "Rivers",
+  "51" => "Sokoto",
+  "52" => "Bayelsa",
+  "53" => "Ebonyi",
+  "54" => "Ekiti",
+  "55" => "Gombe",
+  "56" => "Nassarawa",
+  "57" => "Zamfara"),
+"NI" => array(
+  "01" => "Boaco",
+  "02" => "Carazo",
+  "03" => "Chinandega",
+  "04" => "Chontales",
+  "05" => "Esteli",
+  "06" => "Granada",
+  "07" => "Jinotega",
+  "08" => "Leon",
+  "09" => "Madriz",
+  "10" => "Managua",
+  "11" => "Masaya",
+  "12" => "Matagalpa",
+  "13" => "Nueva Segovia",
+  "14" => "Rio San Juan",
+  "15" => "Rivas",
+  "16" => "Zelaya",
+  "17" => "Autonoma Atlantico Norte",
+  "18" => "Region Autonoma Atlantico Sur"),
+"NL" => array(
+  "01" => "Drenthe",
+  "02" => "Friesland",
+  "03" => "Gelderland",
+  "04" => "Groningen",
+  "05" => "Limburg",
+  "06" => "Noord-Brabant",
+  "07" => "Noord-Holland",
+  "08" => "Overijssel",
+  "09" => "Utrecht",
+  "10" => "Zeeland",
+  "11" => "Zuid-Holland",
+  "12" => "Dronten",
+  "13" => "Zuidelijke IJsselmeerpolders",
+  "14" => "Lelystad",
+  "15" => "Overijssel",
+  "16" => "Flevoland"),
+"NO" => array(
+  "01" => "Akershus",
+  "02" => "Aust-Agder",
+  "04" => "Buskerud",
+  "05" => "Finnmark",
+  "06" => "Hedmark",
+  "07" => "Hordaland",
+  "08" => "More og Romsdal",
+  "09" => "Nordland",
+  "10" => "Nord-Trondelag",
+  "11" => "Oppland",
+  "12" => "Oslo",
+  "13" => "Ostfold",
+  "14" => "Rogaland",
+  "15" => "Sogn og Fjordane",
+  "16" => "Sor-Trondelag",
+  "17" => "Telemark",
+  "18" => "Troms",
+  "19" => "Vest-Agder",
+  "20" => "Vestfold"),
+"NP" => array(
+  "01" => "Bagmati",
+  "02" => "Bheri",
+  "03" => "Dhawalagiri",
+  "04" => "Gandaki",
+  "05" => "Janakpur",
+  "06" => "Karnali",
+  "07" => "Kosi",
+  "08" => "Lumbini",
+  "09" => "Mahakali",
+  "10" => "Mechi",
+  "11" => "Narayani",
+  "12" => "Rapti",
+  "13" => "Sagarmatha",
+  "14" => "Seti"),
+"NR" => array(
+  "01" => "Aiwo",
+  "02" => "Anabar",
+  "03" => "Anetan",
+  "04" => "Anibare",
+  "05" => "Baiti",
+  "06" => "Boe",
+  "07" => "Buada",
+  "08" => "Denigomodu",
+  "09" => "Ewa",
+  "10" => "Ijuw",
+  "11" => "Meneng",
+  "12" => "Nibok",
+  "13" => "Uaboe",
+  "14" => "Yaren"),
+"NZ" => array(
+  "10" => "Chatham Islands",
+  "85" => "Waikato",
+  "E7" => "Auckland",
+  "E8" => "Bay of Plenty",
+  "E9" => "Canterbury",
+  "F1" => "Gisborne",
+  "F2" => "Hawke's Bay",
+  "F3" => "Manawatu-Wanganui",
+  "F4" => "Marlborough",
+  "F5" => "Nelson",
+  "F6" => "Northland",
+  "F7" => "Otago",
+  "F8" => "Southland",
+  "F9" => "Taranaki",
+  "G1" => "Waikato",
+  "G2" => "Wellington",
+  "G3" => "West Coast"),
+"OM" => array(
+  "01" => "Ad Dakhiliyah",
+  "02" => "Al Batinah",
+  "03" => "Al Wusta",
+  "04" => "Ash Sharqiyah",
+  "05" => "Az Zahirah",
+  "06" => "Masqat",
+  "07" => "Musandam",
+  "08" => "Zufar"),
+"PA" => array(
+  "01" => "Bocas del Toro",
+  "02" => "Chiriqui",
+  "03" => "Cocle",
+  "04" => "Colon",
+  "05" => "Darien",
+  "06" => "Herrera",
+  "07" => "Los Santos",
+  "08" => "Panama",
+  "09" => "San Blas",
+  "10" => "Veraguas"),
+"PE" => array(
+  "01" => "Amazonas",
+  "02" => "Ancash",
+  "03" => "Apurimac",
+  "04" => "Arequipa",
+  "05" => "Ayacucho",
+  "06" => "Cajamarca",
+  "07" => "Callao",
+  "08" => "Cusco",
+  "09" => "Huancavelica",
+  "10" => "Huanuco",
+  "11" => "Ica",
+  "12" => "Junin",
+  "13" => "La Libertad",
+  "14" => "Lambayeque",
+  "15" => "Lima",
+  "16" => "Loreto",
+  "17" => "Madre de Dios",
+  "18" => "Moquegua",
+  "19" => "Pasco",
+  "20" => "Piura",
+  "21" => "Puno",
+  "22" => "San Martin",
+  "23" => "Tacna",
+  "24" => "Tumbes",
+  "25" => "Ucayali"),
+"PG" => array(
+  "01" => "Central",
+  "02" => "Gulf",
+  "03" => "Milne Bay",
+  "04" => "Northern",
+  "05" => "Southern Highlands",
+  "06" => "Western",
+  "07" => "North Solomons",
+  "08" => "Chimbu",
+  "09" => "Eastern Highlands",
+  "10" => "East New Britain",
+  "11" => "East Sepik",
+  "12" => "Madang",
+  "13" => "Manus",
+  "14" => "Morobe",
+  "15" => "New Ireland",
+  "16" => "Western Highlands",
+  "17" => "West New Britain",
+  "18" => "Sandaun",
+  "19" => "Enga",
+  "20" => "National Capital"),
+"PH" => array(
+  "01" => "Abra",
+  "02" => "Agusan del Norte",
+  "03" => "Agusan del Sur",
+  "04" => "Aklan",
+  "05" => "Albay",
+  "06" => "Antique",
+  "07" => "Bataan",
+  "08" => "Batanes",
+  "09" => "Batangas",
+  "10" => "Benguet",
+  "11" => "Bohol",
+  "12" => "Bukidnon",
+  "13" => "Bulacan",
+  "14" => "Cagayan",
+  "15" => "Camarines Norte",
+  "16" => "Camarines Sur",
+  "17" => "Camiguin",
+  "18" => "Capiz",
+  "19" => "Catanduanes",
+  "20" => "Cavite",
+  "21" => "Cebu",
+  "22" => "Basilan",
+  "23" => "Eastern Samar",
+  "24" => "Davao",
+  "25" => "Davao del Sur",
+  "26" => "Davao Oriental",
+  "27" => "Ifugao",
+  "28" => "Ilocos Norte",
+  "29" => "Ilocos Sur",
+  "30" => "Iloilo",
+  "31" => "Isabela",
+  "32" => "Kalinga-Apayao",
+  "33" => "Laguna",
+  "34" => "Lanao del Norte",
+  "35" => "Lanao del Sur",
+  "36" => "La Union",
+  "37" => "Leyte",
+  "38" => "Marinduque",
+  "39" => "Masbate",
+  "40" => "Mindoro Occidental",
+  "41" => "Mindoro Oriental",
+  "42" => "Misamis Occidental",
+  "43" => "Misamis Oriental",
+  "44" => "Mountain",
+  "45" => "Negros Occidental",
+  "46" => "Negros Oriental",
+  "47" => "Nueva Ecija",
+  "48" => "Nueva Vizcaya",
+  "49" => "Palawan",
+  "50" => "Pampanga",
+  "51" => "Pangasinan",
+  "53" => "Rizal",
+  "54" => "Romblon",
+  "55" => "Samar",
+  "56" => "Maguindanao",
+  "57" => "North Cotabato",
+  "58" => "Sorsogon",
+  "59" => "Southern Leyte",
+  "60" => "Sulu",
+  "61" => "Surigao del Norte",
+  "62" => "Surigao del Sur",
+  "63" => "Tarlac",
+  "64" => "Zambales",
+  "65" => "Zamboanga del Norte",
+  "66" => "Zamboanga del Sur",
+  "67" => "Northern Samar",
+  "68" => "Quirino",
+  "69" => "Siquijor",
+  "70" => "South Cotabato",
+  "71" => "Sultan Kudarat",
+  "72" => "Tawitawi",
+  "A1" => "Angeles",
+  "A2" => "Bacolod",
+  "A3" => "Bago",
+  "A4" => "Baguio",
+  "A5" => "Bais",
+  "A6" => "Basilan City",
+  "A7" => "Batangas City",
+  "A8" => "Butuan",
+  "A9" => "Cabanatuan",
+  "B1" => "Cadiz",
+  "B2" => "Cagayan de Oro",
+  "B3" => "Calbayog",
+  "B4" => "Caloocan",
+  "B5" => "Canlaon",
+  "B6" => "Cavite City",
+  "B7" => "Cebu City",
+  "B8" => "Cotabato",
+  "B9" => "Dagupan",
+  "C1" => "Danao",
+  "C2" => "Dapitan",
+  "C3" => "Davao City",
+  "C4" => "Dipolog",
+  "C5" => "Dumaguete",
+  "C6" => "General Santos",
+  "C7" => "Gingoog",
+  "C8" => "Iligan",
+  "C9" => "Iloilo City",
+  "D1" => "Iriga",
+  "D2" => "La Carlota",
+  "D3" => "Laoag",
+  "D4" => "Lapu-Lapu",
+  "D5" => "Legaspi",
+  "D6" => "Lipa",
+  "D7" => "Lucena",
+  "D8" => "Mandaue",
+  "D9" => "Manila",
+  "E1" => "Marawi",
+  "E2" => "Naga",
+  "E3" => "Olongapo",
+  "E4" => "Ormoc",
+  "E5" => "Oroquieta",
+  "E6" => "Ozamis",
+  "E7" => "Pagadian",
+  "E8" => "Palayan",
+  "E9" => "Pasay",
+  "F1" => "Puerto Princesa",
+  "F2" => "Quezon City",
+  "F3" => "Roxas",
+  "F4" => "San Carlos",
+  "F5" => "San Carlos",
+  "F6" => "San Jose",
+  "F7" => "San Pablo",
+  "F8" => "Silay",
+  "F9" => "Surigao",
+  "G1" => "Tacloban",
+  "G2" => "Tagaytay",
+  "G3" => "Tagbilaran",
+  "G4" => "Tangub",
+  "G5" => "Toledo",
+  "G6" => "Trece Martires",
+  "G7" => "Zamboanga",
+  "G8" => "Aurora",
+  "H2" => "Quezon",
+  "H3" => "Negros Occidental"),
+"PK" => array(
+  "01" => "Federally Administered Tribal Areas",
+  "02" => "Balochistan",
+  "03" => "North-West Frontier",
+  "04" => "Punjab",
+  "05" => "Sindh",
+  "06" => "Azad Kashmir",
+  "07" => "Northern Areas",
+  "08" => "Islamabad"),
+"PL" => array(
+  "23" => "Biala Podlaska",
+  "24" => "Bialystok",
+  "25" => "Bielsko",
+  "26" => "Bydgoszcz",
+  "27" => "Chelm",
+  "28" => "Ciechanow",
+  "29" => "Czestochowa",
+  "30" => "Elblag",
+  "31" => "Gdansk",
+  "32" => "Gorzow",
+  "33" => "Jelenia Gora",
+  "34" => "Kalisz",
+  "35" => "Katowice",
+  "36" => "Kielce",
+  "37" => "Konin",
+  "38" => "Koszalin",
+  "39" => "Krakow",
+  "40" => "Krosno",
+  "41" => "Legnica",
+  "42" => "Leszno",
+  "43" => "Lodz",
+  "44" => "Lomza",
+  "45" => "Lublin",
+  "46" => "Nowy Sacz",
+  "47" => "Olsztyn",
+  "48" => "Opole",
+  "49" => "Ostroleka",
+  "50" => "Pila",
+  "51" => "Piotrkow",
+  "52" => "Plock",
+  "53" => "Poznan",
+  "54" => "Przemysl",
+  "55" => "Radom",
+  "56" => "Rzeszow",
+  "57" => "Siedlce",
+  "58" => "Sieradz",
+  "59" => "Skierniewice",
+  "60" => "Slupsk",
+  "61" => "Suwalki",
+  "62" => "Szczecin",
+  "63" => "Tarnobrzeg",
+  "64" => "Tarnow",
+  "65" => "Torun",
+  "66" => "Walbrzych",
+  "67" => "Warszawa",
+  "68" => "Wloclawek",
+  "69" => "Wroclaw",
+  "70" => "Zamosc",
+  "71" => "Zielona Gora",
+  "72" => "Dolnoslaskie",
+  "73" => "Kujawsko-Pomorskie",
+  "74" => "Lodzkie",
+  "75" => "Lubelskie",
+  "76" => "Lubuskie",
+  "77" => "Malopolskie",
+  "78" => "Mazowieckie",
+  "79" => "Opolskie",
+  "80" => "Podkarpackie",
+  "81" => "Podlaskie",
+  "82" => "Pomorskie",
+  "83" => "Slaskie",
+  "84" => "Swietokrzyskie",
+  "85" => "Warminsko-Mazurskie",
+  "86" => "Wielkopolskie",
+  "87" => "Zachodniopomorskie"),
+"PS" => array(
+  "GZ" => "Gaza",
+  "WE" => "West Bank"),
+"PT" => array(
+  "02" => "Aveiro",
+  "03" => "Beja",
+  "04" => "Braga",
+  "05" => "Braganca",
+  "06" => "Castelo Branco",
+  "07" => "Coimbra",
+  "08" => "Evora",
+  "09" => "Faro",
+  "10" => "Madeira",
+  "11" => "Guarda",
+  "13" => "Leiria",
+  "14" => "Lisboa",
+  "16" => "Portalegre",
+  "17" => "Porto",
+  "18" => "Santarem",
+  "19" => "Setubal",
+  "20" => "Viana do Castelo",
+  "21" => "Vila Real",
+  "22" => "Viseu",
+  "23" => "Azores"),
+"PY" => array(
+  "01" => "Alto Parana",
+  "02" => "Amambay",
+  "03" => "Boqueron",
+  "04" => "Caaguazu",
+  "05" => "Caazapa",
+  "06" => "Central",
+  "07" => "Concepcion",
+  "08" => "Cordillera",
+  "10" => "Guaira",
+  "11" => "Itapua",
+  "12" => "Misiones",
+  "13" => "Neembucu",
+  "15" => "Paraguari",
+  "16" => "Presidente Hayes",
+  "17" => "San Pedro",
+  "19" => "Canindeyu",
+  "20" => "Chaco",
+  "21" => "Nueva Asuncion",
+  "23" => "Alto Paraguay"),
+"QA" => array(
+  "01" => "Ad Dawhah",
+  "02" => "Al Ghuwariyah",
+  "03" => "Al Jumaliyah",
+  "04" => "Al Khawr",
+  "05" => "Al Wakrah Municipality",
+  "06" => "Ar Rayyan",
+  "08" => "Madinat ach Shamal",
+  "09" => "Umm Salal",
+  "10" => "Al Wakrah",
+  "11" => "Jariyan al Batnah",
+  "12" => "Umm Sa'id"),
+"RO" => array(
+  "01" => "Alba",
+  "02" => "Arad",
+  "03" => "Arges",
+  "04" => "Bacau",
+  "05" => "Bihor",
+  "06" => "Bistrita-Nasaud",
+  "07" => "Botosani",
+  "08" => "Braila",
+  "09" => "Brasov",
+  "10" => "Bucuresti",
+  "11" => "Buzau",
+  "12" => "Caras-Severin",
+  "13" => "Cluj",
+  "14" => "Constanta",
+  "15" => "Covasna",
+  "16" => "Dambovita",
+  "17" => "Dolj",
+  "18" => "Galati",
+  "19" => "Gorj",
+  "20" => "Harghita",
+  "21" => "Hunedoara",
+  "22" => "Ialomita",
+  "23" => "Iasi",
+  "25" => "Maramures",
+  "26" => "Mehedinti",
+  "27" => "Mures",
+  "28" => "Neamt",
+  "29" => "Olt",
+  "30" => "Prahova",
+  "31" => "Salaj",
+  "32" => "Satu Mare",
+  "33" => "Sibiu",
+  "34" => "Suceava",
+  "35" => "Teleorman",
+  "36" => "Timis",
+  "37" => "Tulcea",
+  "38" => "Vaslui",
+  "39" => "Valcea",
+  "40" => "Vrancea",
+  "41" => "Calarasi",
+  "42" => "Giurgiu",
+  "43" => "Ilfov"),
+"RS" => array(
+  "01" => "Kosovo",
+  "02" => "Vojvodina"),
+"RU" => array(
+  "01" => "Adygeya, Republic of",
+  "02" => "Aginsky Buryatsky AO",
+  "03" => "Gorno-Altay",
+  "04" => "Altaisky krai",
+  "05" => "Amur",
+  "06" => "Arkhangel'sk",
+  "07" => "Astrakhan'",
+  "08" => "Bashkortostan",
+  "09" => "Belgorod",
+  "10" => "Bryansk",
+  "11" => "Buryat",
+  "12" => "Chechnya",
+  "13" => "Chelyabinsk",
+  "14" => "Chita",
+  "15" => "Chukot",
+  "16" => "Chuvashia",
+  "17" => "Dagestan",
+  "18" => "Evenk",
+  "19" => "Ingush",
+  "20" => "Irkutsk",
+  "21" => "Ivanovo",
+  "22" => "Kabardin-Balkar",
+  "23" => "Kaliningrad",
+  "24" => "Kalmyk",
+  "25" => "Kaluga",
+  "26" => "Kamchatka",
+  "27" => "Karachay-Cherkess",
+  "28" => "Karelia",
+  "29" => "Kemerovo",
+  "30" => "Khabarovsk",
+  "31" => "Khakass",
+  "32" => "Khanty-Mansiy",
+  "33" => "Kirov",
+  "34" => "Komi",
+  "35" => "Komi-Permyak",
+  "36" => "Koryak",
+  "37" => "Kostroma",
+  "38" => "Krasnodar",
+  "39" => "Krasnoyarsk",
+  "40" => "Kurgan",
+  "41" => "Kursk",
+  "42" => "Leningrad",
+  "43" => "Lipetsk",
+  "44" => "Magadan",
+  "45" => "Mariy-El",
+  "46" => "Mordovia",
+  "47" => "Moskva",
+  "48" => "Moscow City",
+  "49" => "Murmansk",
+  "50" => "Nenets",
+  "51" => "Nizhegorod",
+  "52" => "Novgorod",
+  "53" => "Novosibirsk",
+  "54" => "Omsk",
+  "55" => "Orenburg",
+  "56" => "Orel",
+  "57" => "Penza",
+  "58" => "Perm'",
+  "59" => "Primor'ye",
+  "60" => "Pskov",
+  "61" => "Rostov",
+  "62" => "Ryazan'",
+  "63" => "Sakha",
+  "64" => "Sakhalin",
+  "65" => "Samara",
+  "66" => "Saint Petersburg City",
+  "67" => "Saratov",
+  "68" => "North Ossetia",
+  "69" => "Smolensk",
+  "70" => "Stavropol'",
+  "71" => "Sverdlovsk",
+  "72" => "Tambovskaya oblast",
+  "73" => "Tatarstan",
+  "74" => "Taymyr",
+  "75" => "Tomsk",
+  "76" => "Tula",
+  "77" => "Tver'",
+  "78" => "Tyumen'",
+  "79" => "Tuva",
+  "80" => "Udmurt",
+  "81" => "Ul'yanovsk",
+  "82" => "Ust-Orda Buryat",
+  "83" => "Vladimir",
+  "84" => "Volgograd",
+  "85" => "Vologda",
+  "86" => "Voronezh",
+  "87" => "Yamal-Nenets",
+  "88" => "Yaroslavl'",
+  "89" => "Yevrey",
+  "90" => "Permskiy Kray",
+  "91" => "Krasnoyarskiy Kray",
+  "CI" => "Chechnya Republic"),
+"RW" => array(
+  "01" => "Butare",
+  "06" => "Gitarama",
+  "07" => "Kibungo",
+  "09" => "Kigali",
+  "11" => "Est",
+  "12" => "Kigali",
+  "13" => "Nord",
+  "14" => "Ouest",
+  "15" => "Sud"),
+"SA" => array(
+  "02" => "Al Bahah",
+  "03" => "Al Jawf",
+  "05" => "Al Madinah",
+  "06" => "Ash Sharqiyah",
+  "08" => "Al Qasim",
+  "09" => "Al Qurayyat",
+  "10" => "Ar Riyad",
+  "13" => "Ha'il",
+  "14" => "Makkah",
+  "15" => "Al Hudud ash Shamaliyah",
+  "16" => "Najran",
+  "17" => "Jizan",
+  "19" => "Tabuk",
+  "20" => "Al Jawf"),
+"SB" => array(
+  "03" => "Malaita",
+  "06" => "Guadalcanal",
+  "07" => "Isabel",
+  "08" => "Makira",
+  "09" => "Temotu",
+  "10" => "Central",
+  "11" => "Western",
+  "12" => "Choiseul",
+  "13" => "Rennell and Bellona"),
+"SC" => array(
+  "01" => "Anse aux Pins",
+  "02" => "Anse Boileau",
+  "03" => "Anse Etoile",
+  "04" => "Anse Louis",
+  "05" => "Anse Royale",
+  "06" => "Baie Lazare",
+  "07" => "Baie Sainte Anne",
+  "08" => "Beau Vallon",
+  "09" => "Bel Air",
+  "10" => "Bel Ombre",
+  "11" => "Cascade",
+  "12" => "Glacis",
+  "13" => "Grand' Anse",
+  "14" => "Grand' Anse",
+  "15" => "La Digue",
+  "16" => "La Riviere Anglaise",
+  "17" => "Mont Buxton",
+  "18" => "Mont Fleuri",
+  "19" => "Plaisance",
+  "20" => "Pointe La Rue",
+  "21" => "Port Glaud",
+  "22" => "Saint Louis",
+  "23" => "Takamaka"),
+"SD" => array(
+  "27" => "Al Wusta",
+  "28" => "Al Istiwa'iyah",
+  "29" => "Al Khartum",
+  "30" => "Ash Shamaliyah",
+  "31" => "Ash Sharqiyah",
+  "32" => "Bahr al Ghazal",
+  "33" => "Darfur",
+  "34" => "Kurdufan",
+  "35" => "Upper Nile",
+  "40" => "Al Wahadah State",
+  "44" => "Central Equatoria State"),
+"SE" => array(
+  "01" => "Alvsborgs Lan",
+  "02" => "Blekinge Lan",
+  "03" => "Gavleborgs Lan",
+  "04" => "Goteborgs och Bohus Lan",
+  "05" => "Gotlands Lan",
+  "06" => "Hallands Lan",
+  "07" => "Jamtlands Lan",
+  "08" => "Jonkopings Lan",
+  "09" => "Kalmar Lan",
+  "10" => "Dalarnas Lan",
+  "11" => "Kristianstads Lan",
+  "12" => "Kronobergs Lan",
+  "13" => "Malmohus Lan",
+  "14" => "Norrbottens Lan",
+  "15" => "Orebro Lan",
+  "16" => "Ostergotlands Lan",
+  "17" => "Skaraborgs Lan",
+  "18" => "Sodermanlands Lan",
+  "21" => "Uppsala Lan",
+  "22" => "Varmlands Lan",
+  "23" => "Vasterbottens Lan",
+  "24" => "Vasternorrlands Lan",
+  "25" => "Vastmanlands Lan",
+  "26" => "Stockholms Lan",
+  "27" => "Skane Lan",
+  "28" => "Vastra Gotaland"),
+"SH" => array(
+  "01" => "Ascension",
+  "02" => "Saint Helena",
+  "03" => "Tristan da Cunha"),
+"SI" => array(
+  "01" => "Ajdovscina",
+  "02" => "Beltinci",
+  "03" => "Bled",
+  "04" => "Bohinj",
+  "05" => "Borovnica",
+  "06" => "Bovec",
+  "07" => "Brda",
+  "08" => "Brezice",
+  "09" => "Brezovica",
+  "11" => "Celje",
+  "12" => "Cerklje na Gorenjskem",
+  "13" => "Cerknica",
+  "14" => "Cerkno",
+  "15" => "Crensovci",
+  "16" => "Crna na Koroskem",
+  "17" => "Crnomelj",
+  "19" => "Divaca",
+  "20" => "Dobrepolje",
+  "22" => "Dol pri Ljubljani",
+  "24" => "Dornava",
+  "25" => "Dravograd",
+  "26" => "Duplek",
+  "27" => "Gorenja Vas-Poljane",
+  "28" => "Gorisnica",
+  "29" => "Gornja Radgona",
+  "30" => "Gornji Grad",
+  "31" => "Gornji Petrovci",
+  "32" => "Grosuplje",
+  "34" => "Hrastnik",
+  "35" => "Hrpelje-Kozina",
+  "36" => "Idrija",
+  "37" => "Ig",
+  "38" => "Ilirska Bistrica",
+  "39" => "Ivancna Gorica",
+  "40" => "Izola-Isola",
+  "42" => "Jursinci",
+  "44" => "Kanal",
+  "45" => "Kidricevo",
+  "46" => "Kobarid",
+  "47" => "Kobilje",
+  "49" => "Komen",
+  "50" => "Koper-Capodistria",
+  "51" => "Kozje",
+  "52" => "Kranj",
+  "53" => "Kranjska Gora",
+  "54" => "Krsko",
+  "55" => "Kungota",
+  "57" => "Lasko",
+  "61" => "Ljubljana",
+  "62" => "Ljubno",
+  "64" => "Logatec",
+  "66" => "Loski Potok",
+  "68" => "Lukovica",
+  "71" => "Medvode",
+  "72" => "Menges",
+  "73" => "Metlika",
+  "74" => "Mezica",
+  "76" => "Mislinja",
+  "77" => "Moravce",
+  "78" => "Moravske Toplice",
+  "79" => "Mozirje",
+  "80" => "Murska Sobota",
+  "81" => "Muta",
+  "82" => "Naklo",
+  "83" => "Nazarje",
+  "84" => "Nova Gorica",
+  "86" => "Odranci",
+  "87" => "Ormoz",
+  "88" => "Osilnica",
+  "89" => "Pesnica",
+  "91" => "Pivka",
+  "92" => "Podcetrtek",
+  "94" => "Postojna",
+  "97" => "Puconci",
+  "98" => "Racam",
+  "99" => "Radece",
+  "A1" => "Radenci",
+  "A2" => "Radlje ob Dravi",
+  "A3" => "Radovljica",
+  "A6" => "Rogasovci",
+  "A7" => "Rogaska Slatina",
+  "A8" => "Rogatec",
+  "B1" => "Semic",
+  "B2" => "Sencur",
+  "B3" => "Sentilj",
+  "B4" => "Sentjernej",
+  "B6" => "Sevnica",
+  "B7" => "Sezana",
+  "B8" => "Skocjan",
+  "B9" => "Skofja Loka",
+  "C1" => "Skofljica",
+  "C2" => "Slovenj Gradec",
+  "C4" => "Slovenske Konjice",
+  "C5" => "Smarje pri Jelsah",
+  "C6" => "Smartno ob Paki",
+  "C7" => "Sostanj",
+  "C8" => "Starse",
+  "C9" => "Store",
+  "D1" => "Sveti Jurij",
+  "D2" => "Tolmin",
+  "D3" => "Trbovlje",
+  "D4" => "Trebnje",
+  "D5" => "Trzic",
+  "D6" => "Turnisce",
+  "D7" => "Velenje",
+  "D8" => "Velike Lasce",
+  "E1" => "Vipava",
+  "E2" => "Vitanje",
+  "E3" => "Vodice",
+  "E5" => "Vrhnika",
+  "E6" => "Vuzenica",
+  "E7" => "Zagorje ob Savi",
+  "E9" => "Zavrc",
+  "F1" => "Zelezniki",
+  "F2" => "Ziri",
+  "F3" => "Zrece",
+  "G4" => "Dobrova-Horjul-Polhov Gradec",
+  "G7" => "Domzale",
+  "H4" => "Jesenice",
+  "H6" => "Kamnik",
+  "H7" => "Kocevje",
+  "I2" => "Kuzma",
+  "I3" => "Lenart",
+  "I5" => "Litija",
+  "I6" => "Ljutomer",
+  "I7" => "Loska Dolina",
+  "I9" => "Luce",
+  "J1" => "Majsperk",
+  "J2" => "Maribor",
+  "J5" => "Miren-Kostanjevica",
+  "J7" => "Novo Mesto",
+  "J9" => "Piran",
+  "K5" => "Preddvor",
+  "K7" => "Ptuj",
+  "L1" => "Ribnica",
+  "L3" => "Ruse",
+  "L7" => "Sentjur pri Celju",
+  "L8" => "Slovenska Bistrica",
+  "N2" => "Videm",
+  "N3" => "Vojnik",
+  "N5" => "Zalec"),
+"SK" => array(
+  "01" => "Banska Bystrica",
+  "02" => "Bratislava",
+  "03" => "Kosice",
+  "04" => "Nitra",
+  "05" => "Presov",
+  "06" => "Trencin",
+  "07" => "Trnava",
+  "08" => "Zilina"),
+"SL" => array(
+  "01" => "Eastern",
+  "02" => "Northern",
+  "03" => "Southern",
+  "04" => "Western Area"),
+"SM" => array(
+  "01" => "Acquaviva",
+  "02" => "Chiesanuova",
+  "03" => "Domagnano",
+  "04" => "Faetano",
+  "05" => "Fiorentino",
+  "06" => "Borgo Maggiore",
+  "07" => "San Marino",
+  "08" => "Monte Giardino",
+  "09" => "Serravalle"),
+"SN" => array(
+  "01" => "Dakar",
+  "03" => "Diourbel",
+  "04" => "Saint-Louis",
+  "05" => "Tambacounda",
+  "07" => "Thies",
+  "08" => "Louga",
+  "09" => "Fatick",
+  "10" => "Kaolack",
+  "11" => "Kolda",
+  "12" => "Ziguinchor",
+  "13" => "Louga",
+  "14" => "Saint-Louis",
+  "15" => "Matam"),
+"SO" => array(
+  "01" => "Bakool",
+  "02" => "Banaadir",
+  "03" => "Bari",
+  "04" => "Bay",
+  "05" => "Galguduud",
+  "06" => "Gedo",
+  "07" => "Hiiraan",
+  "08" => "Jubbada Dhexe",
+  "09" => "Jubbada Hoose",
+  "10" => "Mudug",
+  "11" => "Nugaal",
+  "12" => "Sanaag",
+  "13" => "Shabeellaha Dhexe",
+  "14" => "Shabeellaha Hoose",
+  "16" => "Woqooyi Galbeed",
+  "18" => "Nugaal",
+  "19" => "Togdheer",
+  "20" => "Woqooyi Galbeed",
+  "21" => "Awdal",
+  "22" => "Sool"),
+"SR" => array(
+  "10" => "Brokopondo",
+  "11" => "Commewijne",
+  "12" => "Coronie",
+  "13" => "Marowijne",
+  "14" => "Nickerie",
+  "15" => "Para",
+  "16" => "Paramaribo",
+  "17" => "Saramacca",
+  "18" => "Sipaliwini",
+  "19" => "Wanica"),
+"ST" => array(
+  "01" => "Principe",
+  "02" => "Sao Tome"),
+"SV" => array(
+  "01" => "Ahuachapan",
+  "02" => "Cabanas",
+  "03" => "Chalatenango",
+  "04" => "Cuscatlan",
+  "05" => "La Libertad",
+  "06" => "La Paz",
+  "07" => "La Union",
+  "08" => "Morazan",
+  "09" => "San Miguel",
+  "10" => "San Salvador",
+  "11" => "Santa Ana",
+  "12" => "San Vicente",
+  "13" => "Sonsonate",
+  "14" => "Usulutan"),
+"SY" => array(
+  "01" => "Al Hasakah",
+  "02" => "Al Ladhiqiyah",
+  "03" => "Al Qunaytirah",
+  "04" => "Ar Raqqah",
+  "05" => "As Suwayda'",
+  "06" => "Dar",
+  "07" => "Dayr az Zawr",
+  "08" => "Rif Dimashq",
+  "09" => "Halab",
+  "10" => "Hamah",
+  "11" => "Hims",
+  "12" => "Idlib",
+  "13" => "Dimashq",
+  "14" => "Tartus"),
+"SZ" => array(
+  "01" => "Hhohho",
+  "02" => "Lubombo",
+  "03" => "Manzini",
+  "04" => "Shiselweni",
+  "05" => "Praslin"),
+"TD" => array(
+  "01" => "Batha",
+  "02" => "Biltine",
+  "03" => "Borkou-Ennedi-Tibesti",
+  "04" => "Chari-Baguirmi",
+  "05" => "Guera",
+  "06" => "Kanem",
+  "07" => "Lac",
+  "08" => "Logone Occidental",
+  "09" => "Logone Oriental",
+  "10" => "Mayo-Kebbi",
+  "11" => "Moyen-Chari",
+  "12" => "Ouaddai",
+  "13" => "Salamat",
+  "14" => "Tandjile"),
+"TG" => array(
+  "09" => "Lama-Kara",
+  "18" => "Tsevie",
+  "22" => "Centrale",
+  "23" => "Kara",
+  "24" => "Maritime",
+  "25" => "Plateaux",
+  "26" => "Savanes"),
+"TH" => array(
+  "01" => "Mae Hong Son",
+  "02" => "Chiang Mai",
+  "03" => "Chiang Rai",
+  "04" => "Nan",
+  "05" => "Lamphun",
+  "06" => "Lampang",
+  "07" => "Phrae",
+  "08" => "Tak",
+  "09" => "Sukhothai",
+  "10" => "Uttaradit",
+  "11" => "Kamphaeng Phet",
+  "12" => "Phitsanulok",
+  "13" => "Phichit",
+  "14" => "Phetchabun",
+  "15" => "Uthai Thani",
+  "16" => "Nakhon Sawan",
+  "17" => "Nong Khai",
+  "18" => "Loei",
+  "20" => "Sakon Nakhon",
+  "21" => "Nakhon Phanom",
+  "22" => "Khon Kaen",
+  "23" => "Kalasin",
+  "24" => "Maha Sarakham",
+  "25" => "Roi Et",
+  "26" => "Chaiyaphum",
+  "27" => "Nakhon Ratchasima",
+  "28" => "Buriram",
+  "29" => "Surin",
+  "30" => "Sisaket",
+  "31" => "Narathiwat",
+  "32" => "Chai Nat",
+  "33" => "Sing Buri",
+  "34" => "Lop Buri",
+  "35" => "Ang Thong",
+  "36" => "Phra Nakhon Si Ayutthaya",
+  "37" => "Saraburi",
+  "38" => "Nonthaburi",
+  "39" => "Pathum Thani",
+  "40" => "Krung Thep",
+  "41" => "Phayao",
+  "42" => "Samut Prakan",
+  "43" => "Nakhon Nayok",
+  "44" => "Chachoengsao",
+  "45" => "Prachin Buri",
+  "46" => "Chon Buri",
+  "47" => "Rayong",
+  "48" => "Chanthaburi",
+  "49" => "Trat",
+  "50" => "Kanchanaburi",
+  "51" => "Suphan Buri",
+  "52" => "Ratchaburi",
+  "53" => "Nakhon Pathom",
+  "54" => "Samut Songkhram",
+  "55" => "Samut Sakhon",
+  "56" => "Phetchaburi",
+  "57" => "Prachuap Khiri Khan",
+  "58" => "Chumphon",
+  "59" => "Ranong",
+  "60" => "Surat Thani",
+  "61" => "Phangnga",
+  "62" => "Phuket",
+  "63" => "Krabi",
+  "64" => "Nakhon Si Thammarat",
+  "65" => "Trang",
+  "66" => "Phatthalung",
+  "67" => "Satun",
+  "68" => "Songkhla",
+  "69" => "Pattani",
+  "70" => "Yala",
+  "71" => "Ubon Ratchathani",
+  "72" => "Yasothon",
+  "73" => "Nakhon Phanom",
+  "75" => "Ubon Ratchathani",
+  "76" => "Udon Thani",
+  "77" => "Amnat Charoen",
+  "78" => "Mukdahan",
+  "79" => "Nong Bua Lamphu",
+  "80" => "Sa Kaeo"),
+"TJ" => array(
+  "01" => "Kuhistoni Badakhshon",
+  "02" => "Khatlon",
+  "03" => "Sughd"),
+"TM" => array(
+  "01" => "Ahal",
+  "02" => "Balkan",
+  "03" => "Dashoguz",
+  "04" => "Lebap",
+  "05" => "Mary"),
+"TN" => array(
+  "02" => "Kasserine",
+  "03" => "Kairouan",
+  "06" => "Jendouba",
+  "14" => "El Kef",
+  "15" => "Al Mahdia",
+  "16" => "Al Munastir",
+  "17" => "Bajah",
+  "18" => "Bizerte",
+  "19" => "Nabeul",
+  "22" => "Siliana",
+  "23" => "Sousse",
+  "26" => "Ariana",
+  "27" => "Ben Arous",
+  "28" => "Madanin",
+  "29" => "Gabes",
+  "30" => "Gafsa",
+  "31" => "Kebili",
+  "32" => "Sfax",
+  "33" => "Sidi Bou Zid",
+  "34" => "Tataouine",
+  "35" => "Tozeur",
+  "36" => "Tunis",
+  "37" => "Zaghouan"),
+"TO" => array(
+  "01" => "Ha",
+  "02" => "Tongatapu",
+  "03" => "Vava"),
+"TR" => array(
+  "02" => "Adiyaman",
+  "03" => "Afyonkarahisar",
+  "04" => "Agri",
+  "05" => "Amasya",
+  "07" => "Antalya",
+  "08" => "Artvin",
+  "09" => "Aydin",
+  "10" => "Balikesir",
+  "11" => "Bilecik",
+  "12" => "Bingol",
+  "13" => "Bitlis",
+  "14" => "Bolu",
+  "15" => "Burdur",
+  "16" => "Bursa",
+  "17" => "Canakkale",
+  "19" => "Corum",
+  "20" => "Denizli",
+  "21" => "Diyarbakir",
+  "22" => "Edirne",
+  "23" => "Elazig",
+  "24" => "Erzincan",
+  "25" => "Erzurum",
+  "26" => "Eskisehir",
+  "28" => "Giresun",
+  "31" => "Hatay",
+  "32" => "Icel",
+  "33" => "Isparta",
+  "34" => "Istanbul",
+  "35" => "Izmir",
+  "37" => "Kastamonu",
+  "38" => "Kayseri",
+  "39" => "Kirklareli",
+  "40" => "Kirsehir",
+  "41" => "Kocaeli",
+  "43" => "Kutahya",
+  "44" => "Malatya",
+  "45" => "Manisa",
+  "46" => "Kahramanmaras",
+  "48" => "Mugla",
+  "49" => "Mus",
+  "50" => "Nevsehir",
+  "52" => "Ordu",
+  "53" => "Rize",
+  "54" => "Sakarya",
+  "55" => "Samsun",
+  "57" => "Sinop",
+  "58" => "Sivas",
+  "59" => "Tekirdag",
+  "60" => "Tokat",
+  "61" => "Trabzon",
+  "62" => "Tunceli",
+  "63" => "Sanliurfa",
+  "64" => "Usak",
+  "65" => "Van",
+  "66" => "Yozgat",
+  "68" => "Ankara",
+  "69" => "Gumushane",
+  "70" => "Hakkari",
+  "71" => "Konya",
+  "72" => "Mardin",
+  "73" => "Nigde",
+  "74" => "Siirt",
+  "75" => "Aksaray",
+  "76" => "Batman",
+  "77" => "Bayburt",
+  "78" => "Karaman",
+  "79" => "Kirikkale",
+  "80" => "Sirnak",
+  "81" => "Adana",
+  "82" => "Cankiri",
+  "83" => "Gaziantep",
+  "84" => "Kars",
+  "85" => "Zonguldak",
+  "86" => "Ardahan",
+  "87" => "Bartin",
+  "88" => "Igdir",
+  "89" => "Karabuk",
+  "90" => "Kilis",
+  "91" => "Osmaniye",
+  "92" => "Yalova",
+  "93" => "Duzce"),
+"TT" => array(
+  "01" => "Arima",
+  "02" => "Caroni",
+  "03" => "Mayaro",
+  "04" => "Nariva",
+  "05" => "Port-of-Spain",
+  "06" => "Saint Andrew",
+  "07" => "Saint David",
+  "08" => "Saint George",
+  "09" => "Saint Patrick",
+  "10" => "San Fernando",
+  "11" => "Tobago",
+  "12" => "Victoria"),
+"TW" => array(
+  "01" => "Fu-chien",
+  "02" => "Kao-hsiung",
+  "03" => "T'ai-pei",
+  "04" => "T'ai-wan"),
+"TZ" => array(
+  "02" => "Pwani",
+  "03" => "Dodoma",
+  "04" => "Iringa",
+  "05" => "Kigoma",
+  "06" => "Kilimanjaro",
+  "07" => "Lindi",
+  "08" => "Mara",
+  "09" => "Mbeya",
+  "10" => "Morogoro",
+  "11" => "Mtwara",
+  "12" => "Mwanza",
+  "13" => "Pemba North",
+  "14" => "Ruvuma",
+  "15" => "Shinyanga",
+  "16" => "Singida",
+  "17" => "Tabora",
+  "18" => "Tanga",
+  "19" => "Kagera",
+  "20" => "Pemba South",
+  "21" => "Zanzibar Central",
+  "22" => "Zanzibar North",
+  "23" => "Dar es Salaam",
+  "24" => "Rukwa",
+  "25" => "Zanzibar Urban",
+  "26" => "Arusha",
+  "27" => "Manyara"),
+"UA" => array(
+  "01" => "Cherkas'ka Oblast'",
+  "02" => "Chernihivs'ka Oblast'",
+  "03" => "Chernivets'ka Oblast'",
+  "04" => "Dnipropetrovs'ka Oblast'",
+  "05" => "Donets'ka Oblast'",
+  "06" => "Ivano-Frankivs'ka Oblast'",
+  "07" => "Kharkivs'ka Oblast'",
+  "08" => "Khersons'ka Oblast'",
+  "09" => "Khmel'nyts'ka Oblast'",
+  "10" => "Kirovohrads'ka Oblast'",
+  "11" => "Krym",
+  "12" => "Kyyiv",
+  "13" => "Kyyivs'ka Oblast'",
+  "14" => "Luhans'ka Oblast'",
+  "15" => "L'vivs'ka Oblast'",
+  "16" => "Mykolayivs'ka Oblast'",
+  "17" => "Odes'ka Oblast'",
+  "18" => "Poltavs'ka Oblast'",
+  "19" => "Rivnens'ka Oblast'",
+  "20" => "Sevastopol'",
+  "21" => "Sums'ka Oblast'",
+  "22" => "Ternopil's'ka Oblast'",
+  "23" => "Vinnyts'ka Oblast'",
+  "24" => "Volyns'ka Oblast'",
+  "25" => "Zakarpats'ka Oblast'",
+  "26" => "Zaporiz'ka Oblast'",
+  "27" => "Zhytomyrs'ka Oblast'"),
+"UG" => array(
+  "05" => "Busoga",
+  "08" => "Karamoja",
+  "12" => "South Buganda",
+  "18" => "Central",
+  "20" => "Eastern",
+  "21" => "Nile",
+  "22" => "North Buganda",
+  "23" => "Northern",
+  "24" => "Southern",
+  "25" => "Western",
+  "33" => "Jinja",
+  "36" => "Kalangala",
+  "37" => "Kampala",
+  "42" => "Kiboga",
+  "52" => "Mbarara",
+  "56" => "Mubende",
+  "65" => "Adjumani",
+  "66" => "Bugiri",
+  "67" => "Busia",
+  "69" => "Katakwi",
+  "71" => "Masaka",
+  "73" => "Nakasongola",
+  "74" => "Sembabule",
+  "77" => "Arua",
+  "78" => "Iganga",
+  "79" => "Kabarole",
+  "80" => "Kaberamaido",
+  "81" => "Kamwenge",
+  "82" => "Kanungu",
+  "83" => "Kayunga",
+  "84" => "Kitgum",
+  "85" => "Kyenjojo",
+  "86" => "Mayuge",
+  "87" => "Mbale",
+  "88" => "Moroto",
+  "89" => "Mpigi",
+  "90" => "Mukono",
+  "91" => "Nakapiripirit",
+  "92" => "Pader",
+  "93" => "Rukungiri",
+  "94" => "Sironko",
+  "95" => "Soroti",
+  "96" => "Wakiso",
+  "97" => "Yumbe"),
+"US" => array(
+  "AA" => "Armed Forces Americas",
+  "AE" => "Armed Forces Europe, Middle East, & Canada",
+  "AK" => "Alaska",
+  "AL" => "Alabama",
+  "AP" => "Armed Forces Pacific",
+  "AR" => "Arkansas",
+  "AS" => "American Samoa",
+  "AZ" => "Arizona",
+  "CA" => "California",
+  "CO" => "Colorado",
+  "CT" => "Connecticut",
+  "DC" => "District of Columbia",
+  "DE" => "Delaware",
+  "FL" => "Florida",
+  "FM" => "Federated States of Micronesia",
+  "GA" => "Georgia",
+  "GU" => "Guam",
+  "HI" => "Hawaii",
+  "IA" => "Iowa",
+  "ID" => "Idaho",
+  "IL" => "Illinois",
+  "IN" => "Indiana",
+  "KS" => "Kansas",
+  "KY" => "Kentucky",
+  "LA" => "Louisiana",
+  "MA" => "Massachusetts",
+  "MD" => "Maryland",
+  "ME" => "Maine",
+  "MH" => "Marshall Islands",
+  "MI" => "Michigan",
+  "MN" => "Minnesota",
+  "MO" => "Missouri",
+  "MP" => "Northern Mariana Islands",
+  "MS" => "Mississippi",
+  "MT" => "Montana",
+  "NC" => "North Carolina",
+  "ND" => "North Dakota",
+  "NE" => "Nebraska",
+  "NH" => "New Hampshire",
+  "NJ" => "New Jersey",
+  "NM" => "New Mexico",
+  "NV" => "Nevada",
+  "NY" => "New York",
+  "OH" => "Ohio",
+  "OK" => "Oklahoma",
+  "OR" => "Oregon",
+  "PA" => "Pennsylvania",
+  "PR" => "Puerto Rico",
+  "PW" => "Palau",
+  "RI" => "Rhode Island",
+  "SC" => "South Carolina",
+  "SD" => "South Dakota",
+  "TN" => "Tennessee",
+  "TX" => "Texas",
+  "UT" => "Utah",
+  "VA" => "Virginia",
+  "VI" => "Virgin Islands",
+  "VT" => "Vermont",
+  "WA" => "Washington",
+  "WI" => "Wisconsin",
+  "WV" => "West Virginia",
+  "WY" => "Wyoming"),
+"UY" => array(
+  "01" => "Artigas",
+  "02" => "Canelones",
+  "03" => "Cerro Largo",
+  "04" => "Colonia",
+  "05" => "Durazno",
+  "06" => "Flores",
+  "07" => "Florida",
+  "08" => "Lavalleja",
+  "09" => "Maldonado",
+  "10" => "Montevideo",
+  "11" => "Paysandu",
+  "12" => "Rio Negro",
+  "13" => "Rivera",
+  "14" => "Rocha",
+  "15" => "Salto",
+  "16" => "San Jose",
+  "17" => "Soriano",
+  "18" => "Tacuarembo",
+  "19" => "Treinta y Tres"),
+"UZ" => array(
+  "01" => "Andijon",
+  "02" => "Bukhoro",
+  "03" => "Farghona",
+  "04" => "Jizzakh",
+  "05" => "Khorazm",
+  "06" => "Namangan",
+  "07" => "Nawoiy",
+  "08" => "Qashqadaryo",
+  "09" => "Qoraqalpoghiston",
+  "10" => "Samarqand",
+  "11" => "Sirdaryo",
+  "12" => "Surkhondaryo",
+  "13" => "Toshkent",
+  "14" => "Toshkent"),
+"VC" => array(
+  "01" => "Charlotte",
+  "02" => "Saint Andrew",
+  "03" => "Saint David",
+  "04" => "Saint George",
+  "05" => "Saint Patrick",
+  "06" => "Grenadines"),
+"VE" => array(
+  "01" => "Amazonas",
+  "02" => "Anzoategui",
+  "03" => "Apure",
+  "04" => "Aragua",
+  "05" => "Barinas",
+  "06" => "Bolivar",
+  "07" => "Carabobo",
+  "08" => "Cojedes",
+  "09" => "Delta Amacuro",
+  "11" => "Falcon",
+  "12" => "Guarico",
+  "13" => "Lara",
+  "14" => "Merida",
+  "15" => "Miranda",
+  "16" => "Monagas",
+  "17" => "Nueva Esparta",
+  "18" => "Portuguesa",
+  "19" => "Sucre",
+  "20" => "Tachira",
+  "21" => "Trujillo",
+  "22" => "Yaracuy",
+  "23" => "Zulia",
+  "24" => "Dependencias Federales",
+  "25" => "Distrito Federal",
+  "26" => "Vargas"),
+"VN" => array(
+  "01" => "An Giang",
+  "02" => "Bac Thai",
+  "03" => "Ben Tre",
+  "04" => "Binh Tri Thien",
+  "05" => "Cao Bang",
+  "06" => "Cuu Long",
+  "07" => "Dac Lac",
+  "09" => "Dong Thap",
+  "11" => "Ha Bac",
+  "12" => "Hai Hung",
+  "13" => "Hai Phong",
+  "14" => "Ha Nam Ninh",
+  "15" => "Ha Noi",
+  "16" => "Ha Son Binh",
+  "17" => "Ha Tuyen",
+  "19" => "Hoang Lien Son",
+  "20" => "Ho Chi Minh",
+  "21" => "Kien Giang",
+  "22" => "Lai Chau",
+  "23" => "Lam Dong",
+  "24" => "Long An",
+  "25" => "Minh Hai",
+  "26" => "Nghe Tinh",
+  "27" => "Nghia Binh",
+  "28" => "Phu Khanh",
+  "29" => "Quang Nam-Da Nang",
+  "30" => "Quang Ninh",
+  "31" => "Song Be",
+  "32" => "Son La",
+  "33" => "Tay Ninh",
+  "34" => "Thanh Hoa",
+  "35" => "Thai Binh",
+  "36" => "Thuan Hai",
+  "37" => "Tien Giang",
+  "38" => "Vinh Phu",
+  "39" => "Lang Son",
+  "40" => "Dong Nai",
+  "43" => "An Giang",
+  "44" => "Dac Lac",
+  "45" => "Dong Nai",
+  "46" => "Dong Thap",
+  "47" => "Kien Giang",
+  "48" => "Minh Hai",
+  "49" => "Song Be",
+  "50" => "Vinh Phu",
+  "51" => "Ha Noi",
+  "52" => "Ho Chi Minh",
+  "53" => "Ba Ria-Vung Tau",
+  "54" => "Binh Dinh",
+  "55" => "Binh Thuan",
+  "56" => "Can Tho",
+  "57" => "Gia Lai",
+  "58" => "Ha Giang",
+  "59" => "Ha Tay",
+  "60" => "Ha Tinh",
+  "61" => "Hoa Binh",
+  "62" => "Khanh Hoa",
+  "63" => "Kon Tum",
+  "64" => "Quang Tri",
+  "65" => "Nam Ha",
+  "66" => "Nghe An",
+  "67" => "Ninh Binh",
+  "68" => "Ninh Thuan",
+  "69" => "Phu Yen",
+  "70" => "Quang Binh",
+  "71" => "Quang Ngai",
+  "72" => "Quang Tri",
+  "73" => "Soc Trang",
+  "74" => "Thua Thien",
+  "75" => "Tra Vinh",
+  "76" => "Tuyen Quang",
+  "77" => "Vinh Long",
+  "78" => "Da Nang",
+  "79" => "Hai Duong",
+  "80" => "Ha Nam",
+  "81" => "Hung Yen",
+  "82" => "Nam Dinh",
+  "83" => "Phu Tho",
+  "84" => "Quang Nam",
+  "85" => "Thai Nguyen",
+  "86" => "Vinh Puc Province",
+  "87" => "Can Tho",
+  "88" => "Dak Lak",
+  "89" => "Lai Chau",
+  "90" => "Lao Cai",
+  "91" => "Dak Nong",
+  "92" => "Dien Bien",
+  "93" => "Hau Giang"),
+"VU" => array(
+  "05" => "Ambrym",
+  "06" => "Aoba",
+  "07" => "Torba",
+  "08" => "Efate",
+  "09" => "Epi",
+  "10" => "Malakula",
+  "11" => "Paama",
+  "12" => "Pentecote",
+  "13" => "Sanma",
+  "14" => "Shepherd",
+  "15" => "Tafea",
+  "16" => "Malampa",
+  "17" => "Penama",
+  "18" => "Shefa"),
+"WS" => array(
+  "02" => "Aiga-i-le-Tai",
+  "03" => "Atua",
+  "04" => "Fa",
+  "05" => "Gaga",
+  "06" => "Va",
+  "07" => "Gagaifomauga",
+  "08" => "Palauli",
+  "09" => "Satupa",
+  "10" => "Tuamasaga",
+  "11" => "Vaisigano"),
+"YE" => array(
+  "01" => "Abyan",
+  "02" => "Adan",
+  "03" => "Al Mahrah",
+  "04" => "Hadramawt",
+  "05" => "Shabwah",
+  "06" => "Al Ghaydah",
+  "08" => "Al Hudaydah",
+  "10" => "Al Mahwit",
+  "11" => "Dhamar",
+  "14" => "Ma'rib",
+  "15" => "Sa",
+  "16" => "San",
+  "20" => "Al Bayda'",
+  "21" => "Al Jawf",
+  "22" => "Hajjah",
+  "23" => "Ibb",
+  "24" => "Lahij",
+  "25" => "Ta"),
+"ZA" => array(
+  "01" => "North-Western Province",
+  "02" => "KwaZulu-Natal",
+  "03" => "Free State",
+  "05" => "Eastern Cape",
+  "06" => "Gauteng",
+  "07" => "Mpumalanga",
+  "08" => "Northern Cape",
+  "09" => "Limpopo",
+  "10" => "North-West",
+  "11" => "Western Cape"),
+"ZM" => array(
+  "01" => "Western",
+  "02" => "Central",
+  "03" => "Eastern",
+  "04" => "Luapula",
+  "05" => "Northern",
+  "06" => "North-Western",
+  "07" => "Southern",
+  "08" => "Copperbelt",
+  "09" => "Lusaka"),
+"ZW" => array(
+  "01" => "Manicaland",
+  "02" => "Midlands",
+  "03" => "Mashonaland Central",
+  "04" => "Mashonaland East",
+  "05" => "Mashonaland West",
+  "06" => "Matabeleland North",
+  "07" => "Matabeleland South",
+  "08" => "Masvingo",
+  "09" => "Bulawayo",
+  "10" => "Harare")
+);
+?>
diff --git a/htdocs/includes/geoip/sample.php b/htdocs/includes/geoip/sample.php
new file mode 100644
index 0000000000000000000000000000000000000000..75a36c0e5c5047177dfccbbc1905362af81c7fae
--- /dev/null
+++ b/htdocs/includes/geoip/sample.php
@@ -0,0 +1,20 @@
+#!/usr/bin/php -q
+<?php
+
+// This code demonstrates how to lookup the country by IP Address
+
+include("geoip.inc");
+
+// Uncomment if querying against GeoIP/Lite City.
+// include("geoipcity.inc");
+
+$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
+
+echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
+     geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
+echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
+     geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
+
+geoip_close($gi);
+
+?>
diff --git a/htdocs/includes/geoip/sample_city.php b/htdocs/includes/geoip/sample_city.php
new file mode 100644
index 0000000000000000000000000000000000000000..38a9f4b9b2b289bcd112070bc2532b7b18cb9b85
--- /dev/null
+++ b/htdocs/includes/geoip/sample_city.php
@@ -0,0 +1,32 @@
+#!/usr/bin/php -q
+<?php
+
+// This code demonstrates how to lookup the country, region, city,
+// postal code, latitude, and longitude by IP Address.
+// It is designed to work with GeoIP/GeoLite City
+
+// Note that you must download the New Format of GeoIP City (GEO-133).
+// The old format (GEO-132) will not work.
+
+include("geoipcity.inc");
+include("geoipregionvars.php");
+
+// uncomment for Shared Memory support
+// geoip_load_shared_mem("/usr/local/share/GeoIP/GeoIPCity.dat");
+// $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
+
+$gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_STANDARD);
+
+$record = geoip_record_by_addr($gi,"24.24.24.24");
+print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
+print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
+print $record->city . "\n";
+print $record->postal_code . "\n";
+print $record->latitude . "\n";
+print $record->longitude . "\n";
+print $record->metro_code . "\n";
+print $record->area_code . "\n";
+
+geoip_close($gi);
+
+?>
diff --git a/htdocs/includes/geoip/sample_distributed.php b/htdocs/includes/geoip/sample_distributed.php
new file mode 100644
index 0000000000000000000000000000000000000000..d139be51d516130fb1d3dabef7ab3378312f47fd
--- /dev/null
+++ b/htdocs/includes/geoip/sample_distributed.php
@@ -0,0 +1,31 @@
+#!/usr/bin/php -q
+<?php
+
+include("geoipcity.inc");
+include("Net/DNS.php");
+
+# replace LICENSE_KEY_HERE with your license key
+$l = "LICENSE_KEY_HERE";
+$ip = "24.24.24.24";
+
+if ($l == "LICENSE_KEY_HERE") {
+  print "Error, must edit sample_distributed.php to replace LICENSE_KEY_HERE\n";
+  exit;
+}
+
+$str = getdnsattributes($l,$ip);
+$r = getrecordwithdnsservice($str);
+print "country code: " . $r->country_code . "\n";
+print "country code3: " . $r->country_code3 . "\n";
+print "country name: " . $r->country_name . "\n";
+print "city: " . $r->city . "\n";
+print "region: " . $r->region . "\n";
+print "region name: " . $r->regionname . "\n";
+print "postal_code: " . $r->postal_code . "\n";
+print "latitude: " . $r->latitude . "\n";
+print "longitude: " . $r->longitude . "\n";
+print "area code: " . $r->areacode . "\n";
+print "dma code: " . $r->dmacode . "\n";
+print "isp: " . $r->isp . "\n";
+print "org: " . $r->org . "\n";
+?>
diff --git a/htdocs/includes/geoip/sample_netspeed.php b/htdocs/includes/geoip/sample_netspeed.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8ec83714ab23de7f049de8975dd1f115960caa5
--- /dev/null
+++ b/htdocs/includes/geoip/sample_netspeed.php
@@ -0,0 +1,23 @@
+#!/usr/bin/php -q
+<?php
+
+include("geoip.inc");
+
+$gi = geoip_open("/usr/local/share/GeoIP/GeoIPNetSpeed.dat",GEOIP_STANDARD);
+
+$netspeed = geoip_country_id_by_addr($gi,"24.24.24.24");
+
+//print $n . "\n";
+if ($netspeed == GEOIP_UNKNOWN_SPEED){
+  print "Unknown\n";
+}else if ($netspeed == GEOIP_DIALUP_SPEED){
+  print "Dailup\n";
+}else if ($netspeed == GEOIP_CABLEDSL_SPEED){
+  print "Cable/DSL\n";
+}else if ($netspeed == GEOIP_CORPORATE_SPEED){
+  print "Corporate\n";
+}
+
+geoip_close($gi);
+
+?>
diff --git a/htdocs/includes/geoip/sample_org.php b/htdocs/includes/geoip/sample_org.php
new file mode 100644
index 0000000000000000000000000000000000000000..009a5bd0f49ce4f3042a631cbbbd45db4d5bce50
--- /dev/null
+++ b/htdocs/includes/geoip/sample_org.php
@@ -0,0 +1,23 @@
+#!/usr/bin/php -q
+<?php
+
+// This code demonstrates how to lookup the country and region by IP Address
+// It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
+
+include("geoip.inc");
+
+$giorg = geoip_open("/usr/local/share/GeoIP/GeoIPOrg.dat",GEOIP_STANDARD);
+
+$org = geoip_org_by_addr($giorg,"80.24.24.24");
+print "80.24.24.24 belongs to " . $org . "\n";
+
+$giisp = geoip_open("/usr/local/share/GeoIP/GeoIPISP.dat",GEOIP_STANDARD);
+
+$isp = geoip_org_by_addr($giisp,"80.24.24.24");
+print "80.24.24.24 has isp " . $isp . "\n";
+
+geoip_close($giorg);
+geoip_close($giisp);
+
+?>
+
diff --git a/htdocs/includes/geoip/sample_region.php b/htdocs/includes/geoip/sample_region.php
new file mode 100644
index 0000000000000000000000000000000000000000..9669c9c2df9b84df7cfe7bcb2d9ca4fdc572168b
--- /dev/null
+++ b/htdocs/includes/geoip/sample_region.php
@@ -0,0 +1,20 @@
+#!/usr/bin/php -q
+<?php
+
+// This code demonstrates how to lookup the country and region by IP Address
+// It is designed to work with GeoIP Region available from MaxMind
+
+include("geoip.inc");
+include("geoipregionvars.php");
+
+$gi = geoip_open("/usr/local/share/GeoIP/GeoIPRegion.dat",GEOIP_STANDARD);
+
+list ($countrycode,$region) = geoip_region_by_addr($gi,"24.24.24.24");
+print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
+list ($countrycode,$region) = geoip_region_by_addr($gi,"80.24.24.24");
+print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
+list ($countrycode,$region) = geoip_region_by_addr($gi,"199.243.137.184");
+print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
+geoip_close($gi);
+
+?>
diff --git a/htdocs/includes/modules/import/import_csv.modules.php b/htdocs/includes/modules/import/import_csv.modules.php
index fa482c093dbbc07f8c4c5c0864c36341a6b7fab5..52359f3a6b5be4573bb07505add46859585969d7 100644
--- a/htdocs/includes/modules/import/import_csv.modules.php
+++ b/htdocs/includes/modules/import/import_csv.modules.php
@@ -37,7 +37,7 @@ class ImportCsv extends ModeleImports
     var $id;
     var $error;
     var $errors=array();
-    
+
     var $label;
     var $extension;
     var $version;
@@ -220,7 +220,7 @@ class ImportCsv extends ModeleImports
 			{
 		    	if (! empty($conf->global->IMPORT_CSV_FORCE_CHARSET))	// Forced charset
 		    	{
-		    		if (strtolower($conf->global->IMPORT_CSV_FORCE_CHARSET) == 'utf8') 
+		    		if (strtolower($conf->global->IMPORT_CSV_FORCE_CHARSET) == 'utf8')
 		    		{
 		    			$newarrayres[$key]['val']=$val;
 		    			$newarrayres[$key]['type']=1;
@@ -233,12 +233,12 @@ class ImportCsv extends ModeleImports
 		    	}
 		    	else	// Autodetect format (UTF8 or ISO)
 		    	{
-					if (utf8_check($val)) 
+					if (utf8_check($val))
 					{
 						$newarrayres[$key]['val']=$val;
 						$newarrayres[$key]['type']=1;
 					}
-					else 
+					else
 					{
 						$newarrayres[$key]['val']=utf8_encode($val);
 						$newarrayres[$key]['type']=1;
@@ -270,18 +270,17 @@ class ImportCsv extends ModeleImports
      * @param	maxfields						Max number of fiels to use
      * @return	int								<0 if KO, >0 if OK
      */
-    function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields)
+    function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields,$importid)
     {
     	$error=0;
     	$warning=0;
     	$this->errors=array();
     	$this->warnings=array();
-    	
-    	dol_syslog("import_csv.modules maxfields=".$maxfields);
-    	//print "X".$maxfields;
-    	
-		var_dump($array_match_file_to_database);
-		var_dump($arrayrecord);
+
+    	//dol_syslog("import_csv.modules maxfields=".$maxfields." importid=".$importid);
+
+		//var_dump($array_match_file_to_database);
+		//var_dump($arrayrecord);
     	$sort_array_match_file_to_database=$array_match_file_to_database;
     	ksort($sort_array_match_file_to_database);
 		//var_dump($sort_array_match_file_to_database);
@@ -290,7 +289,7 @@ class ImportCsv extends ModeleImports
 			(sizeof($arrayrecord) == 1 && empty($arrayrecord[0]['val'])))
 		{
 			print 'W';
-			$this->warnings[$warning]['lib']='Empty line';	
+			$this->warnings[$warning]['lib']='Empty line';
 			$this->warnings[$warning]['type']='EMPTY';
 			$warning++;
 		}
@@ -305,6 +304,7 @@ class ImportCsv extends ModeleImports
 				$listvalues='';
 				$i=0;
 				$errorforthistable=0;
+				// Loop on each fields in the match array
 				foreach($sort_array_match_file_to_database as $key => $val)
 				{
 					if ($key <= $maxfields)
@@ -325,22 +325,23 @@ class ImportCsv extends ModeleImports
 							$newval=$arrayrecord[($key-1)]['val'];
 							$listvalues.="'".$arrayrecord[($key-1)]['val']."'";
 						}
-						
+
 						// Make some tests
-	
+
 						// Required field is ok
 						if (eregi('\*',$objimport->array_import_fields[0][$val]) && empty($newval))
 						{
-							$this->errors[$error]['lib']='ErrorMissingMandatoryValue field nb '.$key.' target='.$val;	
+							$this->errors[$error]['lib']='ErrorMissingMandatoryValue field nb '.$key.' target='.$val;
 							$this->errors[$error]['type']='NOTNULL';
 							$errorforthistable++;
 							$error++;
 						}
 						// Test format
-	
+						// TODO
+
 						// Other tests
-						// ...
-						
+						// TODO...
+
 					}
 					$i++;
 				}
@@ -350,11 +351,11 @@ class ImportCsv extends ModeleImports
 					{
 						$sql='INSERT INTO '.$tablename.'('.$listfields.') VALUES('.$listvalues.')';
 		    			dol_syslog("import_csv.modules sql=".$sql);
-						
+
 						//print '> '.join(',',$arrayrecord);
 						//print 'sql='.$sql;
 						//print '<br>'."\n";
-			
+
 						// Run insert request
 						if ($sql)
 						{
@@ -366,7 +367,7 @@ class ImportCsv extends ModeleImports
 							else
 							{
 								print 'E';
-								$this->errors[$error]['lib']='ErrorSQL '.$this->db->lasterror();	
+								$this->errors[$error]['lib']='ErrorSQL '.$this->db->lasterror();
 								$this->errors[$error]['type']='SQL';
 								$error++;
 							}
@@ -379,7 +380,7 @@ class ImportCsv extends ModeleImports
 				}
 			}
 		}
-		
+
 		return 1;
 	}
 
diff --git a/htdocs/lib/doleditor.class.php b/htdocs/lib/doleditor.class.php
index 7f6bca8dc8ef313723e20d28affb249e75405535..1c3e737bf8eac1f506904da7f30d73eed3ce4e77 100644
--- a/htdocs/lib/doleditor.class.php
+++ b/htdocs/lib/doleditor.class.php
@@ -19,14 +19,14 @@
 
 /**
  *       \file       htdocs/lib/doleditor.class.php
- *       \brief      Classe permettant de g�rer FCKEditor
+ *       \brief      Classe permettant de g�rer FCKEditor
  *       \version    $Id$
 */
 
 /**
- *       \class      DolEditor
- *       \brief      Classe de gestion de FCKEditor
- *       \remarks    Usage:
+ * 		\class      DolEditor
+ *      \brief      Classe de gestion de FCKEditor
+ *      \remarks    Usage:
  *		\remarks	$doleditor=new DolEditor('body',$message,320,'toolbar_mailing');
  *		\remarks	$doleditor->Create();
  */
@@ -38,13 +38,13 @@ class DolEditor
     /**
             \brief 	DolEditor
             \param 	htmlname		        Nom formulaire html WYSIWIG
-            \param 	content			        Contenu �dition WYSIWIG
-            \param 	height			        Hauteur en pixel de la zone �dition
-            \param 	toolbarname		        Nom barre de menu �diteur
+            \param 	content			        Contenu �dition WYSIWIG
+            \param 	height			        Hauteur en pixel de la zone �dition
+            \param 	toolbarname		        Nom barre de menu �diteur
             \param  toolbarlocation       	Emplacement de la barre de menu :
-                                          	'In' chaque fen�tre d'�dition a �a propre barre d'outils
-                                          	'Out:nom' partage de la barre d'outils o� 'nom' est le nom du DIV qui affiche la barre
-            \param  toolbarstartexpanded  	visible ou non au d�marrage
+                                          	'In' chaque fen�tre d'�dition a �a propre barre d'outils
+                                          	'Out:nom' partage de la barre d'outils o� 'nom' est le nom du DIV qui affiche la barre
+            \param  toolbarstartexpanded  	visible ou non au d�marrage
 			\param	modulepart				modulepart pour protection wrapper download viewimage
 	*/
     function DolEditor($htmlname,$content,$height=200,$toolbarname='Basic',$toolbarlocation='In',$toolbarstartexpanded=false,$uselocalbrowser=true)
diff --git a/htdocs/lib/dolgeoip.class.php b/htdocs/lib/dolgeoip.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..73072578699a655fa60fd65c7453530f249c732b
--- /dev/null
+++ b/htdocs/lib/dolgeoip.class.php
@@ -0,0 +1,100 @@
+<?php
+/* Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * or see http://www.gnu.org/
+ */
+
+/**
+ *  \file		htdocs/lib/dolgeoip.class.php
+ * 	\ingroup	geoip
+ *  \brief		Library for managing module geoip
+ *  \version	$Id$
+ */
+
+
+/**
+ * 		\class      DolGeoIp
+ *      \brief      Classe to manage GeoIP
+ *      \remarks    Usage:
+ *		\remarks	$geoip=new GeoIP('country',$datfile);
+ *		\remarks	$geoip->getCountryCodeFromIP($ip);
+ *		\remarks	$geoip->close();
+ */
+class DolGeoIP
+{
+	var $gi;
+
+	/**
+	 * Constructor
+	 *
+	 * @param 	$type		'country' or 'city'
+	 * @param	$datfile	Data file
+	 * @return GeoIP
+	 */
+	function DolGeoIP($type,$datfile)
+	{
+		if ($type == 'country') require_once(DOL_DOCUMENT_ROOT."/includes/geoip/geoip.inc");
+		else if ($type == 'city') require_once(DOL_DOCUMENT_ROOT."/includes/geoip/geoipcity.inc");
+		else { print 'ErrorBadParameterInConstructor'; return 0; }
+
+		if (empty($type) || empty($datfile))
+		{
+			dol_syslog("DolGeoIP::DolGeoIP parameter datafile not defined", LOG_ERR);
+			dol_print_error('DolGeoIP constructor was called with no datafile parameter');
+			return 0;
+		}
+		if (! file_exists($datfile))
+		{
+			dol_syslog("DolGeoIP::DolGeoIP datafile ".$datfile." can not be read", LOG_ERR);
+			$this->error='ErrorGeoIPClassNotInitialized';
+			$this->errorlabel="Datafile ".$datfile." not found";
+			print $this->errorlabel;
+			return 0;
+		}
+
+		$this->gi = geoip_open($datfile,GEOIP_STANDARD);
+	}
+
+	/**
+	 * Return in lower cas the country code
+	 * @param	$ip		IP to scan
+	 * @return	string	Country code (two letters)
+	 */
+	function getCountryCodeFromIP($ip)
+	{
+		if (empty($this->gi))
+		{
+			return '';
+		}
+		return strtolower(geoip_country_code_by_addr($this->gi, $ip));
+	}
+
+	function getCountryCodeFromName($ip)
+	{
+		if (empty($this->gi))
+		{
+			return '';
+		}
+		return geoip_country_code_by_name($this->gi, $ip);
+	}
+
+	function close()
+	{
+		geoip_close($this->gi);
+	}
+
+}
+?>
diff --git a/htdocs/lib/files.lib.php b/htdocs/lib/files.lib.php
index 6a7f71a2fe12f4eb1efd71d248bfc92df900963e..20a12f00071f528eef1ebd0172a8e5ae12778ee6 100644
--- a/htdocs/lib/files.lib.php
+++ b/htdocs/lib/files.lib.php
@@ -256,7 +256,7 @@ function dol_count_nb_of_line($file)
 function dol_filesize($pathoffile)
 {
 	$newpathoffile=utf8_check($pathoffile)?utf8_decode($pathoffile):$pathoffile;
-	return filesize($pathoffile);
+	return filesize($newpathoffile);
 }
 
 /**