summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnowleo <snowleo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-05-01 11:04:34 +0000
committersnowleo <snowleo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-05-01 11:04:34 +0000
commit41d73bf90e2e94c91df8a865d54d5cb23b9101c9 (patch)
tree3c80345d9a699a8d60d2a03e37f69e0f98fac676
parentec18c0096d91f237a27e9aa88a96857403b2ed40 (diff)
downloadEssentials-41d73bf90e2e94c91df8a865d54d5cb23b9101c9.tar
Essentials-41d73bf90e2e94c91df8a865d54d5cb23b9101c9.tar.gz
Essentials-41d73bf90e2e94c91df8a865d54d5cb23b9101c9.tar.lz
Essentials-41d73bf90e2e94c91df8a865d54d5cb23b9101c9.tar.xz
Essentials-41d73bf90e2e94c91df8a865d54d5cb23b9101c9.zip
EssentialsGeoIP is now officially part of Essentials
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1292 e251c2fe-e539-e718-e476-b85c1f46cddb
-rw-r--r--BuildAll/build.xml148
-rw-r--r--BuildAll/nbproject/build-impl.xml28
-rw-r--r--BuildAll/nbproject/genfiles.properties8
-rw-r--r--BuildAll/nbproject/project.properties186
-rw-r--r--BuildAll/nbproject/project.xml152
-rw-r--r--Essentials/src/com/earth2me/essentials/User.java9
-rw-r--r--Essentials/src/com/earth2me/essentials/commands/Commandwhois.java5
-rw-r--r--EssentialsGeoIP/build.xml74
-rw-r--r--EssentialsGeoIP/manifest.mf3
-rw-r--r--EssentialsGeoIP/nbproject/build-impl.xml1080
-rw-r--r--EssentialsGeoIP/nbproject/genfiles.properties8
-rw-r--r--EssentialsGeoIP/nbproject/project.properties78
-rw-r--r--EssentialsGeoIP/nbproject/project.xml28
-rw-r--r--EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java45
-rw-r--r--EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java162
-rw-r--r--EssentialsGeoIP/src/com/maxmind/LICENSE504
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/Country.java61
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/DatabaseInfo.java117
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/Location.java60
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/LookupService.java1046
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/Region.java8
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/regionName.java13400
-rw-r--r--EssentialsGeoIP/src/com/maxmind/geoip/timeZone.java1403
-rw-r--r--EssentialsGeoIP/src/config.yml10
-rw-r--r--EssentialsGeoIP/src/plugin.yml8
25 files changed, 18394 insertions, 237 deletions
diff --git a/BuildAll/build.xml b/BuildAll/build.xml
index 496f85c34..d41b561fd 100644
--- a/BuildAll/build.xml
+++ b/BuildAll/build.xml
@@ -1,74 +1,74 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- You may freely edit this file. See commented blocks below for -->
-<!-- some examples of how to customize the build. -->
-<!-- (If you delete it and reopen the project it will be recreated.) -->
-<!-- By default, only the Clean and Build commands use this build script. -->
-<!-- Commands such as Run, Debug, and Test only use this build script if -->
-<!-- the Compile on Save feature is turned off for the project. -->
-<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
-<!-- in the project's Project Properties dialog box.-->
-<project name="BuildAll" default="default" basedir=".">
- <description>Builds, tests, and runs the project BuildAll.</description>
- <import file="nbproject/build-impl.xml"/>
- <!--
-
- There exist several targets which are by default empty and which can be
- used for execution of your tasks. These targets are usually executed
- before and after some main targets. They are:
-
- -pre-init: called before initialization of project properties
- -post-init: called after initialization of project properties
- -pre-compile: called before javac compilation
- -post-compile: called after javac compilation
- -pre-compile-single: called before javac compilation of single file
- -post-compile-single: called after javac compilation of single file
- -pre-compile-test: called before javac compilation of JUnit tests
- -post-compile-test: called after javac compilation of JUnit tests
- -pre-compile-test-single: called before javac compilation of single JUnit test
- -post-compile-test-single: called after javac compilation of single JUunit test
- -pre-jar: called before JAR building
- -post-jar: called after JAR building
- -post-clean: called after cleaning build products
-
- (Targets beginning with '-' are not intended to be called on their own.)
-
- Example of inserting an obfuscator after compilation could look like this:
-
- <target name="-post-compile">
- <obfuscate>
- <fileset dir="${build.classes.dir}"/>
- </obfuscate>
- </target>
-
- For list of available properties check the imported
- nbproject/build-impl.xml file.
-
-
- Another way to customize the build is by overriding existing main targets.
- The targets of interest are:
-
- -init-macrodef-javac: defines macro for javac compilation
- -init-macrodef-junit: defines macro for junit execution
- -init-macrodef-debug: defines macro for class debugging
- -init-macrodef-java: defines macro for class execution
- -do-jar-with-manifest: JAR building (if you are using a manifest)
- -do-jar-without-manifest: JAR building (if you are not using a manifest)
- run: execution of project
- -javadoc-build: Javadoc generation
- test-report: JUnit report generation
-
- An example of overriding the target for project execution could look like this:
-
- <target name="run" depends="BuildAll-impl.jar">
- <exec dir="bin" executable="launcher.exe">
- <arg file="${dist.jar}"/>
- </exec>
- </target>
-
- Notice that the overridden target depends on the jar target and not only on
- the compile target as the regular run target does. Again, for a list of available
- properties which you can use, check the target you are overriding in the
- nbproject/build-impl.xml file.
-
- -->
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="BuildAll" default="default" basedir=".">
+ <description>Builds, tests, and runs the project BuildAll.</description>
+ <import file="nbproject/build-impl.xml"/>
+ <!--
+
+ There exist several targets which are by default empty and which can be
+ used for execution of your tasks. These targets are usually executed
+ before and after some main targets. They are:
+
+ -pre-init: called before initialization of project properties
+ -post-init: called after initialization of project properties
+ -pre-compile: called before javac compilation
+ -post-compile: called after javac compilation
+ -pre-compile-single: called before javac compilation of single file
+ -post-compile-single: called after javac compilation of single file
+ -pre-compile-test: called before javac compilation of JUnit tests
+ -post-compile-test: called after javac compilation of JUnit tests
+ -pre-compile-test-single: called before javac compilation of single JUnit test
+ -post-compile-test-single: called after javac compilation of single JUunit test
+ -pre-jar: called before JAR building
+ -post-jar: called after JAR building
+ -post-clean: called after cleaning build products
+
+ (Targets beginning with '-' are not intended to be called on their own.)
+
+ Example of inserting an obfuscator after compilation could look like this:
+
+ <target name="-post-compile">
+ <obfuscate>
+ <fileset dir="${build.classes.dir}"/>
+ </obfuscate>
+ </target>
+
+ For list of available properties check the imported
+ nbproject/build-impl.xml file.
+
+
+ Another way to customize the build is by overriding existing main targets.
+ The targets of interest are:
+
+ -init-macrodef-javac: defines macro for javac compilation
+ -init-macrodef-junit: defines macro for junit execution
+ -init-macrodef-debug: defines macro for class debugging
+ -init-macrodef-java: defines macro for class execution
+ -do-jar-with-manifest: JAR building (if you are using a manifest)
+ -do-jar-without-manifest: JAR building (if you are not using a manifest)
+ run: execution of project
+ -javadoc-build: Javadoc generation
+ test-report: JUnit report generation
+
+ An example of overriding the target for project execution could look like this:
+
+ <target name="run" depends="BuildAll-impl.jar">
+ <exec dir="bin" executable="launcher.exe">
+ <arg file="${dist.jar}"/>
+ </exec>
+ </target>
+
+ Notice that the overridden target depends on the jar target and not only on
+ the compile target as the regular run target does. Again, for a list of available
+ properties which you can use, check the target you are overriding in the
+ nbproject/build-impl.xml file.
+
+ -->
+</project>
diff --git a/BuildAll/nbproject/build-impl.xml b/BuildAll/nbproject/build-impl.xml
index cf93b9f26..bb58a3de4 100644
--- a/BuildAll/nbproject/build-impl.xml
+++ b/BuildAll/nbproject/build-impl.xml
@@ -617,6 +617,13 @@ is divided into following sections:
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
+ <param location="${project.EssentialsGeoIP}" name="call.subproject"/>
+ <param location="${project.EssentialsGeoIP}/build.xml" name="call.script"/>
+ <param name="call.target" value="jar"/>
+ <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+ </antcall>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsGroupBridge}" name="call.subproject"/>
<param location="${project.EssentialsGroupBridge}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
@@ -643,6 +650,13 @@ is divided into following sections:
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-jar.properties}"/>
+ <param location="${project.EssentialsiConomyBridge}" name="call.subproject"/>
+ <param location="${project.EssentialsiConomyBridge}/build.xml" name="call.script"/>
+ <param name="call.target" value="jar"/>
+ <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+ </antcall>
</target>
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
<target depends="init" name="-check-automatic-build">
@@ -1095,6 +1109,13 @@ is divided into following sections:
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
+ <param location="${project.EssentialsGeoIP}" name="call.subproject"/>
+ <param location="${project.EssentialsGeoIP}/build.xml" name="call.script"/>
+ <param name="call.target" value="clean"/>
+ <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+ </antcall>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsGroupBridge}" name="call.subproject"/>
<param location="${project.EssentialsGroupBridge}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
@@ -1121,6 +1142,13 @@ is divided into following sections:
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-clean.properties}"/>
+ <param location="${project.EssentialsiConomyBridge}" name="call.subproject"/>
+ <param location="${project.EssentialsiConomyBridge}/build.xml" name="call.script"/>
+ <param name="call.target" value="clean"/>
+ <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+ </antcall>
</target>
<target depends="init" name="-do-clean">
<delete dir="${build.dir}"/>
diff --git a/BuildAll/nbproject/genfiles.properties b/BuildAll/nbproject/genfiles.properties
index bc9de7132..7ff7a7694 100644
--- a/BuildAll/nbproject/genfiles.properties
+++ b/BuildAll/nbproject/genfiles.properties
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=60061751
+build.xml.data.CRC32=ce72f3c5
build.xml.script.CRC32=7a797370
-build.xml.stylesheet.CRC32=28e38971@1.42.1.45
+build.xml.stylesheet.CRC32=28e38971@1.43.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=60061751
-nbproject/build-impl.xml.script.CRC32=d43c7626
+nbproject/build-impl.xml.data.CRC32=ce72f3c5
+nbproject/build-impl.xml.script.CRC32=79b2da51
nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
diff --git a/BuildAll/nbproject/project.properties b/BuildAll/nbproject/project.properties
index 6b8e235e1..3a4db66ed 100644
--- a/BuildAll/nbproject/project.properties
+++ b/BuildAll/nbproject/project.properties
@@ -1,90 +1,96 @@
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=false
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.title=BuildAll
-application.vendor=Paul
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
- ${run.classpath}
-debug.test.classpath=\
- ${run.test.classpath}
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/BuildAll.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-excludes=
-includes=**
-jar.compress=false
-javac.classpath=\
- ${reference.Essentials.jar}:\
- ${reference.EssentialsChat.jar}:\
- ${reference.EssentialsGroupBridge.jar}:\
- ${reference.EssentialsGroupManager.jar}:\
- ${reference.EssentialsProtect.jar}:\
- ${reference.EssentialsSpawn.jar}
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.processorpath=\
- ${javac.classpath}
-javac.source=1.5
-javac.target=1.5
-javac.test.classpath=\
- ${javac.classpath}:\
- ${build.classes.dir}:\
- ${libs.junit.classpath}:\
- ${libs.junit_4.classpath}
-javac.test.processorpath=\
- ${javac.test.classpath}
-javadoc.additionalparam=
-javadoc.author=false
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=false
-platform.active=default_platform
-project.Essentials=../Essentials
-project.EssentialsChat=../EssentialsChat
-project.EssentialsGroupBridge=../EssentialsGroupBridge
-project.EssentialsGroupManager=../EssentialsGroupManager
-project.EssentialsProtect=../EssentialsProtect
-project.EssentialsSpawn=../EssentialsSpawn
-reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
-reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
-reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/EssentialsGroupBridge.jar
-reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
-reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/original-EssentialsProtect.jar
-reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
-run.classpath=\
- ${javac.classpath}:\
- ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project
-# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
-# or test-sys-prop.name=value to set system properties for unit tests):
-run.jvmargs=
-run.test.classpath=\
- ${javac.test.classpath}:\
- ${build.test.classes.dir}
-source.encoding=UTF-8
-src.dir=src
-test.src.dir=test
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=BuildAll
+application.vendor=Paul
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+ ${run.classpath}
+debug.test.classpath=\
+ ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/BuildAll.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${reference.Essentials.jar}:\
+ ${reference.EssentialsChat.jar}:\
+ ${reference.EssentialsGroupBridge.jar}:\
+ ${reference.EssentialsGroupManager.jar}:\
+ ${reference.EssentialsProtect.jar}:\
+ ${reference.EssentialsSpawn.jar}:\
+ ${reference.EssentialsGeoIP.jar}:\
+ ${reference.EssentialsiConomyBridge.jar}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+ ${javac.classpath}
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${libs.junit.classpath}:\
+ ${libs.junit_4.classpath}
+javac.test.processorpath=\
+ ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+project.Essentials=../Essentials
+project.EssentialsChat=../EssentialsChat
+project.EssentialsGeoIP=../EssentialsGeoIP
+project.EssentialsGroupBridge=../EssentialsGroupBridge
+project.EssentialsGroupManager=../EssentialsGroupManager
+project.EssentialsiConomyBridge=../EssentialsiConomyBridge
+project.EssentialsProtect=../EssentialsProtect
+project.EssentialsSpawn=../EssentialsSpawn
+reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
+reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
+reference.EssentialsGeoIP.jar=${project.EssentialsGeoIP}/dist/EssentialsGeoIP.jar
+reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/EssentialsGroupBridge.jar
+reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
+reference.EssentialsiConomyBridge.jar=${project.EssentialsiConomyBridge}/dist/EssentialsiConomyBridge.jar
+reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/original-EssentialsProtect.jar
+reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/BuildAll/nbproject/project.xml b/BuildAll/nbproject/project.xml
index 86e1cc4a7..4193b92ee 100644
--- a/BuildAll/nbproject/project.xml
+++ b/BuildAll/nbproject/project.xml
@@ -1,68 +1,84 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
- <type>org.netbeans.modules.java.j2seproject</type>
- <configuration>
- <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
- <name>BuildAll</name>
- <source-roots>
- <root id="src.dir"/>
- </source-roots>
- <test-roots>
- <root id="test.src.dir"/>
- </test-roots>
- </data>
- <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
- <definitions>..\lib\nblibraries.properties</definitions>
- </libraries>
- <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
- <reference>
- <foreign-project>Essentials</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- <reference>
- <foreign-project>EssentialsChat</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- <reference>
- <foreign-project>EssentialsGroupBridge</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- <reference>
- <foreign-project>EssentialsGroupManager</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- <reference>
- <foreign-project>EssentialsProtect</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- <reference>
- <foreign-project>EssentialsSpawn</foreign-project>
- <artifact-type>jar</artifact-type>
- <script>build.xml</script>
- <target>jar</target>
- <clean-target>clean</clean-target>
- <id>jar</id>
- </reference>
- </references>
- </configuration>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.java.j2seproject</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+ <name>BuildAll</name>
+ <source-roots>
+ <root id="src.dir"/>
+ </source-roots>
+ <test-roots>
+ <root id="test.src.dir"/>
+ </test-roots>
+ </data>
+ <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
+ <definitions>..\lib\nblibraries.properties</definitions>
+ </libraries>
+ <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
+ <reference>
+ <foreign-project>Essentials</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsChat</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsGeoIP</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsGroupBridge</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsGroupManager</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsProtect</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsSpawn</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ <reference>
+ <foreign-project>EssentialsiConomyBridge</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ </references>
+ </configuration>
+</project>
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index ea4803b32..98209b0b9 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -32,6 +32,7 @@ public class User extends PlayerExtension implements Comparable<User>, IReplyTo
private boolean isNew = false;
public String currentJail;
public ItemStack[] savedInventory;
+ private Map<String,Object> metadata = new HashMap<String,Object>();
private User(Player base)
{
@@ -830,4 +831,12 @@ public class User extends PlayerExtension implements Comparable<User>, IReplyTo
data.put("powertools", tools);
flush();
}
+
+ public Map<String,Object> getMetadata() {
+ return metadata;
+ }
+
+ public void setMetadata(String key, Object value) {
+ metadata.put(key, value);
+ }
}
diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
index 17a2c57b1..81e41aa30 100644
--- a/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
+++ b/Essentials/src/com/earth2me/essentials/commands/Commandwhois.java
@@ -38,7 +38,10 @@ public class Commandwhois extends EssentialsCommand
if (!parent.getConfiguration().getBoolean("disable-eco", false)) sender.sendMessage(ChatColor.BLUE + " - Money: $" + u.getMoney());
sender.sendMessage(ChatColor.BLUE + " - Status: " + (parent.away.contains(u) ? "§cAway§f" : "Available"));
sender.sendMessage(ChatColor.BLUE + " - IP Address: " + u.getAddress().getAddress().toString());
-
+ Object location = u.getMetadata().get("location");
+ if (location != null && location instanceof String) {
+ sender.sendMessage(ChatColor.BLUE + " - Location: " + location.toString());
+ }
}
}
}
diff --git a/EssentialsGeoIP/build.xml b/EssentialsGeoIP/build.xml
new file mode 100644
index 000000000..f477a3e05
--- /dev/null
+++ b/EssentialsGeoIP/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="EssentialsGeoIP" default="default" basedir=".">
+ <description>Builds, tests, and runs the project EssentialsGeoIP.</description>
+ <import file="nbproject/build-impl.xml"/>
+ <!--
+
+ There exist several targets which are by default empty and which can be
+ used for execution of your tasks. These targets are usually executed
+ before and after some main targets. They are:
+
+ -pre-init: called before initialization of project properties
+ -post-init: called after initialization of project properties
+ -pre-compile: called before javac compilation
+ -post-compile: called after javac compilation
+ -pre-compile-single: called before javac compilation of single file
+ -post-compile-single: called after javac compilation of single file
+ -pre-compile-test: called before javac compilation of JUnit tests
+ -post-compile-test: called after javac compilation of JUnit tests
+ -pre-compile-test-single: called before javac compilation of single JUnit test
+ -post-compile-test-single: called after javac compilation of single JUunit test
+ -pre-jar: called before JAR building
+ -post-jar: called after JAR building
+ -post-clean: called after cleaning build products
+
+ (Targets beginning with '-' are not intended to be called on their own.)
+
+ Example of inserting an obfuscator after compilation could look like this:
+
+ <target name="-post-compile">
+ <obfuscate>
+ <fileset dir="${build.classes.dir}"/>
+ </obfuscate>
+ </target>
+
+ For list of available properties check the imported
+ nbproject/build-impl.xml file.
+
+
+ Another way to customize the build is by overriding existing main targets.
+ The targets of interest are:
+
+ -init-macrodef-javac: defines macro for javac compilation
+ -init-macrodef-junit: defines macro for junit execution
+ -init-macrodef-debug: defines macro for class debugging
+ -init-macrodef-java: defines macro for class execution
+ -do-jar-with-manifest: JAR building (if you are using a manifest)
+ -do-jar-without-manifest: JAR building (if you are not using a manifest)
+ run: execution of project
+ -javadoc-build: Javadoc generation
+ test-report: JUnit report generation
+
+ An example of overriding the target for project execution could look like this:
+
+ <target name="run" depends="EssentialsGeoIP-impl.jar">
+ <exec dir="bin" executable="launcher.exe">
+ <arg file="${dist.jar}"/>
+ </exec>
+ </target>
+
+ Notice that the overridden target depends on the jar target and not only on
+ the compile target as the regular run target does. Again, for a list of available
+ properties which you can use, check the target you are overriding in the
+ nbproject/build-impl.xml file.
+
+ -->
+</project>
diff --git a/EssentialsGeoIP/manifest.mf b/EssentialsGeoIP/manifest.mf
new file mode 100644
index 000000000..328e8e5bc
--- /dev/null
+++ b/EssentialsGeoIP/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: Main-Class will be added automatically by build
+
diff --git a/EssentialsGeoIP/nbproject/build-impl.xml b/EssentialsGeoIP/nbproject/build-impl.xml
new file mode 100644
index 000000000..b32699fc0
--- /dev/null
+++ b/EssentialsGeoIP/nbproject/build-impl.xml
@@ -0,0 +1,1080 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+
+For the purpose of easier reading the script
+is divided into following sections:
+
+ - initialization
+ - compilation
+ - jar
+ - execution
+ - debugging
+ - javadoc
+ - junit compilation
+ - junit execution
+ - junit debugging
+ - applet
+ - cleanup
+
+ -->
+<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="EssentialsGeoIP-impl">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
+ <!--
+ ======================
+ INITIALIZATION SECTION
+ ======================
+ -->
+ <target name="-pre-init">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="-pre-init" name="-init-private">
+ <property file="nbproject/private/config.properties"/>
+ <property file="nbproject/private/configs/${config}.properties"/>
+ <property file="nbproject/private/private.properties"/>
+ </target>
+ <target name="-pre-init-libraries">
+ <property location="../lib/nblibraries.properties" name="libraries.path"/>
+ <dirname file="${libraries.path}" property="libraries.dir.nativedirsep"/>
+ <pathconvert dirsep="/" property="libraries.dir">
+ <path path="${libraries.dir.nativedirsep}"/>
+ </pathconvert>
+ <basename file="${libraries.path}" property="libraries.basename" suffix=".properties"/>
+ <available file="${libraries.dir}/${libraries.basename}-private.properties" property="private.properties.available"/>
+ </target>
+ <target depends="-pre-init-libraries" if="private.properties.available" name="-init-private-libraries">
+ <loadproperties encoding="ISO-8859-1" srcfile="${libraries.dir}/${libraries.basename}-private.properties">
+ <filterchain>
+ <replacestring from="$${base}" to="${libraries.dir}"/>
+ <escapeunicode/>
+ </filterchain>
+ </loadproperties>
+ </target>
+ <target depends="-pre-init,-init-private,-init-private-libraries" name="-init-libraries">
+ <loadproperties encoding="ISO-8859-1" srcfile="${libraries.path}">
+ <filterchain>
+ <replacestring from="$${base}" to="${libraries.dir}"/>
+ <escapeunicode/>
+ </filterchain>
+ </loadproperties>
+ </target>
+ <target depends="-pre-init,-init-private,-init-libraries" name="-init-user">
+ <property file="${user.properties.file}"/>
+ <!-- The two properties below are usually overridden -->
+ <!-- by the active platform. Just a fallback. -->
+ <property name="default.javac.source" value="1.4"/>
+ <property name="default.javac.target" value="1.4"/>
+ </target>
+ <target depends="-pre-init,-init-private,-init-libraries,-init-user" name="-init-project">
+ <property file="nbproject/configs/${config}.properties"/>
+ <property file="nbproject/project.properties"/>
+ </target>
+ <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+ <available file="${manifest.file}" property="manifest.available"/>
+ <condition property="splashscreen.available">
+ <and>
+ <not>
+ <equals arg1="${application.splash}" arg2="" trim="true"/>
+ </not>
+ <available file="${application.splash}"/>
+ </and>
+ </condition>
+ <condition property="main.class.available">
+ <and>
+ <isset property="main.class"/>
+ <not>
+ <equals arg1="${main.class}" arg2="" trim="true"/>
+ </not>
+ </and>
+ </condition>
+ <condition property="manifest.available+main.class">
+ <and>
+ <isset property="manifest.available"/>
+ <isset property="main.class.available"/>
+ </and>
+ </condition>
+ <condition property="do.archive">
+ <not>
+ <istrue value="${jar.archive.disabled}"/>
+ </not>
+ </condition>
+ <condition property="do.mkdist">
+ <and>
+ <isset property="do.archive"/>
+ <isset property="libs.CopyLibs.classpath"/>
+ <not>
+ <istrue value="${mkdist.disabled}"/>
+ </not>
+ </and>
+ </condition>
+ <condition property="manifest.available+main.class+mkdist.available">
+ <and>
+ <istrue value="${manifest.available+main.class}"/>
+ <isset property="do.mkdist"/>
+ </and>
+ </condition>
+ <condition property="do.archive+manifest.available">
+ <and>
+ <isset property="manifest.available"/>
+ <istrue value="${do.archive}"/>
+ </and>
+ </condition>
+ <condition property="do.archive+main.class.available">
+ <and>
+ <isset property="main.class.available"/>
+ <istrue value="${do.archive}"/>
+ </and>
+ </condition>
+ <condition property="do.archive+splashscreen.available">
+ <and>
+ <isset property="splashscreen.available"/>
+ <istrue value="${do.archive}"/>
+ </and>
+ </condition>
+ <condition property="do.archive+manifest.available+main.class">
+ <and>
+ <istrue value="${manifest.available+main.class}"/>
+ <istrue value="${do.archive}"/>
+ </and>
+ </condition>
+ <condition property="manifest.available-mkdist.available">
+ <or>
+ <istrue value="${manifest.available}"/>
+ <isset property="do.mkdist"/>
+ </or>
+ </condition>
+ <condition property="manifest.available+main.class-mkdist.available">
+ <or>
+ <istrue value="${manifest.available+main.class}"/>
+ <isset property="do.mkdist"/>
+ </or>
+ </condition>
+ <condition property="have.tests">
+ <or>
+ <available file="${test.src.dir}"/>
+ </or>
+ </condition>
+ <condition property="have.sources">
+ <or>
+ <available file="${src.dir}"/>
+ </or>
+ </condition>
+ <condition property="netbeans.home+have.tests">
+ <and>
+ <isset property="netbeans.home"/>
+ <isset property="have.tests"/>
+ </and>
+ </condition>
+ <condition property="no.javadoc.preview">
+ <and>
+ <isset property="javadoc.preview"/>
+ <isfalse value="${javadoc.preview}"/>
+ </and>
+ </condition>
+ <property name="run.jvmargs" value=""/>
+ <property name="javac.compilerargs" value=""/>
+ <property name="work.dir" value="${basedir}"/>
+ <condition property="no.deps">
+ <and>
+ <istrue value="${no.dependencies}"/>
+ </and>
+ </condition>
+ <property name="javac.debug" value="true"/>
+ <property name="javadoc.preview" value="true"/>
+ <property name="application.args" value=""/>
+ <property name="source.encoding" value="${file.encoding}"/>
+ <property name="runtime.encoding" value="${source.encoding}"/>
+ <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+ <and>
+ <isset property="javadoc.encoding"/>
+ <not>
+ <equals arg1="${javadoc.encoding}" arg2=""/>
+ </not>
+ </and>
+ </condition>
+ <property name="javadoc.encoding.used" value="${source.encoding}"/>
+ <property name="includes" value="**"/>
+ <property name="excludes" value=""/>
+ <property name="do.depend" value="false"/>
+ <condition property="do.depend.true">
+ <istrue value="${do.depend}"/>
+ </condition>
+ <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+ <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+ <length length="0" string="${endorsed.classpath}" when="greater"/>
+ </condition>
+ <condition else="false" property="jdkBug6558476">
+ <and>
+ <matches pattern="1\.[56]" string="${java.specification.version}"/>
+ <not>
+ <os family="unix"/>
+ </not>
+ </and>
+ </condition>
+ <property name="javac.fork" value="${jdkBug6558476}"/>
+ <property name="jar.index" value="false"/>
+ <property name="jar.index.metainf" value="${jar.index}"/>
+ <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
+ </target>
+ <target name="-post-init">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init" name="-init-check">
+ <fail unless="src.dir">Must set src.dir</fail>
+ <fail unless="test.src.dir">Must set test.src.dir</fail>
+ <fail unless="build.dir">Must set build.dir</fail>
+ <fail unless="dist.dir">Must set dist.dir</fail>
+ <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+ <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+ <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+ <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+ <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+ <fail unless="dist.jar">Must set dist.jar</fail>
+ </target>
+ <target name="-init-macrodef-property">
+ <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ </target>
+ <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+ <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${src.dir}" name="srcdir"/>
+ <attribute default="${build.classes.dir}" name="destdir"/>
+ <attribute default="${javac.classpath}" name="classpath"/>
+ <attribute default="${javac.processorpath}" name="processorpath"/>
+ <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+ <attribute default="${includes}" name="includes"/>
+ <attribute default="${excludes}" name="excludes"/>
+ <attribute default="${javac.debug}" name="debug"/>
+ <attribute default="${empty.dir}" name="sourcepath"/>
+ <attribute default="${empty.dir}" name="gensrcdir"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <property location="${build.dir}/empty" name="empty.dir"/>
+ <mkdir dir="${empty.dir}"/>
+ <mkdir dir="@{apgeneratedsrcdir}"/>
+ <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+ <src>
+ <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+ <include name="*"/>
+ </dirset>
+ </src>
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+ <compilerarg line="${javac.compilerargs}"/>
+ <compilerarg value="-processorpath"/>
+ <compilerarg path="@{processorpath}:${empty.dir}"/>
+ <compilerarg line="${ap.processors.internal}"/>
+ <compilerarg line="${annotation.processing.processor.options}"/>
+ <compilerarg value="-s"/>
+ <compilerarg path="@{apgeneratedsrcdir}"/>
+ <compilerarg line="${ap.proc.none.internal}"/>
+ <customize/>
+ </javac>
+ </sequential>
+ </macrodef>
+ </target>
+ <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+ <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${src.dir}" name="srcdir"/>
+ <attribute default="${build.classes.dir}" name="destdir"/>
+ <attribute default="${javac.classpath}" name="classpath"/>
+ <attribute default="${javac.processorpath}" name="processorpath"/>
+ <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+ <attribute default="${includes}" name="includes"/>
+ <attribute default="${excludes}" name="excludes"/>
+ <attribute default="${javac.debug}" name="debug"/>
+ <attribute default="${empty.dir}" name="sourcepath"/>
+ <attribute default="${empty.dir}" name="gensrcdir"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <property location="${build.dir}/empty" name="empty.dir"/>
+ <mkdir dir="${empty.dir}"/>
+ <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+ <src>
+ <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+ <include name="*"/>
+ </dirset>
+ </src>
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+ <compilerarg line="${javac.compilerargs}"/>
+ <customize/>
+ </javac>
+ </sequential>
+ </macrodef>
+ </target>
+ <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+ <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${src.dir}" name="srcdir"/>
+ <attribute default="${build.classes.dir}" name="destdir"/>
+ <attribute default="${javac.classpath}" name="classpath"/>
+ <sequential>
+ <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ </depend>
+ </sequential>
+ </macrodef>
+ <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${build.classes.dir}" name="destdir"/>
+ <sequential>
+ <fail unless="javac.includes">Must set javac.includes</fail>
+ <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
+ <path>
+ <filelist dir="@{destdir}" files="${javac.includes}"/>
+ </path>
+ <globmapper from="*.java" to="*.class"/>
+ </pathconvert>
+ <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
+ <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
+ <delete>
+ <files includesfile="${javac.includesfile.binary}"/>
+ </delete>
+ <delete>
+ <fileset file="${javac.includesfile.binary}"/>
+ </delete>
+ </sequential>
+ </macrodef>
+ </target>
+ <target name="-init-macrodef-junit">
+ <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${includes}" name="includes"/>
+ <attribute default="${excludes}" name="excludes"/>
+ <attribute default="**" name="testincludes"/>
+ <sequential>
+ <property name="junit.forkmode" value="perTest"/>
+ <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
+ <batchtest todir="${build.test.results.dir}">
+ <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+ <filename name="@{testincludes}"/>
+ </fileset>
+ </batchtest>
+ <classpath>
+ <path path="${run.test.classpath}"/>
+ </classpath>
+ <syspropertyset>
+ <propertyref prefix="test-sys-prop."/>
+ <mapper from="test-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <formatter type="brief" usefile="false"/>
+ <formatter type="xml"/>
+ <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+ <jvmarg value="-ea"/>
+ <jvmarg line="${run.jvmargs}"/>
+ </junit>
+ </sequential>
+ </macrodef>
+ </target>
+ <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" name="profile-init"/>
+ <target name="-profile-pre-init">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target name="-profile-post-init">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target name="-profile-init-macrodef-profile">
+ <macrodef name="resolve">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${env.@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="profile">
+ <attribute default="${main.class}" name="classname"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <property environment="env"/>
+ <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
+ <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">
+ <jvmarg value="${profiler.info.jvmargs.agent}"/>
+ <jvmarg line="${profiler.info.jvmargs}"/>
+ <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+ <arg line="${application.args}"/>
+ <classpath>
+ <path path="${run.classpath}"/>
+ </classpath>
+ <syspropertyset>
+ <propertyref prefix="run-sys-prop."/>
+ <mapper from="run-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <customize/>
+ </java>
+ </sequential>
+ </macrodef>
+ </target>
+ <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" name="-profile-init-check">
+ <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
+ <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
+ </target>
+ <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+ <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
+ <attribute default="${main.class}" name="name"/>
+ <attribute default="${debug.classpath}" name="classpath"/>
+ <attribute default="" name="stopclassname"/>
+ <sequential>
+ <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ </nbjpdastart>
+ </sequential>
+ </macrodef>
+ <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
+ <attribute default="${build.classes.dir}" name="dir"/>
+ <sequential>
+ <nbjpdareload>
+ <fileset dir="@{dir}" includes="${fix.classes}">
+ <include name="${fix.includes}*.class"/>
+ </fileset>
+ </nbjpdareload>
+ </sequential>
+ </macrodef>
+ </target>
+ <target name="-init-debug-args">
+ <property name="version-output" value="java version &quot;${ant.java.version}"/>
+ <condition property="have-jdk-older-than-1.4">
+ <or>
+ <contains string="${version-output}" substring="java version &quot;1.0"/>
+ <contains string="${version-output}" substring="java version &quot;1.1"/>
+ <contains string="${version-output}" substring="java version &quot;1.2"/>
+ <contains string="${version-output}" substring="java version &quot;1.3"/>
+ </or>
+ </condition>
+ <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+ <istrue value="${have-jdk-older-than-1.4}"/>
+ </condition>
+ <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+ <os family="windows"/>
+ </condition>
+ <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+ <isset property="debug.transport"/>
+ </condition>
+ </target>
+ <target depends="-init-debug-args" name="-init-macrodef-debug">
+ <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${main.class}" name="classname"/>
+ <attribute default="${debug.classpath}" name="classpath"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <java classname="@{classname}" dir="${work.dir}" fork="true">
+ <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+ <jvmarg line="${debug-args-line}"/>
+ <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+ <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+ <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+ <jvmarg line="${run.jvmargs}"/>
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ <syspropertyset>
+ <propertyref prefix="run-sys-prop."/>
+ <mapper from="run-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <customize/>
+ </java>
+ </sequential>
+ </macrodef>
+ </target>
+ <target name="-init-macrodef-java">
+ <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
+ <attribute default="${main.class}" name="classname"/>
+ <attribute default="${run.classpath}" name="classpath"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <java classname="@{classname}" dir="${work.dir}" fork="true">
+ <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+ <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
+ <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
+ <jvmarg line="${run.jvmargs}"/>
+ <classpath>
+ <path path="@{classpath}"/>
+ </classpath>
+ <syspropertyset>
+ <propertyref prefix="run-sys-prop."/>
+ <mapper from="run-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <customize/>
+ </java>
+ </sequential>
+ </macrodef>
+ </target>
+ <target name="-init-macrodef-copylibs">
+ <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
+ <attribute default="${manifest.file}" name="manifest"/>
+ <element name="customize" optional="true"/>
+ <sequential>
+ <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+ <pathconvert property="run.classpath.without.build.classes.dir">
+ <path path="${run.classpath}"/>
+ <map from="${build.classes.dir.resolved}" to=""/>
+ </pathconvert>
+ <pathconvert pathsep=" " property="jar.classpath">
+ <path path="${run.classpath.without.build.classes.dir}"/>
+ <chainedmapper>
+ <flattenmapper/>
+ <globmapper from="*" to="lib/*"/>
+ </chainedmapper>
+ </pathconvert>
+ <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
+ <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
+ <fileset dir="${build.classes.dir}"/>
+ <manifest>
+ <attribute name="Class-Path" value="${jar.classpath}"/>
+ <customize/>
+ </manifest>
+ </copylibs>
+ </sequential>
+ </macrodef>
+ </target>
+ <target name="-init-presetdef-jar">
+ <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
+ <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}">
+ <j2seproject1:fileset dir="${build.classes.dir}"/>
+ </jar>
+ </presetdef>
+ </target>
+ <target name="-init-ap-cmdline-properties">
+ <property name="annotation.processing.enabled" value="true"/>
+ <property name="annotation.processing.processors.list" value=""/>
+ <property name="annotation.processing.processor.options" value=""/>
+ <property name="annotation.processing.run.all.processors" value="true"/>
+ <property name="javac.processorpath" value="${javac.classpath}"/>
+ <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+ <condition property="ap.supported.internal" value="true">
+ <not>
+ <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+ </not>
+ </condition>
+ </target>
+ <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+ <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+ <isfalse value="${annotation.processing.run.all.processors}"/>
+ </condition>
+ <condition else="" property="ap.proc.none.internal" value="-proc:none">
+ <isfalse value="${annotation.processing.enabled}"/>
+ </condition>
+ </target>
+ <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+ <property name="ap.cmd.line.internal" value=""/>
+ </target>
+ <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
+ <!--
+ ===================
+ COMPILATION SECTION
+ ===================
+ -->
+ <target name="-deps-jar-init" unless="built-jar.properties">
+ <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
+ <delete file="${built-jar.properties}" quiet="true"/>
+ </target>
+ <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
+ <echo level="warn" message="Cycle detected: EssentialsGeoIP was already built"/>
+ </target>
+ <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
+ <mkdir dir="${build.dir}"/>
+ <touch file="${built-jar.properties}" verbose="false"/>
+ <property file="${built-jar.properties}" prefix="already.built.jar."/>
+ <antcall target="-warn-already-built-jar"/>
+ <propertyfile file="${built-jar.properties}">
+ <entry key="${basedir}" value=""/>
+ </propertyfile>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-jar.properties}"/>
+ <param location="${project.Essentials}" name="call.subproject"/>
+ <param location="${project.Essentials}/build.xml" name="call.script"/>
+ <param name="call.target" value="jar"/>
+ <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+ </antcall>
+ </target>
+ <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
+ <target depends="init" name="-check-automatic-build">
+ <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
+ </target>
+ <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
+ <antcall target="clean"/>
+ </target>
+ <target depends="init,deps-jar" name="-pre-pre-compile">
+ <mkdir dir="${build.classes.dir}"/>
+ </target>
+ <target name="-pre-compile">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target if="do.depend.true" name="-compile-depend">
+ <pathconvert property="build.generated.subdirs">
+ <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+ <include name="*"/>
+ </dirset>
+ </pathconvert>
+ <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
+ </target>
+ <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
+ <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
+ <copy todir="${build.classes.dir}">
+ <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+ </copy>
+ </target>
+ <target if="has.persistence.xml" name="-copy-persistence-xml">
+ <mkdir dir="${build.classes.dir}/META-INF"/>
+ <copy todir="${build.classes.dir}/META-INF">
+ <fileset dir="${meta.inf.dir}" includes="persistence.xml"/>
+ </copy>
+ </target>
+ <target name="-post-compile">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+ <target name="-pre-compile-single">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+ <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+ <j2seproject3:force-recompile/>
+ <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/>
+ </target>
+ <target name="-post-compile-single">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+ <!--
+ ====================
+ JAR BUILDING SECTION
+ ====================
+ -->
+ <target depends="init" name="-pre-pre-jar">
+ <dirname file="${dist.jar}" property="dist.jar.dir"/>
+ <mkdir dir="${dist.jar.dir}"/>
+ </target>
+ <target name="-pre-jar">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available">
+ <j2seproject1:jar/>
+ </target>
+ <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available">
+ <j2seproject1:jar manifest="${manifest.file}"/>
+ </target>
+ <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.archive+manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available">
+ <j2seproject1:jar manifest="${manifest.file}">
+ <j2seproject1:manifest>
+ <j2seproject1:attribute name="Main-Class" value="${main.class}"/>
+ </j2seproject1:manifest>
+ </j2seproject1:jar>
+ <echo level="info">To run this application from the command line without Ant, try:</echo>
+ <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
+ <property location="${dist.jar}" name="dist.jar.resolved"/>
+ <pathconvert property="run.classpath.with.dist.jar">
+ <path path="${run.classpath}"/>
+ <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
+ </pathconvert>
+ <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+ </target>
+ <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
+ <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+ <touch file="${tmp.manifest.file}" verbose="false"/>
+ </target>
+ <target depends="init" if="do.archive+manifest.available" name="-do-jar-with-libraries-copy-manifest">
+ <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
+ <copy file="${manifest.file}" tofile="${tmp.manifest.file}"/>
+ </target>
+ <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+main.class.available" name="-do-jar-with-libraries-set-main">
+ <manifest file="${tmp.manifest.file}" mode="update">
+ <attribute name="Main-Class" value="${main.class}"/>
+ </manifest>
+ </target>
+ <target depends="init,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-with-libraries-set-splashscreen">
+ <basename file="${application.splash}" property="splashscreen.basename"/>
+ <mkdir dir="${build.classes.dir}/META-INF"/>
+ <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
+ <manifest file="${tmp.manifest.file}" mode="update">
+ <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
+ </manifest>
+ </target>
+ <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen" if="do.mkdist" name="-do-jar-with-libraries-pack">
+ <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
+ <echo level="info">To run this application from the command line without Ant, try:</echo>
+ <property location="${dist.jar}" name="dist.jar.resolved"/>
+ <echo level="info">java -jar "${dist.jar.resolved}"</echo>
+ </target>
+ <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">
+ <delete>
+ <fileset file="${tmp.manifest.file}"/>
+ </delete>
+ </target>
+ <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-with-libraries-create-manifest,-do-jar-with-libraries-copy-manifest,-do-jar-with-libraries-set-main,-do-jar-with-libraries-set-splashscreen,-do-jar-with-libraries-pack,-do-jar-with-libraries-delete-manifest" name="-do-jar-with-libraries"/>
+ <target name="-post-jar">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR." name="jar"/>
+ <!--
+ =================
+ EXECUTION SECTION
+ =================
+ -->
+ <target depends="init,compile" description="Run a main class." name="run">
+ <j2seproject1:java>
+ <customize>
+ <arg line="${application.args}"/>
+ </customize>
+ </j2seproject1:java>
+ </target>
+ <target name="-do-not-recompile">
+ <property name="javac.includes.binary" value=""/>
+ </target>
+ <target depends="init,compile-single" name="run-single">
+ <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+ <j2seproject1:java classname="${run.class}"/>
+ </target>
+ <target depends="init,compile-test-single" name="run-test-with-main">
+ <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+ <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+ </target>
+ <!--
+ =================
+ DEBUGGING SECTION
+ =================
+ -->
+ <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+ <j2seproject1:nbjpdastart name="${debug.class}"/>
+ </target>
+ <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+ <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+ </target>
+ <target depends="init,compile" name="-debug-start-debuggee">
+ <j2seproject3:debug>
+ <customize>
+ <arg line="${application.args}"/>
+ </customize>
+ </j2seproject3:debug>
+ </target>
+ <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
+ <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
+ <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
+ </target>
+ <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
+ <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+ <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+ <j2seproject3:debug classname="${debug.class}"/>
+ </target>
+ <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
+ <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+ <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+ <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+ </target>
+ <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+ <target depends="init" name="-pre-debug-fix">
+ <fail unless="fix.includes">Must set fix.includes</fail>
+ <property name="javac.includes" value="${fix.includes}.java"/>
+ </target>
+ <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+ <j2seproject1:nbjpdareload/>
+ </target>
+ <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+ <!--
+ =================
+ PROFILING SECTION
+ =================
+ -->
+ <target depends="profile-init,compile" description="Profile a project in the IDE." if="netbeans.home" name="profile">
+ <nbprofiledirect>
+ <classpath>
+ <path path="${run.classpath}"/>
+ </classpath>
+ </nbprofiledirect>
+ <profile/>
+ </target>
+ <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="netbeans.home" name="profile-single">
+ <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
+ <nbprofiledirect>
+ <classpath>
+ <path path="${run.classpath}"/>
+ </classpath>
+ </nbprofiledirect>
+ <profile classname="${profile.class}"/>
+ </target>
+ <!--
+ =========================
+ APPLET PROFILING SECTION
+ =========================
+ -->
+ <target depends="profile-init,compile-single" if="netbeans.home" name="profile-applet">
+ <nbprofiledirect>
+ <classpath>
+ <path path="${run.classpath}"/>
+ </classpath>
+ </nbprofiledirect>
+ <profile classname="sun.applet.AppletViewer">
+ <customize>
+ <arg value="${applet.url}"/>
+ </customize>
+ </profile>
+ </target>
+ <!--
+ =========================
+ TESTS PROFILING SECTION
+ =========================
+ -->
+ <target depends="profile-init,compile-test-single" if="netbeans.home" name="profile-test-single">
+ <nbprofiledirect>
+ <classpath>
+ <path path="${run.test.classpath}"/>
+ </classpath>
+ </nbprofiledirect>
+ <junit dir="${profiler.info.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" jvm="${profiler.info.jvm}" showoutput="true">
+ <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
+ <jvmarg value="${profiler.info.jvmargs.agent}"/>
+ <jvmarg line="${profiler.info.jvmargs}"/>
+ <test name="${profile.class}"/>
+ <classpath>
+ <path path="${run.test.classpath}"/>
+ </classpath>
+ <syspropertyset>
+ <propertyref prefix="test-sys-prop."/>
+ <mapper from="test-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <formatter type="brief" usefile="false"/>
+ <formatter type="xml"/>
+ </junit>
+ </target>
+ <!--
+ ===============
+ JAVADOC SECTION
+ ===============
+ -->
+ <target depends="init" if="have.sources" name="-javadoc-build">
+ <mkdir dir="${dist.javadoc.dir}"/>
+ <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+ <classpath>
+ <path path="${javac.classpath}"/>
+ </classpath>
+ <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+ <filename name="**/*.java"/>
+ </fileset>
+ <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+ <include name="**/*.java"/>
+ </fileset>
+ </javadoc>
+ <copy todir="${dist.javadoc.dir}">
+ <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+ <filename name="**/doc-files/**"/>
+ </fileset>
+ <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+ <include name="**/doc-files/**"/>
+ </fileset>
+ </copy>
+ </target>
+ <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
+ <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+ </target>
+ <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
+ <!--
+ =========================
+ JUNIT COMPILATION SECTION
+ =========================
+ -->
+ <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+ <mkdir dir="${build.test.classes.dir}"/>
+ </target>
+ <target name="-pre-compile-test">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target if="do.depend.true" name="-compile-test-depend">
+ <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+ </target>
+ <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
+ <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" processorpath="${javac.test.processorpath}" srcdir="${test.src.dir}"/>
+ <copy todir="${build.test.classes.dir}">
+ <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+ </copy>
+ </target>
+ <target name="-post-compile-test">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+ <target name="-pre-compile-test-single">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,deps-jar,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+ <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+ <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
+ <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/>
+ <copy todir="${build.test.classes.dir}">
+ <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+ </copy>
+ </target>
+ <target name="-post-compile-test-single">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+ <!--
+ =======================
+ JUNIT EXECUTION SECTION
+ =======================
+ -->
+ <target depends="init" if="have.tests" name="-pre-test-run">
+ <mkdir dir="${build.test.results.dir}"/>
+ </target>
+ <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+ <j2seproject3:junit testincludes="**/*Test.java"/>
+ </target>
+ <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+ <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+ </target>
+ <target depends="init" if="have.tests" name="test-report"/>
+ <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+ <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+ <target depends="init" if="have.tests" name="-pre-test-run-single">
+ <mkdir dir="${build.test.results.dir}"/>
+ </target>
+ <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+ <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+ <j2seproject3:junit excludes="" includes="${test.includes}"/>
+ </target>
+ <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+ <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+ </target>
+ <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+ <!--
+ =======================
+ JUNIT DEBUGGING SECTION
+ =======================
+ -->
+ <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
+ <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+ <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
+ <delete file="${test.report.file}"/>
+ <mkdir dir="${build.test.results.dir}"/>
+ <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
+ <customize>
+ <syspropertyset>
+ <propertyref prefix="test-sys-prop."/>
+ <mapper from="test-sys-prop.*" to="*" type="glob"/>
+ </syspropertyset>
+ <arg value="${test.class}"/>
+ <arg value="showoutput=true"/>
+ <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
+ <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
+ </customize>
+ </j2seproject3:debug>
+ </target>
+ <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+ <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+ </target>
+ <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+ <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+ <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+ </target>
+ <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+ <!--
+ =========================
+ APPLET EXECUTION SECTION
+ =========================
+ -->
+ <target depends="init,compile-single" name="run-applet">
+ <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+ <j2seproject1:java classname="sun.applet.AppletViewer">
+ <customize>
+ <arg value="${applet.url}"/>
+ </customize>
+ </j2seproject1:java>
+ </target>
+ <!--
+ =========================
+ APPLET DEBUGGING SECTION
+ =========================
+ -->
+ <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
+ <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
+ <j2seproject3:debug classname="sun.applet.AppletViewer">
+ <customize>
+ <arg value="${applet.url}"/>
+ </customize>
+ </j2seproject3:debug>
+ </target>
+ <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
+ <!--
+ ===============
+ CLEANUP SECTION
+ ===============
+ -->
+ <target name="-deps-clean-init" unless="built-clean.properties">
+ <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
+ <delete file="${built-clean.properties}" quiet="true"/>
+ </target>
+ <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
+ <echo level="warn" message="Cycle detected: EssentialsGeoIP was already built"/>
+ </target>
+ <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
+ <mkdir dir="${build.dir}"/>
+ <touch file="${built-clean.properties}" verbose="false"/>
+ <property file="${built-clean.properties}" prefix="already.built.clean."/>
+ <antcall target="-warn-already-built-clean"/>
+ <propertyfile file="${built-clean.properties}">
+ <entry key="${basedir}" value=""/>
+ </propertyfile>
+ <antcall target="-maybe-call-dep">
+ <param name="call.built.properties" value="${built-clean.properties}"/>
+ <param location="${project.Essentials}" name="call.subproject"/>
+ <param location="${project.Essentials}/build.xml" name="call.script"/>
+ <param name="call.target" value="clean"/>
+ <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+ </antcall>
+ </target>
+ <target depends="init" name="-do-clean">
+ <delete dir="${build.dir}"/>
+ <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
+ </target>
+ <target name="-post-clean">
+ <!-- Empty placeholder for easier customization. -->
+ <!-- You can override this target in the ../build.xml file. -->
+ </target>
+ <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
+ <target name="-check-call-dep">
+ <property file="${call.built.properties}" prefix="already.built."/>
+ <condition property="should.call.dep">
+ <not>
+ <isset property="already.built.${call.subproject}"/>
+ </not>
+ </condition>
+ </target>
+ <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
+ <ant antfile="${call.script}" inheritall="false" target="${call.target}">
+ <propertyset>
+ <propertyref prefix="transfer."/>
+ <mapper from="transfer.*" to="*" type="glob"/>
+ </propertyset>
+ </ant>
+ </target>
+</project>
diff --git a/EssentialsGeoIP/nbproject/genfiles.properties b/EssentialsGeoIP/nbproject/genfiles.properties
new file mode 100644
index 000000000..7a24e69c2
--- /dev/null
+++ b/EssentialsGeoIP/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=cbf94f59
+build.xml.script.CRC32=c4b1bb0e
+build.xml.stylesheet.CRC32=28e38971@1.42.1.45
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=cbf94f59
+nbproject/build-impl.xml.script.CRC32=a87d6c0a
+nbproject/build-impl.xml.stylesheet.CRC32=0c01fd8e@1.43.1.45
diff --git a/EssentialsGeoIP/nbproject/project.properties b/EssentialsGeoIP/nbproject/project.properties
new file mode 100644
index 000000000..ed96af206
--- /dev/null
+++ b/EssentialsGeoIP/nbproject/project.properties
@@ -0,0 +1,78 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processor.options=
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+ ${run.classpath}
+debug.test.classpath=\
+ ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/EssentialsGeoIP.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+excludes=
+file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=../lib/craftbukkit-0.0.1-SNAPSHOT.jar
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${reference.Essentials.jar}:\
+ ${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+ ${javac.classpath}
+javac.source=1.6
+javac.target=1.6
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${libs.junit.classpath}:\
+ ${libs.junit_4.classpath}
+javac.test.processorpath=\
+ ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+main.class=
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+project.Essentials=../Essentials
+reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
+test.src.dir=test
diff --git a/EssentialsGeoIP/nbproject/project.xml b/EssentialsGeoIP/nbproject/project.xml
new file mode 100644
index 000000000..2c6cc9d84
--- /dev/null
+++ b/EssentialsGeoIP/nbproject/project.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.java.j2seproject</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+ <name>EssentialsGeoIP</name>
+ <source-roots>
+ <root id="src.dir"/>
+ </source-roots>
+ <test-roots>
+ <root id="test.src.dir"/>
+ </test-roots>
+ </data>
+ <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
+ <definitions>../lib/nblibraries.properties</definitions>
+ </libraries>
+ <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
+ <reference>
+ <foreign-project>Essentials</foreign-project>
+ <artifact-type>jar</artifact-type>
+ <script>build.xml</script>
+ <target>jar</target>
+ <clean-target>clean</clean-target>
+ <id>jar</id>
+ </reference>
+ </references>
+ </configuration>
+</project>
diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java
new file mode 100644
index 000000000..1a01c7132
--- /dev/null
+++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIP.java
@@ -0,0 +1,45 @@
+package com.earth2me.essentials.geoip;
+
+import com.earth2me.essentials.Essentials;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.bukkit.event.Event.Priority;
+import org.bukkit.event.Event.Type;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.java.JavaPlugin;
+
+
+public class EssentialsGeoIP extends JavaPlugin
+{
+ private static final Logger logger = Logger.getLogger("Minecraft");
+
+ public EssentialsGeoIP()
+ {
+ }
+
+ @Override
+ public void onDisable()
+ {
+ }
+
+ @Override
+ public void onEnable()
+ {
+ PluginManager pm = getServer().getPluginManager();
+ Plugin ess = pm.getPlugin("Essentials");
+ if (ess != null)
+ {
+ if (!pm.isPluginEnabled(ess))
+ {
+ pm.enablePlugin(ess);
+ }
+ }
+ EssentialsGeoIPPlayerListener playerListener = new EssentialsGeoIPPlayerListener(getDataFolder());
+ pm.registerEvent(Type.PLAYER_JOIN, playerListener, Priority.Monitor, this);
+
+ logger.info("Loaded " + this.getDescription().getName() + " build " + this.getDescription().getVersion() + " by " + Essentials.AUTHORS);
+
+ logger.log(Level.INFO, "This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/.");
+ }
+}
diff --git a/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
new file mode 100644
index 000000000..2d9bd7749
--- /dev/null
+++ b/EssentialsGeoIP/src/com/earth2me/essentials/geoip/EssentialsGeoIPPlayerListener.java
@@ -0,0 +1,162 @@
+package com.earth2me.essentials.geoip;
+
+import com.earth2me.essentials.EssentialsConf;
+import com.earth2me.essentials.IConf;
+import com.earth2me.essentials.User;
+import com.maxmind.geoip.Location;
+import com.maxmind.geoip.LookupService;
+import com.maxmind.geoip.regionName;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.GZIPInputStream;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerListener;
+
+
+public class EssentialsGeoIPPlayerListener extends PlayerListener implements IConf
+{
+ LookupService ls = null;
+ private static final Logger logger = Logger.getLogger("Minecraft");
+ File databaseFile;
+ File dataFolder;
+ EssentialsConf config;
+
+ public EssentialsGeoIPPlayerListener(File dataFolder)
+ {
+ this.dataFolder = dataFolder;
+ this.config = new EssentialsConf(new File(dataFolder, "config.yml"));
+ config.setTemplateName("/config.yml", EssentialsGeoIP.class);
+ reloadConfig();
+ }
+
+ @Override
+ public void onPlayerJoin(PlayerJoinEvent event)
+ {
+ InetAddress address = event.getPlayer().getAddress().getAddress();
+ StringBuilder sb = new StringBuilder();
+ if (config.getBoolean("database.show-cities", false))
+ {
+ Location loc = ls.getLocation(address);
+ if (loc == null)
+ {
+ return;
+ }
+ if (loc.city != null)
+ {
+ sb.append(loc.city).append(", ");
+ }
+ String region = regionName.regionNameByCode(loc.countryCode, loc.region);
+ if (region != null)
+ {
+ sb.append(region).append(", ");
+ }
+ sb.append(loc.countryName);
+ }
+ else
+ {
+ sb.append(ls.getCountry(address).getName());
+ }
+ if (config.getBoolean("show-on-whois", true))
+ {
+ User.get(event.getPlayer()).setMetadata("location", sb.toString());
+ }
+ if (config.getBoolean("show-on-login", true))
+ {
+ event.getPlayer().getServer().broadcastMessage("Player " + event.getPlayer().getDisplayName() + " comes from " + sb.toString());
+ }
+ }
+
+ @Override
+ public final void reloadConfig()
+ {
+ config.load();
+
+ if (config.getBoolean("database.show-cities", false))
+ {
+ databaseFile = new File(dataFolder, "GeoIPCity.dat");
+ }
+ else
+ {
+ databaseFile = new File(dataFolder, "GeoIP.dat");
+ }
+ if (!databaseFile.exists())
+ {
+ if (config.getBoolean("database.download-if-missing", true))
+ {
+ downloadDatabase();
+ }
+ else
+ {
+ logger.log(Level.SEVERE, "Can't find GeoIP database!");
+ return;
+ }
+ }
+ try
+ {
+ ls = new LookupService(databaseFile);
+ }
+ catch (IOException ex)
+ {
+ logger.log(Level.SEVERE, "Failed to read GeoIP database!", ex);
+ }
+ }
+
+ private void downloadDatabase()
+ {
+ try
+ {
+ String url;
+ if (config.getBoolean("database.show-cities", false))
+ {
+ url = config.getString("database.download-url-city");
+ }
+ else
+ {
+ url = config.getString("database.download-url");
+ }
+ if (url == null || url.isEmpty())
+ {
+ logger.log(Level.SEVERE, "GeoIP download url is empty.");
+ return;
+ }
+ logger.log(Level.INFO, "Downloading GeoIP database ... this might take a while (country: 0.6 MB, city: 20MB)");
+ URL downloadUrl = new URL(url);
+ URLConnection conn = downloadUrl.openConnection();
+ conn.setConnectTimeout(10000);
+ conn.connect();
+ InputStream input = conn.getInputStream();
+ if (url.endsWith(".gz"))
+ {
+ input = new GZIPInputStream(input);
+ }
+ OutputStream output = new FileOutputStream(databaseFile);
+ byte[] buffer = new byte[2048];
+ int length = input.read(buffer);
+ while (length >= 0)
+ {
+ output.write(buffer, 0, length);
+ length = input.read(buffer);
+ }
+ output.close();
+ input.close();
+ }
+ catch (MalformedURLException ex)
+ {
+ logger.log(Level.SEVERE, "GeoIP download url is invalid.", ex);
+ return;
+ }
+ catch (IOException ex)
+ {
+ logger.log(Level.SEVERE, "Failed to open connection.", ex);
+ }
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/LICENSE b/EssentialsGeoIP/src/com/maxmind/LICENSE
new file mode 100644
index 000000000..5ab7695ab
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/LICENSE
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/Country.java b/EssentialsGeoIP/src/com/maxmind/geoip/Country.java
new file mode 100644
index 000000000..d250eb766
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/Country.java
@@ -0,0 +1,61 @@
+/**
+ * Country.java
+ *
+ * Copyright (C) 2003 MaxMind LLC. All Rights Reserved.
+ *
+ * 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 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
+ * 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
+ */
+
+package com.maxmind.geoip;
+
+/**
+ * Represents a country.
+ *
+ * @author Matt Tucker
+ */
+public class Country {
+
+ private String code;
+ private String name;
+
+ /**
+ * Creates a new Country.
+ *
+ * @param code the country code.
+ * @param name the country name.
+ */
+ public Country(String code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+
+ /**
+ * Returns the ISO two-letter country code of this country.
+ *
+ * @return the country code.
+ */
+ public String getCode() {
+ return code;
+ }
+
+ /**
+ * Returns the name of this country.
+ *
+ * @return the country name.
+ */
+ public String getName() {
+ return name;
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/DatabaseInfo.java b/EssentialsGeoIP/src/com/maxmind/geoip/DatabaseInfo.java
new file mode 100644
index 000000000..dfed516a5
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/DatabaseInfo.java
@@ -0,0 +1,117 @@
+/**
+ * DatabaseInfo.java
+ *
+ * Copyright (C) 2003 MaxMind LLC. All Rights Reserved.
+ *
+ * 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 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
+ * 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
+ */
+
+package com.maxmind.geoip;
+
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+
+/**
+ * Encapsulates metadata about the GeoIP database. The database has a date, is a premium or
+ * standard version, and is one of the following types:
+ *
+ * <ul>
+ * <li>Country edition -- this is the most common version of the database. It includes
+ * the name of the country and it's ISO country code given an IP address.
+ * <li>Region edition -- includes the country information as well as
+ * what U.S. state or Canadian province the IP address is from if the IP address
+ * is from the U.S. or Canada.
+ * <li>City edition -- includes country, region, city, postal code, latitude, and
+ * longitude information.
+ * <li>Org edition -- includes netblock owner.
+ * <li>ISP edition -- ISP information.
+ * </ul>
+ *
+ * @see com.maxmind.geoip.LookupService#getDatabaseInfo()
+ * @author Matt Tucker
+ */
+public class DatabaseInfo {
+
+ public final static int COUNTRY_EDITION = 1;
+ public final static int REGION_EDITION_REV0 = 7;
+ public final static int REGION_EDITION_REV1 = 3;
+ public final static int CITY_EDITION_REV0 = 6;
+ public final static int CITY_EDITION_REV1 = 2;
+ public final static int ORG_EDITION = 5;
+ public final static int ISP_EDITION = 4;
+ public final static int PROXY_EDITION = 8;
+ public final static int ASNUM_EDITION = 9;
+ public final static int NETSPEED_EDITION = 10;
+ public final static int COUNTRY_EDITION_V6 = 12;
+
+private static SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
+
+ private String info;
+
+ /**
+ * Creates a new DatabaseInfo object given the database info String.
+ * @param info
+ */
+ public DatabaseInfo(String info) {
+ this.info = info;
+ }
+
+ public int getType() {
+ if (info == null || info.equals("")) {
+ return COUNTRY_EDITION;
+ }
+ else {
+ // Get the type code from the database info string and then
+ // subtract 105 from the value to preserve compatability with
+ // databases from April 2003 and earlier.
+ return Integer.parseInt(info.substring(4, 7)) - 105;
+ }
+ }
+
+ /**
+ * Returns true if the database is the premium version.
+ *
+ * @return true if the premium version of the database.
+ */
+ public boolean isPremium() {
+ return info.indexOf("FREE") < 0;
+ }
+
+ /**
+ * Returns the date of the database.
+ *
+ * @return the date of the database.
+ */
+ public Date getDate() {
+ for (int i=0; i<info.length()-9; i++) {
+ if (Character.isWhitespace(info.charAt(i))) {
+ String dateString = info.substring(i+1, i+9);
+ try {
+ synchronized (formatter) {
+ return formatter.parse(dateString);
+ }
+ }
+ catch (ParseException pe) { }
+ break;
+ }
+ }
+ return null;
+ }
+
+ public String toString() {
+ return info;
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/Location.java b/EssentialsGeoIP/src/com/maxmind/geoip/Location.java
new file mode 100644
index 000000000..040fcb6b1
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/Location.java
@@ -0,0 +1,60 @@
+/**
+ * Location.java
+ *
+ * Copyright (C) 2004 MaxMind LLC. All Rights Reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Lesser Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * 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
+ */
+
+package com.maxmind.geoip;
+
+public class Location {
+ public String countryCode;
+ public String countryName;
+ public String region;
+ public String city;
+ public String postalCode;
+ public float latitude;
+ public float longitude;
+ public int dma_code;
+ public int area_code;
+ public int metro_code;
+
+ private final static double EARTH_DIAMETER = 2 * 6378.2;
+ private final static double PI = 3.14159265;
+ private final static double RAD_CONVERT = PI / 180;
+
+ public double distance (Location loc) {
+ double delta_lat, delta_lon;
+ double temp;
+
+ float lat1 = latitude;
+ float lon1 = longitude;
+ float lat2 = loc.latitude;
+ float lon2 = loc.longitude;
+
+ // convert degrees to radians
+ lat1 *= RAD_CONVERT;
+ lat2 *= RAD_CONVERT;
+
+ // find the deltas
+ delta_lat = lat2 - lat1;
+ delta_lon = (lon2 - lon1) * RAD_CONVERT;
+
+ // Find the great circle distance
+ temp = Math.pow(Math.sin(delta_lat/2),2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(delta_lon/2),2);
+ return EARTH_DIAMETER * Math.atan2(Math.sqrt(temp),Math.sqrt(1-temp));
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/LookupService.java b/EssentialsGeoIP/src/com/maxmind/geoip/LookupService.java
new file mode 100644
index 000000000..406cda004
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/LookupService.java
@@ -0,0 +1,1046 @@
+/**
+ * LookupService.java
+ *
+ * Copyright (C) 2003 MaxMind LLC. All Rights Reserved.
+ *
+ * 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 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
+ * 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
+ */
+
+package com.maxmind.geoip;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.net.InetAddress;
+import java.net.Inet6Address;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+/**
+ * Provides a lookup service for information based on an IP address. The location of
+ * a database file is supplied when creating a lookup service instance. The edition of
+ * the database determines what information is available about an IP address. See the
+ * DatabaseInfo class for further details.<p>
+ *
+ * The following code snippet demonstrates looking up the country that an IP
+ * address is from:
+ * <pre>
+ * // First, create a LookupService instance with the location of the database.
+ * LookupService lookupService = new LookupService("c:\\geoip.dat");
+ * // Assume we have a String ipAddress (in dot-decimal form).
+ * Country country = lookupService.getCountry(ipAddress);
+ * System.out.println("The country is: " + country.getName());
+ * System.out.println("The country code is: " + country.getCode());
+ * </pre>
+ *
+ * In general, a single LookupService instance should be created and then reused
+ * repeatedly.<p>
+ *
+ * <i>Tip:</i> Those deploying the GeoIP API as part of a web application may find it
+ * difficult to pass in a File to create the lookup service, as the location of the
+ * database may vary per deployment or may even be part of the web-application. In this
+ * case, the database should be added to the classpath of the web-app. For example, by
+ * putting it into the WEB-INF/classes directory of the web application. The following code
+ * snippet demonstrates how to create a LookupService using a database that can be found
+ * on the classpath:
+ *
+ * <pre>
+ * String fileName = getClass().getResource("/GeoIP.dat").toExternalForm().substring(6);
+ * LookupService lookupService = new LookupService(fileName);</pre>
+ *
+ * @author Matt Tucker (matt@jivesoftware.com)
+ */
+public class LookupService {
+
+ /**
+ * Database file.
+ */
+ private RandomAccessFile file = null;
+ private File databaseFile = null;
+
+ /**
+ * Information about the database.
+ */
+ private DatabaseInfo databaseInfo = null;
+
+ /**
+ * The database type. Default is the country edition.
+ */
+ byte databaseType = DatabaseInfo.COUNTRY_EDITION;
+
+ int databaseSegments[];
+ int recordLength;
+
+ String licenseKey;
+ int dnsService = 0;
+ int dboptions;
+ byte dbbuffer[];
+ byte index_cache[];
+ long mtime;
+ int last_netmask;
+ private final static int US_OFFSET = 1;
+ private final static int CANADA_OFFSET = 677;
+ private final static int WORLD_OFFSET = 1353;
+ private final static int FIPS_RANGE = 360;
+ private final static int COUNTRY_BEGIN = 16776960;
+ private final static int STATE_BEGIN_REV0 = 16700000;
+ private final static int STATE_BEGIN_REV1 = 16000000;
+ private final static int STRUCTURE_INFO_MAX_SIZE = 20;
+ private final static int DATABASE_INFO_MAX_SIZE = 100;
+ public final static int GEOIP_STANDARD = 0;
+ public final static int GEOIP_MEMORY_CACHE = 1;
+ public final static int GEOIP_CHECK_CACHE = 2;
+ public final static int GEOIP_INDEX_CACHE = 4;
+ public final static int GEOIP_UNKNOWN_SPEED = 0;
+ public final static int GEOIP_DIALUP_SPEED = 1;
+ public final static int GEOIP_CABLEDSL_SPEED = 2;
+ public final static int GEOIP_CORPORATE_SPEED = 3;
+
+
+ private final static int SEGMENT_RECORD_LENGTH = 3;
+ private final static int STANDARD_RECORD_LENGTH = 3;
+ private final static int ORG_RECORD_LENGTH = 4;
+ private final static int MAX_RECORD_LENGTH = 4;
+
+ private final static int MAX_ORG_RECORD_LENGTH = 300;
+ private final static int FULL_RECORD_LENGTH = 60;
+
+ private final Country UNKNOWN_COUNTRY = new Country("--", "N/A");
+
+ private static final HashMap hashmapcountryCodetoindex = new HashMap(512);
+ private static final HashMap hashmapcountryNametoindex = new HashMap(512);
+ private static final String[] countryCode = {
+ "--","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"};
+
+ private static final String[] countryName = {
+ "N/A","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"};
+
+
+ /* init the hashmap once at startup time */
+ static {
+ int i;
+ if(countryCode.length!=countryName.length)
+ throw new AssertionError("countryCode.length!=countryName.length");
+
+ // distributed service only
+ for (i = 0; i < countryCode.length ;i++){
+ hashmapcountryCodetoindex.put(countryCode[i],Integer.valueOf(i));
+ hashmapcountryNametoindex.put(countryName[i],Integer.valueOf(i));
+ }
+ };
+
+
+ /**
+ * Create a new distributed lookup service using the license key
+ *
+ * @param databaseFile String representation of the database file.
+ * @param licenseKey license key provided by Maxmind to access distributed service
+ */
+ public LookupService(String databaseFile,String licenseKey) throws IOException {
+ this(new File(databaseFile));
+ this.licenseKey = licenseKey;
+ dnsService = 1;
+ }
+ /**
+ * Create a new distributed lookup service using the license key
+ *
+ * @param databaseFile the database file.
+ * @param licenseKey license key provided by Maxmind to access distributed service
+ */
+ public LookupService(File databaseFile,String licenseKey) throws IOException {
+ this(databaseFile);
+ this.licenseKey = licenseKey;
+ dnsService = 1;
+ }
+ /**
+ * Create a new distributed lookup service using the license key
+ *
+ * @param options Resevered for future use
+ * @param licenseKey license key provided by Maxmind to access distributed service
+ */
+ public LookupService(int options,String licenseKey) throws IOException {
+ this.licenseKey = licenseKey;
+ dnsService = 1;
+ init();
+ }
+ /**
+ * Create a new lookup service using the specified database file.
+ *
+ * @param databaseFile String representation of the database file.
+ * @throws java.io.IOException if an error occured creating the lookup service
+ * from the database file.
+ */
+ public LookupService(String databaseFile) throws IOException {
+ this(new File(databaseFile));
+ }
+
+ /**
+ * Create a new lookup service using the specified database file.
+ *
+ * @param databaseFile the database file.
+ * @throws java.io.IOException if an error occured creating the lookup service
+ * from the database file.
+ */
+ public LookupService(File databaseFile) throws IOException {
+ this.databaseFile = databaseFile;
+ this.file = new RandomAccessFile(databaseFile, "r");
+ init();
+ }
+
+ /**
+ * Create a new lookup service using the specified database file.
+ *
+ * @param databaseFile String representation of the database file.
+ * @param options database flags to use when opening the database
+ * GEOIP_STANDARD read database from disk
+ * GEOIP_MEMORY_CACHE cache the database in RAM and read it from RAM
+ * @throws java.io.IOException if an error occured creating the lookup service
+ * from the database file.
+ */
+ public LookupService(String databaseFile, int options) throws IOException{
+ this(new File(databaseFile),options);
+ }
+
+ /**
+ * Create a new lookup service using the specified database file.
+ *
+ * @param databaseFile the database file.
+ * @param options database flags to use when opening the database
+ * GEOIP_STANDARD read database from disk
+ * GEOIP_MEMORY_CACHE cache the database in RAM and read it from RAM
+ * @throws java.io.IOException if an error occured creating the lookup service
+ * from the database file.
+ */
+ public LookupService(File databaseFile, int options) throws IOException{
+ this.databaseFile = databaseFile;
+ this.file = new RandomAccessFile(databaseFile, "r");
+ dboptions = options;
+ init();
+ }
+ /**
+ * Reads meta-data from the database file.
+ *
+ * @throws java.io.IOException if an error occurs reading from the database file.
+ */
+ private void init() throws IOException {
+ int i, j;
+ byte [] delim = new byte[3];
+ byte [] buf = new byte[SEGMENT_RECORD_LENGTH];
+
+ if (file == null) {
+ return;
+ }
+ if ((dboptions & GEOIP_CHECK_CACHE) != 0) {
+ mtime = databaseFile.lastModified();
+ }
+ file.seek(file.length() - 3);
+ for (i = 0; i < STRUCTURE_INFO_MAX_SIZE; i++) {
+ file.readFully(delim);
+ if (delim[0] == -1 && delim[1] == -1 && delim[2] == -1) {
+ databaseType = file.readByte();
+ if (databaseType >= 106) {
+ // Backward compatibility with databases from April 2003 and earlier
+ databaseType -= 105;
+ }
+ // Determine the database type.
+ if (databaseType == DatabaseInfo.REGION_EDITION_REV0) {
+ databaseSegments = new int[1];
+ databaseSegments[0] = STATE_BEGIN_REV0;
+ recordLength = STANDARD_RECORD_LENGTH;
+ }else if (databaseType == DatabaseInfo.REGION_EDITION_REV1){
+ databaseSegments = new int[1];
+ databaseSegments[0] = STATE_BEGIN_REV1;
+ recordLength = STANDARD_RECORD_LENGTH;
+ }
+ else if (databaseType == DatabaseInfo.CITY_EDITION_REV0 ||
+ databaseType == DatabaseInfo.CITY_EDITION_REV1 ||
+ databaseType == DatabaseInfo.ORG_EDITION ||
+ databaseType == DatabaseInfo.ISP_EDITION ||
+ databaseType == DatabaseInfo.ASNUM_EDITION) {
+ databaseSegments = new int[1];
+ databaseSegments[0] = 0;
+ if (databaseType == DatabaseInfo.CITY_EDITION_REV0 ||
+ databaseType == DatabaseInfo.CITY_EDITION_REV1 ||
+ databaseType == DatabaseInfo.ASNUM_EDITION) {
+ recordLength = STANDARD_RECORD_LENGTH;
+ }
+ else {
+ recordLength = ORG_RECORD_LENGTH;
+ }
+ file.readFully(buf);
+ for (j = 0; j < SEGMENT_RECORD_LENGTH; j++) {
+ databaseSegments[0] += (unsignedByteToInt(buf[j]) << (j * 8));
+ }
+ }
+ break;
+ }
+ else {
+ file.seek(file.getFilePointer() - 4);
+ }
+ }
+ if ((databaseType == DatabaseInfo.COUNTRY_EDITION) ||
+ (databaseType == DatabaseInfo.COUNTRY_EDITION_V6) ||
+ (databaseType == DatabaseInfo.PROXY_EDITION) ||
+ (databaseType == DatabaseInfo.NETSPEED_EDITION)) {
+ databaseSegments = new int[1];
+ databaseSegments[0] = COUNTRY_BEGIN;
+ recordLength = STANDARD_RECORD_LENGTH;
+ }
+ if ((dboptions & GEOIP_MEMORY_CACHE) == 1) {
+ int l = (int) file.length();
+ dbbuffer = new byte[l];
+ file.seek(0);
+ file.readFully(dbbuffer,0,l);
+ databaseInfo = this.getDatabaseInfo();
+ file.close();
+ }
+ if ((dboptions & GEOIP_INDEX_CACHE) != 0) {
+ int l = databaseSegments[0] * recordLength * 2;
+ index_cache = new byte[l];
+ if (index_cache != null){
+ file.seek(0);
+ file.readFully(index_cache,0,l);
+ }
+ } else {
+ index_cache = null;
+ }
+ }
+
+ /**
+ * Closes the lookup service.
+ */
+ public void close() {
+ try {
+ if (file != null){
+ file.close();
+ }
+ file = null;
+ }
+ catch (Exception e) { }
+ }
+
+ /**
+ * Returns the country the IP address is in.
+ *
+ * @param ipAddress String version of an IPv6 address, i.e. "::127.0.0.1"
+ * @return the country the IP address is from.
+ */
+ public Country getCountryV6(String ipAddress) {
+ InetAddress addr;
+ try {
+ addr = Inet6Address.getByName(ipAddress);
+ }
+ catch (UnknownHostException e) {
+ return UNKNOWN_COUNTRY;
+ }
+ return getCountryV6(addr);
+ }
+
+ /**
+ * Returns the country the IP address is in.
+ *
+ * @param ipAddress String version of an IP address, i.e. "127.0.0.1"
+ * @return the country the IP address is from.
+ */
+ public Country getCountry(String ipAddress) {
+ InetAddress addr;
+ try {
+ addr = InetAddress.getByName(ipAddress);
+ }
+ catch (UnknownHostException e) {
+ return UNKNOWN_COUNTRY;
+ }
+ return getCountry(bytesToLong(addr.getAddress()));
+ }
+
+ /**
+ * Returns the country the IP address is in.
+ *
+ * @param ipAddress the IP address.
+ * @return the country the IP address is from.
+ */
+ public synchronized Country getCountry(InetAddress ipAddress) {
+ return getCountry(bytesToLong(ipAddress.getAddress()));
+ }
+
+ /**
+ * Returns the country the IP address is in.
+ *
+ * @param addr the IP address as Inet6Address.
+ * @return the country the IP address is from.
+ */
+ public Country getCountryV6(InetAddress addr) {
+ if (file == null && (dboptions & GEOIP_MEMORY_CACHE) == 0) {
+ throw new IllegalStateException("Database has been closed.");
+ }
+ int ret = seekCountryV6(addr) - COUNTRY_BEGIN;
+ if (ret == 0) {
+ return UNKNOWN_COUNTRY;
+ }
+ else {
+ return new Country(countryCode[ret], countryName[ret]);
+ }
+ }
+
+ /**
+ * Returns the country the IP address is in.
+ *
+ * @param ipAddress the IP address in long format.
+ * @return the country the IP address is from.
+ */
+ public Country getCountry(long ipAddress) {
+ if (file == null && (dboptions & GEOIP_MEMORY_CACHE) == 0) {
+ throw new IllegalStateException("Database has been closed.");
+ }
+ int ret = seekCountry(ipAddress) - COUNTRY_BEGIN;
+ if (ret == 0) {
+ return UNKNOWN_COUNTRY;
+ }
+ else {
+ return new Country(countryCode[ret], countryName[ret]);
+ }
+ }
+
+ public int getID(String ipAddress) {
+ InetAddress addr;
+ try {
+ addr = InetAddress.getByName(ipAddress);
+ }
+ catch (UnknownHostException e) {
+ return 0;
+ }
+ return getID(bytesToLong(addr.getAddress()));
+ }
+
+ public int getID(InetAddress ipAddress) {
+ return getID(bytesToLong(ipAddress.getAddress()));
+ }
+
+ public synchronized int getID(long ipAddress) {
+ if (file == null && (dboptions & GEOIP_MEMORY_CACHE) == 0) {
+ throw new IllegalStateException("Database has been closed.");
+ }
+ int ret = seekCountry(ipAddress) - databaseSegments[0];
+ return ret;
+ }
+
+ public int last_netmask() {
+ return this.last_netmask;
+ }
+
+ public void netmask(int nm){
+ this.last_netmask = nm;
+ }
+
+ /**
+ * Returns information about the database.
+ *
+ * @return database info.
+ */
+ public synchronized DatabaseInfo getDatabaseInfo() {
+ if (databaseInfo != null) {
+ return databaseInfo;
+ }
+ try {
+ _check_mtime();
+ boolean hasStructureInfo = false;
+ byte [] delim = new byte[3];
+ // Advance to part of file where database info is stored.
+ file.seek(file.length() - 3);
+ for (int i=0; i<STRUCTURE_INFO_MAX_SIZE; i++) {
+ int read = file.read( delim );
+ if( read==3 && (delim[0]&0xFF)==255 && (delim[1]&0xFF) == 255 && (delim[2]&0xFF)==255 ){
+ hasStructureInfo = true;
+ break;
+ }
+ file.seek(file.getFilePointer() - 4);
+
+ }
+ if (hasStructureInfo) {
+ file.seek(file.getFilePointer() - 6);
+ }
+ else {
+ // No structure info, must be pre Sep 2002 database, go back to end.
+ file.seek(file.length() - 3);
+ }
+ // Find the database info string.
+ for (int i=0; i<DATABASE_INFO_MAX_SIZE; i++) {
+ file.readFully(delim);
+ if (delim[0]==0 && delim[1]==0 && delim[2]==0) {
+ byte[] dbInfo = new byte[i];
+ file.readFully(dbInfo);
+ // Create the database info object using the string.
+ this.databaseInfo = new DatabaseInfo(new String(dbInfo));
+ return databaseInfo;
+ }
+ file.seek(file.getFilePointer() -4);
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ return new DatabaseInfo("");
+ }
+
+ synchronized void _check_mtime(){
+ try {
+ if ((dboptions & GEOIP_CHECK_CACHE) != 0){
+ long t = databaseFile.lastModified();
+ if (t != mtime){
+ /* GeoIP Database file updated */
+ /* refresh filehandle */
+ file.close();
+ file = new RandomAccessFile(databaseFile,"r");
+ databaseInfo = null;
+ init();
+ }
+ }
+ } catch (IOException e) {
+ System.out.println("file not found");
+ }
+ }
+
+ // for GeoIP City only
+ public Location getLocation(InetAddress addr) {
+ return getLocation(bytesToLong(addr.getAddress()));
+ }
+
+ // for GeoIP City only
+ public Location getLocation(String str) {
+ if (dnsService == 0) {
+ InetAddress addr;
+ try {
+ addr = InetAddress.getByName(str);
+ }
+ catch (UnknownHostException e) {
+ return null;
+ }
+
+ return getLocation(addr);
+ } else {
+ String str2 = getDnsAttributes(str);
+ return getLocationwithdnsservice(str2);
+ // TODO if DNS is not available, go to local file as backup
+ }
+ }
+
+ String getDnsAttributes(String ip) {
+ try {
+ Hashtable env = new Hashtable();
+ env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
+ // TODO don't specify ws1, instead use ns servers for s.maxmind.com
+ env.put("java.naming.provider.url","dns://ws1.maxmind.com/");
+
+ DirContext ictx = new InitialDirContext(env);
+ Attributes attrs = ictx.getAttributes(licenseKey + "." + ip + ".s.maxmind.com", new String[] {"txt"});
+ //System.out.println(attrs.get("txt").get());
+ String str = attrs.get("txt").get().toString();
+ return str;
+ }
+ catch(NamingException e) {
+ // TODO fix this to handle exceptions
+ System.out.println("DNS error");
+ return null;
+ }
+
+ }
+
+ public Location getLocationwithdnsservice(String str) {
+ Location record = new Location();
+ String key;
+ String value;
+ StringTokenizer st = new StringTokenizer(str,";=\"");
+ while (st.hasMoreTokens()) {
+ key = st.nextToken();
+ if (st.hasMoreTokens()) {
+ value = st.nextToken();
+ } else {
+ value = "";}
+ if (key.equals("co")) {
+ Integer i = (Integer)hashmapcountryCodetoindex.get(value);
+ record.countryCode = value;
+ record.countryName = countryName[i.intValue()];
+ }
+ if (key.equals("ci")) {
+ record.city = value;
+ }
+ if (key.equals("re")) {
+ record.region = value;
+ }
+ if (key.equals("zi")) {
+ record.postalCode = value;
+ }
+ // TODO, ISP and Organization
+ //if (key.equals("or")) {
+ //record.org = value;
+ //}
+ //if (key.equals("is")) {
+ //record.isp = value;
+ //}
+ if (key.equals("la")) {
+ try{
+ record.latitude = Float.parseFloat(value);
+ } catch(NumberFormatException e) {
+ record.latitude = 0;
+ }
+ }
+ if (key.equals("lo")) {
+ try{
+ record.longitude = Float.parseFloat(value);
+ } catch(NumberFormatException e) {
+ record.latitude = 0;
+ }
+ }
+ // dm depreciated use me ( metro_code ) instead
+ if (key.equals("dm") || key.equals("me")) {
+ try{
+ record.metro_code = record.dma_code = Integer.parseInt(value);
+ } catch(NumberFormatException e) {
+ record.metro_code = record.dma_code = 0;
+ }
+ }
+ if (key.equals("ac")) {
+ try{
+ record.area_code = Integer.parseInt(value);
+ } catch(NumberFormatException e) {
+ record.area_code = 0;
+ }
+ }
+ }
+ return record;
+ }
+
+ public synchronized Region getRegion(String str) {
+ InetAddress addr;
+ try {
+ addr = InetAddress.getByName(str);
+ }
+ catch (UnknownHostException e) {
+ return null;
+ }
+
+ return getRegion(bytesToLong(addr.getAddress()));
+ }
+
+ public synchronized Region getRegion(long ipnum) {
+ Region record = new Region();
+ int seek_region = 0;
+ if (databaseType == DatabaseInfo.REGION_EDITION_REV0) {
+ seek_region = seekCountry(ipnum) - STATE_BEGIN_REV0;
+ char ch[] = new char[2];
+ if (seek_region >= 1000) {
+ record.countryCode = "US";
+ record.countryName = "United States";
+ ch[0] = (char)(((seek_region - 1000)/26) + 65);
+ ch[1] = (char)(((seek_region - 1000)%26) + 65);
+ record.region = new String(ch);
+ } else {
+ record.countryCode = countryCode[seek_region];
+ record.countryName = countryName[seek_region];
+ record.region = "";
+ }
+ } else if (databaseType == DatabaseInfo.REGION_EDITION_REV1) {
+ seek_region = seekCountry(ipnum) - STATE_BEGIN_REV1;
+ char ch[] = new char[2];
+ if (seek_region < US_OFFSET) {
+ record.countryCode = "";
+ record.countryName = "";
+ record.region = "";
+ } else if (seek_region < CANADA_OFFSET) {
+ record.countryCode = "US";
+ record.countryName = "United States";
+ ch[0] = (char)(((seek_region - US_OFFSET)/26) + 65);
+ ch[1] = (char)(((seek_region - US_OFFSET)%26) + 65);
+ record.region = new String(ch);
+ } else if (seek_region < WORLD_OFFSET) {
+ record.countryCode = "CA";
+ record.countryName = "Canada";
+ ch[0] = (char)(((seek_region - CANADA_OFFSET)/26) + 65);
+ ch[1] = (char)(((seek_region - CANADA_OFFSET)%26) + 65);
+ record.region = new String(ch);
+ } else {
+ record.countryCode = countryCode[(seek_region - WORLD_OFFSET) / FIPS_RANGE];
+ record.countryName = countryName[(seek_region - WORLD_OFFSET) / FIPS_RANGE];
+ record.region = "";
+ }
+ }
+ return record;
+ }
+
+ public synchronized Location getLocation(long ipnum) {
+ int record_pointer;
+ byte record_buf[] = new byte[FULL_RECORD_LENGTH];
+ int record_buf_offset = 0;
+ Location record = new Location();
+ int str_length = 0;
+ int j, seek_country;
+ double latitude = 0, longitude = 0;
+
+ try {
+ seek_country = seekCountry(ipnum);
+ if (seek_country == databaseSegments[0]) {
+ return null;
+ }
+ record_pointer = seek_country + (2 * recordLength - 1) * databaseSegments[0];
+
+ if ((dboptions & GEOIP_MEMORY_CACHE) == 1) {
+ //read from memory
+ System.arraycopy(dbbuffer, record_pointer, record_buf, 0, Math.min(dbbuffer.length - record_pointer, FULL_RECORD_LENGTH));
+} else {
+ //read from disk
+ file.seek(record_pointer);
+ file.readFully(record_buf);
+ }
+
+ // get country
+ record.countryCode = countryCode[unsignedByteToInt(record_buf[0])];
+ record.countryName = countryName[unsignedByteToInt(record_buf[0])];
+ record_buf_offset++;
+
+ // get region
+ while (record_buf[record_buf_offset + str_length] != '\0')
+ str_length++;
+ if (str_length > 0) {
+ record.region = new String(record_buf, record_buf_offset, str_length);
+ }
+ record_buf_offset += str_length + 1;
+ str_length = 0;
+
+ // get city
+ while (record_buf[record_buf_offset + str_length] != '\0')
+ str_length++;
+ if (str_length > 0) {
+ record.city = new String(record_buf, record_buf_offset, str_length, "ISO-8859-1");
+ }
+ record_buf_offset += str_length + 1;
+ str_length = 0;
+
+ // get postal code
+ while (record_buf[record_buf_offset + str_length] != '\0')
+ str_length++;
+ if (str_length > 0) {
+ record.postalCode = new String(record_buf, record_buf_offset, str_length);
+ }
+ record_buf_offset += str_length + 1;
+
+ // get latitude
+ for (j = 0; j < 3; j++)
+ latitude += (unsignedByteToInt(record_buf[record_buf_offset + j]) << (j * 8));
+ record.latitude = (float) latitude/10000 - 180;
+ record_buf_offset += 3;
+
+ // get longitude
+ for (j = 0; j < 3; j++)
+ longitude += (unsignedByteToInt(record_buf[record_buf_offset + j]) << (j * 8));
+ record.longitude = (float) longitude/10000 - 180;
+
+ record.dma_code = record.metro_code = 0;
+ record.area_code = 0;
+ if (databaseType == DatabaseInfo.CITY_EDITION_REV1) {
+ // get DMA code
+ int metroarea_combo = 0;
+ if (record.countryCode == "US") {
+ record_buf_offset += 3;
+ for (j = 0; j < 3; j++)
+ metroarea_combo += (unsignedByteToInt(record_buf[record_buf_offset + j]) << (j * 8));
+ record.metro_code = record.dma_code = metroarea_combo/1000;
+ record.area_code = metroarea_combo % 1000;
+ }
+ }
+ }
+ catch (IOException e) {
+ System.err.println("IO Exception while seting up segments");
+ }
+ return record;
+ }
+
+ public String getOrg(InetAddress addr) {
+ return getOrg(bytesToLong(addr.getAddress()));
+ }
+
+ public String getOrg(String str) {
+ InetAddress addr;
+ try {
+ addr = InetAddress.getByName(str);
+ }
+ catch (UnknownHostException e) {
+ return null;
+ }
+ return getOrg(addr);
+ }
+
+ // GeoIP Organization and ISP Edition methods
+ public synchronized String getOrg(long ipnum) {
+ int seek_org;
+ int record_pointer;
+ int str_length = 0;
+ byte [] buf = new byte[MAX_ORG_RECORD_LENGTH];
+ String org_buf;
+
+ try {
+ seek_org = seekCountry(ipnum);
+ if (seek_org == databaseSegments[0]) {
+ return null;
+ }
+
+ record_pointer = seek_org + (2 * recordLength - 1) * databaseSegments[0];
+ if ((dboptions & GEOIP_MEMORY_CACHE) == 1) {
+ //read from memory
+ System.arraycopy(dbbuffer, record_pointer, buf, 0, Math.min(dbbuffer.length - record_pointer, MAX_ORG_RECORD_LENGTH));
+ } else {
+ //read from disk
+ file.seek(record_pointer);
+ file.readFully(buf);
+ }
+ while (buf[str_length] != '\0') {
+ str_length++;
+ }
+ org_buf = new String(buf, 0, str_length, "ISO-8859-1");
+ return org_buf;
+ }
+ catch (IOException e) {
+ System.out.println("IO Exception");
+ return null;
+ }
+ }
+
+ /**
+ * Finds the country index value given an IPv6 address.
+ *
+ * @param addr the ip address to find in long format.
+ * @return the country index.
+ */
+ private synchronized int seekCountryV6(InetAddress addr) {
+ byte [] v6vec = addr.getAddress();
+ byte [] buf = new byte[2 * MAX_RECORD_LENGTH];
+ int [] x = new int[2];
+ int offset = 0;
+ _check_mtime();
+ for (int depth = 127; depth >= 0; depth--) {
+ if ((dboptions & GEOIP_MEMORY_CACHE) == 1) {
+ //read from memory
+ for (int i = 0;i < 2 * MAX_RECORD_LENGTH;i++) {
+ buf[i] = dbbuffer[(2 * recordLength * offset)+i];
+ }
+ } else if ((dboptions & GEOIP_INDEX_CACHE) != 0) {
+ //read from index cache
+ for (int i = 0;i < 2 * MAX_RECORD_LENGTH;i++) {
+ buf[i] = index_cache[(2 * recordLength * offset)+i];
+ }
+ } else {
+ //read from disk
+ try {
+ file.seek(2 * recordLength * offset);
+ file.readFully(buf);
+ }
+ catch (IOException e) {
+ System.out.println("IO Exception");
+ }
+ }
+ for (int i = 0; i<2; i++) {
+ x[i] = 0;
+ for (int j = 0; j<recordLength; j++) {
+ int y = buf[i*recordLength+j];
+ if (y < 0) {
+ y+= 256;
+ }
+ x[i] += (y << (j * 8));
+ }
+ }
+
+ int bnum = 127 - depth;
+ int idx = bnum >> 3;
+ int b_mask = 1 << ( bnum & 7 ^ 7 );
+ if ((v6vec[idx] & b_mask) > 0) {
+ if (x[1] >= databaseSegments[0]) {
+ last_netmask = 128 - depth;
+ return x[1];
+ }
+ offset = x[1];
+ }
+ else {
+ if (x[0] >= databaseSegments[0]) {
+ last_netmask = 128 - depth;
+ return x[0];
+ }
+ offset = x[0];
+ }
+ }
+
+ // shouldn't reach here
+ System.err.println("Error seeking country while seeking " + addr.getHostAddress() );
+ return 0;
+ }
+ /**
+ * Finds the country index value given an IP address.
+ *
+ * @param ipAddress the ip address to find in long format.
+ * @return the country index.
+ */
+ private synchronized int seekCountry(long ipAddress) {
+ byte [] buf = new byte[2 * MAX_RECORD_LENGTH];
+ int [] x = new int[2];
+ int offset = 0;
+ _check_mtime();
+ for (int depth = 31; depth >= 0; depth--) {
+ if ((dboptions & GEOIP_MEMORY_CACHE) == 1) {
+ //read from memory
+ for (int i = 0;i < 2 * MAX_RECORD_LENGTH;i++) {
+ buf[i] = dbbuffer[(2 * recordLength * offset)+i];
+ }
+ } else if ((dboptions & GEOIP_INDEX_CACHE) != 0) {
+ //read from index cache
+ for (int i = 0;i < 2 * MAX_RECORD_LENGTH;i++) {
+ buf[i] = index_cache[(2 * recordLength * offset)+i];
+ }
+ } else {
+ //read from disk
+ try {
+ file.seek(2 * recordLength * offset);
+ file.readFully(buf);
+ }
+ catch (IOException e) {
+ System.out.println("IO Exception");
+ }
+ }
+ for (int i = 0; i<2; i++) {
+ x[i] = 0;
+ for (int j = 0; j<recordLength; j++) {
+ int y = buf[i*recordLength+j];
+ if (y < 0) {
+ y+= 256;
+ }
+ x[i] += (y << (j * 8));
+ }
+ }
+
+ if ((ipAddress & (1 << depth)) > 0) {
+ if (x[1] >= databaseSegments[0]) {
+ last_netmask = 32 - depth;
+ return x[1];
+ }
+ offset = x[1];
+ }
+ else {
+ if (x[0] >= databaseSegments[0]) {
+ last_netmask = 32 - depth;
+ return x[0];
+ }
+ offset = x[0];
+ }
+ }
+
+ // shouldn't reach here
+ System.err.println("Error seeking country while seeking " + ipAddress);
+ return 0;
+ }
+
+ /**
+ * Returns the long version of an IP address given an InetAddress object.
+ *
+ * @param address the InetAddress.
+ * @return the long form of the IP address.
+ */
+ private static long bytesToLong(byte [] address) {
+ long ipnum = 0;
+ for (int i = 0; i < 4; ++i) {
+ long y = address[i];
+ if (y < 0) {
+ y+= 256;
+ }
+ ipnum += y << ((3-i)*8);
+ }
+ return ipnum;
+ }
+
+ private static int unsignedByteToInt(byte b) {
+ return (int) b & 0xFF;
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/Region.java b/EssentialsGeoIP/src/com/maxmind/geoip/Region.java
new file mode 100644
index 000000000..cba0594b6
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/Region.java
@@ -0,0 +1,8 @@
+package com.maxmind.geoip;
+
+public class Region{
+ public String countryCode;
+ public String countryName;
+ public String region;
+}
+
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/regionName.java b/EssentialsGeoIP/src/com/maxmind/geoip/regionName.java
new file mode 100644
index 000000000..da261ca15
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/regionName.java
@@ -0,0 +1,13400 @@
+package com.maxmind.geoip;
+// generated automatically from admin/generate_regionName.pl
+public class regionName {
+static public String regionNameByCode(String country_code,String region_code) {
+ String name = null;
+ int region_code2 = -1;
+ if (region_code == null) { return null; }
+ if (region_code.equals("")) { return null; }
+
+ if ( ((region_code.charAt(0) >= 48 ) && ( region_code.charAt(0) < ( 48 + 10 )))
+ && ((region_code.charAt(1) >= 48 ) && ( region_code.charAt(1) < ( 48 + 10 )))
+ ){
+ // only numbers, that shorten the large switch statements
+ region_code2 = (region_code.charAt(0)- 48) * 10 + region_code.charAt(1) - 48;
+ }
+ else if ( ( ((region_code.charAt(0) >= 65) && (region_code.charAt(0) < (65 + 26)))
+ || ((region_code.charAt(0) >= 48) && (region_code.charAt(0) < (48 + 10))))
+ && ( ((region_code.charAt(1) >= 65) && (region_code.charAt(1) < (65 + 26)))
+ || ((region_code.charAt(1) >= 48) && (region_code.charAt(1) < (48 + 10))))
+ ) {
+
+ region_code2 = (region_code.charAt(0) - 48) * (65 + 26 - 48) + region_code.charAt(1) - 48 + 100;
+ }
+
+ if (region_code2 == -1) {return null;}
+ if (country_code.equals("CA") == true) {
+ switch (region_code2) {
+ case 849:
+ name = "Alberta";
+ break;
+ case 893:
+ name = "British Columbia";
+ break;
+ case 1365:
+ name = "Manitoba";
+ break;
+ case 1408:
+ name = "New Brunswick";
+ break;
+ case 1418:
+ name = "Newfoundland";
+ break;
+ case 1425:
+ name = "Nova Scotia";
+ break;
+ case 1427:
+ name = "Nunavut";
+ break;
+ case 1463:
+ name = "Ontario";
+ break;
+ case 1497:
+ name = "Prince Edward Island";
+ break;
+ case 1538:
+ name = "Quebec";
+ break;
+ case 1632:
+ name = "Saskatchewan";
+ break;
+ case 1426:
+ name = "Northwest Territories";
+ break;
+ case 1899:
+ name = "Yukon Territory";
+ break;
+ }
+ }
+ if (country_code.equals("US") == true) {
+ switch (region_code2) {
+ case 848:
+ name = "Armed Forces Americas";
+ break;
+ case 852:
+ name = "Armed Forces Europe";
+ break;
+ case 858:
+ name = "Alaska";
+ break;
+ case 859:
+ name = "Alabama";
+ break;
+ case 863:
+ name = "Armed Forces Pacific";
+ break;
+ case 865:
+ name = "Arkansas";
+ break;
+ case 866:
+ name = "American Samoa";
+ break;
+ case 873:
+ name = "Arizona";
+ break;
+ case 934:
+ name = "California";
+ break;
+ case 948:
+ name = "Colorado";
+ break;
+ case 953:
+ name = "Connecticut";
+ break;
+ case 979:
+ name = "District of Columbia";
+ break;
+ case 981:
+ name = "Delaware";
+ break;
+ case 1074:
+ name = "Florida";
+ break;
+ case 1075:
+ name = "Federated States of Micronesia";
+ break;
+ case 1106:
+ name = "Georgia";
+ break;
+ case 1126:
+ name = "Guam";
+ break;
+ case 1157:
+ name = "Hawaii";
+ break;
+ case 1192:
+ name = "Iowa";
+ break;
+ case 1195:
+ name = "Idaho";
+ break;
+ case 1203:
+ name = "Illinois";
+ break;
+ case 1205:
+ name = "Indiana";
+ break;
+ case 1296:
+ name = "Kansas";
+ break;
+ case 1302:
+ name = "Kentucky";
+ break;
+ case 1321:
+ name = "Louisiana";
+ break;
+ case 1364:
+ name = "Massachusetts";
+ break;
+ case 1367:
+ name = "Maryland";
+ break;
+ case 1368:
+ name = "Maine";
+ break;
+ case 1371:
+ name = "Marshall Islands";
+ break;
+ case 1372:
+ name = "Michigan";
+ break;
+ case 1377:
+ name = "Minnesota";
+ break;
+ case 1378:
+ name = "Missouri";
+ break;
+ case 1379:
+ name = "Northern Mariana Islands";
+ break;
+ case 1382:
+ name = "Mississippi";
+ break;
+ case 1383:
+ name = "Montana";
+ break;
+ case 1409:
+ name = "North Carolina";
+ break;
+ case 1410:
+ name = "North Dakota";
+ break;
+ case 1411:
+ name = "Nebraska";
+ break;
+ case 1414:
+ name = "New Hampshire";
+ break;
+ case 1416:
+ name = "New Jersey";
+ break;
+ case 1419:
+ name = "New Mexico";
+ break;
+ case 1428:
+ name = "Nevada";
+ break;
+ case 1431:
+ name = "New York";
+ break;
+ case 1457:
+ name = "Ohio";
+ break;
+ case 1460:
+ name = "Oklahoma";
+ break;
+ case 1467:
+ name = "Oregon";
+ break;
+ case 1493:
+ name = "Pennsylvania";
+ break;
+ case 1510:
+ name = "Puerto Rico";
+ break;
+ case 1515:
+ name = "Palau";
+ break;
+ case 1587:
+ name = "Rhode Island";
+ break;
+ case 1624:
+ name = "South Carolina";
+ break;
+ case 1625:
+ name = "South Dakota";
+ break;
+ case 1678:
+ name = "Tennessee";
+ break;
+ case 1688:
+ name = "Texas";
+ break;
+ case 1727:
+ name = "Utah";
+ break;
+ case 1751:
+ name = "Virginia";
+ break;
+ case 1759:
+ name = "Virgin Islands";
+ break;
+ case 1770:
+ name = "Vermont";
+ break;
+ case 1794:
+ name = "Washington";
+ break;
+ case 1815:
+ name = "West Virginia";
+ break;
+ case 1802:
+ name = "Wisconsin";
+ break;
+ case 1818:
+ name = "Wyoming";
+ break;
+ }
+ }
+ if (country_code.equals("AD") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Canillo";
+ break;
+ case 3:
+ name = "Encamp";
+ break;
+ case 4:
+ name = "La Massana";
+ break;
+ case 5:
+ name = "Ordino";
+ break;
+ case 6:
+ name = "Sant Julia de Loria";
+ break;
+ case 7:
+ name = "Andorra la Vella";
+ break;
+ case 8:
+ name = "Escaldes-Engordany";
+ break;
+ }
+ }
+ if (country_code.equals("AE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abu Dhabi";
+ break;
+ case 2:
+ name = "Ajman";
+ break;
+ case 3:
+ name = "Dubai";
+ break;
+ case 4:
+ name = "Fujairah";
+ break;
+ case 5:
+ name = "Ras Al Khaimah";
+ break;
+ case 6:
+ name = "Sharjah";
+ break;
+ case 7:
+ name = "Umm Al Quwain";
+ break;
+ }
+ }
+ if (country_code.equals("AF") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Badakhshan";
+ break;
+ case 2:
+ name = "Badghis";
+ break;
+ case 3:
+ name = "Baghlan";
+ break;
+ case 5:
+ name = "Bamian";
+ break;
+ case 6:
+ name = "Farah";
+ break;
+ case 7:
+ name = "Faryab";
+ break;
+ case 8:
+ name = "Ghazni";
+ break;
+ case 9:
+ name = "Ghowr";
+ break;
+ case 10:
+ name = "Helmand";
+ break;
+ case 11:
+ name = "Herat";
+ break;
+ case 13:
+ name = "Kabol";
+ break;
+ case 14:
+ name = "Kapisa";
+ break;
+ case 15:
+ name = "Konar";
+ break;
+ case 16:
+ name = "Laghman";
+ break;
+ case 17:
+ name = "Lowgar";
+ break;
+ case 18:
+ name = "Nangarhar";
+ break;
+ case 19:
+ name = "Nimruz";
+ break;
+ case 21:
+ name = "Paktia";
+ break;
+ case 22:
+ name = "Parvan";
+ break;
+ case 23:
+ name = "Kandahar";
+ break;
+ case 24:
+ name = "Kondoz";
+ break;
+ case 26:
+ name = "Takhar";
+ break;
+ case 27:
+ name = "Vardak";
+ break;
+ case 28:
+ name = "Zabol";
+ break;
+ case 29:
+ name = "Paktika";
+ break;
+ case 30:
+ name = "Balkh";
+ break;
+ case 31:
+ name = "Jowzjan";
+ break;
+ case 32:
+ name = "Samangan";
+ break;
+ case 33:
+ name = "Sar-e Pol";
+ break;
+ case 34:
+ name = "Konar";
+ break;
+ case 35:
+ name = "Laghman";
+ break;
+ case 36:
+ name = "Paktia";
+ break;
+ case 37:
+ name = "Khowst";
+ break;
+ case 38:
+ name = "Nurestan";
+ break;
+ case 39:
+ name = "Oruzgan";
+ break;
+ case 40:
+ name = "Parvan";
+ break;
+ case 41:
+ name = "Daykondi";
+ break;
+ case 42:
+ name = "Panjshir";
+ break;
+ }
+ }
+ if (country_code.equals("AG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Barbuda";
+ break;
+ case 3:
+ name = "Saint George";
+ break;
+ case 4:
+ name = "Saint John";
+ break;
+ case 5:
+ name = "Saint Mary";
+ break;
+ case 6:
+ name = "Saint Paul";
+ break;
+ case 7:
+ name = "Saint Peter";
+ break;
+ case 8:
+ name = "Saint Philip";
+ break;
+ }
+ }
+ if (country_code.equals("AL") == true) {
+ switch (region_code2) {
+ case 40:
+ name = "Berat";
+ break;
+ case 41:
+ name = "Diber";
+ break;
+ case 42:
+ name = "Durres";
+ break;
+ case 43:
+ name = "Elbasan";
+ break;
+ case 44:
+ name = "Fier";
+ break;
+ case 45:
+ name = "Gjirokaster";
+ break;
+ case 46:
+ name = "Korce";
+ break;
+ case 47:
+ name = "Kukes";
+ break;
+ case 48:
+ name = "Lezhe";
+ break;
+ case 49:
+ name = "Shkoder";
+ break;
+ case 50:
+ name = "Tirane";
+ break;
+ case 51:
+ name = "Vlore";
+ break;
+ }
+ }
+ if (country_code.equals("AM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aragatsotn";
+ break;
+ case 2:
+ name = "Ararat";
+ break;
+ case 3:
+ name = "Armavir";
+ break;
+ case 4:
+ name = "Geghark'unik'";
+ break;
+ case 5:
+ name = "Kotayk'";
+ break;
+ case 6:
+ name = "Lorri";
+ break;
+ case 7:
+ name = "Shirak";
+ break;
+ case 8:
+ name = "Syunik'";
+ break;
+ case 9:
+ name = "Tavush";
+ break;
+ case 10:
+ name = "Vayots' Dzor";
+ break;
+ case 11:
+ name = "Yerevan";
+ break;
+ }
+ }
+ if (country_code.equals("AO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Benguela";
+ break;
+ case 2:
+ name = "Bie";
+ break;
+ case 3:
+ name = "Cabinda";
+ break;
+ case 4:
+ name = "Cuando Cubango";
+ break;
+ case 5:
+ name = "Cuanza Norte";
+ break;
+ case 6:
+ name = "Cuanza Sul";
+ break;
+ case 7:
+ name = "Cunene";
+ break;
+ case 8:
+ name = "Huambo";
+ break;
+ case 9:
+ name = "Huila";
+ break;
+ case 10:
+ name = "Luanda";
+ break;
+ case 12:
+ name = "Malanje";
+ break;
+ case 13:
+ name = "Namibe";
+ break;
+ case 14:
+ name = "Moxico";
+ break;
+ case 15:
+ name = "Uige";
+ break;
+ case 16:
+ name = "Zaire";
+ break;
+ case 17:
+ name = "Lunda Norte";
+ break;
+ case 18:
+ name = "Lunda Sul";
+ break;
+ case 19:
+ name = "Bengo";
+ break;
+ case 20:
+ name = "Luanda";
+ break;
+ }
+ }
+ if (country_code.equals("AR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Buenos Aires";
+ break;
+ case 2:
+ name = "Catamarca";
+ break;
+ case 3:
+ name = "Chaco";
+ break;
+ case 4:
+ name = "Chubut";
+ break;
+ case 5:
+ name = "Cordoba";
+ break;
+ case 6:
+ name = "Corrientes";
+ break;
+ case 7:
+ name = "Distrito Federal";
+ break;
+ case 8:
+ name = "Entre Rios";
+ break;
+ case 9:
+ name = "Formosa";
+ break;
+ case 10:
+ name = "Jujuy";
+ break;
+ case 11:
+ name = "La Pampa";
+ break;
+ case 12:
+ name = "La Rioja";
+ break;
+ case 13:
+ name = "Mendoza";
+ break;
+ case 14:
+ name = "Misiones";
+ break;
+ case 15:
+ name = "Neuquen";
+ break;
+ case 16:
+ name = "Rio Negro";
+ break;
+ case 17:
+ name = "Salta";
+ break;
+ case 18:
+ name = "San Juan";
+ break;
+ case 19:
+ name = "San Luis";
+ break;
+ case 20:
+ name = "Santa Cruz";
+ break;
+ case 21:
+ name = "Santa Fe";
+ break;
+ case 22:
+ name = "Santiago del Estero";
+ break;
+ case 23:
+ name = "Tierra del Fuego";
+ break;
+ case 24:
+ name = "Tucuman";
+ break;
+ }
+ }
+ if (country_code.equals("AT") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Burgenland";
+ break;
+ case 2:
+ name = "Karnten";
+ break;
+ case 3:
+ name = "Niederosterreich";
+ break;
+ case 4:
+ name = "Oberosterreich";
+ break;
+ case 5:
+ name = "Salzburg";
+ break;
+ case 6:
+ name = "Steiermark";
+ break;
+ case 7:
+ name = "Tirol";
+ break;
+ case 8:
+ name = "Vorarlberg";
+ break;
+ case 9:
+ name = "Wien";
+ break;
+ }
+ }
+ if (country_code.equals("AU") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Australian Capital Territory";
+ break;
+ case 2:
+ name = "New South Wales";
+ break;
+ case 3:
+ name = "Northern Territory";
+ break;
+ case 4:
+ name = "Queensland";
+ break;
+ case 5:
+ name = "South Australia";
+ break;
+ case 6:
+ name = "Tasmania";
+ break;
+ case 7:
+ name = "Victoria";
+ break;
+ case 8:
+ name = "Western Australia";
+ break;
+ }
+ }
+ if (country_code.equals("AZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abseron";
+ break;
+ case 2:
+ name = "Agcabadi";
+ break;
+ case 3:
+ name = "Agdam";
+ break;
+ case 4:
+ name = "Agdas";
+ break;
+ case 5:
+ name = "Agstafa";
+ break;
+ case 6:
+ name = "Agsu";
+ break;
+ case 7:
+ name = "Ali Bayramli";
+ break;
+ case 8:
+ name = "Astara";
+ break;
+ case 9:
+ name = "Baki";
+ break;
+ case 10:
+ name = "Balakan";
+ break;
+ case 11:
+ name = "Barda";
+ break;
+ case 12:
+ name = "Beylaqan";
+ break;
+ case 13:
+ name = "Bilasuvar";
+ break;
+ case 14:
+ name = "Cabrayil";
+ break;
+ case 15:
+ name = "Calilabad";
+ break;
+ case 16:
+ name = "Daskasan";
+ break;
+ case 17:
+ name = "Davaci";
+ break;
+ case 18:
+ name = "Fuzuli";
+ break;
+ case 19:
+ name = "Gadabay";
+ break;
+ case 20:
+ name = "Ganca";
+ break;
+ case 21:
+ name = "Goranboy";
+ break;
+ case 22:
+ name = "Goycay";
+ break;
+ case 23:
+ name = "Haciqabul";
+ break;
+ case 24:
+ name = "Imisli";
+ break;
+ case 25:
+ name = "Ismayilli";
+ break;
+ case 26:
+ name = "Kalbacar";
+ break;
+ case 27:
+ name = "Kurdamir";
+ break;
+ case 28:
+ name = "Lacin";
+ break;
+ case 29:
+ name = "Lankaran";
+ break;
+ case 30:
+ name = "Lankaran";
+ break;
+ case 31:
+ name = "Lerik";
+ break;
+ case 32:
+ name = "Masalli";
+ break;
+ case 33:
+ name = "Mingacevir";
+ break;
+ case 34:
+ name = "Naftalan";
+ break;
+ case 35:
+ name = "Naxcivan";
+ break;
+ case 36:
+ name = "Neftcala";
+ break;
+ case 37:
+ name = "Oguz";
+ break;
+ case 38:
+ name = "Qabala";
+ break;
+ case 39:
+ name = "Qax";
+ break;
+ case 40:
+ name = "Qazax";
+ break;
+ case 41:
+ name = "Qobustan";
+ break;
+ case 42:
+ name = "Quba";
+ break;
+ case 43:
+ name = "Qubadli";
+ break;
+ case 44:
+ name = "Qusar";
+ break;
+ case 45:
+ name = "Saatli";
+ break;
+ case 46:
+ name = "Sabirabad";
+ break;
+ case 47:
+ name = "Saki";
+ break;
+ case 48:
+ name = "Saki";
+ break;
+ case 49:
+ name = "Salyan";
+ break;
+ case 50:
+ name = "Samaxi";
+ break;
+ case 51:
+ name = "Samkir";
+ break;
+ case 52:
+ name = "Samux";
+ break;
+ case 53:
+ name = "Siyazan";
+ break;
+ case 54:
+ name = "Sumqayit";
+ break;
+ case 55:
+ name = "Susa";
+ break;
+ case 56:
+ name = "Susa";
+ break;
+ case 57:
+ name = "Tartar";
+ break;
+ case 58:
+ name = "Tovuz";
+ break;
+ case 59:
+ name = "Ucar";
+ break;
+ case 60:
+ name = "Xacmaz";
+ break;
+ case 61:
+ name = "Xankandi";
+ break;
+ case 62:
+ name = "Xanlar";
+ break;
+ case 63:
+ name = "Xizi";
+ break;
+ case 64:
+ name = "Xocali";
+ break;
+ case 65:
+ name = "Xocavand";
+ break;
+ case 66:
+ name = "Yardimli";
+ break;
+ case 67:
+ name = "Yevlax";
+ break;
+ case 68:
+ name = "Yevlax";
+ break;
+ case 69:
+ name = "Zangilan";
+ break;
+ case 70:
+ name = "Zaqatala";
+ break;
+ case 71:
+ name = "Zardab";
+ break;
+ }
+ }
+ if (country_code.equals("BA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Federation of Bosnia and Herzegovina";
+ break;
+ case 2:
+ name = "Republika Srpska";
+ break;
+ }
+ }
+ if (country_code.equals("BB") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Christ Church";
+ break;
+ case 2:
+ name = "Saint Andrew";
+ break;
+ case 3:
+ name = "Saint George";
+ break;
+ case 4:
+ name = "Saint James";
+ break;
+ case 5:
+ name = "Saint John";
+ break;
+ case 6:
+ name = "Saint Joseph";
+ break;
+ case 7:
+ name = "Saint Lucy";
+ break;
+ case 8:
+ name = "Saint Michael";
+ break;
+ case 9:
+ name = "Saint Peter";
+ break;
+ case 10:
+ name = "Saint Philip";
+ break;
+ case 11:
+ name = "Saint Thomas";
+ break;
+ }
+ }
+ if (country_code.equals("BD") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Barisal";
+ break;
+ case 4:
+ name = "Bandarban";
+ break;
+ case 5:
+ name = "Comilla";
+ break;
+ case 12:
+ name = "Mymensingh";
+ break;
+ case 13:
+ name = "Noakhali";
+ break;
+ case 15:
+ name = "Patuakhali";
+ break;
+ case 22:
+ name = "Bagerhat";
+ break;
+ case 23:
+ name = "Bhola";
+ break;
+ case 24:
+ name = "Bogra";
+ break;
+ case 25:
+ name = "Barguna";
+ break;
+ case 26:
+ name = "Brahmanbaria";
+ break;
+ case 27:
+ name = "Chandpur";
+ break;
+ case 28:
+ name = "Chapai Nawabganj";
+ break;
+ case 29:
+ name = "Chattagram";
+ break;
+ case 30:
+ name = "Chuadanga";
+ break;
+ case 31:
+ name = "Cox's Bazar";
+ break;
+ case 32:
+ name = "Dhaka";
+ break;
+ case 33:
+ name = "Dinajpur";
+ break;
+ case 34:
+ name = "Faridpur";
+ break;
+ case 35:
+ name = "Feni";
+ break;
+ case 36:
+ name = "Gaibandha";
+ break;
+ case 37:
+ name = "Gazipur";
+ break;
+ case 38:
+ name = "Gopalganj";
+ break;
+ case 39:
+ name = "Habiganj";
+ break;
+ case 40:
+ name = "Jaipurhat";
+ break;
+ case 41:
+ name = "Jamalpur";
+ break;
+ case 42:
+ name = "Jessore";
+ break;
+ case 43:
+ name = "Jhalakati";
+ break;
+ case 44:
+ name = "Jhenaidah";
+ break;
+ case 45:
+ name = "Khagrachari";
+ break;
+ case 46:
+ name = "Khulna";
+ break;
+ case 47:
+ name = "Kishorganj";
+ break;
+ case 48:
+ name = "Kurigram";
+ break;
+ case 49:
+ name = "Kushtia";
+ break;
+ case 50:
+ name = "Laksmipur";
+ break;
+ case 51:
+ name = "Lalmonirhat";
+ break;
+ case 52:
+ name = "Madaripur";
+ break;
+ case 53:
+ name = "Magura";
+ break;
+ case 54:
+ name = "Manikganj";
+ break;
+ case 55:
+ name = "Meherpur";
+ break;
+ case 56:
+ name = "Moulavibazar";
+ break;
+ case 57:
+ name = "Munshiganj";
+ break;
+ case 58:
+ name = "Naogaon";
+ break;
+ case 59:
+ name = "Narail";
+ break;
+ case 60:
+ name = "Narayanganj";
+ break;
+ case 61:
+ name = "Narsingdi";
+ break;
+ case 62:
+ name = "Nator";
+ break;
+ case 63:
+ name = "Netrakona";
+ break;
+ case 64:
+ name = "Nilphamari";
+ break;
+ case 65:
+ name = "Pabna";
+ break;
+ case 66:
+ name = "Panchagar";
+ break;
+ case 67:
+ name = "Parbattya Chattagram";
+ break;
+ case 68:
+ name = "Pirojpur";
+ break;
+ case 69:
+ name = "Rajbari";
+ break;
+ case 70:
+ name = "Rajshahi";
+ break;
+ case 71:
+ name = "Rangpur";
+ break;
+ case 72:
+ name = "Satkhira";
+ break;
+ case 73:
+ name = "Shariyatpur";
+ break;
+ case 74:
+ name = "Sherpur";
+ break;
+ case 75:
+ name = "Sirajganj";
+ break;
+ case 76:
+ name = "Sunamganj";
+ break;
+ case 77:
+ name = "Sylhet";
+ break;
+ case 78:
+ name = "Tangail";
+ break;
+ case 79:
+ name = "Thakurgaon";
+ break;
+ case 81:
+ name = "Dhaka";
+ break;
+ case 82:
+ name = "Khulna";
+ break;
+ case 83:
+ name = "Rajshahi";
+ break;
+ case 84:
+ name = "Chittagong";
+ break;
+ case 85:
+ name = "Barisal";
+ break;
+ case 86:
+ name = "Sylhet";
+ break;
+ }
+ }
+ if (country_code.equals("BE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Antwerpen";
+ break;
+ case 2:
+ name = "Brabant";
+ break;
+ case 3:
+ name = "Hainaut";
+ break;
+ case 4:
+ name = "Liege";
+ break;
+ case 5:
+ name = "Limburg";
+ break;
+ case 6:
+ name = "Luxembourg";
+ break;
+ case 7:
+ name = "Namur";
+ break;
+ case 8:
+ name = "Oost-Vlaanderen";
+ break;
+ case 9:
+ name = "West-Vlaanderen";
+ break;
+ case 10:
+ name = "Brabant Wallon";
+ break;
+ case 11:
+ name = "Brussels Hoofdstedelijk Gewest";
+ break;
+ case 12:
+ name = "Vlaams-Brabant";
+ break;
+ }
+ }
+ if (country_code.equals("BF") == true) {
+ switch (region_code2) {
+ case 15:
+ name = "Bam";
+ break;
+ case 19:
+ name = "Boulkiemde";
+ break;
+ case 20:
+ name = "Ganzourgou";
+ break;
+ case 21:
+ name = "Gnagna";
+ break;
+ case 28:
+ name = "Kouritenga";
+ break;
+ case 33:
+ name = "Oudalan";
+ break;
+ case 34:
+ name = "Passore";
+ break;
+ case 36:
+ name = "Sanguie";
+ break;
+ case 40:
+ name = "Soum";
+ break;
+ case 42:
+ name = "Tapoa";
+ break;
+ case 44:
+ name = "Zoundweogo";
+ break;
+ case 45:
+ name = "Bale";
+ break;
+ case 46:
+ name = "Banwa";
+ break;
+ case 47:
+ name = "Bazega";
+ break;
+ case 48:
+ name = "Bougouriba";
+ break;
+ case 49:
+ name = "Boulgou";
+ break;
+ case 50:
+ name = "Gourma";
+ break;
+ case 51:
+ name = "Houet";
+ break;
+ case 52:
+ name = "Ioba";
+ break;
+ case 53:
+ name = "Kadiogo";
+ break;
+ case 54:
+ name = "Kenedougou";
+ break;
+ case 55:
+ name = "Komoe";
+ break;
+ case 56:
+ name = "Komondjari";
+ break;
+ case 57:
+ name = "Kompienga";
+ break;
+ case 58:
+ name = "Kossi";
+ break;
+ case 59:
+ name = "Koulpelogo";
+ break;
+ case 60:
+ name = "Kourweogo";
+ break;
+ case 61:
+ name = "Leraba";
+ break;
+ case 62:
+ name = "Loroum";
+ break;
+ case 63:
+ name = "Mouhoun";
+ break;
+ case 64:
+ name = "Namentenga";
+ break;
+ case 65:
+ name = "Naouri";
+ break;
+ case 66:
+ name = "Nayala";
+ break;
+ case 67:
+ name = "Noumbiel";
+ break;
+ case 68:
+ name = "Oubritenga";
+ break;
+ case 69:
+ name = "Poni";
+ break;
+ case 70:
+ name = "Sanmatenga";
+ break;
+ case 71:
+ name = "Seno";
+ break;
+ case 72:
+ name = "Sissili";
+ break;
+ case 73:
+ name = "Sourou";
+ break;
+ case 74:
+ name = "Tuy";
+ break;
+ case 75:
+ name = "Yagha";
+ break;
+ case 76:
+ name = "Yatenga";
+ break;
+ case 77:
+ name = "Ziro";
+ break;
+ case 78:
+ name = "Zondoma";
+ break;
+ }
+ }
+ if (country_code.equals("BG") == true) {
+ switch (region_code2) {
+ case 33:
+ name = "Mikhaylovgrad";
+ break;
+ case 38:
+ name = "Blagoevgrad";
+ break;
+ case 39:
+ name = "Burgas";
+ break;
+ case 40:
+ name = "Dobrich";
+ break;
+ case 41:
+ name = "Gabrovo";
+ break;
+ case 42:
+ name = "Grad Sofiya";
+ break;
+ case 43:
+ name = "Khaskovo";
+ break;
+ case 44:
+ name = "Kurdzhali";
+ break;
+ case 45:
+ name = "Kyustendil";
+ break;
+ case 46:
+ name = "Lovech";
+ break;
+ case 47:
+ name = "Montana";
+ break;
+ case 48:
+ name = "Pazardzhik";
+ break;
+ case 49:
+ name = "Pernik";
+ break;
+ case 50:
+ name = "Pleven";
+ break;
+ case 51:
+ name = "Plovdiv";
+ break;
+ case 52:
+ name = "Razgrad";
+ break;
+ case 53:
+ name = "Ruse";
+ break;
+ case 54:
+ name = "Shumen";
+ break;
+ case 55:
+ name = "Silistra";
+ break;
+ case 56:
+ name = "Sliven";
+ break;
+ case 57:
+ name = "Smolyan";
+ break;
+ case 58:
+ name = "Sofiya";
+ break;
+ case 59:
+ name = "Stara Zagora";
+ break;
+ case 60:
+ name = "Turgovishte";
+ break;
+ case 61:
+ name = "Varna";
+ break;
+ case 62:
+ name = "Veliko Turnovo";
+ break;
+ case 63:
+ name = "Vidin";
+ break;
+ case 64:
+ name = "Vratsa";
+ break;
+ case 65:
+ name = "Yambol";
+ break;
+ }
+ }
+ if (country_code.equals("BH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Al Hadd";
+ break;
+ case 2:
+ name = "Al Manamah";
+ break;
+ case 3:
+ name = "Al Muharraq";
+ break;
+ case 5:
+ name = "Jidd Hafs";
+ break;
+ case 6:
+ name = "Sitrah";
+ break;
+ case 7:
+ name = "Ar Rifa' wa al Mintaqah al Janubiyah";
+ break;
+ case 8:
+ name = "Al Mintaqah al Gharbiyah";
+ break;
+ case 9:
+ name = "Mintaqat Juzur Hawar";
+ break;
+ case 10:
+ name = "Al Mintaqah ash Shamaliyah";
+ break;
+ case 11:
+ name = "Al Mintaqah al Wusta";
+ break;
+ case 12:
+ name = "Madinat";
+ break;
+ case 13:
+ name = "Ar Rifa";
+ break;
+ case 14:
+ name = "Madinat Hamad";
+ break;
+ case 15:
+ name = "Al Muharraq";
+ break;
+ case 16:
+ name = "Al Asimah";
+ break;
+ case 17:
+ name = "Al Janubiyah";
+ break;
+ case 18:
+ name = "Ash Shamaliyah";
+ break;
+ case 19:
+ name = "Al Wusta";
+ break;
+ }
+ }
+ if (country_code.equals("BI") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Bujumbura";
+ break;
+ case 9:
+ name = "Bubanza";
+ break;
+ case 10:
+ name = "Bururi";
+ break;
+ case 11:
+ name = "Cankuzo";
+ break;
+ case 12:
+ name = "Cibitoke";
+ break;
+ case 13:
+ name = "Gitega";
+ break;
+ case 14:
+ name = "Karuzi";
+ break;
+ case 15:
+ name = "Kayanza";
+ break;
+ case 16:
+ name = "Kirundo";
+ break;
+ case 17:
+ name = "Makamba";
+ break;
+ case 18:
+ name = "Muyinga";
+ break;
+ case 19:
+ name = "Ngozi";
+ break;
+ case 20:
+ name = "Rutana";
+ break;
+ case 21:
+ name = "Ruyigi";
+ break;
+ case 22:
+ name = "Muramvya";
+ break;
+ case 23:
+ name = "Mwaro";
+ break;
+ }
+ }
+ if (country_code.equals("BJ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Atakora";
+ break;
+ case 2:
+ name = "Atlantique";
+ break;
+ case 3:
+ name = "Borgou";
+ break;
+ case 4:
+ name = "Mono";
+ break;
+ case 5:
+ name = "Oueme";
+ break;
+ case 6:
+ name = "Zou";
+ break;
+ case 7:
+ name = "Alibori";
+ break;
+ case 8:
+ name = "Atakora";
+ break;
+ case 9:
+ name = "Atlanyique";
+ break;
+ case 10:
+ name = "Borgou";
+ break;
+ case 11:
+ name = "Collines";
+ break;
+ case 12:
+ name = "Kouffo";
+ break;
+ case 13:
+ name = "Donga";
+ break;
+ case 14:
+ name = "Littoral";
+ break;
+ case 15:
+ name = "Mono";
+ break;
+ case 16:
+ name = "Oueme";
+ break;
+ case 17:
+ name = "Plateau";
+ break;
+ case 18:
+ name = "Zou";
+ break;
+ }
+ }
+ if (country_code.equals("BM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Devonshire";
+ break;
+ case 2:
+ name = "Hamilton";
+ break;
+ case 3:
+ name = "Hamilton";
+ break;
+ case 4:
+ name = "Paget";
+ break;
+ case 5:
+ name = "Pembroke";
+ break;
+ case 6:
+ name = "Saint George";
+ break;
+ case 7:
+ name = "Saint George's";
+ break;
+ case 8:
+ name = "Sandys";
+ break;
+ case 9:
+ name = "Smiths";
+ break;
+ case 10:
+ name = "Southampton";
+ break;
+ case 11:
+ name = "Warwick";
+ break;
+ }
+ }
+ if (country_code.equals("BN") == true) {
+ switch (region_code2) {
+ case 7:
+ name = "Alibori";
+ break;
+ case 8:
+ name = "Belait";
+ break;
+ case 9:
+ name = "Brunei and Muara";
+ break;
+ case 10:
+ name = "Temburong";
+ break;
+ case 11:
+ name = "Collines";
+ break;
+ case 12:
+ name = "Kouffo";
+ break;
+ case 13:
+ name = "Donga";
+ break;
+ case 14:
+ name = "Littoral";
+ break;
+ case 15:
+ name = "Tutong";
+ break;
+ case 16:
+ name = "Oueme";
+ break;
+ case 17:
+ name = "Plateau";
+ break;
+ case 18:
+ name = "Zou";
+ break;
+ }
+ }
+ if (country_code.equals("BO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Chuquisaca";
+ break;
+ case 2:
+ name = "Cochabamba";
+ break;
+ case 3:
+ name = "El Beni";
+ break;
+ case 4:
+ name = "La Paz";
+ break;
+ case 5:
+ name = "Oruro";
+ break;
+ case 6:
+ name = "Pando";
+ break;
+ case 7:
+ name = "Potosi";
+ break;
+ case 8:
+ name = "Santa Cruz";
+ break;
+ case 9:
+ name = "Tarija";
+ break;
+ }
+ }
+ if (country_code.equals("BR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Acre";
+ break;
+ case 2:
+ name = "Alagoas";
+ break;
+ case 3:
+ name = "Amapa";
+ break;
+ case 4:
+ name = "Amazonas";
+ break;
+ case 5:
+ name = "Bahia";
+ break;
+ case 6:
+ name = "Ceara";
+ break;
+ case 7:
+ name = "Distrito Federal";
+ break;
+ case 8:
+ name = "Espirito Santo";
+ break;
+ case 11:
+ name = "Mato Grosso do Sul";
+ break;
+ case 13:
+ name = "Maranhao";
+ break;
+ case 14:
+ name = "Mato Grosso";
+ break;
+ case 15:
+ name = "Minas Gerais";
+ break;
+ case 16:
+ name = "Para";
+ break;
+ case 17:
+ name = "Paraiba";
+ break;
+ case 18:
+ name = "Parana";
+ break;
+ case 20:
+ name = "Piaui";
+ break;
+ case 21:
+ name = "Rio de Janeiro";
+ break;
+ case 22:
+ name = "Rio Grande do Norte";
+ break;
+ case 23:
+ name = "Rio Grande do Sul";
+ break;
+ case 24:
+ name = "Rondonia";
+ break;
+ case 25:
+ name = "Roraima";
+ break;
+ case 26:
+ name = "Santa Catarina";
+ break;
+ case 27:
+ name = "Sao Paulo";
+ break;
+ case 28:
+ name = "Sergipe";
+ break;
+ case 29:
+ name = "Goias";
+ break;
+ case 30:
+ name = "Pernambuco";
+ break;
+ case 31:
+ name = "Tocantins";
+ break;
+ }
+ }
+ if (country_code.equals("BS") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Bimini";
+ break;
+ case 6:
+ name = "Cat Island";
+ break;
+ case 10:
+ name = "Exuma";
+ break;
+ case 13:
+ name = "Inagua";
+ break;
+ case 15:
+ name = "Long Island";
+ break;
+ case 16:
+ name = "Mayaguana";
+ break;
+ case 18:
+ name = "Ragged Island";
+ break;
+ case 22:
+ name = "Harbour Island";
+ break;
+ case 23:
+ name = "New Providence";
+ break;
+ case 24:
+ name = "Acklins and Crooked Islands";
+ break;
+ case 25:
+ name = "Freeport";
+ break;
+ case 26:
+ name = "Fresh Creek";
+ break;
+ case 27:
+ name = "Governor's Harbour";
+ break;
+ case 28:
+ name = "Green Turtle Cay";
+ break;
+ case 29:
+ name = "High Rock";
+ break;
+ case 30:
+ name = "Kemps Bay";
+ break;
+ case 31:
+ name = "Marsh Harbour";
+ break;
+ case 32:
+ name = "Nichollstown and Berry Islands";
+ break;
+ case 33:
+ name = "Rock Sound";
+ break;
+ case 34:
+ name = "Sandy Point";
+ break;
+ case 35:
+ name = "San Salvador and Rum Cay";
+ break;
+ }
+ }
+ if (country_code.equals("BT") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Bumthang";
+ break;
+ case 6:
+ name = "Chhukha";
+ break;
+ case 7:
+ name = "Chirang";
+ break;
+ case 8:
+ name = "Daga";
+ break;
+ case 9:
+ name = "Geylegphug";
+ break;
+ case 10:
+ name = "Ha";
+ break;
+ case 11:
+ name = "Lhuntshi";
+ break;
+ case 12:
+ name = "Mongar";
+ break;
+ case 13:
+ name = "Paro";
+ break;
+ case 14:
+ name = "Pemagatsel";
+ break;
+ case 15:
+ name = "Punakha";
+ break;
+ case 16:
+ name = "Samchi";
+ break;
+ case 17:
+ name = "Samdrup";
+ break;
+ case 18:
+ name = "Shemgang";
+ break;
+ case 19:
+ name = "Tashigang";
+ break;
+ case 20:
+ name = "Thimphu";
+ break;
+ case 21:
+ name = "Tongsa";
+ break;
+ case 22:
+ name = "Wangdi Phodrang";
+ break;
+ }
+ }
+ if (country_code.equals("BW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Central";
+ break;
+ case 3:
+ name = "Ghanzi";
+ break;
+ case 4:
+ name = "Kgalagadi";
+ break;
+ case 5:
+ name = "Kgatleng";
+ break;
+ case 6:
+ name = "Kweneng";
+ break;
+ case 8:
+ name = "North-East";
+ break;
+ case 9:
+ name = "South-East";
+ break;
+ case 10:
+ name = "Southern";
+ break;
+ case 11:
+ name = "North-West";
+ break;
+ }
+ }
+ if (country_code.equals("BY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Brestskaya Voblasts'";
+ break;
+ case 2:
+ name = "Homyel'skaya Voblasts'";
+ break;
+ case 3:
+ name = "Hrodzyenskaya Voblasts'";
+ break;
+ case 4:
+ name = "Minsk";
+ break;
+ case 5:
+ name = "Minskaya Voblasts'";
+ break;
+ case 6:
+ name = "Mahilyowskaya Voblasts'";
+ break;
+ case 7:
+ name = "Vitsyebskaya Voblasts'";
+ break;
+ }
+ }
+ if (country_code.equals("BZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Belize";
+ break;
+ case 2:
+ name = "Cayo";
+ break;
+ case 3:
+ name = "Corozal";
+ break;
+ case 4:
+ name = "Orange Walk";
+ break;
+ case 5:
+ name = "Stann Creek";
+ break;
+ case 6:
+ name = "Toledo";
+ break;
+ }
+ }
+ if (country_code.equals("CD") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bandundu";
+ break;
+ case 2:
+ name = "Equateur";
+ break;
+ case 4:
+ name = "Kasai-Oriental";
+ break;
+ case 5:
+ name = "Katanga";
+ break;
+ case 6:
+ name = "Kinshasa";
+ break;
+ case 7:
+ name = "Kivu";
+ break;
+ case 8:
+ name = "Bas-Congo";
+ break;
+ case 9:
+ name = "Orientale";
+ break;
+ case 10:
+ name = "Maniema";
+ break;
+ case 11:
+ name = "Nord-Kivu";
+ break;
+ case 12:
+ name = "Sud-Kivu";
+ break;
+ case 13:
+ name = "Cuvette";
+ break;
+ }
+ }
+ if (country_code.equals("CF") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bamingui-Bangoran";
+ break;
+ case 2:
+ name = "Basse-Kotto";
+ break;
+ case 3:
+ name = "Haute-Kotto";
+ break;
+ case 4:
+ name = "Mambere-Kadei";
+ break;
+ case 5:
+ name = "Haut-Mbomou";
+ break;
+ case 6:
+ name = "Kemo";
+ break;
+ case 7:
+ name = "Lobaye";
+ break;
+ case 8:
+ name = "Mbomou";
+ break;
+ case 9:
+ name = "Nana-Mambere";
+ break;
+ case 11:
+ name = "Ouaka";
+ break;
+ case 12:
+ name = "Ouham";
+ break;
+ case 13:
+ name = "Ouham-Pende";
+ break;
+ case 14:
+ name = "Cuvette-Ouest";
+ break;
+ case 15:
+ name = "Nana-Grebizi";
+ break;
+ case 16:
+ name = "Sangha-Mbaere";
+ break;
+ case 17:
+ name = "Ombella-Mpoko";
+ break;
+ case 18:
+ name = "Bangui";
+ break;
+ }
+ }
+ if (country_code.equals("CG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bouenza";
+ break;
+ case 3:
+ name = "Cuvette";
+ break;
+ case 4:
+ name = "Kouilou";
+ break;
+ case 5:
+ name = "Lekoumou";
+ break;
+ case 6:
+ name = "Likouala";
+ break;
+ case 7:
+ name = "Niari";
+ break;
+ case 8:
+ name = "Plateaux";
+ break;
+ case 10:
+ name = "Sangha";
+ break;
+ case 11:
+ name = "Pool";
+ break;
+ case 12:
+ name = "Brazzaville";
+ break;
+ }
+ }
+ if (country_code.equals("CH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aargau";
+ break;
+ case 2:
+ name = "Ausser-Rhoden";
+ break;
+ case 3:
+ name = "Basel-Landschaft";
+ break;
+ case 4:
+ name = "Basel-Stadt";
+ break;
+ case 5:
+ name = "Bern";
+ break;
+ case 6:
+ name = "Fribourg";
+ break;
+ case 7:
+ name = "Geneve";
+ break;
+ case 8:
+ name = "Glarus";
+ break;
+ case 9:
+ name = "Graubunden";
+ break;
+ case 10:
+ name = "Inner-Rhoden";
+ break;
+ case 11:
+ name = "Luzern";
+ break;
+ case 12:
+ name = "Neuchatel";
+ break;
+ case 13:
+ name = "Nidwalden";
+ break;
+ case 14:
+ name = "Obwalden";
+ break;
+ case 15:
+ name = "Sankt Gallen";
+ break;
+ case 16:
+ name = "Schaffhausen";
+ break;
+ case 17:
+ name = "Schwyz";
+ break;
+ case 18:
+ name = "Solothurn";
+ break;
+ case 19:
+ name = "Thurgau";
+ break;
+ case 20:
+ name = "Ticino";
+ break;
+ case 21:
+ name = "Uri";
+ break;
+ case 22:
+ name = "Valais";
+ break;
+ case 23:
+ name = "Vaud";
+ break;
+ case 24:
+ name = "Zug";
+ break;
+ case 25:
+ name = "Zurich";
+ break;
+ case 26:
+ name = "Jura";
+ break;
+ }
+ }
+ if (country_code.equals("CI") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Atacama";
+ break;
+ case 6:
+ name = "Biobio";
+ break;
+ case 51:
+ name = "Sassandra";
+ break;
+ case 61:
+ name = "Abidjan";
+ break;
+ case 74:
+ name = "Agneby";
+ break;
+ case 75:
+ name = "Bafing";
+ break;
+ case 76:
+ name = "Bas-Sassandra";
+ break;
+ case 77:
+ name = "Denguele";
+ break;
+ case 78:
+ name = "Dix-Huit Montagnes";
+ break;
+ case 79:
+ name = "Fromager";
+ break;
+ case 80:
+ name = "Haut-Sassandra";
+ break;
+ case 81:
+ name = "Lacs";
+ break;
+ case 82:
+ name = "Lagunes";
+ break;
+ case 83:
+ name = "Marahoue";
+ break;
+ case 84:
+ name = "Moyen-Cavally";
+ break;
+ case 85:
+ name = "Moyen-Comoe";
+ break;
+ case 86:
+ name = "N'zi-Comoe";
+ break;
+ case 87:
+ name = "Savanes";
+ break;
+ case 88:
+ name = "Sud-Bandama";
+ break;
+ case 89:
+ name = "Sud-Comoe";
+ break;
+ case 90:
+ name = "Vallee du Bandama";
+ break;
+ case 91:
+ name = "Worodougou";
+ break;
+ case 92:
+ name = "Zanzan";
+ break;
+ }
+ }
+ if (country_code.equals("CL") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Valparaiso";
+ break;
+ case 2:
+ name = "Aisen del General Carlos Ibanez del Campo";
+ break;
+ case 3:
+ name = "Antofagasta";
+ break;
+ case 4:
+ name = "Araucania";
+ break;
+ case 5:
+ name = "Atacama";
+ break;
+ case 6:
+ name = "Bio-Bio";
+ break;
+ case 7:
+ name = "Coquimbo";
+ break;
+ case 8:
+ name = "Libertador General Bernardo O'Higgins";
+ break;
+ case 9:
+ name = "Los Lagos";
+ break;
+ case 10:
+ name = "Magallanes y de la Antartica Chilena";
+ break;
+ case 11:
+ name = "Maule";
+ break;
+ case 12:
+ name = "Region Metropolitana";
+ break;
+ case 13:
+ name = "Tarapaca";
+ break;
+ case 14:
+ name = "Los Lagos";
+ break;
+ case 15:
+ name = "Tarapaca";
+ break;
+ case 16:
+ name = "Arica y Parinacota";
+ break;
+ case 17:
+ name = "Los Rios";
+ break;
+ }
+ }
+ if (country_code.equals("CM") == true) {
+ switch (region_code2) {
+ case 4:
+ name = "Est";
+ break;
+ case 5:
+ name = "Littoral";
+ break;
+ case 7:
+ name = "Nord-Ouest";
+ break;
+ case 8:
+ name = "Ouest";
+ break;
+ case 9:
+ name = "Sud-Ouest";
+ break;
+ case 10:
+ name = "Adamaoua";
+ break;
+ case 11:
+ name = "Centre";
+ break;
+ case 12:
+ name = "Extreme-Nord";
+ break;
+ case 13:
+ name = "Nord";
+ break;
+ case 14:
+ name = "Sud";
+ break;
+ }
+ }
+ if (country_code.equals("CN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Anhui";
+ break;
+ case 2:
+ name = "Zhejiang";
+ break;
+ case 3:
+ name = "Jiangxi";
+ break;
+ case 4:
+ name = "Jiangsu";
+ break;
+ case 5:
+ name = "Jilin";
+ break;
+ case 6:
+ name = "Qinghai";
+ break;
+ case 7:
+ name = "Fujian";
+ break;
+ case 8:
+ name = "Heilongjiang";
+ break;
+ case 9:
+ name = "Henan";
+ break;
+ case 10:
+ name = "Hebei";
+ break;
+ case 11:
+ name = "Hunan";
+ break;
+ case 12:
+ name = "Hubei";
+ break;
+ case 13:
+ name = "Xinjiang";
+ break;
+ case 14:
+ name = "Xizang";
+ break;
+ case 15:
+ name = "Gansu";
+ break;
+ case 16:
+ name = "Guangxi";
+ break;
+ case 18:
+ name = "Guizhou";
+ break;
+ case 19:
+ name = "Liaoning";
+ break;
+ case 20:
+ name = "Nei Mongol";
+ break;
+ case 21:
+ name = "Ningxia";
+ break;
+ case 22:
+ name = "Beijing";
+ break;
+ case 23:
+ name = "Shanghai";
+ break;
+ case 24:
+ name = "Shanxi";
+ break;
+ case 25:
+ name = "Shandong";
+ break;
+ case 26:
+ name = "Shaanxi";
+ break;
+ case 28:
+ name = "Tianjin";
+ break;
+ case 29:
+ name = "Yunnan";
+ break;
+ case 30:
+ name = "Guangdong";
+ break;
+ case 31:
+ name = "Hainan";
+ break;
+ case 32:
+ name = "Sichuan";
+ break;
+ case 33:
+ name = "Chongqing";
+ break;
+ }
+ }
+ if (country_code.equals("CO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Amazonas";
+ break;
+ case 2:
+ name = "Antioquia";
+ break;
+ case 3:
+ name = "Arauca";
+ break;
+ case 4:
+ name = "Atlantico";
+ break;
+ case 5:
+ name = "Bolivar Department";
+ break;
+ case 6:
+ name = "Boyaca Department";
+ break;
+ case 7:
+ name = "Caldas Department";
+ break;
+ case 8:
+ name = "Caqueta";
+ break;
+ case 9:
+ name = "Cauca";
+ break;
+ case 10:
+ name = "Cesar";
+ break;
+ case 11:
+ name = "Choco";
+ break;
+ case 12:
+ name = "Cordoba";
+ break;
+ case 14:
+ name = "Guaviare";
+ break;
+ case 15:
+ name = "Guainia";
+ break;
+ case 16:
+ name = "Huila";
+ break;
+ case 17:
+ name = "La Guajira";
+ break;
+ case 18:
+ name = "Magdalena Department";
+ break;
+ case 19:
+ name = "Meta";
+ break;
+ case 20:
+ name = "Narino";
+ break;
+ case 21:
+ name = "Norte de Santander";
+ break;
+ case 22:
+ name = "Putumayo";
+ break;
+ case 23:
+ name = "Quindio";
+ break;
+ case 24:
+ name = "Risaralda";
+ break;
+ case 25:
+ name = "San Andres y Providencia";
+ break;
+ case 26:
+ name = "Santander";
+ break;
+ case 27:
+ name = "Sucre";
+ break;
+ case 28:
+ name = "Tolima";
+ break;
+ case 29:
+ name = "Valle del Cauca";
+ break;
+ case 30:
+ name = "Vaupes";
+ break;
+ case 31:
+ name = "Vichada";
+ break;
+ case 32:
+ name = "Casanare";
+ break;
+ case 33:
+ name = "Cundinamarca";
+ break;
+ case 34:
+ name = "Distrito Especial";
+ break;
+ case 35:
+ name = "Bolivar";
+ break;
+ case 36:
+ name = "Boyaca";
+ break;
+ case 37:
+ name = "Caldas";
+ break;
+ case 38:
+ name = "Magdalena";
+ break;
+ }
+ }
+ if (country_code.equals("CR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alajuela";
+ break;
+ case 2:
+ name = "Cartago";
+ break;
+ case 3:
+ name = "Guanacaste";
+ break;
+ case 4:
+ name = "Heredia";
+ break;
+ case 6:
+ name = "Limon";
+ break;
+ case 7:
+ name = "Puntarenas";
+ break;
+ case 8:
+ name = "San Jose";
+ break;
+ }
+ }
+ if (country_code.equals("CU") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Pinar del Rio";
+ break;
+ case 2:
+ name = "Ciudad de la Habana";
+ break;
+ case 3:
+ name = "Matanzas";
+ break;
+ case 4:
+ name = "Isla de la Juventud";
+ break;
+ case 5:
+ name = "Camaguey";
+ break;
+ case 7:
+ name = "Ciego de Avila";
+ break;
+ case 8:
+ name = "Cienfuegos";
+ break;
+ case 9:
+ name = "Granma";
+ break;
+ case 10:
+ name = "Guantanamo";
+ break;
+ case 11:
+ name = "La Habana";
+ break;
+ case 12:
+ name = "Holguin";
+ break;
+ case 13:
+ name = "Las Tunas";
+ break;
+ case 14:
+ name = "Sancti Spiritus";
+ break;
+ case 15:
+ name = "Santiago de Cuba";
+ break;
+ case 16:
+ name = "Villa Clara";
+ break;
+ }
+ }
+ if (country_code.equals("CV") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Boa Vista";
+ break;
+ case 2:
+ name = "Brava";
+ break;
+ case 4:
+ name = "Maio";
+ break;
+ case 5:
+ name = "Paul";
+ break;
+ case 7:
+ name = "Ribeira Grande";
+ break;
+ case 8:
+ name = "Sal";
+ break;
+ case 10:
+ name = "Sao Nicolau";
+ break;
+ case 11:
+ name = "Sao Vicente";
+ break;
+ case 13:
+ name = "Mosteiros";
+ break;
+ case 14:
+ name = "Praia";
+ break;
+ case 15:
+ name = "Santa Catarina";
+ break;
+ case 16:
+ name = "Santa Cruz";
+ break;
+ case 17:
+ name = "Sao Domingos";
+ break;
+ case 18:
+ name = "Sao Filipe";
+ break;
+ case 19:
+ name = "Sao Miguel";
+ break;
+ case 20:
+ name = "Tarrafal";
+ break;
+ }
+ }
+ if (country_code.equals("CY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Famagusta";
+ break;
+ case 2:
+ name = "Kyrenia";
+ break;
+ case 3:
+ name = "Larnaca";
+ break;
+ case 4:
+ name = "Nicosia";
+ break;
+ case 5:
+ name = "Limassol";
+ break;
+ case 6:
+ name = "Paphos";
+ break;
+ }
+ }
+ if (country_code.equals("CZ") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Blansko";
+ break;
+ case 4:
+ name = "Breclav";
+ break;
+ case 20:
+ name = "Hradec Kralove";
+ break;
+ case 21:
+ name = "Jablonec nad Nisou";
+ break;
+ case 23:
+ name = "Jicin";
+ break;
+ case 24:
+ name = "Jihlava";
+ break;
+ case 30:
+ name = "Kolin";
+ break;
+ case 33:
+ name = "Liberec";
+ break;
+ case 36:
+ name = "Melnik";
+ break;
+ case 37:
+ name = "Mlada Boleslav";
+ break;
+ case 39:
+ name = "Nachod";
+ break;
+ case 41:
+ name = "Nymburk";
+ break;
+ case 45:
+ name = "Pardubice";
+ break;
+ case 52:
+ name = "Hlavni mesto Praha";
+ break;
+ case 61:
+ name = "Semily";
+ break;
+ case 70:
+ name = "Trutnov";
+ break;
+ case 78:
+ name = "Jihomoravsky kraj";
+ break;
+ case 79:
+ name = "Jihocesky kraj";
+ break;
+ case 80:
+ name = "Vysocina";
+ break;
+ case 81:
+ name = "Karlovarsky kraj";
+ break;
+ case 82:
+ name = "Kralovehradecky kraj";
+ break;
+ case 83:
+ name = "Liberecky kraj";
+ break;
+ case 84:
+ name = "Olomoucky kraj";
+ break;
+ case 85:
+ name = "Moravskoslezsky kraj";
+ break;
+ case 86:
+ name = "Pardubicky kraj";
+ break;
+ case 87:
+ name = "Plzensky kraj";
+ break;
+ case 88:
+ name = "Stredocesky kraj";
+ break;
+ case 89:
+ name = "Ustecky kraj";
+ break;
+ case 90:
+ name = "Zlinsky kraj";
+ break;
+ }
+ }
+ if (country_code.equals("DE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Baden-Wurttemberg";
+ break;
+ case 2:
+ name = "Bayern";
+ break;
+ case 3:
+ name = "Bremen";
+ break;
+ case 4:
+ name = "Hamburg";
+ break;
+ case 5:
+ name = "Hessen";
+ break;
+ case 6:
+ name = "Niedersachsen";
+ break;
+ case 7:
+ name = "Nordrhein-Westfalen";
+ break;
+ case 8:
+ name = "Rheinland-Pfalz";
+ break;
+ case 9:
+ name = "Saarland";
+ break;
+ case 10:
+ name = "Schleswig-Holstein";
+ break;
+ case 11:
+ name = "Brandenburg";
+ break;
+ case 12:
+ name = "Mecklenburg-Vorpommern";
+ break;
+ case 13:
+ name = "Sachsen";
+ break;
+ case 14:
+ name = "Sachsen-Anhalt";
+ break;
+ case 15:
+ name = "Thuringen";
+ break;
+ case 16:
+ name = "Berlin";
+ break;
+ }
+ }
+ if (country_code.equals("DJ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ali Sabieh";
+ break;
+ case 4:
+ name = "Obock";
+ break;
+ case 5:
+ name = "Tadjoura";
+ break;
+ case 6:
+ name = "Dikhil";
+ break;
+ case 7:
+ name = "Djibouti";
+ break;
+ case 8:
+ name = "Arta";
+ break;
+ }
+ }
+ if (country_code.equals("DK") == true) {
+ switch (region_code2) {
+ case 17:
+ name = "Hovedstaden";
+ break;
+ case 18:
+ name = "Midtjylland";
+ break;
+ case 19:
+ name = "Nordjylland";
+ break;
+ case 20:
+ name = "Sjelland";
+ break;
+ case 21:
+ name = "Syddanmark";
+ break;
+ }
+ }
+ if (country_code.equals("DM") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Saint Andrew";
+ break;
+ case 3:
+ name = "Saint David";
+ break;
+ case 4:
+ name = "Saint George";
+ break;
+ case 5:
+ name = "Saint John";
+ break;
+ case 6:
+ name = "Saint Joseph";
+ break;
+ case 7:
+ name = "Saint Luke";
+ break;
+ case 8:
+ name = "Saint Mark";
+ break;
+ case 9:
+ name = "Saint Patrick";
+ break;
+ case 10:
+ name = "Saint Paul";
+ break;
+ case 11:
+ name = "Saint Peter";
+ break;
+ }
+ }
+ if (country_code.equals("DO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Azua";
+ break;
+ case 2:
+ name = "Baoruco";
+ break;
+ case 3:
+ name = "Barahona";
+ break;
+ case 4:
+ name = "Dajabon";
+ break;
+ case 5:
+ name = "Distrito Nacional";
+ break;
+ case 6:
+ name = "Duarte";
+ break;
+ case 8:
+ name = "Espaillat";
+ break;
+ case 9:
+ name = "Independencia";
+ break;
+ case 10:
+ name = "La Altagracia";
+ break;
+ case 11:
+ name = "Elias Pina";
+ break;
+ case 12:
+ name = "La Romana";
+ break;
+ case 14:
+ name = "Maria Trinidad Sanchez";
+ break;
+ case 15:
+ name = "Monte Cristi";
+ break;
+ case 16:
+ name = "Pedernales";
+ break;
+ case 17:
+ name = "Peravia";
+ break;
+ case 18:
+ name = "Puerto Plata";
+ break;
+ case 19:
+ name = "Salcedo";
+ break;
+ case 20:
+ name = "Samana";
+ break;
+ case 21:
+ name = "Sanchez Ramirez";
+ break;
+ case 23:
+ name = "San Juan";
+ break;
+ case 24:
+ name = "San Pedro De Macoris";
+ break;
+ case 25:
+ name = "Santiago";
+ break;
+ case 26:
+ name = "Santiago Rodriguez";
+ break;
+ case 27:
+ name = "Valverde";
+ break;
+ case 28:
+ name = "El Seibo";
+ break;
+ case 29:
+ name = "Hato Mayor";
+ break;
+ case 30:
+ name = "La Vega";
+ break;
+ case 31:
+ name = "Monsenor Nouel";
+ break;
+ case 32:
+ name = "Monte Plata";
+ break;
+ case 33:
+ name = "San Cristobal";
+ break;
+ case 34:
+ name = "Distrito Nacional";
+ break;
+ case 35:
+ name = "Peravia";
+ break;
+ case 36:
+ name = "San Jose de Ocoa";
+ break;
+ case 37:
+ name = "Santo Domingo";
+ break;
+ }
+ }
+ if (country_code.equals("DZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alger";
+ break;
+ case 3:
+ name = "Batna";
+ break;
+ case 4:
+ name = "Constantine";
+ break;
+ case 6:
+ name = "Medea";
+ break;
+ case 7:
+ name = "Mostaganem";
+ break;
+ case 9:
+ name = "Oran";
+ break;
+ case 10:
+ name = "Saida";
+ break;
+ case 12:
+ name = "Setif";
+ break;
+ case 13:
+ name = "Tiaret";
+ break;
+ case 14:
+ name = "Tizi Ouzou";
+ break;
+ case 15:
+ name = "Tlemcen";
+ break;
+ case 18:
+ name = "Bejaia";
+ break;
+ case 19:
+ name = "Biskra";
+ break;
+ case 20:
+ name = "Blida";
+ break;
+ case 21:
+ name = "Bouira";
+ break;
+ case 22:
+ name = "Djelfa";
+ break;
+ case 23:
+ name = "Guelma";
+ break;
+ case 24:
+ name = "Jijel";
+ break;
+ case 25:
+ name = "Laghouat";
+ break;
+ case 26:
+ name = "Mascara";
+ break;
+ case 27:
+ name = "M'sila";
+ break;
+ case 29:
+ name = "Oum el Bouaghi";
+ break;
+ case 30:
+ name = "Sidi Bel Abbes";
+ break;
+ case 31:
+ name = "Skikda";
+ break;
+ case 33:
+ name = "Tebessa";
+ break;
+ case 34:
+ name = "Adrar";
+ break;
+ case 35:
+ name = "Ain Defla";
+ break;
+ case 36:
+ name = "Ain Temouchent";
+ break;
+ case 37:
+ name = "Annaba";
+ break;
+ case 38:
+ name = "Bechar";
+ break;
+ case 39:
+ name = "Bordj Bou Arreridj";
+ break;
+ case 40:
+ name = "Boumerdes";
+ break;
+ case 41:
+ name = "Chlef";
+ break;
+ case 42:
+ name = "El Bayadh";
+ break;
+ case 43:
+ name = "El Oued";
+ break;
+ case 44:
+ name = "El Tarf";
+ break;
+ case 45:
+ name = "Ghardaia";
+ break;
+ case 46:
+ name = "Illizi";
+ break;
+ case 47:
+ name = "Khenchela";
+ break;
+ case 48:
+ name = "Mila";
+ break;
+ case 49:
+ name = "Naama";
+ break;
+ case 50:
+ name = "Ouargla";
+ break;
+ case 51:
+ name = "Relizane";
+ break;
+ case 52:
+ name = "Souk Ahras";
+ break;
+ case 53:
+ name = "Tamanghasset";
+ break;
+ case 54:
+ name = "Tindouf";
+ break;
+ case 55:
+ name = "Tipaza";
+ break;
+ case 56:
+ name = "Tissemsilt";
+ break;
+ }
+ }
+ if (country_code.equals("EC") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Galapagos";
+ break;
+ case 2:
+ name = "Azuay";
+ break;
+ case 3:
+ name = "Bolivar";
+ break;
+ case 4:
+ name = "Canar";
+ break;
+ case 5:
+ name = "Carchi";
+ break;
+ case 6:
+ name = "Chimborazo";
+ break;
+ case 7:
+ name = "Cotopaxi";
+ break;
+ case 8:
+ name = "El Oro";
+ break;
+ case 9:
+ name = "Esmeraldas";
+ break;
+ case 10:
+ name = "Guayas";
+ break;
+ case 11:
+ name = "Imbabura";
+ break;
+ case 12:
+ name = "Loja";
+ break;
+ case 13:
+ name = "Los Rios";
+ break;
+ case 14:
+ name = "Manabi";
+ break;
+ case 15:
+ name = "Morona-Santiago";
+ break;
+ case 17:
+ name = "Pastaza";
+ break;
+ case 18:
+ name = "Pichincha";
+ break;
+ case 19:
+ name = "Tungurahua";
+ break;
+ case 20:
+ name = "Zamora-Chinchipe";
+ break;
+ case 22:
+ name = "Sucumbios";
+ break;
+ case 23:
+ name = "Napo";
+ break;
+ case 24:
+ name = "Orellana";
+ break;
+ }
+ }
+ if (country_code.equals("EE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Harjumaa";
+ break;
+ case 2:
+ name = "Hiiumaa";
+ break;
+ case 3:
+ name = "Ida-Virumaa";
+ break;
+ case 4:
+ name = "Jarvamaa";
+ break;
+ case 5:
+ name = "Jogevamaa";
+ break;
+ case 6:
+ name = "Kohtla-Jarve";
+ break;
+ case 7:
+ name = "Laanemaa";
+ break;
+ case 8:
+ name = "Laane-Virumaa";
+ break;
+ case 9:
+ name = "Narva";
+ break;
+ case 10:
+ name = "Parnu";
+ break;
+ case 11:
+ name = "Parnumaa";
+ break;
+ case 12:
+ name = "Polvamaa";
+ break;
+ case 13:
+ name = "Raplamaa";
+ break;
+ case 14:
+ name = "Saaremaa";
+ break;
+ case 15:
+ name = "Sillamae";
+ break;
+ case 16:
+ name = "Tallinn";
+ break;
+ case 17:
+ name = "Tartu";
+ break;
+ case 18:
+ name = "Tartumaa";
+ break;
+ case 19:
+ name = "Valgamaa";
+ break;
+ case 20:
+ name = "Viljandimaa";
+ break;
+ case 21:
+ name = "Vorumaa";
+ break;
+ }
+ }
+ if (country_code.equals("EG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ad Daqahliyah";
+ break;
+ case 2:
+ name = "Al Bahr al Ahmar";
+ break;
+ case 3:
+ name = "Al Buhayrah";
+ break;
+ case 4:
+ name = "Al Fayyum";
+ break;
+ case 5:
+ name = "Al Gharbiyah";
+ break;
+ case 6:
+ name = "Al Iskandariyah";
+ break;
+ case 7:
+ name = "Al Isma'iliyah";
+ break;
+ case 8:
+ name = "Al Jizah";
+ break;
+ case 9:
+ name = "Al Minufiyah";
+ break;
+ case 10:
+ name = "Al Minya";
+ break;
+ case 11:
+ name = "Al Qahirah";
+ break;
+ case 12:
+ name = "Al Qalyubiyah";
+ break;
+ case 13:
+ name = "Al Wadi al Jadid";
+ break;
+ case 14:
+ name = "Ash Sharqiyah";
+ break;
+ case 15:
+ name = "As Suways";
+ break;
+ case 16:
+ name = "Aswan";
+ break;
+ case 17:
+ name = "Asyut";
+ break;
+ case 18:
+ name = "Bani Suwayf";
+ break;
+ case 19:
+ name = "Bur Sa'id";
+ break;
+ case 20:
+ name = "Dumyat";
+ break;
+ case 21:
+ name = "Kafr ash Shaykh";
+ break;
+ case 22:
+ name = "Matruh";
+ break;
+ case 23:
+ name = "Qina";
+ break;
+ case 24:
+ name = "Suhaj";
+ break;
+ case 26:
+ name = "Janub Sina'";
+ break;
+ case 27:
+ name = "Shamal Sina'";
+ break;
+ }
+ }
+ if (country_code.equals("ER") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Anseba";
+ break;
+ case 2:
+ name = "Debub";
+ break;
+ case 3:
+ name = "Debubawi K'eyih Bahri";
+ break;
+ case 4:
+ name = "Gash Barka";
+ break;
+ case 5:
+ name = "Ma'akel";
+ break;
+ case 6:
+ name = "Semenawi K'eyih Bahri";
+ break;
+ }
+ }
+ if (country_code.equals("ES") == true) {
+ switch (region_code2) {
+ case 7:
+ name = "Islas Baleares";
+ break;
+ case 27:
+ name = "La Rioja";
+ break;
+ case 29:
+ name = "Madrid";
+ break;
+ case 31:
+ name = "Murcia";
+ break;
+ case 32:
+ name = "Navarra";
+ break;
+ case 34:
+ name = "Asturias";
+ break;
+ case 39:
+ name = "Cantabria";
+ break;
+ case 51:
+ name = "Andalucia";
+ break;
+ case 52:
+ name = "Aragon";
+ break;
+ case 53:
+ name = "Canarias";
+ break;
+ case 54:
+ name = "Castilla-La Mancha";
+ break;
+ case 55:
+ name = "Castilla y Leon";
+ break;
+ case 56:
+ name = "Catalonia";
+ break;
+ case 57:
+ name = "Extremadura";
+ break;
+ case 58:
+ name = "Galicia";
+ break;
+ case 59:
+ name = "Pais Vasco";
+ break;
+ case 60:
+ name = "Comunidad Valenciana";
+ break;
+ }
+ }
+ if (country_code.equals("ET") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Amhara";
+ break;
+ case 7:
+ name = "Somali";
+ break;
+ case 8:
+ name = "Gambella";
+ break;
+ case 10:
+ name = "Addis Abeba";
+ break;
+ case 11:
+ name = "Southern";
+ break;
+ case 12:
+ name = "Tigray";
+ break;
+ case 13:
+ name = "Benishangul";
+ break;
+ case 14:
+ name = "Afar";
+ break;
+ case 44:
+ name = "Adis Abeba";
+ break;
+ case 45:
+ name = "Afar";
+ break;
+ case 46:
+ name = "Amara";
+ break;
+ case 47:
+ name = "Binshangul Gumuz";
+ break;
+ case 48:
+ name = "Dire Dawa";
+ break;
+ case 49:
+ name = "Gambela Hizboch";
+ break;
+ case 50:
+ name = "Hareri Hizb";
+ break;
+ case 51:
+ name = "Oromiya";
+ break;
+ case 52:
+ name = "Sumale";
+ break;
+ case 53:
+ name = "Tigray";
+ break;
+ case 54:
+ name = "YeDebub Biheroch Bihereseboch na Hizboch";
+ break;
+ }
+ }
+ if (country_code.equals("FI") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aland";
+ break;
+ case 6:
+ name = "Lapland";
+ break;
+ case 8:
+ name = "Oulu";
+ break;
+ case 13:
+ name = "Southern Finland";
+ break;
+ case 14:
+ name = "Eastern Finland";
+ break;
+ case 15:
+ name = "Western Finland";
+ break;
+ }
+ }
+ if (country_code.equals("FJ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Central";
+ break;
+ case 2:
+ name = "Eastern";
+ break;
+ case 3:
+ name = "Northern";
+ break;
+ case 4:
+ name = "Rotuma";
+ break;
+ case 5:
+ name = "Western";
+ break;
+ }
+ }
+ if (country_code.equals("FM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Kosrae";
+ break;
+ case 2:
+ name = "Pohnpei";
+ break;
+ case 3:
+ name = "Chuuk";
+ break;
+ case 4:
+ name = "Yap";
+ break;
+ }
+ }
+ if (country_code.equals("FR") == true) {
+ switch (region_code2) {
+ case 97:
+ name = "Aquitaine";
+ break;
+ case 98:
+ name = "Auvergne";
+ break;
+ case 99:
+ name = "Basse-Normandie";
+ break;
+ case 832:
+ name = "Bourgogne";
+ break;
+ case 833:
+ name = "Bretagne";
+ break;
+ case 834:
+ name = "Centre";
+ break;
+ case 835:
+ name = "Champagne-Ardenne";
+ break;
+ case 836:
+ name = "Corse";
+ break;
+ case 837:
+ name = "Franche-Comte";
+ break;
+ case 838:
+ name = "Haute-Normandie";
+ break;
+ case 839:
+ name = "Ile-de-France";
+ break;
+ case 840:
+ name = "Languedoc-Roussillon";
+ break;
+ case 875:
+ name = "Limousin";
+ break;
+ case 876:
+ name = "Lorraine";
+ break;
+ case 877:
+ name = "Midi-Pyrenees";
+ break;
+ case 878:
+ name = "Nord-Pas-de-Calais";
+ break;
+ case 879:
+ name = "Pays de la Loire";
+ break;
+ case 880:
+ name = "Picardie";
+ break;
+ case 881:
+ name = "Poitou-Charentes";
+ break;
+ case 882:
+ name = "Provence-Alpes-Cote d'Azur";
+ break;
+ case 883:
+ name = "Rhone-Alpes";
+ break;
+ case 918:
+ name = "Alsace";
+ break;
+ }
+ }
+ if (country_code.equals("GA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Estuaire";
+ break;
+ case 2:
+ name = "Haut-Ogooue";
+ break;
+ case 3:
+ name = "Moyen-Ogooue";
+ break;
+ case 4:
+ name = "Ngounie";
+ break;
+ case 5:
+ name = "Nyanga";
+ break;
+ case 6:
+ name = "Ogooue-Ivindo";
+ break;
+ case 7:
+ name = "Ogooue-Lolo";
+ break;
+ case 8:
+ name = "Ogooue-Maritime";
+ break;
+ case 9:
+ name = "Woleu-Ntem";
+ break;
+ }
+ }
+ if (country_code.equals("GB") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Avon";
+ break;
+ case 3:
+ name = "Berkshire";
+ break;
+ case 7:
+ name = "Cleveland";
+ break;
+ case 17:
+ name = "Greater London";
+ break;
+ case 18:
+ name = "Greater Manchester";
+ break;
+ case 20:
+ name = "Hereford and Worcester";
+ break;
+ case 22:
+ name = "Humberside";
+ break;
+ case 28:
+ name = "Merseyside";
+ break;
+ case 37:
+ name = "South Yorkshire";
+ break;
+ case 41:
+ name = "Tyne and Wear";
+ break;
+ case 43:
+ name = "West Midlands";
+ break;
+ case 45:
+ name = "West Yorkshire";
+ break;
+ case 79:
+ name = "Central";
+ break;
+ case 82:
+ name = "Grampian";
+ break;
+ case 84:
+ name = "Lothian";
+ break;
+ case 87:
+ name = "Strathclyde";
+ break;
+ case 88:
+ name = "Tayside";
+ break;
+ case 90:
+ name = "Clwyd";
+ break;
+ case 91:
+ name = "Dyfed";
+ break;
+ case 92:
+ name = "Gwent";
+ break;
+ case 94:
+ name = "Mid Glamorgan";
+ break;
+ case 96:
+ name = "South Glamorgan";
+ break;
+ case 97:
+ name = "West Glamorgan";
+ break;
+ case 832:
+ name = "Barking and Dagenham";
+ break;
+ case 833:
+ name = "Barnet";
+ break;
+ case 834:
+ name = "Barnsley";
+ break;
+ case 835:
+ name = "Bath and North East Somerset";
+ break;
+ case 836:
+ name = "Bedfordshire";
+ break;
+ case 837:
+ name = "Bexley";
+ break;
+ case 838:
+ name = "Birmingham";
+ break;
+ case 839:
+ name = "Blackburn with Darwen";
+ break;
+ case 840:
+ name = "Blackpool";
+ break;
+ case 875:
+ name = "Bolton";
+ break;
+ case 876:
+ name = "Bournemouth";
+ break;
+ case 877:
+ name = "Bracknell Forest";
+ break;
+ case 878:
+ name = "Bradford";
+ break;
+ case 879:
+ name = "Brent";
+ break;
+ case 880:
+ name = "Brighton and Hove";
+ break;
+ case 881:
+ name = "Bristol";
+ break;
+ case 882:
+ name = "Bromley";
+ break;
+ case 883:
+ name = "Buckinghamshire";
+ break;
+ case 918:
+ name = "Bury";
+ break;
+ case 919:
+ name = "Calderdale";
+ break;
+ case 920:
+ name = "Cambridgeshire";
+ break;
+ case 921:
+ name = "Camden";
+ break;
+ case 922:
+ name = "Cheshire";
+ break;
+ case 923:
+ name = "Cornwall";
+ break;
+ case 924:
+ name = "Coventry";
+ break;
+ case 925:
+ name = "Croydon";
+ break;
+ case 926:
+ name = "Cumbria";
+ break;
+ case 961:
+ name = "Darlington";
+ break;
+ case 962:
+ name = "Derby";
+ break;
+ case 963:
+ name = "Derbyshire";
+ break;
+ case 964:
+ name = "Devon";
+ break;
+ case 965:
+ name = "Doncaster";
+ break;
+ case 966:
+ name = "Dorset";
+ break;
+ case 967:
+ name = "Dudley";
+ break;
+ case 968:
+ name = "Durham";
+ break;
+ case 969:
+ name = "Ealing";
+ break;
+ case 1004:
+ name = "East Riding of Yorkshire";
+ break;
+ case 1005:
+ name = "East Sussex";
+ break;
+ case 1006:
+ name = "Enfield";
+ break;
+ case 1007:
+ name = "Essex";
+ break;
+ case 1008:
+ name = "Gateshead";
+ break;
+ case 1009:
+ name = "Gloucestershire";
+ break;
+ case 1010:
+ name = "Greenwich";
+ break;
+ case 1011:
+ name = "Hackney";
+ break;
+ case 1012:
+ name = "Halton";
+ break;
+ case 1047:
+ name = "Hammersmith and Fulham";
+ break;
+ case 1048:
+ name = "Hampshire";
+ break;
+ case 1049:
+ name = "Haringey";
+ break;
+ case 1050:
+ name = "Harrow";
+ break;
+ case 1051:
+ name = "Hartlepool";
+ break;
+ case 1052:
+ name = "Havering";
+ break;
+ case 1053:
+ name = "Herefordshire";
+ break;
+ case 1054:
+ name = "Hertford";
+ break;
+ case 1055:
+ name = "Hillingdon";
+ break;
+ case 1090:
+ name = "Hounslow";
+ break;
+ case 1091:
+ name = "Isle of Wight";
+ break;
+ case 1092:
+ name = "Islington";
+ break;
+ case 1093:
+ name = "Kensington and Chelsea";
+ break;
+ case 1094:
+ name = "Kent";
+ break;
+ case 1095:
+ name = "Kingston upon Hull";
+ break;
+ case 1096:
+ name = "Kingston upon Thames";
+ break;
+ case 1097:
+ name = "Kirklees";
+ break;
+ case 1098:
+ name = "Knowsley";
+ break;
+ case 1133:
+ name = "Lambeth";
+ break;
+ case 1134:
+ name = "Lancashire";
+ break;
+ case 1135:
+ name = "Leeds";
+ break;
+ case 1136:
+ name = "Leicester";
+ break;
+ case 1137:
+ name = "Leicestershire";
+ break;
+ case 1138:
+ name = "Lewisham";
+ break;
+ case 1139:
+ name = "Lincolnshire";
+ break;
+ case 1140:
+ name = "Liverpool";
+ break;
+ case 1141:
+ name = "London";
+ break;
+ case 1176:
+ name = "Luton";
+ break;
+ case 1177:
+ name = "Manchester";
+ break;
+ case 1178:
+ name = "Medway";
+ break;
+ case 1179:
+ name = "Merton";
+ break;
+ case 1180:
+ name = "Middlesbrough";
+ break;
+ case 1181:
+ name = "Milton Keynes";
+ break;
+ case 1182:
+ name = "Newcastle upon Tyne";
+ break;
+ case 1183:
+ name = "Newham";
+ break;
+ case 1184:
+ name = "Norfolk";
+ break;
+ case 1219:
+ name = "Northamptonshire";
+ break;
+ case 1220:
+ name = "North East Lincolnshire";
+ break;
+ case 1221:
+ name = "North Lincolnshire";
+ break;
+ case 1222:
+ name = "North Somerset";
+ break;
+ case 1223:
+ name = "North Tyneside";
+ break;
+ case 1224:
+ name = "Northumberland";
+ break;
+ case 1225:
+ name = "North Yorkshire";
+ break;
+ case 1226:
+ name = "Nottingham";
+ break;
+ case 1227:
+ name = "Nottinghamshire";
+ break;
+ case 1262:
+ name = "Oldham";
+ break;
+ case 1263:
+ name = "Oxfordshire";
+ break;
+ case 1264:
+ name = "Peterborough";
+ break;
+ case 1265:
+ name = "Plymouth";
+ break;
+ case 1266:
+ name = "Poole";
+ break;
+ case 1267:
+ name = "Portsmouth";
+ break;
+ case 1268:
+ name = "Reading";
+ break;
+ case 1269:
+ name = "Redbridge";
+ break;
+ case 1270:
+ name = "Redcar and Cleveland";
+ break;
+ case 1305:
+ name = "Richmond upon Thames";
+ break;
+ case 1306:
+ name = "Rochdale";
+ break;
+ case 1307:
+ name = "Rotherham";
+ break;
+ case 1308:
+ name = "Rutland";
+ break;
+ case 1309:
+ name = "Salford";
+ break;
+ case 1310:
+ name = "Shropshire";
+ break;
+ case 1311:
+ name = "Sandwell";
+ break;
+ case 1312:
+ name = "Sefton";
+ break;
+ case 1313:
+ name = "Sheffield";
+ break;
+ case 1348:
+ name = "Slough";
+ break;
+ case 1349:
+ name = "Solihull";
+ break;
+ case 1350:
+ name = "Somerset";
+ break;
+ case 1351:
+ name = "Southampton";
+ break;
+ case 1352:
+ name = "Southend-on-Sea";
+ break;
+ case 1353:
+ name = "South Gloucestershire";
+ break;
+ case 1354:
+ name = "South Tyneside";
+ break;
+ case 1355:
+ name = "Southwark";
+ break;
+ case 1356:
+ name = "Staffordshire";
+ break;
+ case 1391:
+ name = "St. Helens";
+ break;
+ case 1392:
+ name = "Stockport";
+ break;
+ case 1393:
+ name = "Stockton-on-Tees";
+ break;
+ case 1394:
+ name = "Stoke-on-Trent";
+ break;
+ case 1395:
+ name = "Suffolk";
+ break;
+ case 1396:
+ name = "Sunderland";
+ break;
+ case 1397:
+ name = "Surrey";
+ break;
+ case 1398:
+ name = "Sutton";
+ break;
+ case 1399:
+ name = "Swindon";
+ break;
+ case 1434:
+ name = "Tameside";
+ break;
+ case 1435:
+ name = "Telford and Wrekin";
+ break;
+ case 1436:
+ name = "Thurrock";
+ break;
+ case 1437:
+ name = "Torbay";
+ break;
+ case 1438:
+ name = "Tower Hamlets";
+ break;
+ case 1439:
+ name = "Trafford";
+ break;
+ case 1440:
+ name = "Wakefield";
+ break;
+ case 1441:
+ name = "Walsall";
+ break;
+ case 1442:
+ name = "Waltham Forest";
+ break;
+ case 1477:
+ name = "Wandsworth";
+ break;
+ case 1478:
+ name = "Warrington";
+ break;
+ case 1479:
+ name = "Warwickshire";
+ break;
+ case 1480:
+ name = "West Berkshire";
+ break;
+ case 1481:
+ name = "Westminster";
+ break;
+ case 1482:
+ name = "West Sussex";
+ break;
+ case 1483:
+ name = "Wigan";
+ break;
+ case 1484:
+ name = "Wiltshire";
+ break;
+ case 1485:
+ name = "Windsor and Maidenhead";
+ break;
+ case 1520:
+ name = "Wirral";
+ break;
+ case 1521:
+ name = "Wokingham";
+ break;
+ case 1522:
+ name = "Wolverhampton";
+ break;
+ case 1523:
+ name = "Worcestershire";
+ break;
+ case 1524:
+ name = "York";
+ break;
+ case 1525:
+ name = "Antrim";
+ break;
+ case 1526:
+ name = "Ards";
+ break;
+ case 1527:
+ name = "Armagh";
+ break;
+ case 1528:
+ name = "Ballymena";
+ break;
+ case 1563:
+ name = "Ballymoney";
+ break;
+ case 1564:
+ name = "Banbridge";
+ break;
+ case 1565:
+ name = "Belfast";
+ break;
+ case 1566:
+ name = "Carrickfergus";
+ break;
+ case 1567:
+ name = "Castlereagh";
+ break;
+ case 1568:
+ name = "Coleraine";
+ break;
+ case 1569:
+ name = "Cookstown";
+ break;
+ case 1570:
+ name = "Craigavon";
+ break;
+ case 1571:
+ name = "Down";
+ break;
+ case 1606:
+ name = "Dungannon";
+ break;
+ case 1607:
+ name = "Fermanagh";
+ break;
+ case 1608:
+ name = "Larne";
+ break;
+ case 1609:
+ name = "Limavady";
+ break;
+ case 1610:
+ name = "Lisburn";
+ break;
+ case 1611:
+ name = "Derry";
+ break;
+ case 1612:
+ name = "Magherafelt";
+ break;
+ case 1613:
+ name = "Moyle";
+ break;
+ case 1614:
+ name = "Newry and Mourne";
+ break;
+ case 1649:
+ name = "Newtownabbey";
+ break;
+ case 1650:
+ name = "North Down";
+ break;
+ case 1651:
+ name = "Omagh";
+ break;
+ case 1652:
+ name = "Strabane";
+ break;
+ case 1653:
+ name = "Aberdeen City";
+ break;
+ case 1654:
+ name = "Aberdeenshire";
+ break;
+ case 1655:
+ name = "Angus";
+ break;
+ case 1656:
+ name = "Argyll and Bute";
+ break;
+ case 1657:
+ name = "Scottish Borders";
+ break;
+ case 1692:
+ name = "Clackmannanshire";
+ break;
+ case 1693:
+ name = "Dumfries and Galloway";
+ break;
+ case 1694:
+ name = "Dundee City";
+ break;
+ case 1695:
+ name = "East Ayrshire";
+ break;
+ case 1696:
+ name = "East Dunbartonshire";
+ break;
+ case 1697:
+ name = "East Lothian";
+ break;
+ case 1698:
+ name = "East Renfrewshire";
+ break;
+ case 1699:
+ name = "Edinburgh";
+ break;
+ case 1700:
+ name = "Falkirk";
+ break;
+ case 1735:
+ name = "Fife";
+ break;
+ case 1736:
+ name = "Glasgow City";
+ break;
+ case 1737:
+ name = "Highland";
+ break;
+ case 1738:
+ name = "Inverclyde";
+ break;
+ case 1739:
+ name = "Midlothian";
+ break;
+ case 1740:
+ name = "Moray";
+ break;
+ case 1741:
+ name = "North Ayrshire";
+ break;
+ case 1742:
+ name = "North Lanarkshire";
+ break;
+ case 1743:
+ name = "Orkney";
+ break;
+ case 1778:
+ name = "Perth and Kinross";
+ break;
+ case 1779:
+ name = "Renfrewshire";
+ break;
+ case 1780:
+ name = "Shetland Islands";
+ break;
+ case 1781:
+ name = "South Ayrshire";
+ break;
+ case 1782:
+ name = "South Lanarkshire";
+ break;
+ case 1783:
+ name = "Stirling";
+ break;
+ case 1784:
+ name = "West Dunbartonshire";
+ break;
+ case 1785:
+ name = "Eilean Siar";
+ break;
+ case 1786:
+ name = "West Lothian";
+ break;
+ case 1821:
+ name = "Isle of Anglesey";
+ break;
+ case 1822:
+ name = "Blaenau Gwent";
+ break;
+ case 1823:
+ name = "Bridgend";
+ break;
+ case 1824:
+ name = "Caerphilly";
+ break;
+ case 1825:
+ name = "Cardiff";
+ break;
+ case 1826:
+ name = "Ceredigion";
+ break;
+ case 1827:
+ name = "Carmarthenshire";
+ break;
+ case 1828:
+ name = "Conwy";
+ break;
+ case 1829:
+ name = "Denbighshire";
+ break;
+ case 1864:
+ name = "Flintshire";
+ break;
+ case 1865:
+ name = "Gwynedd";
+ break;
+ case 1866:
+ name = "Merthyr Tydfil";
+ break;
+ case 1867:
+ name = "Monmouthshire";
+ break;
+ case 1868:
+ name = "Neath Port Talbot";
+ break;
+ case 1869:
+ name = "Newport";
+ break;
+ case 1870:
+ name = "Pembrokeshire";
+ break;
+ case 1871:
+ name = "Powys";
+ break;
+ case 1872:
+ name = "Rhondda Cynon Taff";
+ break;
+ case 1907:
+ name = "Swansea";
+ break;
+ case 1908:
+ name = "Torfaen";
+ break;
+ case 1909:
+ name = "Vale of Glamorgan";
+ break;
+ case 1910:
+ name = "Wrexham";
+ break;
+ }
+ }
+ if (country_code.equals("GD") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Saint Andrew";
+ break;
+ case 2:
+ name = "Saint David";
+ break;
+ case 3:
+ name = "Saint George";
+ break;
+ case 4:
+ name = "Saint John";
+ break;
+ case 5:
+ name = "Saint Mark";
+ break;
+ case 6:
+ name = "Saint Patrick";
+ break;
+ }
+ }
+ if (country_code.equals("GE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abashis Raioni";
+ break;
+ case 2:
+ name = "Abkhazia";
+ break;
+ case 3:
+ name = "Adigenis Raioni";
+ break;
+ case 4:
+ name = "Ajaria";
+ break;
+ case 5:
+ name = "Akhalgoris Raioni";
+ break;
+ case 6:
+ name = "Akhalk'alak'is Raioni";
+ break;
+ case 7:
+ name = "Akhalts'ikhis Raioni";
+ break;
+ case 8:
+ name = "Akhmetis Raioni";
+ break;
+ case 9:
+ name = "Ambrolauris Raioni";
+ break;
+ case 10:
+ name = "Aspindzis Raioni";
+ break;
+ case 11:
+ name = "Baghdat'is Raioni";
+ break;
+ case 12:
+ name = "Bolnisis Raioni";
+ break;
+ case 13:
+ name = "Borjomis Raioni";
+ break;
+ case 14:
+ name = "Chiat'ura";
+ break;
+ case 15:
+ name = "Ch'khorotsqus Raioni";
+ break;
+ case 16:
+ name = "Ch'okhatauris Raioni";
+ break;
+ case 17:
+ name = "Dedop'listsqaros Raioni";
+ break;
+ case 18:
+ name = "Dmanisis Raioni";
+ break;
+ case 19:
+ name = "Dushet'is Raioni";
+ break;
+ case 20:
+ name = "Gardabanis Raioni";
+ break;
+ case 21:
+ name = "Gori";
+ break;
+ case 22:
+ name = "Goris Raioni";
+ break;
+ case 23:
+ name = "Gurjaanis Raioni";
+ break;
+ case 24:
+ name = "Javis Raioni";
+ break;
+ case 25:
+ name = "K'arelis Raioni";
+ break;
+ case 26:
+ name = "Kaspis Raioni";
+ break;
+ case 27:
+ name = "Kharagaulis Raioni";
+ break;
+ case 28:
+ name = "Khashuris Raioni";
+ break;
+ case 29:
+ name = "Khobis Raioni";
+ break;
+ case 30:
+ name = "Khonis Raioni";
+ break;
+ case 31:
+ name = "K'ut'aisi";
+ break;
+ case 32:
+ name = "Lagodekhis Raioni";
+ break;
+ case 33:
+ name = "Lanch'khut'is Raioni";
+ break;
+ case 34:
+ name = "Lentekhis Raioni";
+ break;
+ case 35:
+ name = "Marneulis Raioni";
+ break;
+ case 36:
+ name = "Martvilis Raioni";
+ break;
+ case 37:
+ name = "Mestiis Raioni";
+ break;
+ case 38:
+ name = "Mts'khet'is Raioni";
+ break;
+ case 39:
+ name = "Ninotsmindis Raioni";
+ break;
+ case 40:
+ name = "Onis Raioni";
+ break;
+ case 41:
+ name = "Ozurget'is Raioni";
+ break;
+ case 42:
+ name = "P'ot'i";
+ break;
+ case 43:
+ name = "Qazbegis Raioni";
+ break;
+ case 44:
+ name = "Qvarlis Raioni";
+ break;
+ case 45:
+ name = "Rust'avi";
+ break;
+ case 46:
+ name = "Sach'kheris Raioni";
+ break;
+ case 47:
+ name = "Sagarejos Raioni";
+ break;
+ case 48:
+ name = "Samtrediis Raioni";
+ break;
+ case 49:
+ name = "Senakis Raioni";
+ break;
+ case 50:
+ name = "Sighnaghis Raioni";
+ break;
+ case 51:
+ name = "T'bilisi";
+ break;
+ case 52:
+ name = "T'elavis Raioni";
+ break;
+ case 53:
+ name = "T'erjolis Raioni";
+ break;
+ case 54:
+ name = "T'et'ritsqaros Raioni";
+ break;
+ case 55:
+ name = "T'ianet'is Raioni";
+ break;
+ case 56:
+ name = "Tqibuli";
+ break;
+ case 57:
+ name = "Ts'ageris Raioni";
+ break;
+ case 58:
+ name = "Tsalenjikhis Raioni";
+ break;
+ case 59:
+ name = "Tsalkis Raioni";
+ break;
+ case 60:
+ name = "Tsqaltubo";
+ break;
+ case 61:
+ name = "Vanis Raioni";
+ break;
+ case 62:
+ name = "Zestap'onis Raioni";
+ break;
+ case 63:
+ name = "Zugdidi";
+ break;
+ case 64:
+ name = "Zugdidis Raioni";
+ break;
+ }
+ }
+ if (country_code.equals("GH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Greater Accra";
+ break;
+ case 2:
+ name = "Ashanti";
+ break;
+ case 3:
+ name = "Brong-Ahafo";
+ break;
+ case 4:
+ name = "Central";
+ break;
+ case 5:
+ name = "Eastern";
+ break;
+ case 6:
+ name = "Northern";
+ break;
+ case 8:
+ name = "Volta";
+ break;
+ case 9:
+ name = "Western";
+ break;
+ case 10:
+ name = "Upper East";
+ break;
+ case 11:
+ name = "Upper West";
+ break;
+ }
+ }
+ if (country_code.equals("GL") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Nordgronland";
+ break;
+ case 2:
+ name = "Ostgronland";
+ break;
+ case 3:
+ name = "Vestgronland";
+ break;
+ }
+ }
+ if (country_code.equals("GM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Banjul";
+ break;
+ case 2:
+ name = "Lower River";
+ break;
+ case 3:
+ name = "Central River";
+ break;
+ case 4:
+ name = "Upper River";
+ break;
+ case 5:
+ name = "Western";
+ break;
+ case 7:
+ name = "North Bank";
+ break;
+ }
+ }
+ if (country_code.equals("GN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Beyla";
+ break;
+ case 2:
+ name = "Boffa";
+ break;
+ case 3:
+ name = "Boke";
+ break;
+ case 4:
+ name = "Conakry";
+ break;
+ case 5:
+ name = "Dabola";
+ break;
+ case 6:
+ name = "Dalaba";
+ break;
+ case 7:
+ name = "Dinguiraye";
+ break;
+ case 9:
+ name = "Faranah";
+ break;
+ case 10:
+ name = "Forecariah";
+ break;
+ case 11:
+ name = "Fria";
+ break;
+ case 12:
+ name = "Gaoual";
+ break;
+ case 13:
+ name = "Gueckedou";
+ break;
+ case 15:
+ name = "Kerouane";
+ break;
+ case 16:
+ name = "Kindia";
+ break;
+ case 17:
+ name = "Kissidougou";
+ break;
+ case 18:
+ name = "Koundara";
+ break;
+ case 19:
+ name = "Kouroussa";
+ break;
+ case 21:
+ name = "Macenta";
+ break;
+ case 22:
+ name = "Mali";
+ break;
+ case 23:
+ name = "Mamou";
+ break;
+ case 25:
+ name = "Pita";
+ break;
+ case 27:
+ name = "Telimele";
+ break;
+ case 28:
+ name = "Tougue";
+ break;
+ case 29:
+ name = "Yomou";
+ break;
+ case 30:
+ name = "Coyah";
+ break;
+ case 31:
+ name = "Dubreka";
+ break;
+ case 32:
+ name = "Kankan";
+ break;
+ case 33:
+ name = "Koubia";
+ break;
+ case 34:
+ name = "Labe";
+ break;
+ case 35:
+ name = "Lelouma";
+ break;
+ case 36:
+ name = "Lola";
+ break;
+ case 37:
+ name = "Mandiana";
+ break;
+ case 38:
+ name = "Nzerekore";
+ break;
+ case 39:
+ name = "Siguiri";
+ break;
+ }
+ }
+ if (country_code.equals("GQ") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Annobon";
+ break;
+ case 4:
+ name = "Bioko Norte";
+ break;
+ case 5:
+ name = "Bioko Sur";
+ break;
+ case 6:
+ name = "Centro Sur";
+ break;
+ case 7:
+ name = "Kie-Ntem";
+ break;
+ case 8:
+ name = "Litoral";
+ break;
+ case 9:
+ name = "Wele-Nzas";
+ break;
+ }
+ }
+ if (country_code.equals("GR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Evros";
+ break;
+ case 2:
+ name = "Rodhopi";
+ break;
+ case 3:
+ name = "Xanthi";
+ break;
+ case 4:
+ name = "Drama";
+ break;
+ case 5:
+ name = "Serrai";
+ break;
+ case 6:
+ name = "Kilkis";
+ break;
+ case 7:
+ name = "Pella";
+ break;
+ case 8:
+ name = "Florina";
+ break;
+ case 9:
+ name = "Kastoria";
+ break;
+ case 10:
+ name = "Grevena";
+ break;
+ case 11:
+ name = "Kozani";
+ break;
+ case 12:
+ name = "Imathia";
+ break;
+ case 13:
+ name = "Thessaloniki";
+ break;
+ case 14:
+ name = "Kavala";
+ break;
+ case 15:
+ name = "Khalkidhiki";
+ break;
+ case 16:
+ name = "Pieria";
+ break;
+ case 17:
+ name = "Ioannina";
+ break;
+ case 18:
+ name = "Thesprotia";
+ break;
+ case 19:
+ name = "Preveza";
+ break;
+ case 20:
+ name = "Arta";
+ break;
+ case 21:
+ name = "Larisa";
+ break;
+ case 22:
+ name = "Trikala";
+ break;
+ case 23:
+ name = "Kardhitsa";
+ break;
+ case 24:
+ name = "Magnisia";
+ break;
+ case 25:
+ name = "Kerkira";
+ break;
+ case 26:
+ name = "Levkas";
+ break;
+ case 27:
+ name = "Kefallinia";
+ break;
+ case 28:
+ name = "Zakinthos";
+ break;
+ case 29:
+ name = "Fthiotis";
+ break;
+ case 30:
+ name = "Evritania";
+ break;
+ case 31:
+ name = "Aitolia kai Akarnania";
+ break;
+ case 32:
+ name = "Fokis";
+ break;
+ case 33:
+ name = "Voiotia";
+ break;
+ case 34:
+ name = "Evvoia";
+ break;
+ case 35:
+ name = "Attiki";
+ break;
+ case 36:
+ name = "Argolis";
+ break;
+ case 37:
+ name = "Korinthia";
+ break;
+ case 38:
+ name = "Akhaia";
+ break;
+ case 39:
+ name = "Ilia";
+ break;
+ case 40:
+ name = "Messinia";
+ break;
+ case 41:
+ name = "Arkadhia";
+ break;
+ case 42:
+ name = "Lakonia";
+ break;
+ case 43:
+ name = "Khania";
+ break;
+ case 44:
+ name = "Rethimni";
+ break;
+ case 45:
+ name = "Iraklion";
+ break;
+ case 46:
+ name = "Lasithi";
+ break;
+ case 47:
+ name = "Dhodhekanisos";
+ break;
+ case 48:
+ name = "Samos";
+ break;
+ case 49:
+ name = "Kikladhes";
+ break;
+ case 50:
+ name = "Khios";
+ break;
+ case 51:
+ name = "Lesvos";
+ break;
+ }
+ }
+ if (country_code.equals("GT") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alta Verapaz";
+ break;
+ case 2:
+ name = "Baja Verapaz";
+ break;
+ case 3:
+ name = "Chimaltenango";
+ break;
+ case 4:
+ name = "Chiquimula";
+ break;
+ case 5:
+ name = "El Progreso";
+ break;
+ case 6:
+ name = "Escuintla";
+ break;
+ case 7:
+ name = "Guatemala";
+ break;
+ case 8:
+ name = "Huehuetenango";
+ break;
+ case 9:
+ name = "Izabal";
+ break;
+ case 10:
+ name = "Jalapa";
+ break;
+ case 11:
+ name = "Jutiapa";
+ break;
+ case 12:
+ name = "Peten";
+ break;
+ case 13:
+ name = "Quetzaltenango";
+ break;
+ case 14:
+ name = "Quiche";
+ break;
+ case 15:
+ name = "Retalhuleu";
+ break;
+ case 16:
+ name = "Sacatepequez";
+ break;
+ case 17:
+ name = "San Marcos";
+ break;
+ case 18:
+ name = "Santa Rosa";
+ break;
+ case 19:
+ name = "Solola";
+ break;
+ case 20:
+ name = "Suchitepequez";
+ break;
+ case 21:
+ name = "Totonicapan";
+ break;
+ case 22:
+ name = "Zacapa";
+ break;
+ }
+ }
+ if (country_code.equals("GW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bafata";
+ break;
+ case 2:
+ name = "Quinara";
+ break;
+ case 4:
+ name = "Oio";
+ break;
+ case 5:
+ name = "Bolama";
+ break;
+ case 6:
+ name = "Cacheu";
+ break;
+ case 7:
+ name = "Tombali";
+ break;
+ case 10:
+ name = "Gabu";
+ break;
+ case 11:
+ name = "Bissau";
+ break;
+ case 12:
+ name = "Biombo";
+ break;
+ }
+ }
+ if (country_code.equals("GY") == true) {
+ switch (region_code2) {
+ case 10:
+ name = "Barima-Waini";
+ break;
+ case 11:
+ name = "Cuyuni-Mazaruni";
+ break;
+ case 12:
+ name = "Demerara-Mahaica";
+ break;
+ case 13:
+ name = "East Berbice-Corentyne";
+ break;
+ case 14:
+ name = "Essequibo Islands-West Demerara";
+ break;
+ case 15:
+ name = "Mahaica-Berbice";
+ break;
+ case 16:
+ name = "Pomeroon-Supenaam";
+ break;
+ case 17:
+ name = "Potaro-Siparuni";
+ break;
+ case 18:
+ name = "Upper Demerara-Berbice";
+ break;
+ case 19:
+ name = "Upper Takutu-Upper Essequibo";
+ break;
+ }
+ }
+ if (country_code.equals("HN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Atlantida";
+ break;
+ case 2:
+ name = "Choluteca";
+ break;
+ case 3:
+ name = "Colon";
+ break;
+ case 4:
+ name = "Comayagua";
+ break;
+ case 5:
+ name = "Copan";
+ break;
+ case 6:
+ name = "Cortes";
+ break;
+ case 7:
+ name = "El Paraiso";
+ break;
+ case 8:
+ name = "Francisco Morazan";
+ break;
+ case 9:
+ name = "Gracias a Dios";
+ break;
+ case 10:
+ name = "Intibuca";
+ break;
+ case 11:
+ name = "Islas de la Bahia";
+ break;
+ case 12:
+ name = "La Paz";
+ break;
+ case 13:
+ name = "Lempira";
+ break;
+ case 14:
+ name = "Ocotepeque";
+ break;
+ case 15:
+ name = "Olancho";
+ break;
+ case 16:
+ name = "Santa Barbara";
+ break;
+ case 17:
+ name = "Valle";
+ break;
+ case 18:
+ name = "Yoro";
+ break;
+ }
+ }
+ if (country_code.equals("HR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bjelovarsko-Bilogorska";
+ break;
+ case 2:
+ name = "Brodsko-Posavska";
+ break;
+ case 3:
+ name = "Dubrovacko-Neretvanska";
+ break;
+ case 4:
+ name = "Istarska";
+ break;
+ case 5:
+ name = "Karlovacka";
+ break;
+ case 6:
+ name = "Koprivnicko-Krizevacka";
+ break;
+ case 7:
+ name = "Krapinsko-Zagorska";
+ break;
+ case 8:
+ name = "Licko-Senjska";
+ break;
+ case 9:
+ name = "Medimurska";
+ break;
+ case 10:
+ name = "Osjecko-Baranjska";
+ break;
+ case 11:
+ name = "Pozesko-Slavonska";
+ break;
+ case 12:
+ name = "Primorsko-Goranska";
+ break;
+ case 13:
+ name = "Sibensko-Kninska";
+ break;
+ case 14:
+ name = "Sisacko-Moslavacka";
+ break;
+ case 15:
+ name = "Splitsko-Dalmatinska";
+ break;
+ case 16:
+ name = "Varazdinska";
+ break;
+ case 17:
+ name = "Viroviticko-Podravska";
+ break;
+ case 18:
+ name = "Vukovarsko-Srijemska";
+ break;
+ case 19:
+ name = "Zadarska";
+ break;
+ case 20:
+ name = "Zagrebacka";
+ break;
+ case 21:
+ name = "Grad Zagreb";
+ break;
+ }
+ }
+ if (country_code.equals("HT") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Nord-Ouest";
+ break;
+ case 6:
+ name = "Artibonite";
+ break;
+ case 7:
+ name = "Centre";
+ break;
+ case 9:
+ name = "Nord";
+ break;
+ case 10:
+ name = "Nord-Est";
+ break;
+ case 11:
+ name = "Ouest";
+ break;
+ case 12:
+ name = "Sud";
+ break;
+ case 13:
+ name = "Sud-Est";
+ break;
+ case 14:
+ name = "Grand' Anse";
+ break;
+ case 15:
+ name = "Nippes";
+ break;
+ }
+ }
+ if (country_code.equals("HU") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bacs-Kiskun";
+ break;
+ case 2:
+ name = "Baranya";
+ break;
+ case 3:
+ name = "Bekes";
+ break;
+ case 4:
+ name = "Borsod-Abauj-Zemplen";
+ break;
+ case 5:
+ name = "Budapest";
+ break;
+ case 6:
+ name = "Csongrad";
+ break;
+ case 7:
+ name = "Debrecen";
+ break;
+ case 8:
+ name = "Fejer";
+ break;
+ case 9:
+ name = "Gyor-Moson-Sopron";
+ break;
+ case 10:
+ name = "Hajdu-Bihar";
+ break;
+ case 11:
+ name = "Heves";
+ break;
+ case 12:
+ name = "Komarom-Esztergom";
+ break;
+ case 13:
+ name = "Miskolc";
+ break;
+ case 14:
+ name = "Nograd";
+ break;
+ case 15:
+ name = "Pecs";
+ break;
+ case 16:
+ name = "Pest";
+ break;
+ case 17:
+ name = "Somogy";
+ break;
+ case 18:
+ name = "Szabolcs-Szatmar-Bereg";
+ break;
+ case 19:
+ name = "Szeged";
+ break;
+ case 20:
+ name = "Jasz-Nagykun-Szolnok";
+ break;
+ case 21:
+ name = "Tolna";
+ break;
+ case 22:
+ name = "Vas";
+ break;
+ case 23:
+ name = "Veszprem";
+ break;
+ case 24:
+ name = "Zala";
+ break;
+ case 25:
+ name = "Gyor";
+ break;
+ case 26:
+ name = "Bekescsaba";
+ break;
+ case 27:
+ name = "Dunaujvaros";
+ break;
+ case 28:
+ name = "Eger";
+ break;
+ case 29:
+ name = "Hodmezovasarhely";
+ break;
+ case 30:
+ name = "Kaposvar";
+ break;
+ case 31:
+ name = "Kecskemet";
+ break;
+ case 32:
+ name = "Nagykanizsa";
+ break;
+ case 33:
+ name = "Nyiregyhaza";
+ break;
+ case 34:
+ name = "Sopron";
+ break;
+ case 35:
+ name = "Szekesfehervar";
+ break;
+ case 36:
+ name = "Szolnok";
+ break;
+ case 37:
+ name = "Szombathely";
+ break;
+ case 38:
+ name = "Tatabanya";
+ break;
+ case 39:
+ name = "Veszprem";
+ break;
+ case 40:
+ name = "Zalaegerszeg";
+ break;
+ case 41:
+ name = "Salgotarjan";
+ break;
+ case 42:
+ name = "Szekszard";
+ break;
+ }
+ }
+ if (country_code.equals("ID") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aceh";
+ break;
+ case 2:
+ name = "Bali";
+ break;
+ case 3:
+ name = "Bengkulu";
+ break;
+ case 4:
+ name = "Jakarta Raya";
+ break;
+ case 5:
+ name = "Jambi";
+ break;
+ case 6:
+ name = "Jawa Barat";
+ break;
+ case 7:
+ name = "Jawa Tengah";
+ break;
+ case 8:
+ name = "Jawa Timur";
+ break;
+ case 9:
+ name = "Papua";
+ break;
+ case 10:
+ name = "Yogyakarta";
+ break;
+ case 11:
+ name = "Kalimantan Barat";
+ break;
+ case 12:
+ name = "Kalimantan Selatan";
+ break;
+ case 13:
+ name = "Kalimantan Tengah";
+ break;
+ case 14:
+ name = "Kalimantan Timur";
+ break;
+ case 15:
+ name = "Lampung";
+ break;
+ case 16:
+ name = "Maluku";
+ break;
+ case 17:
+ name = "Nusa Tenggara Barat";
+ break;
+ case 18:
+ name = "Nusa Tenggara Timur";
+ break;
+ case 19:
+ name = "Riau";
+ break;
+ case 20:
+ name = "Sulawesi Selatan";
+ break;
+ case 21:
+ name = "Sulawesi Tengah";
+ break;
+ case 22:
+ name = "Sulawesi Tenggara";
+ break;
+ case 23:
+ name = "Sulawesi Utara";
+ break;
+ case 24:
+ name = "Sumatera Barat";
+ break;
+ case 25:
+ name = "Sumatera Selatan";
+ break;
+ case 26:
+ name = "Sumatera Utara";
+ break;
+ case 28:
+ name = "Maluku";
+ break;
+ case 29:
+ name = "Maluku Utara";
+ break;
+ case 30:
+ name = "Jawa Barat";
+ break;
+ case 31:
+ name = "Sulawesi Utara";
+ break;
+ case 32:
+ name = "Sumatera Selatan";
+ break;
+ case 33:
+ name = "Banten";
+ break;
+ case 34:
+ name = "Gorontalo";
+ break;
+ case 35:
+ name = "Kepulauan Bangka Belitung";
+ break;
+ case 36:
+ name = "Papua";
+ break;
+ case 37:
+ name = "Riau";
+ break;
+ case 38:
+ name = "Sulawesi Selatan";
+ break;
+ case 39:
+ name = "Irian Jaya Barat";
+ break;
+ case 40:
+ name = "Kepulauan Riau";
+ break;
+ case 41:
+ name = "Sulawesi Barat";
+ break;
+ }
+ }
+ if (country_code.equals("IE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Carlow";
+ break;
+ case 2:
+ name = "Cavan";
+ break;
+ case 3:
+ name = "Clare";
+ break;
+ case 4:
+ name = "Cork";
+ break;
+ case 6:
+ name = "Donegal";
+ break;
+ case 7:
+ name = "Dublin";
+ break;
+ case 10:
+ name = "Galway";
+ break;
+ case 11:
+ name = "Kerry";
+ break;
+ case 12:
+ name = "Kildare";
+ break;
+ case 13:
+ name = "Kilkenny";
+ break;
+ case 14:
+ name = "Leitrim";
+ break;
+ case 15:
+ name = "Laois";
+ break;
+ case 16:
+ name = "Limerick";
+ break;
+ case 18:
+ name = "Longford";
+ break;
+ case 19:
+ name = "Louth";
+ break;
+ case 20:
+ name = "Mayo";
+ break;
+ case 21:
+ name = "Meath";
+ break;
+ case 22:
+ name = "Monaghan";
+ break;
+ case 23:
+ name = "Offaly";
+ break;
+ case 24:
+ name = "Roscommon";
+ break;
+ case 25:
+ name = "Sligo";
+ break;
+ case 26:
+ name = "Tipperary";
+ break;
+ case 27:
+ name = "Waterford";
+ break;
+ case 29:
+ name = "Westmeath";
+ break;
+ case 30:
+ name = "Wexford";
+ break;
+ case 31:
+ name = "Wicklow";
+ break;
+ }
+ }
+ if (country_code.equals("IL") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "HaDarom";
+ break;
+ case 2:
+ name = "HaMerkaz";
+ break;
+ case 3:
+ name = "HaZafon";
+ break;
+ case 4:
+ name = "Hefa";
+ break;
+ case 5:
+ name = "Tel Aviv";
+ break;
+ case 6:
+ name = "Yerushalayim";
+ break;
+ }
+ }
+ if (country_code.equals("IN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Andaman and Nicobar Islands";
+ break;
+ case 2:
+ name = "Andhra Pradesh";
+ break;
+ case 3:
+ name = "Assam";
+ break;
+ case 5:
+ name = "Chandigarh";
+ break;
+ case 6:
+ name = "Dadra and Nagar Haveli";
+ break;
+ case 7:
+ name = "Delhi";
+ break;
+ case 9:
+ name = "Gujarat";
+ break;
+ case 10:
+ name = "Haryana";
+ break;
+ case 11:
+ name = "Himachal Pradesh";
+ break;
+ case 12:
+ name = "Jammu and Kashmir";
+ break;
+ case 13:
+ name = "Kerala";
+ break;
+ case 14:
+ name = "Lakshadweep";
+ break;
+ case 16:
+ name = "Maharashtra";
+ break;
+ case 17:
+ name = "Manipur";
+ break;
+ case 18:
+ name = "Meghalaya";
+ break;
+ case 19:
+ name = "Karnataka";
+ break;
+ case 20:
+ name = "Nagaland";
+ break;
+ case 21:
+ name = "Orissa";
+ break;
+ case 22:
+ name = "Puducherry";
+ break;
+ case 23:
+ name = "Punjab";
+ break;
+ case 24:
+ name = "Rajasthan";
+ break;
+ case 25:
+ name = "Tamil Nadu";
+ break;
+ case 26:
+ name = "Tripura";
+ break;
+ case 28:
+ name = "West Bengal";
+ break;
+ case 29:
+ name = "Sikkim";
+ break;
+ case 30:
+ name = "Arunachal Pradesh";
+ break;
+ case 31:
+ name = "Mizoram";
+ break;
+ case 32:
+ name = "Daman and Diu";
+ break;
+ case 33:
+ name = "Goa";
+ break;
+ case 34:
+ name = "Bihar";
+ break;
+ case 35:
+ name = "Madhya Pradesh";
+ break;
+ case 36:
+ name = "Uttar Pradesh";
+ break;
+ case 37:
+ name = "Chhattisgarh";
+ break;
+ case 38:
+ name = "Jharkhand";
+ break;
+ case 39:
+ name = "Uttarakhand";
+ break;
+ }
+ }
+ if (country_code.equals("IQ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Al Anbar";
+ break;
+ case 2:
+ name = "Al Basrah";
+ break;
+ case 3:
+ name = "Al Muthanna";
+ break;
+ case 4:
+ name = "Al Qadisiyah";
+ break;
+ case 5:
+ name = "As Sulaymaniyah";
+ break;
+ case 6:
+ name = "Babil";
+ break;
+ case 7:
+ name = "Baghdad";
+ break;
+ case 8:
+ name = "Dahuk";
+ break;
+ case 9:
+ name = "Dhi Qar";
+ break;
+ case 10:
+ name = "Diyala";
+ break;
+ case 11:
+ name = "Arbil";
+ break;
+ case 12:
+ name = "Karbala'";
+ break;
+ case 13:
+ name = "At Ta'mim";
+ break;
+ case 14:
+ name = "Maysan";
+ break;
+ case 15:
+ name = "Ninawa";
+ break;
+ case 16:
+ name = "Wasit";
+ break;
+ case 17:
+ name = "An Najaf";
+ break;
+ case 18:
+ name = "Salah ad Din";
+ break;
+ }
+ }
+ if (country_code.equals("IR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Azarbayjan-e Bakhtari";
+ break;
+ case 2:
+ name = "Azarbayjan-e Khavari";
+ break;
+ case 3:
+ name = "Chahar Mahall va Bakhtiari";
+ break;
+ case 4:
+ name = "Sistan va Baluchestan";
+ break;
+ case 5:
+ name = "Kohkiluyeh va Buyer Ahmadi";
+ break;
+ case 7:
+ name = "Fars";
+ break;
+ case 8:
+ name = "Gilan";
+ break;
+ case 9:
+ name = "Hamadan";
+ break;
+ case 10:
+ name = "Ilam";
+ break;
+ case 11:
+ name = "Hormozgan";
+ break;
+ case 12:
+ name = "Kerman";
+ break;
+ case 13:
+ name = "Bakhtaran";
+ break;
+ case 15:
+ name = "Khuzestan";
+ break;
+ case 16:
+ name = "Kordestan";
+ break;
+ case 17:
+ name = "Mazandaran";
+ break;
+ case 18:
+ name = "Semnan Province";
+ break;
+ case 19:
+ name = "Markazi";
+ break;
+ case 21:
+ name = "Zanjan";
+ break;
+ case 22:
+ name = "Bushehr";
+ break;
+ case 23:
+ name = "Lorestan";
+ break;
+ case 24:
+ name = "Markazi";
+ break;
+ case 25:
+ name = "Semnan";
+ break;
+ case 26:
+ name = "Tehran";
+ break;
+ case 27:
+ name = "Zanjan";
+ break;
+ case 28:
+ name = "Esfahan";
+ break;
+ case 29:
+ name = "Kerman";
+ break;
+ case 30:
+ name = "Khorasan";
+ break;
+ case 31:
+ name = "Yazd";
+ break;
+ case 32:
+ name = "Ardabil";
+ break;
+ case 33:
+ name = "East Azarbaijan";
+ break;
+ case 34:
+ name = "Markazi";
+ break;
+ case 35:
+ name = "Mazandaran";
+ break;
+ case 36:
+ name = "Zanjan";
+ break;
+ case 37:
+ name = "Golestan";
+ break;
+ case 38:
+ name = "Qazvin";
+ break;
+ case 39:
+ name = "Qom";
+ break;
+ case 40:
+ name = "Yazd";
+ break;
+ case 41:
+ name = "Khorasan-e Janubi";
+ break;
+ case 42:
+ name = "Khorasan-e Razavi";
+ break;
+ case 43:
+ name = "Khorasan-e Shemali";
+ break;
+ }
+ }
+ if (country_code.equals("IS") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Arnessysla";
+ break;
+ case 5:
+ name = "Austur-Hunavatnssysla";
+ break;
+ case 6:
+ name = "Austur-Skaftafellssysla";
+ break;
+ case 7:
+ name = "Borgarfjardarsysla";
+ break;
+ case 9:
+ name = "Eyjafjardarsysla";
+ break;
+ case 10:
+ name = "Gullbringusysla";
+ break;
+ case 15:
+ name = "Kjosarsysla";
+ break;
+ case 17:
+ name = "Myrasysla";
+ break;
+ case 20:
+ name = "Nordur-Mulasysla";
+ break;
+ case 21:
+ name = "Nordur-Tingeyjarsysla";
+ break;
+ case 23:
+ name = "Rangarvallasysla";
+ break;
+ case 28:
+ name = "Skagafjardarsysla";
+ break;
+ case 29:
+ name = "Snafellsnes- og Hnappadalssysla";
+ break;
+ case 30:
+ name = "Strandasysla";
+ break;
+ case 31:
+ name = "Sudur-Mulasysla";
+ break;
+ case 32:
+ name = "Sudur-Tingeyjarsysla";
+ break;
+ case 34:
+ name = "Vestur-Bardastrandarsysla";
+ break;
+ case 35:
+ name = "Vestur-Hunavatnssysla";
+ break;
+ case 36:
+ name = "Vestur-Isafjardarsysla";
+ break;
+ case 37:
+ name = "Vestur-Skaftafellssysla";
+ break;
+ case 40:
+ name = "Norourland Eystra";
+ break;
+ case 41:
+ name = "Norourland Vestra";
+ break;
+ case 42:
+ name = "Suourland";
+ break;
+ case 43:
+ name = "Suournes";
+ break;
+ case 44:
+ name = "Vestfiroir";
+ break;
+ case 45:
+ name = "Vesturland";
+ break;
+ }
+ }
+ if (country_code.equals("IT") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abruzzi";
+ break;
+ case 2:
+ name = "Basilicata";
+ break;
+ case 3:
+ name = "Calabria";
+ break;
+ case 4:
+ name = "Campania";
+ break;
+ case 5:
+ name = "Emilia-Romagna";
+ break;
+ case 6:
+ name = "Friuli-Venezia Giulia";
+ break;
+ case 7:
+ name = "Lazio";
+ break;
+ case 8:
+ name = "Liguria";
+ break;
+ case 9:
+ name = "Lombardia";
+ break;
+ case 10:
+ name = "Marche";
+ break;
+ case 11:
+ name = "Molise";
+ break;
+ case 12:
+ name = "Piemonte";
+ break;
+ case 13:
+ name = "Puglia";
+ break;
+ case 14:
+ name = "Sardegna";
+ break;
+ case 15:
+ name = "Sicilia";
+ break;
+ case 16:
+ name = "Toscana";
+ break;
+ case 17:
+ name = "Trentino-Alto Adige";
+ break;
+ case 18:
+ name = "Umbria";
+ break;
+ case 19:
+ name = "Valle d'Aosta";
+ break;
+ case 20:
+ name = "Veneto";
+ break;
+ }
+ }
+ if (country_code.equals("JM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Clarendon";
+ break;
+ case 2:
+ name = "Hanover";
+ break;
+ case 4:
+ name = "Manchester";
+ break;
+ case 7:
+ name = "Portland";
+ break;
+ case 8:
+ name = "Saint Andrew";
+ break;
+ case 9:
+ name = "Saint Ann";
+ break;
+ case 10:
+ name = "Saint Catherine";
+ break;
+ case 11:
+ name = "Saint Elizabeth";
+ break;
+ case 12:
+ name = "Saint James";
+ break;
+ case 13:
+ name = "Saint Mary";
+ break;
+ case 14:
+ name = "Saint Thomas";
+ break;
+ case 15:
+ name = "Trelawny";
+ break;
+ case 16:
+ name = "Westmoreland";
+ break;
+ case 17:
+ name = "Kingston";
+ break;
+ }
+ }
+ if (country_code.equals("JO") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Al Balqa'";
+ break;
+ case 7:
+ name = "Ma";
+ break;
+ case 9:
+ name = "Al Karak";
+ break;
+ case 10:
+ name = "Al Mafraq";
+ break;
+ case 11:
+ name = "Amman Governorate";
+ break;
+ case 12:
+ name = "At Tafilah";
+ break;
+ case 13:
+ name = "Az Zarqa";
+ break;
+ case 14:
+ name = "Irbid";
+ break;
+ case 16:
+ name = "Amman";
+ break;
+ }
+ }
+ if (country_code.equals("JP") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aichi";
+ break;
+ case 2:
+ name = "Akita";
+ break;
+ case 3:
+ name = "Aomori";
+ break;
+ case 4:
+ name = "Chiba";
+ break;
+ case 5:
+ name = "Ehime";
+ break;
+ case 6:
+ name = "Fukui";
+ break;
+ case 7:
+ name = "Fukuoka";
+ break;
+ case 8:
+ name = "Fukushima";
+ break;
+ case 9:
+ name = "Gifu";
+ break;
+ case 10:
+ name = "Gumma";
+ break;
+ case 11:
+ name = "Hiroshima";
+ break;
+ case 12:
+ name = "Hokkaido";
+ break;
+ case 13:
+ name = "Hyogo";
+ break;
+ case 14:
+ name = "Ibaraki";
+ break;
+ case 15:
+ name = "Ishikawa";
+ break;
+ case 16:
+ name = "Iwate";
+ break;
+ case 17:
+ name = "Kagawa";
+ break;
+ case 18:
+ name = "Kagoshima";
+ break;
+ case 19:
+ name = "Kanagawa";
+ break;
+ case 20:
+ name = "Kochi";
+ break;
+ case 21:
+ name = "Kumamoto";
+ break;
+ case 22:
+ name = "Kyoto";
+ break;
+ case 23:
+ name = "Mie";
+ break;
+ case 24:
+ name = "Miyagi";
+ break;
+ case 25:
+ name = "Miyazaki";
+ break;
+ case 26:
+ name = "Nagano";
+ break;
+ case 27:
+ name = "Nagasaki";
+ break;
+ case 28:
+ name = "Nara";
+ break;
+ case 29:
+ name = "Niigata";
+ break;
+ case 30:
+ name = "Oita";
+ break;
+ case 31:
+ name = "Okayama";
+ break;
+ case 32:
+ name = "Osaka";
+ break;
+ case 33:
+ name = "Saga";
+ break;
+ case 34:
+ name = "Saitama";
+ break;
+ case 35:
+ name = "Shiga";
+ break;
+ case 36:
+ name = "Shimane";
+ break;
+ case 37:
+ name = "Shizuoka";
+ break;
+ case 38:
+ name = "Tochigi";
+ break;
+ case 39:
+ name = "Tokushima";
+ break;
+ case 40:
+ name = "Tokyo";
+ break;
+ case 41:
+ name = "Tottori";
+ break;
+ case 42:
+ name = "Toyama";
+ break;
+ case 43:
+ name = "Wakayama";
+ break;
+ case 44:
+ name = "Yamagata";
+ break;
+ case 45:
+ name = "Yamaguchi";
+ break;
+ case 46:
+ name = "Yamanashi";
+ break;
+ case 47:
+ name = "Okinawa";
+ break;
+ }
+ }
+ if (country_code.equals("KE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Central";
+ break;
+ case 2:
+ name = "Coast";
+ break;
+ case 3:
+ name = "Eastern";
+ break;
+ case 5:
+ name = "Nairobi Area";
+ break;
+ case 6:
+ name = "North-Eastern";
+ break;
+ case 7:
+ name = "Nyanza";
+ break;
+ case 8:
+ name = "Rift Valley";
+ break;
+ case 9:
+ name = "Western";
+ break;
+ }
+ }
+ if (country_code.equals("KG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bishkek";
+ break;
+ case 2:
+ name = "Chuy";
+ break;
+ case 3:
+ name = "Jalal-Abad";
+ break;
+ case 4:
+ name = "Naryn";
+ break;
+ case 5:
+ name = "Osh";
+ break;
+ case 6:
+ name = "Talas";
+ break;
+ case 7:
+ name = "Ysyk-Kol";
+ break;
+ case 8:
+ name = "Osh";
+ break;
+ case 9:
+ name = "Batken";
+ break;
+ }
+ }
+ if (country_code.equals("KH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Batdambang";
+ break;
+ case 2:
+ name = "Kampong Cham";
+ break;
+ case 3:
+ name = "Kampong Chhnang";
+ break;
+ case 4:
+ name = "Kampong Speu";
+ break;
+ case 5:
+ name = "Kampong Thum";
+ break;
+ case 6:
+ name = "Kampot";
+ break;
+ case 7:
+ name = "Kandal";
+ break;
+ case 8:
+ name = "Koh Kong";
+ break;
+ case 9:
+ name = "Kracheh";
+ break;
+ case 10:
+ name = "Mondulkiri";
+ break;
+ case 11:
+ name = "Phnum Penh";
+ break;
+ case 12:
+ name = "Pursat";
+ break;
+ case 13:
+ name = "Preah Vihear";
+ break;
+ case 14:
+ name = "Prey Veng";
+ break;
+ case 15:
+ name = "Ratanakiri Kiri";
+ break;
+ case 16:
+ name = "Siem Reap";
+ break;
+ case 17:
+ name = "Stung Treng";
+ break;
+ case 18:
+ name = "Svay Rieng";
+ break;
+ case 19:
+ name = "Takeo";
+ break;
+ case 25:
+ name = "Banteay Meanchey";
+ break;
+ case 29:
+ name = "Batdambang";
+ break;
+ case 30:
+ name = "Pailin";
+ break;
+ }
+ }
+ if (country_code.equals("KI") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Gilbert Islands";
+ break;
+ case 2:
+ name = "Line Islands";
+ break;
+ case 3:
+ name = "Phoenix Islands";
+ break;
+ }
+ }
+ if (country_code.equals("KM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Anjouan";
+ break;
+ case 2:
+ name = "Grande Comore";
+ break;
+ case 3:
+ name = "Moheli";
+ break;
+ }
+ }
+ if (country_code.equals("KN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Christ Church Nichola Town";
+ break;
+ case 2:
+ name = "Saint Anne Sandy Point";
+ break;
+ case 3:
+ name = "Saint George Basseterre";
+ break;
+ case 4:
+ name = "Saint George Gingerland";
+ break;
+ case 5:
+ name = "Saint James Windward";
+ break;
+ case 6:
+ name = "Saint John Capisterre";
+ break;
+ case 7:
+ name = "Saint John Figtree";
+ break;
+ case 8:
+ name = "Saint Mary Cayon";
+ break;
+ case 9:
+ name = "Saint Paul Capisterre";
+ break;
+ case 10:
+ name = "Saint Paul Charlestown";
+ break;
+ case 11:
+ name = "Saint Peter Basseterre";
+ break;
+ case 12:
+ name = "Saint Thomas Lowland";
+ break;
+ case 13:
+ name = "Saint Thomas Middle Island";
+ break;
+ case 15:
+ name = "Trinity Palmetto Point";
+ break;
+ }
+ }
+ if (country_code.equals("KP") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Chagang-do";
+ break;
+ case 3:
+ name = "Hamgyong-namdo";
+ break;
+ case 6:
+ name = "Hwanghae-namdo";
+ break;
+ case 7:
+ name = "Hwanghae-bukto";
+ break;
+ case 8:
+ name = "Kaesong-si";
+ break;
+ case 9:
+ name = "Kangwon-do";
+ break;
+ case 11:
+ name = "P'yongan-bukto";
+ break;
+ case 12:
+ name = "P'yongyang-si";
+ break;
+ case 13:
+ name = "Yanggang-do";
+ break;
+ case 14:
+ name = "Namp'o-si";
+ break;
+ case 15:
+ name = "P'yongan-namdo";
+ break;
+ case 17:
+ name = "Hamgyong-bukto";
+ break;
+ case 18:
+ name = "Najin Sonbong-si";
+ break;
+ }
+ }
+ if (country_code.equals("KR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Cheju-do";
+ break;
+ case 3:
+ name = "Cholla-bukto";
+ break;
+ case 5:
+ name = "Ch'ungch'ong-bukto";
+ break;
+ case 6:
+ name = "Kangwon-do";
+ break;
+ case 10:
+ name = "Pusan-jikhalsi";
+ break;
+ case 11:
+ name = "Seoul-t'ukpyolsi";
+ break;
+ case 12:
+ name = "Inch'on-jikhalsi";
+ break;
+ case 13:
+ name = "Kyonggi-do";
+ break;
+ case 14:
+ name = "Kyongsang-bukto";
+ break;
+ case 15:
+ name = "Taegu-jikhalsi";
+ break;
+ case 16:
+ name = "Cholla-namdo";
+ break;
+ case 17:
+ name = "Ch'ungch'ong-namdo";
+ break;
+ case 18:
+ name = "Kwangju-jikhalsi";
+ break;
+ case 19:
+ name = "Taejon-jikhalsi";
+ break;
+ case 20:
+ name = "Kyongsang-namdo";
+ break;
+ case 21:
+ name = "Ulsan-gwangyoksi";
+ break;
+ }
+ }
+ if (country_code.equals("KW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Al Ahmadi";
+ break;
+ case 2:
+ name = "Al Kuwayt";
+ break;
+ case 5:
+ name = "Al Jahra";
+ break;
+ case 7:
+ name = "Al Farwaniyah";
+ break;
+ case 8:
+ name = "Hawalli";
+ break;
+ case 9:
+ name = "Mubarak al Kabir";
+ break;
+ }
+ }
+ if (country_code.equals("KY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Creek";
+ break;
+ case 2:
+ name = "Eastern";
+ break;
+ case 3:
+ name = "Midland";
+ break;
+ case 4:
+ name = "South Town";
+ break;
+ case 5:
+ name = "Spot Bay";
+ break;
+ case 6:
+ name = "Stake Bay";
+ break;
+ case 7:
+ name = "West End";
+ break;
+ case 8:
+ name = "Western";
+ break;
+ }
+ }
+ if (country_code.equals("KZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Almaty";
+ break;
+ case 2:
+ name = "Almaty City";
+ break;
+ case 3:
+ name = "Aqmola";
+ break;
+ case 4:
+ name = "Aqtobe";
+ break;
+ case 5:
+ name = "Astana";
+ break;
+ case 6:
+ name = "Atyrau";
+ break;
+ case 7:
+ name = "West Kazakhstan";
+ break;
+ case 8:
+ name = "Bayqonyr";
+ break;
+ case 9:
+ name = "Mangghystau";
+ break;
+ case 10:
+ name = "South Kazakhstan";
+ break;
+ case 11:
+ name = "Pavlodar";
+ break;
+ case 12:
+ name = "Qaraghandy";
+ break;
+ case 13:
+ name = "Qostanay";
+ break;
+ case 14:
+ name = "Qyzylorda";
+ break;
+ case 15:
+ name = "East Kazakhstan";
+ break;
+ case 16:
+ name = "North Kazakhstan";
+ break;
+ case 17:
+ name = "Zhambyl";
+ break;
+ }
+ }
+ if (country_code.equals("LA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Attapu";
+ break;
+ case 2:
+ name = "Champasak";
+ break;
+ case 3:
+ name = "Houaphan";
+ break;
+ case 4:
+ name = "Khammouan";
+ break;
+ case 5:
+ name = "Louang Namtha";
+ break;
+ case 7:
+ name = "Oudomxai";
+ break;
+ case 8:
+ name = "Phongsali";
+ break;
+ case 9:
+ name = "Saravan";
+ break;
+ case 10:
+ name = "Savannakhet";
+ break;
+ case 11:
+ name = "Vientiane";
+ break;
+ case 13:
+ name = "Xaignabouri";
+ break;
+ case 14:
+ name = "Xiangkhoang";
+ break;
+ case 17:
+ name = "Louangphrabang";
+ break;
+ }
+ }
+ if (country_code.equals("LB") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Beqaa";
+ break;
+ case 2:
+ name = "Al Janub";
+ break;
+ case 3:
+ name = "Liban-Nord";
+ break;
+ case 4:
+ name = "Beyrouth";
+ break;
+ case 5:
+ name = "Mont-Liban";
+ break;
+ case 6:
+ name = "Liban-Sud";
+ break;
+ case 7:
+ name = "Nabatiye";
+ break;
+ case 8:
+ name = "Beqaa";
+ break;
+ case 9:
+ name = "Liban-Nord";
+ break;
+ case 10:
+ name = "Aakk";
+ break;
+ case 11:
+ name = "Baalbek-Hermel";
+ break;
+ }
+ }
+ if (country_code.equals("LC") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Anse-la-Raye";
+ break;
+ case 2:
+ name = "Dauphin";
+ break;
+ case 3:
+ name = "Castries";
+ break;
+ case 4:
+ name = "Choiseul";
+ break;
+ case 5:
+ name = "Dennery";
+ break;
+ case 6:
+ name = "Gros-Islet";
+ break;
+ case 7:
+ name = "Laborie";
+ break;
+ case 8:
+ name = "Micoud";
+ break;
+ case 9:
+ name = "Soufriere";
+ break;
+ case 10:
+ name = "Vieux-Fort";
+ break;
+ case 11:
+ name = "Praslin";
+ break;
+ }
+ }
+ if (country_code.equals("LI") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Balzers";
+ break;
+ case 2:
+ name = "Eschen";
+ break;
+ case 3:
+ name = "Gamprin";
+ break;
+ case 4:
+ name = "Mauren";
+ break;
+ case 5:
+ name = "Planken";
+ break;
+ case 6:
+ name = "Ruggell";
+ break;
+ case 7:
+ name = "Schaan";
+ break;
+ case 8:
+ name = "Schellenberg";
+ break;
+ case 9:
+ name = "Triesen";
+ break;
+ case 10:
+ name = "Triesenberg";
+ break;
+ case 11:
+ name = "Vaduz";
+ break;
+ case 21:
+ name = "Gbarpolu";
+ break;
+ case 22:
+ name = "River Gee";
+ break;
+ }
+ }
+ if (country_code.equals("LK") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Amparai";
+ break;
+ case 2:
+ name = "Anuradhapura";
+ break;
+ case 3:
+ name = "Badulla";
+ break;
+ case 4:
+ name = "Batticaloa";
+ break;
+ case 6:
+ name = "Galle";
+ break;
+ case 7:
+ name = "Hambantota";
+ break;
+ case 9:
+ name = "Kalutara";
+ break;
+ case 10:
+ name = "Kandy";
+ break;
+ case 11:
+ name = "Kegalla";
+ break;
+ case 12:
+ name = "Kurunegala";
+ break;
+ case 14:
+ name = "Matale";
+ break;
+ case 15:
+ name = "Matara";
+ break;
+ case 16:
+ name = "Moneragala";
+ break;
+ case 17:
+ name = "Nuwara Eliya";
+ break;
+ case 18:
+ name = "Polonnaruwa";
+ break;
+ case 19:
+ name = "Puttalam";
+ break;
+ case 20:
+ name = "Ratnapura";
+ break;
+ case 21:
+ name = "Trincomalee";
+ break;
+ case 23:
+ name = "Colombo";
+ break;
+ case 24:
+ name = "Gampaha";
+ break;
+ case 25:
+ name = "Jaffna";
+ break;
+ case 26:
+ name = "Mannar";
+ break;
+ case 27:
+ name = "Mullaittivu";
+ break;
+ case 28:
+ name = "Vavuniya";
+ break;
+ case 29:
+ name = "Central";
+ break;
+ case 30:
+ name = "North Central";
+ break;
+ case 31:
+ name = "Northern";
+ break;
+ case 32:
+ name = "North Western";
+ break;
+ case 33:
+ name = "Sabaragamuwa";
+ break;
+ case 34:
+ name = "Southern";
+ break;
+ case 35:
+ name = "Uva";
+ break;
+ case 36:
+ name = "Western";
+ break;
+ }
+ }
+ if (country_code.equals("LR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bong";
+ break;
+ case 4:
+ name = "Grand Cape Mount";
+ break;
+ case 5:
+ name = "Lofa";
+ break;
+ case 6:
+ name = "Maryland";
+ break;
+ case 7:
+ name = "Monrovia";
+ break;
+ case 9:
+ name = "Nimba";
+ break;
+ case 10:
+ name = "Sino";
+ break;
+ case 11:
+ name = "Grand Bassa";
+ break;
+ case 12:
+ name = "Grand Cape Mount";
+ break;
+ case 13:
+ name = "Maryland";
+ break;
+ case 14:
+ name = "Montserrado";
+ break;
+ case 17:
+ name = "Margibi";
+ break;
+ case 18:
+ name = "River Cess";
+ break;
+ case 19:
+ name = "Grand Gedeh";
+ break;
+ case 20:
+ name = "Lofa";
+ break;
+ case 21:
+ name = "Gbarpolu";
+ break;
+ case 22:
+ name = "River Gee";
+ break;
+ }
+ }
+ if (country_code.equals("LS") == true) {
+ switch (region_code2) {
+ case 10:
+ name = "Berea";
+ break;
+ case 11:
+ name = "Butha-Buthe";
+ break;
+ case 12:
+ name = "Leribe";
+ break;
+ case 13:
+ name = "Mafeteng";
+ break;
+ case 14:
+ name = "Maseru";
+ break;
+ case 15:
+ name = "Mohales Hoek";
+ break;
+ case 16:
+ name = "Mokhotlong";
+ break;
+ case 17:
+ name = "Qachas Nek";
+ break;
+ case 18:
+ name = "Quthing";
+ break;
+ case 19:
+ name = "Thaba-Tseka";
+ break;
+ }
+ }
+ if (country_code.equals("LT") == true) {
+ switch (region_code2) {
+ case 56:
+ name = "Alytaus Apskritis";
+ break;
+ case 57:
+ name = "Kauno Apskritis";
+ break;
+ case 58:
+ name = "Klaipedos Apskritis";
+ break;
+ case 59:
+ name = "Marijampoles Apskritis";
+ break;
+ case 60:
+ name = "Panevezio Apskritis";
+ break;
+ case 61:
+ name = "Siauliu Apskritis";
+ break;
+ case 62:
+ name = "Taurages Apskritis";
+ break;
+ case 63:
+ name = "Telsiu Apskritis";
+ break;
+ case 64:
+ name = "Utenos Apskritis";
+ break;
+ case 65:
+ name = "Vilniaus Apskritis";
+ break;
+ }
+ }
+ if (country_code.equals("LU") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Diekirch";
+ break;
+ case 2:
+ name = "Grevenmacher";
+ break;
+ case 3:
+ name = "Luxembourg";
+ break;
+ }
+ }
+ if (country_code.equals("LV") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aizkraukles";
+ break;
+ case 2:
+ name = "Aluksnes";
+ break;
+ case 3:
+ name = "Balvu";
+ break;
+ case 4:
+ name = "Bauskas";
+ break;
+ case 5:
+ name = "Cesu";
+ break;
+ case 6:
+ name = "Daugavpils";
+ break;
+ case 7:
+ name = "Daugavpils";
+ break;
+ case 8:
+ name = "Dobeles";
+ break;
+ case 9:
+ name = "Gulbenes";
+ break;
+ case 10:
+ name = "Jekabpils";
+ break;
+ case 11:
+ name = "Jelgava";
+ break;
+ case 12:
+ name = "Jelgavas";
+ break;
+ case 13:
+ name = "Jurmala";
+ break;
+ case 14:
+ name = "Kraslavas";
+ break;
+ case 15:
+ name = "Kuldigas";
+ break;
+ case 16:
+ name = "Liepaja";
+ break;
+ case 17:
+ name = "Liepajas";
+ break;
+ case 18:
+ name = "Limbazu";
+ break;
+ case 19:
+ name = "Ludzas";
+ break;
+ case 20:
+ name = "Madonas";
+ break;
+ case 21:
+ name = "Ogres";
+ break;
+ case 22:
+ name = "Preilu";
+ break;
+ case 23:
+ name = "Rezekne";
+ break;
+ case 24:
+ name = "Rezeknes";
+ break;
+ case 25:
+ name = "Riga";
+ break;
+ case 26:
+ name = "Rigas";
+ break;
+ case 27:
+ name = "Saldus";
+ break;
+ case 28:
+ name = "Talsu";
+ break;
+ case 29:
+ name = "Tukuma";
+ break;
+ case 30:
+ name = "Valkas";
+ break;
+ case 31:
+ name = "Valmieras";
+ break;
+ case 32:
+ name = "Ventspils";
+ break;
+ case 33:
+ name = "Ventspils";
+ break;
+ }
+ }
+ if (country_code.equals("LY") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Al Aziziyah";
+ break;
+ case 5:
+ name = "Al Jufrah";
+ break;
+ case 8:
+ name = "Al Kufrah";
+ break;
+ case 13:
+ name = "Ash Shati'";
+ break;
+ case 30:
+ name = "Murzuq";
+ break;
+ case 34:
+ name = "Sabha";
+ break;
+ case 41:
+ name = "Tarhunah";
+ break;
+ case 42:
+ name = "Tubruq";
+ break;
+ case 45:
+ name = "Zlitan";
+ break;
+ case 47:
+ name = "Ajdabiya";
+ break;
+ case 48:
+ name = "Al Fatih";
+ break;
+ case 49:
+ name = "Al Jabal al Akhdar";
+ break;
+ case 50:
+ name = "Al Khums";
+ break;
+ case 51:
+ name = "An Nuqat al Khams";
+ break;
+ case 52:
+ name = "Awbari";
+ break;
+ case 53:
+ name = "Az Zawiyah";
+ break;
+ case 54:
+ name = "Banghazi";
+ break;
+ case 55:
+ name = "Darnah";
+ break;
+ case 56:
+ name = "Ghadamis";
+ break;
+ case 57:
+ name = "Gharyan";
+ break;
+ case 58:
+ name = "Misratah";
+ break;
+ case 59:
+ name = "Sawfajjin";
+ break;
+ case 60:
+ name = "Surt";
+ break;
+ case 61:
+ name = "Tarabulus";
+ break;
+ case 62:
+ name = "Yafran";
+ break;
+ }
+ }
+ if (country_code.equals("MA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Agadir";
+ break;
+ case 2:
+ name = "Al Hoceima";
+ break;
+ case 3:
+ name = "Azilal";
+ break;
+ case 4:
+ name = "Ben Slimane";
+ break;
+ case 5:
+ name = "Beni Mellal";
+ break;
+ case 6:
+ name = "Boulemane";
+ break;
+ case 7:
+ name = "Casablanca";
+ break;
+ case 8:
+ name = "Chaouen";
+ break;
+ case 9:
+ name = "El Jadida";
+ break;
+ case 10:
+ name = "El Kelaa des Srarhna";
+ break;
+ case 11:
+ name = "Er Rachidia";
+ break;
+ case 12:
+ name = "Essaouira";
+ break;
+ case 13:
+ name = "Fes";
+ break;
+ case 14:
+ name = "Figuig";
+ break;
+ case 15:
+ name = "Kenitra";
+ break;
+ case 16:
+ name = "Khemisset";
+ break;
+ case 17:
+ name = "Khenifra";
+ break;
+ case 18:
+ name = "Khouribga";
+ break;
+ case 19:
+ name = "Marrakech";
+ break;
+ case 20:
+ name = "Meknes";
+ break;
+ case 21:
+ name = "Nador";
+ break;
+ case 22:
+ name = "Ouarzazate";
+ break;
+ case 23:
+ name = "Oujda";
+ break;
+ case 24:
+ name = "Rabat-Sale";
+ break;
+ case 25:
+ name = "Safi";
+ break;
+ case 26:
+ name = "Settat";
+ break;
+ case 27:
+ name = "Tanger";
+ break;
+ case 29:
+ name = "Tata";
+ break;
+ case 30:
+ name = "Taza";
+ break;
+ case 32:
+ name = "Tiznit";
+ break;
+ case 33:
+ name = "Guelmim";
+ break;
+ case 34:
+ name = "Ifrane";
+ break;
+ case 35:
+ name = "Laayoune";
+ break;
+ case 36:
+ name = "Tan-Tan";
+ break;
+ case 37:
+ name = "Taounate";
+ break;
+ case 38:
+ name = "Sidi Kacem";
+ break;
+ case 39:
+ name = "Taroudannt";
+ break;
+ case 40:
+ name = "Tetouan";
+ break;
+ case 41:
+ name = "Larache";
+ break;
+ case 45:
+ name = "Grand Casablanca";
+ break;
+ case 46:
+ name = "Fes-Boulemane";
+ break;
+ case 47:
+ name = "Marrakech-Tensift-Al Haouz";
+ break;
+ case 48:
+ name = "Meknes-Tafilalet";
+ break;
+ case 49:
+ name = "Rabat-Sale-Zemmour-Zaer";
+ break;
+ case 50:
+ name = "Chaouia-Ouardigha";
+ break;
+ case 51:
+ name = "Doukkala-Abda";
+ break;
+ case 52:
+ name = "Gharb-Chrarda-Beni Hssen";
+ break;
+ case 53:
+ name = "Guelmim-Es Smara";
+ break;
+ case 54:
+ name = "Oriental";
+ break;
+ case 55:
+ name = "Souss-Massa-Dr";
+ break;
+ case 56:
+ name = "Tadla-Azilal";
+ break;
+ case 57:
+ name = "Tanger-Tetouan";
+ break;
+ case 58:
+ name = "Taza-Al Hoceima-Taounate";
+ break;
+ case 59:
+ name = "La";
+ break;
+ }
+ }
+ if (country_code.equals("MC") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "La Condamine";
+ break;
+ case 2:
+ name = "Monaco";
+ break;
+ case 3:
+ name = "Monte-Carlo";
+ break;
+ }
+ }
+ if (country_code.equals("MD") == true) {
+ switch (region_code2) {
+ case 46:
+ name = "Balti";
+ break;
+ case 47:
+ name = "Cahul";
+ break;
+ case 48:
+ name = "Chisinau";
+ break;
+ case 49:
+ name = "Stinga Nistrului";
+ break;
+ case 50:
+ name = "Edinet";
+ break;
+ case 51:
+ name = "Gagauzia";
+ break;
+ case 52:
+ name = "Lapusna";
+ break;
+ case 53:
+ name = "Orhei";
+ break;
+ case 54:
+ name = "Soroca";
+ break;
+ case 55:
+ name = "Tighina";
+ break;
+ case 56:
+ name = "Ungheni";
+ break;
+ case 58:
+ name = "Stinga Nistrului";
+ break;
+ case 59:
+ name = "Anenii Noi";
+ break;
+ case 60:
+ name = "Balti";
+ break;
+ case 61:
+ name = "Basarabeasca";
+ break;
+ case 62:
+ name = "Bender";
+ break;
+ case 63:
+ name = "Briceni";
+ break;
+ case 64:
+ name = "Cahul";
+ break;
+ case 65:
+ name = "Cantemir";
+ break;
+ case 66:
+ name = "Calarasi";
+ break;
+ case 67:
+ name = "Causeni";
+ break;
+ case 68:
+ name = "Cimislia";
+ break;
+ case 69:
+ name = "Criuleni";
+ break;
+ case 70:
+ name = "Donduseni";
+ break;
+ case 71:
+ name = "Drochia";
+ break;
+ case 72:
+ name = "Dubasari";
+ break;
+ case 73:
+ name = "Edinet";
+ break;
+ case 74:
+ name = "Falesti";
+ break;
+ case 75:
+ name = "Floresti";
+ break;
+ case 76:
+ name = "Glodeni";
+ break;
+ case 77:
+ name = "Hincesti";
+ break;
+ case 78:
+ name = "Ialoveni";
+ break;
+ case 79:
+ name = "Leova";
+ break;
+ case 80:
+ name = "Nisporeni";
+ break;
+ case 81:
+ name = "Ocnita";
+ break;
+ case 83:
+ name = "Rezina";
+ break;
+ case 84:
+ name = "Riscani";
+ break;
+ case 85:
+ name = "Singerei";
+ break;
+ case 86:
+ name = "Soldanesti";
+ break;
+ case 87:
+ name = "Soroca";
+ break;
+ case 88:
+ name = "Stefan-Voda";
+ break;
+ case 89:
+ name = "Straseni";
+ break;
+ case 90:
+ name = "Taraclia";
+ break;
+ case 91:
+ name = "Telenesti";
+ break;
+ case 92:
+ name = "Ungheni";
+ break;
+ }
+ }
+ if (country_code.equals("MG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Antsiranana";
+ break;
+ case 2:
+ name = "Fianarantsoa";
+ break;
+ case 3:
+ name = "Mahajanga";
+ break;
+ case 4:
+ name = "Toamasina";
+ break;
+ case 5:
+ name = "Antananarivo";
+ break;
+ case 6:
+ name = "Toliara";
+ break;
+ }
+ }
+ if (country_code.equals("MK") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aracinovo";
+ break;
+ case 2:
+ name = "Bac";
+ break;
+ case 3:
+ name = "Belcista";
+ break;
+ case 4:
+ name = "Berovo";
+ break;
+ case 5:
+ name = "Bistrica";
+ break;
+ case 6:
+ name = "Bitola";
+ break;
+ case 7:
+ name = "Blatec";
+ break;
+ case 8:
+ name = "Bogdanci";
+ break;
+ case 9:
+ name = "Bogomila";
+ break;
+ case 10:
+ name = "Bogovinje";
+ break;
+ case 11:
+ name = "Bosilovo";
+ break;
+ case 12:
+ name = "Brvenica";
+ break;
+ case 13:
+ name = "Cair";
+ break;
+ case 14:
+ name = "Capari";
+ break;
+ case 15:
+ name = "Caska";
+ break;
+ case 16:
+ name = "Cegrane";
+ break;
+ case 17:
+ name = "Centar";
+ break;
+ case 18:
+ name = "Centar Zupa";
+ break;
+ case 19:
+ name = "Cesinovo";
+ break;
+ case 20:
+ name = "Cucer-Sandevo";
+ break;
+ case 21:
+ name = "Debar";
+ break;
+ case 22:
+ name = "Delcevo";
+ break;
+ case 23:
+ name = "Delogozdi";
+ break;
+ case 24:
+ name = "Demir Hisar";
+ break;
+ case 25:
+ name = "Demir Kapija";
+ break;
+ case 26:
+ name = "Dobrusevo";
+ break;
+ case 27:
+ name = "Dolna Banjica";
+ break;
+ case 28:
+ name = "Dolneni";
+ break;
+ case 29:
+ name = "Dorce Petrov";
+ break;
+ case 30:
+ name = "Drugovo";
+ break;
+ case 31:
+ name = "Dzepciste";
+ break;
+ case 32:
+ name = "Gazi Baba";
+ break;
+ case 33:
+ name = "Gevgelija";
+ break;
+ case 34:
+ name = "Gostivar";
+ break;
+ case 35:
+ name = "Gradsko";
+ break;
+ case 36:
+ name = "Ilinden";
+ break;
+ case 37:
+ name = "Izvor";
+ break;
+ case 38:
+ name = "Jegunovce";
+ break;
+ case 39:
+ name = "Kamenjane";
+ break;
+ case 40:
+ name = "Karbinci";
+ break;
+ case 41:
+ name = "Karpos";
+ break;
+ case 42:
+ name = "Kavadarci";
+ break;
+ case 43:
+ name = "Kicevo";
+ break;
+ case 44:
+ name = "Kisela Voda";
+ break;
+ case 45:
+ name = "Klecevce";
+ break;
+ case 46:
+ name = "Kocani";
+ break;
+ case 47:
+ name = "Konce";
+ break;
+ case 48:
+ name = "Kondovo";
+ break;
+ case 49:
+ name = "Konopiste";
+ break;
+ case 50:
+ name = "Kosel";
+ break;
+ case 51:
+ name = "Kratovo";
+ break;
+ case 52:
+ name = "Kriva Palanka";
+ break;
+ case 53:
+ name = "Krivogastani";
+ break;
+ case 54:
+ name = "Krusevo";
+ break;
+ case 55:
+ name = "Kuklis";
+ break;
+ case 56:
+ name = "Kukurecani";
+ break;
+ case 57:
+ name = "Kumanovo";
+ break;
+ case 58:
+ name = "Labunista";
+ break;
+ case 59:
+ name = "Lipkovo";
+ break;
+ case 60:
+ name = "Lozovo";
+ break;
+ case 61:
+ name = "Lukovo";
+ break;
+ case 62:
+ name = "Makedonska Kamenica";
+ break;
+ case 63:
+ name = "Makedonski Brod";
+ break;
+ case 64:
+ name = "Mavrovi Anovi";
+ break;
+ case 65:
+ name = "Meseista";
+ break;
+ case 66:
+ name = "Miravci";
+ break;
+ case 67:
+ name = "Mogila";
+ break;
+ case 68:
+ name = "Murtino";
+ break;
+ case 69:
+ name = "Negotino";
+ break;
+ case 70:
+ name = "Negotino-Polosko";
+ break;
+ case 71:
+ name = "Novaci";
+ break;
+ case 72:
+ name = "Novo Selo";
+ break;
+ case 73:
+ name = "Oblesevo";
+ break;
+ case 74:
+ name = "Ohrid";
+ break;
+ case 75:
+ name = "Orasac";
+ break;
+ case 76:
+ name = "Orizari";
+ break;
+ case 77:
+ name = "Oslomej";
+ break;
+ case 78:
+ name = "Pehcevo";
+ break;
+ case 79:
+ name = "Petrovec";
+ break;
+ case 80:
+ name = "Plasnica";
+ break;
+ case 81:
+ name = "Podares";
+ break;
+ case 82:
+ name = "Prilep";
+ break;
+ case 83:
+ name = "Probistip";
+ break;
+ case 84:
+ name = "Radovis";
+ break;
+ case 85:
+ name = "Rankovce";
+ break;
+ case 86:
+ name = "Resen";
+ break;
+ case 87:
+ name = "Rosoman";
+ break;
+ case 88:
+ name = "Rostusa";
+ break;
+ case 89:
+ name = "Samokov";
+ break;
+ case 90:
+ name = "Saraj";
+ break;
+ case 91:
+ name = "Sipkovica";
+ break;
+ case 92:
+ name = "Sopiste";
+ break;
+ case 93:
+ name = "Sopotnica";
+ break;
+ case 94:
+ name = "Srbinovo";
+ break;
+ case 95:
+ name = "Staravina";
+ break;
+ case 96:
+ name = "Star Dojran";
+ break;
+ case 97:
+ name = "Staro Nagoricane";
+ break;
+ case 98:
+ name = "Stip";
+ break;
+ case 99:
+ name = "Struga";
+ break;
+ case 832:
+ name = "Strumica";
+ break;
+ case 833:
+ name = "Studenicani";
+ break;
+ case 834:
+ name = "Suto Orizari";
+ break;
+ case 835:
+ name = "Sveti Nikole";
+ break;
+ case 836:
+ name = "Tearce";
+ break;
+ case 837:
+ name = "Tetovo";
+ break;
+ case 838:
+ name = "Topolcani";
+ break;
+ case 839:
+ name = "Valandovo";
+ break;
+ case 840:
+ name = "Vasilevo";
+ break;
+ case 875:
+ name = "Veles";
+ break;
+ case 876:
+ name = "Velesta";
+ break;
+ case 877:
+ name = "Vevcani";
+ break;
+ case 878:
+ name = "Vinica";
+ break;
+ case 879:
+ name = "Vitoliste";
+ break;
+ case 880:
+ name = "Vranestica";
+ break;
+ case 881:
+ name = "Vrapciste";
+ break;
+ case 882:
+ name = "Vratnica";
+ break;
+ case 883:
+ name = "Vrutok";
+ break;
+ case 918:
+ name = "Zajas";
+ break;
+ case 919:
+ name = "Zelenikovo";
+ break;
+ case 920:
+ name = "Zelino";
+ break;
+ case 921:
+ name = "Zitose";
+ break;
+ case 922:
+ name = "Zletovo";
+ break;
+ case 923:
+ name = "Zrnovci";
+ break;
+ }
+ }
+ if (country_code.equals("ML") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bamako";
+ break;
+ case 3:
+ name = "Kayes";
+ break;
+ case 4:
+ name = "Mopti";
+ break;
+ case 5:
+ name = "Segou";
+ break;
+ case 6:
+ name = "Sikasso";
+ break;
+ case 7:
+ name = "Koulikoro";
+ break;
+ case 8:
+ name = "Tombouctou";
+ break;
+ case 9:
+ name = "Gao";
+ break;
+ case 10:
+ name = "Kidal";
+ break;
+ }
+ }
+ if (country_code.equals("MM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Rakhine State";
+ break;
+ case 2:
+ name = "Chin State";
+ break;
+ case 3:
+ name = "Irrawaddy";
+ break;
+ case 4:
+ name = "Kachin State";
+ break;
+ case 5:
+ name = "Karan State";
+ break;
+ case 6:
+ name = "Kayah State";
+ break;
+ case 7:
+ name = "Magwe";
+ break;
+ case 8:
+ name = "Mandalay";
+ break;
+ case 9:
+ name = "Pegu";
+ break;
+ case 10:
+ name = "Sagaing";
+ break;
+ case 11:
+ name = "Shan State";
+ break;
+ case 12:
+ name = "Tenasserim";
+ break;
+ case 13:
+ name = "Mon State";
+ break;
+ case 14:
+ name = "Rangoon";
+ break;
+ case 17:
+ name = "Yangon";
+ break;
+ }
+ }
+ if (country_code.equals("MN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Arhangay";
+ break;
+ case 2:
+ name = "Bayanhongor";
+ break;
+ case 3:
+ name = "Bayan-Olgiy";
+ break;
+ case 5:
+ name = "Darhan";
+ break;
+ case 6:
+ name = "Dornod";
+ break;
+ case 7:
+ name = "Dornogovi";
+ break;
+ case 8:
+ name = "Dundgovi";
+ break;
+ case 9:
+ name = "Dzavhan";
+ break;
+ case 10:
+ name = "Govi-Altay";
+ break;
+ case 11:
+ name = "Hentiy";
+ break;
+ case 12:
+ name = "Hovd";
+ break;
+ case 13:
+ name = "Hovsgol";
+ break;
+ case 14:
+ name = "Omnogovi";
+ break;
+ case 15:
+ name = "Ovorhangay";
+ break;
+ case 16:
+ name = "Selenge";
+ break;
+ case 17:
+ name = "Suhbaatar";
+ break;
+ case 18:
+ name = "Tov";
+ break;
+ case 19:
+ name = "Uvs";
+ break;
+ case 20:
+ name = "Ulaanbaatar";
+ break;
+ case 21:
+ name = "Bulgan";
+ break;
+ case 22:
+ name = "Erdenet";
+ break;
+ case 23:
+ name = "Darhan-Uul";
+ break;
+ case 24:
+ name = "Govisumber";
+ break;
+ case 25:
+ name = "Orhon";
+ break;
+ }
+ }
+ if (country_code.equals("MO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ilhas";
+ break;
+ case 2:
+ name = "Macau";
+ break;
+ }
+ }
+ if (country_code.equals("MR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Hodh Ech Chargui";
+ break;
+ case 2:
+ name = "Hodh El Gharbi";
+ break;
+ case 3:
+ name = "Assaba";
+ break;
+ case 4:
+ name = "Gorgol";
+ break;
+ case 5:
+ name = "Brakna";
+ break;
+ case 6:
+ name = "Trarza";
+ break;
+ case 7:
+ name = "Adrar";
+ break;
+ case 8:
+ name = "Dakhlet Nouadhibou";
+ break;
+ case 9:
+ name = "Tagant";
+ break;
+ case 10:
+ name = "Guidimaka";
+ break;
+ case 11:
+ name = "Tiris Zemmour";
+ break;
+ case 12:
+ name = "Inchiri";
+ break;
+ }
+ }
+ if (country_code.equals("MS") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Saint Anthony";
+ break;
+ case 2:
+ name = "Saint Georges";
+ break;
+ case 3:
+ name = "Saint Peter";
+ break;
+ }
+ }
+ if (country_code.equals("MU") == true) {
+ switch (region_code2) {
+ case 12:
+ name = "Black River";
+ break;
+ case 13:
+ name = "Flacq";
+ break;
+ case 14:
+ name = "Grand Port";
+ break;
+ case 15:
+ name = "Moka";
+ break;
+ case 16:
+ name = "Pamplemousses";
+ break;
+ case 17:
+ name = "Plaines Wilhems";
+ break;
+ case 18:
+ name = "Port Louis";
+ break;
+ case 19:
+ name = "Riviere du Rempart";
+ break;
+ case 20:
+ name = "Savanne";
+ break;
+ case 21:
+ name = "Agalega Islands";
+ break;
+ case 22:
+ name = "Cargados Carajos";
+ break;
+ case 23:
+ name = "Rodrigues";
+ break;
+ }
+ }
+ if (country_code.equals("MV") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Seenu";
+ break;
+ case 2:
+ name = "Aliff";
+ break;
+ case 3:
+ name = "Laviyani";
+ break;
+ case 4:
+ name = "Waavu";
+ break;
+ case 5:
+ name = "Laamu";
+ break;
+ case 7:
+ name = "Haa Aliff";
+ break;
+ case 8:
+ name = "Thaa";
+ break;
+ case 12:
+ name = "Meemu";
+ break;
+ case 13:
+ name = "Raa";
+ break;
+ case 14:
+ name = "Faafu";
+ break;
+ case 17:
+ name = "Daalu";
+ break;
+ case 20:
+ name = "Baa";
+ break;
+ case 23:
+ name = "Haa Daalu";
+ break;
+ case 24:
+ name = "Shaviyani";
+ break;
+ case 25:
+ name = "Noonu";
+ break;
+ case 26:
+ name = "Kaafu";
+ break;
+ case 27:
+ name = "Gaafu Aliff";
+ break;
+ case 28:
+ name = "Gaafu Daalu";
+ break;
+ case 29:
+ name = "Naviyani";
+ break;
+ case 40:
+ name = "Male";
+ break;
+ }
+ }
+ if (country_code.equals("MW") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Chikwawa";
+ break;
+ case 3:
+ name = "Chiradzulu";
+ break;
+ case 4:
+ name = "Chitipa";
+ break;
+ case 5:
+ name = "Thyolo";
+ break;
+ case 6:
+ name = "Dedza";
+ break;
+ case 7:
+ name = "Dowa";
+ break;
+ case 8:
+ name = "Karonga";
+ break;
+ case 9:
+ name = "Kasungu";
+ break;
+ case 11:
+ name = "Lilongwe";
+ break;
+ case 12:
+ name = "Mangochi";
+ break;
+ case 13:
+ name = "Mchinji";
+ break;
+ case 15:
+ name = "Mzimba";
+ break;
+ case 16:
+ name = "Ntcheu";
+ break;
+ case 17:
+ name = "Nkhata Bay";
+ break;
+ case 18:
+ name = "Nkhotakota";
+ break;
+ case 19:
+ name = "Nsanje";
+ break;
+ case 20:
+ name = "Ntchisi";
+ break;
+ case 21:
+ name = "Rumphi";
+ break;
+ case 22:
+ name = "Salima";
+ break;
+ case 23:
+ name = "Zomba";
+ break;
+ case 24:
+ name = "Blantyre";
+ break;
+ case 25:
+ name = "Mwanza";
+ break;
+ case 26:
+ name = "Balaka";
+ break;
+ case 27:
+ name = "Likoma";
+ break;
+ case 28:
+ name = "Machinga";
+ break;
+ case 29:
+ name = "Mulanje";
+ break;
+ case 30:
+ name = "Phalombe";
+ break;
+ }
+ }
+ if (country_code.equals("MX") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aguascalientes";
+ break;
+ case 2:
+ name = "Baja California";
+ break;
+ case 3:
+ name = "Baja California Sur";
+ break;
+ case 4:
+ name = "Campeche";
+ break;
+ case 5:
+ name = "Chiapas";
+ break;
+ case 6:
+ name = "Chihuahua";
+ break;
+ case 7:
+ name = "Coahuila de Zaragoza";
+ break;
+ case 8:
+ name = "Colima";
+ break;
+ case 9:
+ name = "Distrito Federal";
+ break;
+ case 10:
+ name = "Durango";
+ break;
+ case 11:
+ name = "Guanajuato";
+ break;
+ case 12:
+ name = "Guerrero";
+ break;
+ case 13:
+ name = "Hidalgo";
+ break;
+ case 14:
+ name = "Jalisco";
+ break;
+ case 15:
+ name = "Mexico";
+ break;
+ case 16:
+ name = "Michoacan de Ocampo";
+ break;
+ case 17:
+ name = "Morelos";
+ break;
+ case 18:
+ name = "Nayarit";
+ break;
+ case 19:
+ name = "Nuevo Leon";
+ break;
+ case 20:
+ name = "Oaxaca";
+ break;
+ case 21:
+ name = "Puebla";
+ break;
+ case 22:
+ name = "Queretaro de Arteaga";
+ break;
+ case 23:
+ name = "Quintana Roo";
+ break;
+ case 24:
+ name = "San Luis Potosi";
+ break;
+ case 25:
+ name = "Sinaloa";
+ break;
+ case 26:
+ name = "Sonora";
+ break;
+ case 27:
+ name = "Tabasco";
+ break;
+ case 28:
+ name = "Tamaulipas";
+ break;
+ case 29:
+ name = "Tlaxcala";
+ break;
+ case 30:
+ name = "Veracruz-Llave";
+ break;
+ case 31:
+ name = "Yucatan";
+ break;
+ case 32:
+ name = "Zacatecas";
+ break;
+ }
+ }
+ if (country_code.equals("MY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Johor";
+ break;
+ case 2:
+ name = "Kedah";
+ break;
+ case 3:
+ name = "Kelantan";
+ break;
+ case 4:
+ name = "Melaka";
+ break;
+ case 5:
+ name = "Negeri Sembilan";
+ break;
+ case 6:
+ name = "Pahang";
+ break;
+ case 7:
+ name = "Perak";
+ break;
+ case 8:
+ name = "Perlis";
+ break;
+ case 9:
+ name = "Pulau Pinang";
+ break;
+ case 11:
+ name = "Sarawak";
+ break;
+ case 12:
+ name = "Selangor";
+ break;
+ case 13:
+ name = "Terengganu";
+ break;
+ case 14:
+ name = "Kuala Lumpur";
+ break;
+ case 15:
+ name = "Labuan";
+ break;
+ case 16:
+ name = "Sabah";
+ break;
+ case 17:
+ name = "Putrajaya";
+ break;
+ }
+ }
+ if (country_code.equals("MZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Cabo Delgado";
+ break;
+ case 2:
+ name = "Gaza";
+ break;
+ case 3:
+ name = "Inhambane";
+ break;
+ case 4:
+ name = "Maputo";
+ break;
+ case 5:
+ name = "Sofala";
+ break;
+ case 6:
+ name = "Nampula";
+ break;
+ case 7:
+ name = "Niassa";
+ break;
+ case 8:
+ name = "Tete";
+ break;
+ case 9:
+ name = "Zambezia";
+ break;
+ case 10:
+ name = "Manica";
+ break;
+ case 11:
+ name = "Maputo";
+ break;
+ }
+ }
+ if (country_code.equals("NA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bethanien";
+ break;
+ case 2:
+ name = "Caprivi Oos";
+ break;
+ case 3:
+ name = "Boesmanland";
+ break;
+ case 4:
+ name = "Gobabis";
+ break;
+ case 5:
+ name = "Grootfontein";
+ break;
+ case 6:
+ name = "Kaokoland";
+ break;
+ case 7:
+ name = "Karibib";
+ break;
+ case 8:
+ name = "Keetmanshoop";
+ break;
+ case 9:
+ name = "Luderitz";
+ break;
+ case 10:
+ name = "Maltahohe";
+ break;
+ case 11:
+ name = "Okahandja";
+ break;
+ case 12:
+ name = "Omaruru";
+ break;
+ case 13:
+ name = "Otjiwarongo";
+ break;
+ case 14:
+ name = "Outjo";
+ break;
+ case 15:
+ name = "Owambo";
+ break;
+ case 16:
+ name = "Rehoboth";
+ break;
+ case 17:
+ name = "Swakopmund";
+ break;
+ case 18:
+ name = "Tsumeb";
+ break;
+ case 20:
+ name = "Karasburg";
+ break;
+ case 21:
+ name = "Windhoek";
+ break;
+ case 22:
+ name = "Damaraland";
+ break;
+ case 23:
+ name = "Hereroland Oos";
+ break;
+ case 24:
+ name = "Hereroland Wes";
+ break;
+ case 25:
+ name = "Kavango";
+ break;
+ case 26:
+ name = "Mariental";
+ break;
+ case 27:
+ name = "Namaland";
+ break;
+ case 28:
+ name = "Caprivi";
+ break;
+ case 29:
+ name = "Erongo";
+ break;
+ case 30:
+ name = "Hardap";
+ break;
+ case 31:
+ name = "Karas";
+ break;
+ case 32:
+ name = "Kunene";
+ break;
+ case 33:
+ name = "Ohangwena";
+ break;
+ case 34:
+ name = "Okavango";
+ break;
+ case 35:
+ name = "Omaheke";
+ break;
+ case 36:
+ name = "Omusati";
+ break;
+ case 37:
+ name = "Oshana";
+ break;
+ case 38:
+ name = "Oshikoto";
+ break;
+ case 39:
+ name = "Otjozondjupa";
+ break;
+ }
+ }
+ if (country_code.equals("NE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Agadez";
+ break;
+ case 2:
+ name = "Diffa";
+ break;
+ case 3:
+ name = "Dosso";
+ break;
+ case 4:
+ name = "Maradi";
+ break;
+ case 5:
+ name = "Niamey";
+ break;
+ case 6:
+ name = "Tahoua";
+ break;
+ case 7:
+ name = "Zinder";
+ break;
+ case 8:
+ name = "Niamey";
+ break;
+ }
+ }
+ if (country_code.equals("NG") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Lagos";
+ break;
+ case 10:
+ name = "Rivers";
+ break;
+ case 11:
+ name = "Federal Capital Territory";
+ break;
+ case 12:
+ name = "Gongola";
+ break;
+ case 16:
+ name = "Ogun";
+ break;
+ case 17:
+ name = "Ondo";
+ break;
+ case 18:
+ name = "Oyo";
+ break;
+ case 21:
+ name = "Akwa Ibom";
+ break;
+ case 22:
+ name = "Cross River";
+ break;
+ case 23:
+ name = "Kaduna";
+ break;
+ case 24:
+ name = "Katsina";
+ break;
+ case 25:
+ name = "Anambra";
+ break;
+ case 26:
+ name = "Benue";
+ break;
+ case 27:
+ name = "Borno";
+ break;
+ case 28:
+ name = "Imo";
+ break;
+ case 29:
+ name = "Kano";
+ break;
+ case 30:
+ name = "Kwara";
+ break;
+ case 31:
+ name = "Niger";
+ break;
+ case 32:
+ name = "Oyo";
+ break;
+ case 35:
+ name = "Adamawa";
+ break;
+ case 36:
+ name = "Delta";
+ break;
+ case 37:
+ name = "Edo";
+ break;
+ case 39:
+ name = "Jigawa";
+ break;
+ case 40:
+ name = "Kebbi";
+ break;
+ case 41:
+ name = "Kogi";
+ break;
+ case 42:
+ name = "Osun";
+ break;
+ case 43:
+ name = "Taraba";
+ break;
+ case 44:
+ name = "Yobe";
+ break;
+ case 45:
+ name = "Abia";
+ break;
+ case 46:
+ name = "Bauchi";
+ break;
+ case 47:
+ name = "Enugu";
+ break;
+ case 48:
+ name = "Ondo";
+ break;
+ case 49:
+ name = "Plateau";
+ break;
+ case 50:
+ name = "Rivers";
+ break;
+ case 51:
+ name = "Sokoto";
+ break;
+ case 52:
+ name = "Bayelsa";
+ break;
+ case 53:
+ name = "Ebonyi";
+ break;
+ case 54:
+ name = "Ekiti";
+ break;
+ case 55:
+ name = "Gombe";
+ break;
+ case 56:
+ name = "Nassarawa";
+ break;
+ case 57:
+ name = "Zamfara";
+ break;
+ }
+ }
+ if (country_code.equals("NI") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Boaco";
+ break;
+ case 2:
+ name = "Carazo";
+ break;
+ case 3:
+ name = "Chinandega";
+ break;
+ case 4:
+ name = "Chontales";
+ break;
+ case 5:
+ name = "Esteli";
+ break;
+ case 6:
+ name = "Granada";
+ break;
+ case 7:
+ name = "Jinotega";
+ break;
+ case 8:
+ name = "Leon";
+ break;
+ case 9:
+ name = "Madriz";
+ break;
+ case 10:
+ name = "Managua";
+ break;
+ case 11:
+ name = "Masaya";
+ break;
+ case 12:
+ name = "Matagalpa";
+ break;
+ case 13:
+ name = "Nueva Segovia";
+ break;
+ case 14:
+ name = "Rio San Juan";
+ break;
+ case 15:
+ name = "Rivas";
+ break;
+ case 16:
+ name = "Zelaya";
+ break;
+ case 17:
+ name = "Autonoma Atlantico Norte";
+ break;
+ case 18:
+ name = "Region Autonoma Atlantico Sur";
+ break;
+ }
+ }
+ if (country_code.equals("NL") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Drenthe";
+ break;
+ case 2:
+ name = "Friesland";
+ break;
+ case 3:
+ name = "Gelderland";
+ break;
+ case 4:
+ name = "Groningen";
+ break;
+ case 5:
+ name = "Limburg";
+ break;
+ case 6:
+ name = "Noord-Brabant";
+ break;
+ case 7:
+ name = "Noord-Holland";
+ break;
+ case 8:
+ name = "Overijssel";
+ break;
+ case 9:
+ name = "Utrecht";
+ break;
+ case 10:
+ name = "Zeeland";
+ break;
+ case 11:
+ name = "Zuid-Holland";
+ break;
+ case 12:
+ name = "Dronten";
+ break;
+ case 13:
+ name = "Zuidelijke IJsselmeerpolders";
+ break;
+ case 14:
+ name = "Lelystad";
+ break;
+ case 15:
+ name = "Overijssel";
+ break;
+ case 16:
+ name = "Flevoland";
+ break;
+ }
+ }
+ if (country_code.equals("NO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Akershus";
+ break;
+ case 2:
+ name = "Aust-Agder";
+ break;
+ case 4:
+ name = "Buskerud";
+ break;
+ case 5:
+ name = "Finnmark";
+ break;
+ case 6:
+ name = "Hedmark";
+ break;
+ case 7:
+ name = "Hordaland";
+ break;
+ case 8:
+ name = "More og Romsdal";
+ break;
+ case 9:
+ name = "Nordland";
+ break;
+ case 10:
+ name = "Nord-Trondelag";
+ break;
+ case 11:
+ name = "Oppland";
+ break;
+ case 12:
+ name = "Oslo";
+ break;
+ case 13:
+ name = "Ostfold";
+ break;
+ case 14:
+ name = "Rogaland";
+ break;
+ case 15:
+ name = "Sogn og Fjordane";
+ break;
+ case 16:
+ name = "Sor-Trondelag";
+ break;
+ case 17:
+ name = "Telemark";
+ break;
+ case 18:
+ name = "Troms";
+ break;
+ case 19:
+ name = "Vest-Agder";
+ break;
+ case 20:
+ name = "Vestfold";
+ break;
+ }
+ }
+ if (country_code.equals("NP") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bagmati";
+ break;
+ case 2:
+ name = "Bheri";
+ break;
+ case 3:
+ name = "Dhawalagiri";
+ break;
+ case 4:
+ name = "Gandaki";
+ break;
+ case 5:
+ name = "Janakpur";
+ break;
+ case 6:
+ name = "Karnali";
+ break;
+ case 7:
+ name = "Kosi";
+ break;
+ case 8:
+ name = "Lumbini";
+ break;
+ case 9:
+ name = "Mahakali";
+ break;
+ case 10:
+ name = "Mechi";
+ break;
+ case 11:
+ name = "Narayani";
+ break;
+ case 12:
+ name = "Rapti";
+ break;
+ case 13:
+ name = "Sagarmatha";
+ break;
+ case 14:
+ name = "Seti";
+ break;
+ }
+ }
+ if (country_code.equals("NR") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Aiwo";
+ break;
+ case 2:
+ name = "Anabar";
+ break;
+ case 3:
+ name = "Anetan";
+ break;
+ case 4:
+ name = "Anibare";
+ break;
+ case 5:
+ name = "Baiti";
+ break;
+ case 6:
+ name = "Boe";
+ break;
+ case 7:
+ name = "Buada";
+ break;
+ case 8:
+ name = "Denigomodu";
+ break;
+ case 9:
+ name = "Ewa";
+ break;
+ case 10:
+ name = "Ijuw";
+ break;
+ case 11:
+ name = "Meneng";
+ break;
+ case 12:
+ name = "Nibok";
+ break;
+ case 13:
+ name = "Uaboe";
+ break;
+ case 14:
+ name = "Yaren";
+ break;
+ }
+ }
+ if (country_code.equals("NZ") == true) {
+ switch (region_code2) {
+ case 10:
+ name = "Chatham Islands";
+ break;
+ case 1010:
+ name = "Auckland";
+ break;
+ case 1011:
+ name = "Bay of Plenty";
+ break;
+ case 1012:
+ name = "Canterbury";
+ break;
+ case 1047:
+ name = "Gisborne";
+ break;
+ case 1048:
+ name = "Hawke's Bay";
+ break;
+ case 1049:
+ name = "Manawatu-Wanganui";
+ break;
+ case 1050:
+ name = "Marlborough";
+ break;
+ case 1051:
+ name = "Nelson";
+ break;
+ case 1052:
+ name = "Northland";
+ break;
+ case 1053:
+ name = "Otago";
+ break;
+ case 1054:
+ name = "Southland";
+ break;
+ case 1055:
+ name = "Taranaki";
+ break;
+ case 1090:
+ name = "Waikato";
+ break;
+ case 1091:
+ name = "Wellington";
+ break;
+ case 1092:
+ name = "West Coast";
+ break;
+ case 85:
+ name = "Waikato";
+ break;
+ }
+ }
+ if (country_code.equals("OM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ad Dakhiliyah";
+ break;
+ case 2:
+ name = "Al Batinah";
+ break;
+ case 3:
+ name = "Al Wusta";
+ break;
+ case 4:
+ name = "Ash Sharqiyah";
+ break;
+ case 5:
+ name = "Az Zahirah";
+ break;
+ case 6:
+ name = "Masqat";
+ break;
+ case 7:
+ name = "Musandam";
+ break;
+ case 8:
+ name = "Zufar";
+ break;
+ }
+ }
+ if (country_code.equals("PA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bocas del Toro";
+ break;
+ case 2:
+ name = "Chiriqui";
+ break;
+ case 3:
+ name = "Cocle";
+ break;
+ case 4:
+ name = "Colon";
+ break;
+ case 5:
+ name = "Darien";
+ break;
+ case 6:
+ name = "Herrera";
+ break;
+ case 7:
+ name = "Los Santos";
+ break;
+ case 8:
+ name = "Panama";
+ break;
+ case 9:
+ name = "San Blas";
+ break;
+ case 10:
+ name = "Veraguas";
+ break;
+ }
+ }
+ if (country_code.equals("PE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Amazonas";
+ break;
+ case 2:
+ name = "Ancash";
+ break;
+ case 3:
+ name = "Apurimac";
+ break;
+ case 4:
+ name = "Arequipa";
+ break;
+ case 5:
+ name = "Ayacucho";
+ break;
+ case 6:
+ name = "Cajamarca";
+ break;
+ case 7:
+ name = "Callao";
+ break;
+ case 8:
+ name = "Cusco";
+ break;
+ case 9:
+ name = "Huancavelica";
+ break;
+ case 10:
+ name = "Huanuco";
+ break;
+ case 11:
+ name = "Ica";
+ break;
+ case 12:
+ name = "Junin";
+ break;
+ case 13:
+ name = "La Libertad";
+ break;
+ case 14:
+ name = "Lambayeque";
+ break;
+ case 15:
+ name = "Lima";
+ break;
+ case 16:
+ name = "Loreto";
+ break;
+ case 17:
+ name = "Madre de Dios";
+ break;
+ case 18:
+ name = "Moquegua";
+ break;
+ case 19:
+ name = "Pasco";
+ break;
+ case 20:
+ name = "Piura";
+ break;
+ case 21:
+ name = "Puno";
+ break;
+ case 22:
+ name = "San Martin";
+ break;
+ case 23:
+ name = "Tacna";
+ break;
+ case 24:
+ name = "Tumbes";
+ break;
+ case 25:
+ name = "Ucayali";
+ break;
+ }
+ }
+ if (country_code.equals("PG") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Central";
+ break;
+ case 2:
+ name = "Gulf";
+ break;
+ case 3:
+ name = "Milne Bay";
+ break;
+ case 4:
+ name = "Northern";
+ break;
+ case 5:
+ name = "Southern Highlands";
+ break;
+ case 6:
+ name = "Western";
+ break;
+ case 7:
+ name = "North Solomons";
+ break;
+ case 8:
+ name = "Chimbu";
+ break;
+ case 9:
+ name = "Eastern Highlands";
+ break;
+ case 10:
+ name = "East New Britain";
+ break;
+ case 11:
+ name = "East Sepik";
+ break;
+ case 12:
+ name = "Madang";
+ break;
+ case 13:
+ name = "Manus";
+ break;
+ case 14:
+ name = "Morobe";
+ break;
+ case 15:
+ name = "New Ireland";
+ break;
+ case 16:
+ name = "Western Highlands";
+ break;
+ case 17:
+ name = "West New Britain";
+ break;
+ case 18:
+ name = "Sandaun";
+ break;
+ case 19:
+ name = "Enga";
+ break;
+ case 20:
+ name = "National Capital";
+ break;
+ }
+ }
+ if (country_code.equals("PH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abra";
+ break;
+ case 2:
+ name = "Agusan del Norte";
+ break;
+ case 3:
+ name = "Agusan del Sur";
+ break;
+ case 4:
+ name = "Aklan";
+ break;
+ case 5:
+ name = "Albay";
+ break;
+ case 6:
+ name = "Antique";
+ break;
+ case 7:
+ name = "Bataan";
+ break;
+ case 8:
+ name = "Batanes";
+ break;
+ case 9:
+ name = "Batangas";
+ break;
+ case 10:
+ name = "Benguet";
+ break;
+ case 11:
+ name = "Bohol";
+ break;
+ case 12:
+ name = "Bukidnon";
+ break;
+ case 13:
+ name = "Bulacan";
+ break;
+ case 14:
+ name = "Cagayan";
+ break;
+ case 15:
+ name = "Camarines Norte";
+ break;
+ case 16:
+ name = "Camarines Sur";
+ break;
+ case 17:
+ name = "Camiguin";
+ break;
+ case 18:
+ name = "Capiz";
+ break;
+ case 19:
+ name = "Catanduanes";
+ break;
+ case 20:
+ name = "Cavite";
+ break;
+ case 21:
+ name = "Cebu";
+ break;
+ case 22:
+ name = "Basilan";
+ break;
+ case 23:
+ name = "Eastern Samar";
+ break;
+ case 24:
+ name = "Davao";
+ break;
+ case 25:
+ name = "Davao del Sur";
+ break;
+ case 26:
+ name = "Davao Oriental";
+ break;
+ case 27:
+ name = "Ifugao";
+ break;
+ case 28:
+ name = "Ilocos Norte";
+ break;
+ case 29:
+ name = "Ilocos Sur";
+ break;
+ case 30:
+ name = "Iloilo";
+ break;
+ case 31:
+ name = "Isabela";
+ break;
+ case 32:
+ name = "Kalinga-Apayao";
+ break;
+ case 33:
+ name = "Laguna";
+ break;
+ case 34:
+ name = "Lanao del Norte";
+ break;
+ case 35:
+ name = "Lanao del Sur";
+ break;
+ case 36:
+ name = "La Union";
+ break;
+ case 37:
+ name = "Leyte";
+ break;
+ case 38:
+ name = "Marinduque";
+ break;
+ case 39:
+ name = "Masbate";
+ break;
+ case 40:
+ name = "Mindoro Occidental";
+ break;
+ case 41:
+ name = "Mindoro Oriental";
+ break;
+ case 42:
+ name = "Misamis Occidental";
+ break;
+ case 43:
+ name = "Misamis Oriental";
+ break;
+ case 44:
+ name = "Mountain";
+ break;
+ case 45:
+ name = "Negros Occidental";
+ break;
+ case 46:
+ name = "Negros Oriental";
+ break;
+ case 47:
+ name = "Nueva Ecija";
+ break;
+ case 48:
+ name = "Nueva Vizcaya";
+ break;
+ case 49:
+ name = "Palawan";
+ break;
+ case 50:
+ name = "Pampanga";
+ break;
+ case 51:
+ name = "Pangasinan";
+ break;
+ case 53:
+ name = "Rizal";
+ break;
+ case 54:
+ name = "Romblon";
+ break;
+ case 55:
+ name = "Samar";
+ break;
+ case 56:
+ name = "Maguindanao";
+ break;
+ case 57:
+ name = "North Cotabato";
+ break;
+ case 58:
+ name = "Sorsogon";
+ break;
+ case 59:
+ name = "Southern Leyte";
+ break;
+ case 60:
+ name = "Sulu";
+ break;
+ case 61:
+ name = "Surigao del Norte";
+ break;
+ case 62:
+ name = "Surigao del Sur";
+ break;
+ case 63:
+ name = "Tarlac";
+ break;
+ case 64:
+ name = "Zambales";
+ break;
+ case 65:
+ name = "Zamboanga del Norte";
+ break;
+ case 66:
+ name = "Zamboanga del Sur";
+ break;
+ case 67:
+ name = "Northern Samar";
+ break;
+ case 68:
+ name = "Quirino";
+ break;
+ case 69:
+ name = "Siquijor";
+ break;
+ case 70:
+ name = "South Cotabato";
+ break;
+ case 71:
+ name = "Sultan Kudarat";
+ break;
+ case 72:
+ name = "Tawitawi";
+ break;
+ case 832:
+ name = "Angeles";
+ break;
+ case 833:
+ name = "Bacolod";
+ break;
+ case 834:
+ name = "Bago";
+ break;
+ case 835:
+ name = "Baguio";
+ break;
+ case 836:
+ name = "Bais";
+ break;
+ case 837:
+ name = "Basilan City";
+ break;
+ case 838:
+ name = "Batangas City";
+ break;
+ case 839:
+ name = "Butuan";
+ break;
+ case 840:
+ name = "Cabanatuan";
+ break;
+ case 875:
+ name = "Cadiz";
+ break;
+ case 876:
+ name = "Cagayan de Oro";
+ break;
+ case 877:
+ name = "Calbayog";
+ break;
+ case 878:
+ name = "Caloocan";
+ break;
+ case 879:
+ name = "Canlaon";
+ break;
+ case 880:
+ name = "Cavite City";
+ break;
+ case 881:
+ name = "Cebu City";
+ break;
+ case 882:
+ name = "Cotabato";
+ break;
+ case 883:
+ name = "Dagupan";
+ break;
+ case 918:
+ name = "Danao";
+ break;
+ case 919:
+ name = "Dapitan";
+ break;
+ case 920:
+ name = "Davao City";
+ break;
+ case 921:
+ name = "Dipolog";
+ break;
+ case 922:
+ name = "Dumaguete";
+ break;
+ case 923:
+ name = "General Santos";
+ break;
+ case 924:
+ name = "Gingoog";
+ break;
+ case 925:
+ name = "Iligan";
+ break;
+ case 926:
+ name = "Iloilo City";
+ break;
+ case 961:
+ name = "Iriga";
+ break;
+ case 962:
+ name = "La Carlota";
+ break;
+ case 963:
+ name = "Laoag";
+ break;
+ case 964:
+ name = "Lapu-Lapu";
+ break;
+ case 965:
+ name = "Legaspi";
+ break;
+ case 966:
+ name = "Lipa";
+ break;
+ case 967:
+ name = "Lucena";
+ break;
+ case 968:
+ name = "Mandaue";
+ break;
+ case 969:
+ name = "Manila";
+ break;
+ case 1004:
+ name = "Marawi";
+ break;
+ case 1005:
+ name = "Naga";
+ break;
+ case 1006:
+ name = "Olongapo";
+ break;
+ case 1007:
+ name = "Ormoc";
+ break;
+ case 1008:
+ name = "Oroquieta";
+ break;
+ case 1009:
+ name = "Ozamis";
+ break;
+ case 1010:
+ name = "Pagadian";
+ break;
+ case 1011:
+ name = "Palayan";
+ break;
+ case 1012:
+ name = "Pasay";
+ break;
+ case 1047:
+ name = "Puerto Princesa";
+ break;
+ case 1048:
+ name = "Quezon City";
+ break;
+ case 1049:
+ name = "Roxas";
+ break;
+ case 1050:
+ name = "San Carlos";
+ break;
+ case 1051:
+ name = "San Carlos";
+ break;
+ case 1052:
+ name = "San Jose";
+ break;
+ case 1053:
+ name = "San Pablo";
+ break;
+ case 1054:
+ name = "Silay";
+ break;
+ case 1055:
+ name = "Surigao";
+ break;
+ case 1090:
+ name = "Tacloban";
+ break;
+ case 1091:
+ name = "Tagaytay";
+ break;
+ case 1092:
+ name = "Tagbilaran";
+ break;
+ case 1093:
+ name = "Tangub";
+ break;
+ case 1094:
+ name = "Toledo";
+ break;
+ case 1095:
+ name = "Trece Martires";
+ break;
+ case 1096:
+ name = "Zamboanga";
+ break;
+ case 1097:
+ name = "Aurora";
+ break;
+ case 1134:
+ name = "Quezon";
+ break;
+ case 1135:
+ name = "Negros Occidental";
+ break;
+ }
+ }
+ if (country_code.equals("PK") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Federally Administered Tribal Areas";
+ break;
+ case 2:
+ name = "Balochistan";
+ break;
+ case 3:
+ name = "North-West Frontier";
+ break;
+ case 4:
+ name = "Punjab";
+ break;
+ case 5:
+ name = "Sindh";
+ break;
+ case 6:
+ name = "Azad Kashmir";
+ break;
+ case 7:
+ name = "Northern Areas";
+ break;
+ case 8:
+ name = "Islamabad";
+ break;
+ }
+ }
+ if (country_code.equals("PL") == true) {
+ switch (region_code2) {
+ case 72:
+ name = "Dolnoslaskie";
+ break;
+ case 73:
+ name = "Kujawsko-Pomorskie";
+ break;
+ case 74:
+ name = "Lodzkie";
+ break;
+ case 75:
+ name = "Lubelskie";
+ break;
+ case 76:
+ name = "Lubuskie";
+ break;
+ case 77:
+ name = "Malopolskie";
+ break;
+ case 78:
+ name = "Mazowieckie";
+ break;
+ case 79:
+ name = "Opolskie";
+ break;
+ case 80:
+ name = "Podkarpackie";
+ break;
+ case 81:
+ name = "Podlaskie";
+ break;
+ case 82:
+ name = "Pomorskie";
+ break;
+ case 83:
+ name = "Slaskie";
+ break;
+ case 84:
+ name = "Swietokrzyskie";
+ break;
+ case 85:
+ name = "Warminsko-Mazurskie";
+ break;
+ case 86:
+ name = "Wielkopolskie";
+ break;
+ case 87:
+ name = "Zachodniopomorskie";
+ break;
+ }
+ }
+ if (country_code.equals("PS") == true) {
+ switch (region_code2) {
+ case 1131:
+ name = "Gaza";
+ break;
+ case 1798:
+ name = "West Bank";
+ break;
+ }
+ }
+ if (country_code.equals("PT") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Aveiro";
+ break;
+ case 3:
+ name = "Beja";
+ break;
+ case 4:
+ name = "Braga";
+ break;
+ case 5:
+ name = "Braganca";
+ break;
+ case 6:
+ name = "Castelo Branco";
+ break;
+ case 7:
+ name = "Coimbra";
+ break;
+ case 8:
+ name = "Evora";
+ break;
+ case 9:
+ name = "Faro";
+ break;
+ case 10:
+ name = "Madeira";
+ break;
+ case 11:
+ name = "Guarda";
+ break;
+ case 13:
+ name = "Leiria";
+ break;
+ case 14:
+ name = "Lisboa";
+ break;
+ case 16:
+ name = "Portalegre";
+ break;
+ case 17:
+ name = "Porto";
+ break;
+ case 18:
+ name = "Santarem";
+ break;
+ case 19:
+ name = "Setubal";
+ break;
+ case 20:
+ name = "Viana do Castelo";
+ break;
+ case 21:
+ name = "Vila Real";
+ break;
+ case 22:
+ name = "Viseu";
+ break;
+ case 23:
+ name = "Azores";
+ break;
+ }
+ }
+ if (country_code.equals("PY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alto Parana";
+ break;
+ case 2:
+ name = "Amambay";
+ break;
+ case 3:
+ name = "Boqueron";
+ break;
+ case 4:
+ name = "Caaguazu";
+ break;
+ case 5:
+ name = "Caazapa";
+ break;
+ case 6:
+ name = "Central";
+ break;
+ case 7:
+ name = "Concepcion";
+ break;
+ case 8:
+ name = "Cordillera";
+ break;
+ case 10:
+ name = "Guaira";
+ break;
+ case 11:
+ name = "Itapua";
+ break;
+ case 12:
+ name = "Misiones";
+ break;
+ case 13:
+ name = "Neembucu";
+ break;
+ case 15:
+ name = "Paraguari";
+ break;
+ case 16:
+ name = "Presidente Hayes";
+ break;
+ case 17:
+ name = "San Pedro";
+ break;
+ case 19:
+ name = "Canindeyu";
+ break;
+ case 20:
+ name = "Chaco";
+ break;
+ case 21:
+ name = "Nueva Asuncion";
+ break;
+ case 23:
+ name = "Alto Paraguay";
+ break;
+ }
+ }
+ if (country_code.equals("QA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ad Dawhah";
+ break;
+ case 2:
+ name = "Al Ghuwariyah";
+ break;
+ case 3:
+ name = "Al Jumaliyah";
+ break;
+ case 4:
+ name = "Al Khawr";
+ break;
+ case 5:
+ name = "Al Wakrah Municipality";
+ break;
+ case 6:
+ name = "Ar Rayyan";
+ break;
+ case 8:
+ name = "Madinat ach Shamal";
+ break;
+ case 9:
+ name = "Umm Salal";
+ break;
+ case 10:
+ name = "Al Wakrah";
+ break;
+ case 11:
+ name = "Jariyan al Batnah";
+ break;
+ case 12:
+ name = "Umm Sa'id";
+ break;
+ }
+ }
+ if (country_code.equals("RO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alba";
+ break;
+ case 2:
+ name = "Arad";
+ break;
+ case 3:
+ name = "Arges";
+ break;
+ case 4:
+ name = "Bacau";
+ break;
+ case 5:
+ name = "Bihor";
+ break;
+ case 6:
+ name = "Bistrita-Nasaud";
+ break;
+ case 7:
+ name = "Botosani";
+ break;
+ case 8:
+ name = "Braila";
+ break;
+ case 9:
+ name = "Brasov";
+ break;
+ case 10:
+ name = "Bucuresti";
+ break;
+ case 11:
+ name = "Buzau";
+ break;
+ case 12:
+ name = "Caras-Severin";
+ break;
+ case 13:
+ name = "Cluj";
+ break;
+ case 14:
+ name = "Constanta";
+ break;
+ case 15:
+ name = "Covasna";
+ break;
+ case 16:
+ name = "Dambovita";
+ break;
+ case 17:
+ name = "Dolj";
+ break;
+ case 18:
+ name = "Galati";
+ break;
+ case 19:
+ name = "Gorj";
+ break;
+ case 20:
+ name = "Harghita";
+ break;
+ case 21:
+ name = "Hunedoara";
+ break;
+ case 22:
+ name = "Ialomita";
+ break;
+ case 23:
+ name = "Iasi";
+ break;
+ case 25:
+ name = "Maramures";
+ break;
+ case 26:
+ name = "Mehedinti";
+ break;
+ case 27:
+ name = "Mures";
+ break;
+ case 28:
+ name = "Neamt";
+ break;
+ case 29:
+ name = "Olt";
+ break;
+ case 30:
+ name = "Prahova";
+ break;
+ case 31:
+ name = "Salaj";
+ break;
+ case 32:
+ name = "Satu Mare";
+ break;
+ case 33:
+ name = "Sibiu";
+ break;
+ case 34:
+ name = "Suceava";
+ break;
+ case 35:
+ name = "Teleorman";
+ break;
+ case 36:
+ name = "Timis";
+ break;
+ case 37:
+ name = "Tulcea";
+ break;
+ case 38:
+ name = "Vaslui";
+ break;
+ case 39:
+ name = "Valcea";
+ break;
+ case 40:
+ name = "Vrancea";
+ break;
+ case 41:
+ name = "Calarasi";
+ break;
+ case 42:
+ name = "Giurgiu";
+ break;
+ case 43:
+ name = "Ilfov";
+ break;
+ }
+ }
+ if (country_code.equals("RS") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Kosovo";
+ break;
+ case 2:
+ name = "Vojvodina";
+ break;
+ }
+ }
+ if (country_code.equals("RU") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Adygeya";
+ break;
+ case 2:
+ name = "Aginsky Buryatsky AO";
+ break;
+ case 3:
+ name = "Gorno-Altay";
+ break;
+ case 4:
+ name = "Altaisky krai";
+ break;
+ case 5:
+ name = "Amur";
+ break;
+ case 6:
+ name = "Arkhangel'sk";
+ break;
+ case 7:
+ name = "Astrakhan'";
+ break;
+ case 8:
+ name = "Bashkortostan";
+ break;
+ case 9:
+ name = "Belgorod";
+ break;
+ case 10:
+ name = "Bryansk";
+ break;
+ case 11:
+ name = "Buryat";
+ break;
+ case 12:
+ name = "Chechnya";
+ break;
+ case 13:
+ name = "Chelyabinsk";
+ break;
+ case 14:
+ name = "Chita";
+ break;
+ case 15:
+ name = "Chukot";
+ break;
+ case 16:
+ name = "Chuvashia";
+ break;
+ case 17:
+ name = "Dagestan";
+ break;
+ case 18:
+ name = "Evenk";
+ break;
+ case 19:
+ name = "Ingush";
+ break;
+ case 20:
+ name = "Irkutsk";
+ break;
+ case 21:
+ name = "Ivanovo";
+ break;
+ case 22:
+ name = "Kabardin-Balkar";
+ break;
+ case 23:
+ name = "Kaliningrad";
+ break;
+ case 24:
+ name = "Kalmyk";
+ break;
+ case 25:
+ name = "Kaluga";
+ break;
+ case 26:
+ name = "Kamchatka";
+ break;
+ case 27:
+ name = "Karachay-Cherkess";
+ break;
+ case 28:
+ name = "Karelia";
+ break;
+ case 29:
+ name = "Kemerovo";
+ break;
+ case 30:
+ name = "Khabarovsk";
+ break;
+ case 31:
+ name = "Khakass";
+ break;
+ case 32:
+ name = "Khanty-Mansiy";
+ break;
+ case 33:
+ name = "Kirov";
+ break;
+ case 34:
+ name = "Komi";
+ break;
+ case 35:
+ name = "Komi-Permyak";
+ break;
+ case 36:
+ name = "Koryak";
+ break;
+ case 37:
+ name = "Kostroma";
+ break;
+ case 38:
+ name = "Krasnodar";
+ break;
+ case 39:
+ name = "Krasnoyarsk";
+ break;
+ case 40:
+ name = "Kurgan";
+ break;
+ case 41:
+ name = "Kursk";
+ break;
+ case 42:
+ name = "Leningrad";
+ break;
+ case 43:
+ name = "Lipetsk";
+ break;
+ case 44:
+ name = "Magadan";
+ break;
+ case 45:
+ name = "Mariy-El";
+ break;
+ case 46:
+ name = "Mordovia";
+ break;
+ case 47:
+ name = "Moskva";
+ break;
+ case 48:
+ name = "Moscow City";
+ break;
+ case 49:
+ name = "Murmansk";
+ break;
+ case 50:
+ name = "Nenets";
+ break;
+ case 51:
+ name = "Nizhegorod";
+ break;
+ case 52:
+ name = "Novgorod";
+ break;
+ case 53:
+ name = "Novosibirsk";
+ break;
+ case 54:
+ name = "Omsk";
+ break;
+ case 55:
+ name = "Orenburg";
+ break;
+ case 56:
+ name = "Orel";
+ break;
+ case 57:
+ name = "Penza";
+ break;
+ case 58:
+ name = "Perm'";
+ break;
+ case 59:
+ name = "Primor'ye";
+ break;
+ case 60:
+ name = "Pskov";
+ break;
+ case 61:
+ name = "Rostov";
+ break;
+ case 62:
+ name = "Ryazan'";
+ break;
+ case 63:
+ name = "Sakha";
+ break;
+ case 64:
+ name = "Sakhalin";
+ break;
+ case 65:
+ name = "Samara";
+ break;
+ case 66:
+ name = "Saint Petersburg City";
+ break;
+ case 67:
+ name = "Saratov";
+ break;
+ case 68:
+ name = "North Ossetia";
+ break;
+ case 69:
+ name = "Smolensk";
+ break;
+ case 70:
+ name = "Stavropol'";
+ break;
+ case 71:
+ name = "Sverdlovsk";
+ break;
+ case 72:
+ name = "Tambovskaya oblast";
+ break;
+ case 73:
+ name = "Tatarstan";
+ break;
+ case 74:
+ name = "Taymyr";
+ break;
+ case 75:
+ name = "Tomsk";
+ break;
+ case 76:
+ name = "Tula";
+ break;
+ case 77:
+ name = "Tver'";
+ break;
+ case 78:
+ name = "Tyumen'";
+ break;
+ case 79:
+ name = "Tuva";
+ break;
+ case 80:
+ name = "Udmurt";
+ break;
+ case 81:
+ name = "Ul'yanovsk";
+ break;
+ case 82:
+ name = "Ust-Orda Buryat";
+ break;
+ case 83:
+ name = "Vladimir";
+ break;
+ case 84:
+ name = "Volgograd";
+ break;
+ case 85:
+ name = "Vologda";
+ break;
+ case 86:
+ name = "Voronezh";
+ break;
+ case 87:
+ name = "Yamal-Nenets";
+ break;
+ case 88:
+ name = "Yaroslavl'";
+ break;
+ case 89:
+ name = "Yevrey";
+ break;
+ case 90:
+ name = "Permskiy Kray";
+ break;
+ case 91:
+ name = "Krasnoyarskiy Kray";
+ break;
+ case 942:
+ name = "Chechnya Republic";
+ break;
+ }
+ }
+ if (country_code.equals("RW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Butare";
+ break;
+ case 6:
+ name = "Gitarama";
+ break;
+ case 7:
+ name = "Kibungo";
+ break;
+ case 9:
+ name = "Kigali";
+ break;
+ case 11:
+ name = "Est";
+ break;
+ case 12:
+ name = "Kigali";
+ break;
+ case 13:
+ name = "Nord";
+ break;
+ case 14:
+ name = "Ouest";
+ break;
+ case 15:
+ name = "Sud";
+ break;
+ }
+ }
+ if (country_code.equals("SA") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Al Bahah";
+ break;
+ case 3:
+ name = "Al Jawf";
+ break;
+ case 5:
+ name = "Al Madinah";
+ break;
+ case 6:
+ name = "Ash Sharqiyah";
+ break;
+ case 8:
+ name = "Al Qasim";
+ break;
+ case 9:
+ name = "Al Qurayyat";
+ break;
+ case 10:
+ name = "Ar Riyad";
+ break;
+ case 13:
+ name = "Ha'il";
+ break;
+ case 14:
+ name = "Makkah";
+ break;
+ case 15:
+ name = "Al Hudud ash Shamaliyah";
+ break;
+ case 16:
+ name = "Najran";
+ break;
+ case 17:
+ name = "Jizan";
+ break;
+ case 19:
+ name = "Tabuk";
+ break;
+ case 20:
+ name = "Al Jawf";
+ break;
+ }
+ }
+ if (country_code.equals("SB") == true) {
+ switch (region_code2) {
+ case 3:
+ name = "Malaita";
+ break;
+ case 6:
+ name = "Guadalcanal";
+ break;
+ case 7:
+ name = "Isabel";
+ break;
+ case 8:
+ name = "Makira";
+ break;
+ case 9:
+ name = "Temotu";
+ break;
+ case 10:
+ name = "Central";
+ break;
+ case 11:
+ name = "Western";
+ break;
+ case 12:
+ name = "Choiseul";
+ break;
+ case 13:
+ name = "Rennell and Bellona";
+ break;
+ }
+ }
+ if (country_code.equals("SC") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Anse aux Pins";
+ break;
+ case 2:
+ name = "Anse Boileau";
+ break;
+ case 3:
+ name = "Anse Etoile";
+ break;
+ case 4:
+ name = "Anse Louis";
+ break;
+ case 5:
+ name = "Anse Royale";
+ break;
+ case 6:
+ name = "Baie Lazare";
+ break;
+ case 7:
+ name = "Baie Sainte Anne";
+ break;
+ case 8:
+ name = "Beau Vallon";
+ break;
+ case 9:
+ name = "Bel Air";
+ break;
+ case 10:
+ name = "Bel Ombre";
+ break;
+ case 11:
+ name = "Cascade";
+ break;
+ case 12:
+ name = "Glacis";
+ break;
+ case 13:
+ name = "Grand' Anse";
+ break;
+ case 14:
+ name = "Grand' Anse";
+ break;
+ case 15:
+ name = "La Digue";
+ break;
+ case 16:
+ name = "La Riviere Anglaise";
+ break;
+ case 17:
+ name = "Mont Buxton";
+ break;
+ case 18:
+ name = "Mont Fleuri";
+ break;
+ case 19:
+ name = "Plaisance";
+ break;
+ case 20:
+ name = "Pointe La Rue";
+ break;
+ case 21:
+ name = "Port Glaud";
+ break;
+ case 22:
+ name = "Saint Louis";
+ break;
+ case 23:
+ name = "Takamaka";
+ break;
+ }
+ }
+ if (country_code.equals("SD") == true) {
+ switch (region_code2) {
+ case 27:
+ name = "Al Wusta";
+ break;
+ case 28:
+ name = "Al Istiwa'iyah";
+ break;
+ case 29:
+ name = "Al Khartum";
+ break;
+ case 30:
+ name = "Ash Shamaliyah";
+ break;
+ case 31:
+ name = "Ash Sharqiyah";
+ break;
+ case 32:
+ name = "Bahr al Ghazal";
+ break;
+ case 33:
+ name = "Darfur";
+ break;
+ case 34:
+ name = "Kurdufan";
+ break;
+ case 35:
+ name = "Upper Nile";
+ break;
+ case 40:
+ name = "Al Wahadah State";
+ break;
+ case 44:
+ name = "Central Equatoria State";
+ break;
+ }
+ }
+ if (country_code.equals("SE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Alvsborgs Lan";
+ break;
+ case 2:
+ name = "Blekinge Lan";
+ break;
+ case 3:
+ name = "Gavleborgs Lan";
+ break;
+ case 4:
+ name = "Goteborgs och Bohus Lan";
+ break;
+ case 5:
+ name = "Gotlands Lan";
+ break;
+ case 6:
+ name = "Hallands Lan";
+ break;
+ case 7:
+ name = "Jamtlands Lan";
+ break;
+ case 8:
+ name = "Jonkopings Lan";
+ break;
+ case 9:
+ name = "Kalmar Lan";
+ break;
+ case 10:
+ name = "Dalarnas Lan";
+ break;
+ case 11:
+ name = "Kristianstads Lan";
+ break;
+ case 12:
+ name = "Kronobergs Lan";
+ break;
+ case 13:
+ name = "Malmohus Lan";
+ break;
+ case 14:
+ name = "Norrbottens Lan";
+ break;
+ case 15:
+ name = "Orebro Lan";
+ break;
+ case 16:
+ name = "Ostergotlands Lan";
+ break;
+ case 17:
+ name = "Skaraborgs Lan";
+ break;
+ case 18:
+ name = "Sodermanlands Lan";
+ break;
+ case 21:
+ name = "Uppsala Lan";
+ break;
+ case 22:
+ name = "Varmlands Lan";
+ break;
+ case 23:
+ name = "Vasterbottens Lan";
+ break;
+ case 24:
+ name = "Vasternorrlands Lan";
+ break;
+ case 25:
+ name = "Vastmanlands Lan";
+ break;
+ case 26:
+ name = "Stockholms Lan";
+ break;
+ case 27:
+ name = "Skane Lan";
+ break;
+ case 28:
+ name = "Vastra Gotaland";
+ break;
+ }
+ }
+ if (country_code.equals("SH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ascension";
+ break;
+ case 2:
+ name = "Saint Helena";
+ break;
+ case 3:
+ name = "Tristan da Cunha";
+ break;
+ }
+ }
+ if (country_code.equals("SI") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ajdovscina";
+ break;
+ case 2:
+ name = "Beltinci";
+ break;
+ case 3:
+ name = "Bled";
+ break;
+ case 4:
+ name = "Bohinj";
+ break;
+ case 5:
+ name = "Borovnica";
+ break;
+ case 6:
+ name = "Bovec";
+ break;
+ case 7:
+ name = "Brda";
+ break;
+ case 8:
+ name = "Brezice";
+ break;
+ case 9:
+ name = "Brezovica";
+ break;
+ case 11:
+ name = "Celje";
+ break;
+ case 12:
+ name = "Cerklje na Gorenjskem";
+ break;
+ case 13:
+ name = "Cerknica";
+ break;
+ case 14:
+ name = "Cerkno";
+ break;
+ case 15:
+ name = "Crensovci";
+ break;
+ case 16:
+ name = "Crna na Koroskem";
+ break;
+ case 17:
+ name = "Crnomelj";
+ break;
+ case 19:
+ name = "Divaca";
+ break;
+ case 20:
+ name = "Dobrepolje";
+ break;
+ case 22:
+ name = "Dol pri Ljubljani";
+ break;
+ case 24:
+ name = "Dornava";
+ break;
+ case 25:
+ name = "Dravograd";
+ break;
+ case 26:
+ name = "Duplek";
+ break;
+ case 27:
+ name = "Gorenja Vas-Poljane";
+ break;
+ case 28:
+ name = "Gorisnica";
+ break;
+ case 29:
+ name = "Gornja Radgona";
+ break;
+ case 30:
+ name = "Gornji Grad";
+ break;
+ case 31:
+ name = "Gornji Petrovci";
+ break;
+ case 32:
+ name = "Grosuplje";
+ break;
+ case 34:
+ name = "Hrastnik";
+ break;
+ case 35:
+ name = "Hrpelje-Kozina";
+ break;
+ case 36:
+ name = "Idrija";
+ break;
+ case 37:
+ name = "Ig";
+ break;
+ case 38:
+ name = "Ilirska Bistrica";
+ break;
+ case 39:
+ name = "Ivancna Gorica";
+ break;
+ case 40:
+ name = "Izola-Isola";
+ break;
+ case 42:
+ name = "Jursinci";
+ break;
+ case 44:
+ name = "Kanal";
+ break;
+ case 45:
+ name = "Kidricevo";
+ break;
+ case 46:
+ name = "Kobarid";
+ break;
+ case 47:
+ name = "Kobilje";
+ break;
+ case 49:
+ name = "Komen";
+ break;
+ case 50:
+ name = "Koper-Capodistria";
+ break;
+ case 51:
+ name = "Kozje";
+ break;
+ case 52:
+ name = "Kranj";
+ break;
+ case 53:
+ name = "Kranjska Gora";
+ break;
+ case 54:
+ name = "Krsko";
+ break;
+ case 55:
+ name = "Kungota";
+ break;
+ case 57:
+ name = "Lasko";
+ break;
+ case 61:
+ name = "Ljubljana";
+ break;
+ case 62:
+ name = "Ljubno";
+ break;
+ case 64:
+ name = "Logatec";
+ break;
+ case 66:
+ name = "Loski Potok";
+ break;
+ case 68:
+ name = "Lukovica";
+ break;
+ case 71:
+ name = "Medvode";
+ break;
+ case 72:
+ name = "Menges";
+ break;
+ case 73:
+ name = "Metlika";
+ break;
+ case 74:
+ name = "Mezica";
+ break;
+ case 76:
+ name = "Mislinja";
+ break;
+ case 77:
+ name = "Moravce";
+ break;
+ case 78:
+ name = "Moravske Toplice";
+ break;
+ case 79:
+ name = "Mozirje";
+ break;
+ case 80:
+ name = "Murska Sobota";
+ break;
+ case 81:
+ name = "Muta";
+ break;
+ case 82:
+ name = "Naklo";
+ break;
+ case 83:
+ name = "Nazarje";
+ break;
+ case 84:
+ name = "Nova Gorica";
+ break;
+ case 86:
+ name = "Odranci";
+ break;
+ case 87:
+ name = "Ormoz";
+ break;
+ case 88:
+ name = "Osilnica";
+ break;
+ case 89:
+ name = "Pesnica";
+ break;
+ case 91:
+ name = "Pivka";
+ break;
+ case 92:
+ name = "Podcetrtek";
+ break;
+ case 94:
+ name = "Postojna";
+ break;
+ case 97:
+ name = "Puconci";
+ break;
+ case 98:
+ name = "Racam";
+ break;
+ case 99:
+ name = "Radece";
+ break;
+ case 832:
+ name = "Radenci";
+ break;
+ case 833:
+ name = "Radlje ob Dravi";
+ break;
+ case 834:
+ name = "Radovljica";
+ break;
+ case 837:
+ name = "Rogasovci";
+ break;
+ case 838:
+ name = "Rogaska Slatina";
+ break;
+ case 839:
+ name = "Rogatec";
+ break;
+ case 875:
+ name = "Semic";
+ break;
+ case 876:
+ name = "Sencur";
+ break;
+ case 877:
+ name = "Sentilj";
+ break;
+ case 878:
+ name = "Sentjernej";
+ break;
+ case 880:
+ name = "Sevnica";
+ break;
+ case 881:
+ name = "Sezana";
+ break;
+ case 882:
+ name = "Skocjan";
+ break;
+ case 883:
+ name = "Skofja Loka";
+ break;
+ case 918:
+ name = "Skofljica";
+ break;
+ case 919:
+ name = "Slovenj Gradec";
+ break;
+ case 921:
+ name = "Slovenske Konjice";
+ break;
+ case 922:
+ name = "Smarje pri Jelsah";
+ break;
+ case 923:
+ name = "Smartno ob Paki";
+ break;
+ case 924:
+ name = "Sostanj";
+ break;
+ case 925:
+ name = "Starse";
+ break;
+ case 926:
+ name = "Store";
+ break;
+ case 961:
+ name = "Sveti Jurij";
+ break;
+ case 962:
+ name = "Tolmin";
+ break;
+ case 963:
+ name = "Trbovlje";
+ break;
+ case 964:
+ name = "Trebnje";
+ break;
+ case 965:
+ name = "Trzic";
+ break;
+ case 966:
+ name = "Turnisce";
+ break;
+ case 967:
+ name = "Velenje";
+ break;
+ case 968:
+ name = "Velike Lasce";
+ break;
+ case 1004:
+ name = "Vipava";
+ break;
+ case 1005:
+ name = "Vitanje";
+ break;
+ case 1006:
+ name = "Vodice";
+ break;
+ case 1008:
+ name = "Vrhnika";
+ break;
+ case 1009:
+ name = "Vuzenica";
+ break;
+ case 1010:
+ name = "Zagorje ob Savi";
+ break;
+ case 1012:
+ name = "Zavrc";
+ break;
+ case 1047:
+ name = "Zelezniki";
+ break;
+ case 1048:
+ name = "Ziri";
+ break;
+ case 1049:
+ name = "Zrece";
+ break;
+ case 1093:
+ name = "Dobrova-Horjul-Polhov Gradec";
+ break;
+ case 1096:
+ name = "Domzale";
+ break;
+ case 1136:
+ name = "Jesenice";
+ break;
+ case 1138:
+ name = "Kamnik";
+ break;
+ case 1139:
+ name = "Kocevje";
+ break;
+ case 1177:
+ name = "Kuzma";
+ break;
+ case 1178:
+ name = "Lenart";
+ break;
+ case 1180:
+ name = "Litija";
+ break;
+ case 1181:
+ name = "Ljutomer";
+ break;
+ case 1182:
+ name = "Loska Dolina";
+ break;
+ case 1184:
+ name = "Luce";
+ break;
+ case 1219:
+ name = "Majsperk";
+ break;
+ case 1220:
+ name = "Maribor";
+ break;
+ case 1223:
+ name = "Miren-Kostanjevica";
+ break;
+ case 1225:
+ name = "Novo Mesto";
+ break;
+ case 1227:
+ name = "Piran";
+ break;
+ case 1266:
+ name = "Preddvor";
+ break;
+ case 1268:
+ name = "Ptuj";
+ break;
+ case 1305:
+ name = "Ribnica";
+ break;
+ case 1307:
+ name = "Ruse";
+ break;
+ case 1311:
+ name = "Sentjur pri Celju";
+ break;
+ case 1312:
+ name = "Slovenska Bistrica";
+ break;
+ case 1392:
+ name = "Videm";
+ break;
+ case 1393:
+ name = "Vojnik";
+ break;
+ case 1395:
+ name = "Zalec";
+ break;
+ }
+ }
+ if (country_code.equals("SK") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Banska Bystrica";
+ break;
+ case 2:
+ name = "Bratislava";
+ break;
+ case 3:
+ name = "Kosice";
+ break;
+ case 4:
+ name = "Nitra";
+ break;
+ case 5:
+ name = "Presov";
+ break;
+ case 6:
+ name = "Trencin";
+ break;
+ case 7:
+ name = "Trnava";
+ break;
+ case 8:
+ name = "Zilina";
+ break;
+ }
+ }
+ if (country_code.equals("SL") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Eastern";
+ break;
+ case 2:
+ name = "Northern";
+ break;
+ case 3:
+ name = "Southern";
+ break;
+ case 4:
+ name = "Western Area";
+ break;
+ }
+ }
+ if (country_code.equals("SM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Acquaviva";
+ break;
+ case 2:
+ name = "Chiesanuova";
+ break;
+ case 3:
+ name = "Domagnano";
+ break;
+ case 4:
+ name = "Faetano";
+ break;
+ case 5:
+ name = "Fiorentino";
+ break;
+ case 6:
+ name = "Borgo Maggiore";
+ break;
+ case 7:
+ name = "San Marino";
+ break;
+ case 8:
+ name = "Monte Giardino";
+ break;
+ case 9:
+ name = "Serravalle";
+ break;
+ }
+ }
+ if (country_code.equals("SN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Dakar";
+ break;
+ case 3:
+ name = "Diourbel";
+ break;
+ case 4:
+ name = "Saint-Louis";
+ break;
+ case 5:
+ name = "Tambacounda";
+ break;
+ case 7:
+ name = "Thies";
+ break;
+ case 8:
+ name = "Louga";
+ break;
+ case 9:
+ name = "Fatick";
+ break;
+ case 10:
+ name = "Kaolack";
+ break;
+ case 11:
+ name = "Kolda";
+ break;
+ case 12:
+ name = "Ziguinchor";
+ break;
+ case 13:
+ name = "Louga";
+ break;
+ case 14:
+ name = "Saint-Louis";
+ break;
+ case 15:
+ name = "Matam";
+ break;
+ }
+ }
+ if (country_code.equals("SO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Bakool";
+ break;
+ case 2:
+ name = "Banaadir";
+ break;
+ case 3:
+ name = "Bari";
+ break;
+ case 4:
+ name = "Bay";
+ break;
+ case 5:
+ name = "Galguduud";
+ break;
+ case 6:
+ name = "Gedo";
+ break;
+ case 7:
+ name = "Hiiraan";
+ break;
+ case 8:
+ name = "Jubbada Dhexe";
+ break;
+ case 9:
+ name = "Jubbada Hoose";
+ break;
+ case 10:
+ name = "Mudug";
+ break;
+ case 11:
+ name = "Nugaal";
+ break;
+ case 12:
+ name = "Sanaag";
+ break;
+ case 13:
+ name = "Shabeellaha Dhexe";
+ break;
+ case 14:
+ name = "Shabeellaha Hoose";
+ break;
+ case 16:
+ name = "Woqooyi Galbeed";
+ break;
+ case 18:
+ name = "Nugaal";
+ break;
+ case 19:
+ name = "Togdheer";
+ break;
+ case 20:
+ name = "Woqooyi Galbeed";
+ break;
+ case 21:
+ name = "Awdal";
+ break;
+ case 22:
+ name = "Sool";
+ break;
+ }
+ }
+ if (country_code.equals("SR") == true) {
+ switch (region_code2) {
+ case 10:
+ name = "Brokopondo";
+ break;
+ case 11:
+ name = "Commewijne";
+ break;
+ case 12:
+ name = "Coronie";
+ break;
+ case 13:
+ name = "Marowijne";
+ break;
+ case 14:
+ name = "Nickerie";
+ break;
+ case 15:
+ name = "Para";
+ break;
+ case 16:
+ name = "Paramaribo";
+ break;
+ case 17:
+ name = "Saramacca";
+ break;
+ case 18:
+ name = "Sipaliwini";
+ break;
+ case 19:
+ name = "Wanica";
+ break;
+ }
+ }
+ if (country_code.equals("ST") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Principe";
+ break;
+ case 2:
+ name = "Sao Tome";
+ break;
+ }
+ }
+ if (country_code.equals("SV") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ahuachapan";
+ break;
+ case 2:
+ name = "Cabanas";
+ break;
+ case 3:
+ name = "Chalatenango";
+ break;
+ case 4:
+ name = "Cuscatlan";
+ break;
+ case 5:
+ name = "La Libertad";
+ break;
+ case 6:
+ name = "La Paz";
+ break;
+ case 7:
+ name = "La Union";
+ break;
+ case 8:
+ name = "Morazan";
+ break;
+ case 9:
+ name = "San Miguel";
+ break;
+ case 10:
+ name = "San Salvador";
+ break;
+ case 11:
+ name = "Santa Ana";
+ break;
+ case 12:
+ name = "San Vicente";
+ break;
+ case 13:
+ name = "Sonsonate";
+ break;
+ case 14:
+ name = "Usulutan";
+ break;
+ }
+ }
+ if (country_code.equals("SY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Al Hasakah";
+ break;
+ case 2:
+ name = "Al Ladhiqiyah";
+ break;
+ case 3:
+ name = "Al Qunaytirah";
+ break;
+ case 4:
+ name = "Ar Raqqah";
+ break;
+ case 5:
+ name = "As Suwayda'";
+ break;
+ case 6:
+ name = "Dar";
+ break;
+ case 7:
+ name = "Dayr az Zawr";
+ break;
+ case 8:
+ name = "Rif Dimashq";
+ break;
+ case 9:
+ name = "Halab";
+ break;
+ case 10:
+ name = "Hamah";
+ break;
+ case 11:
+ name = "Hims";
+ break;
+ case 12:
+ name = "Idlib";
+ break;
+ case 13:
+ name = "Dimashq";
+ break;
+ case 14:
+ name = "Tartus";
+ break;
+ }
+ }
+ if (country_code.equals("SZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Hhohho";
+ break;
+ case 2:
+ name = "Lubombo";
+ break;
+ case 3:
+ name = "Manzini";
+ break;
+ case 4:
+ name = "Shiselweni";
+ break;
+ case 5:
+ name = "Praslin";
+ break;
+ }
+ }
+ if (country_code.equals("TD") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Batha";
+ break;
+ case 2:
+ name = "Biltine";
+ break;
+ case 3:
+ name = "Borkou-Ennedi-Tibesti";
+ break;
+ case 4:
+ name = "Chari-Baguirmi";
+ break;
+ case 5:
+ name = "Guera";
+ break;
+ case 6:
+ name = "Kanem";
+ break;
+ case 7:
+ name = "Lac";
+ break;
+ case 8:
+ name = "Logone Occidental";
+ break;
+ case 9:
+ name = "Logone Oriental";
+ break;
+ case 10:
+ name = "Mayo-Kebbi";
+ break;
+ case 11:
+ name = "Moyen-Chari";
+ break;
+ case 12:
+ name = "Ouaddai";
+ break;
+ case 13:
+ name = "Salamat";
+ break;
+ case 14:
+ name = "Tandjile";
+ break;
+ }
+ }
+ if (country_code.equals("TG") == true) {
+ switch (region_code2) {
+ case 9:
+ name = "Lama-Kara";
+ break;
+ case 18:
+ name = "Tsevie";
+ break;
+ case 22:
+ name = "Centrale";
+ break;
+ case 23:
+ name = "Kara";
+ break;
+ case 24:
+ name = "Maritime";
+ break;
+ case 25:
+ name = "Plateaux";
+ break;
+ case 26:
+ name = "Savanes";
+ break;
+ }
+ }
+ if (country_code.equals("TH") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Mae Hong Son";
+ break;
+ case 2:
+ name = "Chiang Mai";
+ break;
+ case 3:
+ name = "Chiang Rai";
+ break;
+ case 4:
+ name = "Nan";
+ break;
+ case 5:
+ name = "Lamphun";
+ break;
+ case 6:
+ name = "Lampang";
+ break;
+ case 7:
+ name = "Phrae";
+ break;
+ case 8:
+ name = "Tak";
+ break;
+ case 9:
+ name = "Sukhothai";
+ break;
+ case 10:
+ name = "Uttaradit";
+ break;
+ case 11:
+ name = "Kamphaeng Phet";
+ break;
+ case 12:
+ name = "Phitsanulok";
+ break;
+ case 13:
+ name = "Phichit";
+ break;
+ case 14:
+ name = "Phetchabun";
+ break;
+ case 15:
+ name = "Uthai Thani";
+ break;
+ case 16:
+ name = "Nakhon Sawan";
+ break;
+ case 17:
+ name = "Nong Khai";
+ break;
+ case 18:
+ name = "Loei";
+ break;
+ case 20:
+ name = "Sakon Nakhon";
+ break;
+ case 21:
+ name = "Nakhon Phanom";
+ break;
+ case 22:
+ name = "Khon Kaen";
+ break;
+ case 23:
+ name = "Kalasin";
+ break;
+ case 24:
+ name = "Maha Sarakham";
+ break;
+ case 25:
+ name = "Roi Et";
+ break;
+ case 26:
+ name = "Chaiyaphum";
+ break;
+ case 27:
+ name = "Nakhon Ratchasima";
+ break;
+ case 28:
+ name = "Buriram";
+ break;
+ case 29:
+ name = "Surin";
+ break;
+ case 30:
+ name = "Sisaket";
+ break;
+ case 31:
+ name = "Narathiwat";
+ break;
+ case 32:
+ name = "Chai Nat";
+ break;
+ case 33:
+ name = "Sing Buri";
+ break;
+ case 34:
+ name = "Lop Buri";
+ break;
+ case 35:
+ name = "Ang Thong";
+ break;
+ case 36:
+ name = "Phra Nakhon Si Ayutthaya";
+ break;
+ case 37:
+ name = "Saraburi";
+ break;
+ case 38:
+ name = "Nonthaburi";
+ break;
+ case 39:
+ name = "Pathum Thani";
+ break;
+ case 40:
+ name = "Krung Thep";
+ break;
+ case 41:
+ name = "Phayao";
+ break;
+ case 42:
+ name = "Samut Prakan";
+ break;
+ case 43:
+ name = "Nakhon Nayok";
+ break;
+ case 44:
+ name = "Chachoengsao";
+ break;
+ case 45:
+ name = "Prachin Buri";
+ break;
+ case 46:
+ name = "Chon Buri";
+ break;
+ case 47:
+ name = "Rayong";
+ break;
+ case 48:
+ name = "Chanthaburi";
+ break;
+ case 49:
+ name = "Trat";
+ break;
+ case 50:
+ name = "Kanchanaburi";
+ break;
+ case 51:
+ name = "Suphan Buri";
+ break;
+ case 52:
+ name = "Ratchaburi";
+ break;
+ case 53:
+ name = "Nakhon Pathom";
+ break;
+ case 54:
+ name = "Samut Songkhram";
+ break;
+ case 55:
+ name = "Samut Sakhon";
+ break;
+ case 56:
+ name = "Phetchaburi";
+ break;
+ case 57:
+ name = "Prachuap Khiri Khan";
+ break;
+ case 58:
+ name = "Chumphon";
+ break;
+ case 59:
+ name = "Ranong";
+ break;
+ case 60:
+ name = "Surat Thani";
+ break;
+ case 61:
+ name = "Phangnga";
+ break;
+ case 62:
+ name = "Phuket";
+ break;
+ case 63:
+ name = "Krabi";
+ break;
+ case 64:
+ name = "Nakhon Si Thammarat";
+ break;
+ case 65:
+ name = "Trang";
+ break;
+ case 66:
+ name = "Phatthalung";
+ break;
+ case 67:
+ name = "Satun";
+ break;
+ case 68:
+ name = "Songkhla";
+ break;
+ case 69:
+ name = "Pattani";
+ break;
+ case 70:
+ name = "Yala";
+ break;
+ case 71:
+ name = "Ubon Ratchathani";
+ break;
+ case 72:
+ name = "Yasothon";
+ break;
+ case 73:
+ name = "Nakhon Phanom";
+ break;
+ case 75:
+ name = "Ubon Ratchathani";
+ break;
+ case 76:
+ name = "Udon Thani";
+ break;
+ case 77:
+ name = "Amnat Charoen";
+ break;
+ case 78:
+ name = "Mukdahan";
+ break;
+ case 79:
+ name = "Nong Bua Lamphu";
+ break;
+ case 80:
+ name = "Sa Kaeo";
+ break;
+ }
+ }
+ if (country_code.equals("TJ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Kuhistoni Badakhshon";
+ break;
+ case 2:
+ name = "Khatlon";
+ break;
+ case 3:
+ name = "Sughd";
+ break;
+ }
+ }
+ if (country_code.equals("TM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ahal";
+ break;
+ case 2:
+ name = "Balkan";
+ break;
+ case 3:
+ name = "Dashoguz";
+ break;
+ case 4:
+ name = "Lebap";
+ break;
+ case 5:
+ name = "Mary";
+ break;
+ }
+ }
+ if (country_code.equals("TN") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Kasserine";
+ break;
+ case 3:
+ name = "Kairouan";
+ break;
+ case 6:
+ name = "Jendouba";
+ break;
+ case 14:
+ name = "El Kef";
+ break;
+ case 15:
+ name = "Al Mahdia";
+ break;
+ case 16:
+ name = "Al Munastir";
+ break;
+ case 17:
+ name = "Bajah";
+ break;
+ case 18:
+ name = "Bizerte";
+ break;
+ case 19:
+ name = "Nabeul";
+ break;
+ case 22:
+ name = "Siliana";
+ break;
+ case 23:
+ name = "Sousse";
+ break;
+ case 26:
+ name = "Ariana";
+ break;
+ case 27:
+ name = "Ben Arous";
+ break;
+ case 28:
+ name = "Madanin";
+ break;
+ case 29:
+ name = "Gabes";
+ break;
+ case 30:
+ name = "Gafsa";
+ break;
+ case 31:
+ name = "Kebili";
+ break;
+ case 32:
+ name = "Sfax";
+ break;
+ case 33:
+ name = "Sidi Bou Zid";
+ break;
+ case 34:
+ name = "Tataouine";
+ break;
+ case 35:
+ name = "Tozeur";
+ break;
+ case 36:
+ name = "Tunis";
+ break;
+ case 37:
+ name = "Zaghouan";
+ break;
+ case 38:
+ name = "Aiana";
+ break;
+ case 39:
+ name = "Manouba";
+ break;
+ }
+ }
+ if (country_code.equals("TO") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Ha";
+ break;
+ case 2:
+ name = "Tongatapu";
+ break;
+ case 3:
+ name = "Vava";
+ break;
+ }
+ }
+ if (country_code.equals("TR") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Adiyaman";
+ break;
+ case 3:
+ name = "Afyonkarahisar";
+ break;
+ case 4:
+ name = "Agri";
+ break;
+ case 5:
+ name = "Amasya";
+ break;
+ case 7:
+ name = "Antalya";
+ break;
+ case 8:
+ name = "Artvin";
+ break;
+ case 9:
+ name = "Aydin";
+ break;
+ case 10:
+ name = "Balikesir";
+ break;
+ case 11:
+ name = "Bilecik";
+ break;
+ case 12:
+ name = "Bingol";
+ break;
+ case 13:
+ name = "Bitlis";
+ break;
+ case 14:
+ name = "Bolu";
+ break;
+ case 15:
+ name = "Burdur";
+ break;
+ case 16:
+ name = "Bursa";
+ break;
+ case 17:
+ name = "Canakkale";
+ break;
+ case 19:
+ name = "Corum";
+ break;
+ case 20:
+ name = "Denizli";
+ break;
+ case 21:
+ name = "Diyarbakir";
+ break;
+ case 22:
+ name = "Edirne";
+ break;
+ case 23:
+ name = "Elazig";
+ break;
+ case 24:
+ name = "Erzincan";
+ break;
+ case 25:
+ name = "Erzurum";
+ break;
+ case 26:
+ name = "Eskisehir";
+ break;
+ case 28:
+ name = "Giresun";
+ break;
+ case 31:
+ name = "Hatay";
+ break;
+ case 32:
+ name = "Mersin";
+ break;
+ case 33:
+ name = "Isparta";
+ break;
+ case 34:
+ name = "Istanbul";
+ break;
+ case 35:
+ name = "Izmir";
+ break;
+ case 37:
+ name = "Kastamonu";
+ break;
+ case 38:
+ name = "Kayseri";
+ break;
+ case 39:
+ name = "Kirklareli";
+ break;
+ case 40:
+ name = "Kirsehir";
+ break;
+ case 41:
+ name = "Kocaeli";
+ break;
+ case 43:
+ name = "Kutahya";
+ break;
+ case 44:
+ name = "Malatya";
+ break;
+ case 45:
+ name = "Manisa";
+ break;
+ case 46:
+ name = "Kahramanmaras";
+ break;
+ case 48:
+ name = "Mugla";
+ break;
+ case 49:
+ name = "Mus";
+ break;
+ case 50:
+ name = "Nevsehir";
+ break;
+ case 52:
+ name = "Ordu";
+ break;
+ case 53:
+ name = "Rize";
+ break;
+ case 54:
+ name = "Sakarya";
+ break;
+ case 55:
+ name = "Samsun";
+ break;
+ case 57:
+ name = "Sinop";
+ break;
+ case 58:
+ name = "Sivas";
+ break;
+ case 59:
+ name = "Tekirdag";
+ break;
+ case 60:
+ name = "Tokat";
+ break;
+ case 61:
+ name = "Trabzon";
+ break;
+ case 62:
+ name = "Tunceli";
+ break;
+ case 63:
+ name = "Sanliurfa";
+ break;
+ case 64:
+ name = "Usak";
+ break;
+ case 65:
+ name = "Van";
+ break;
+ case 66:
+ name = "Yozgat";
+ break;
+ case 68:
+ name = "Ankara";
+ break;
+ case 69:
+ name = "Gumushane";
+ break;
+ case 70:
+ name = "Hakkari";
+ break;
+ case 71:
+ name = "Konya";
+ break;
+ case 72:
+ name = "Mardin";
+ break;
+ case 73:
+ name = "Nigde";
+ break;
+ case 74:
+ name = "Siirt";
+ break;
+ case 75:
+ name = "Aksaray";
+ break;
+ case 76:
+ name = "Batman";
+ break;
+ case 77:
+ name = "Bayburt";
+ break;
+ case 78:
+ name = "Karaman";
+ break;
+ case 79:
+ name = "Kirikkale";
+ break;
+ case 80:
+ name = "Sirnak";
+ break;
+ case 81:
+ name = "Adana";
+ break;
+ case 82:
+ name = "Cankiri";
+ break;
+ case 83:
+ name = "Gaziantep";
+ break;
+ case 84:
+ name = "Kars";
+ break;
+ case 85:
+ name = "Zonguldak";
+ break;
+ case 86:
+ name = "Ardahan";
+ break;
+ case 87:
+ name = "Bartin";
+ break;
+ case 88:
+ name = "Igdir";
+ break;
+ case 89:
+ name = "Karabuk";
+ break;
+ case 90:
+ name = "Kilis";
+ break;
+ case 91:
+ name = "Osmaniye";
+ break;
+ case 92:
+ name = "Yalova";
+ break;
+ case 93:
+ name = "Duzce";
+ break;
+ }
+ }
+ if (country_code.equals("TT") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Arima";
+ break;
+ case 2:
+ name = "Caroni";
+ break;
+ case 3:
+ name = "Mayaro";
+ break;
+ case 4:
+ name = "Nariva";
+ break;
+ case 5:
+ name = "Port-of-Spain";
+ break;
+ case 6:
+ name = "Saint Andrew";
+ break;
+ case 7:
+ name = "Saint David";
+ break;
+ case 8:
+ name = "Saint George";
+ break;
+ case 9:
+ name = "Saint Patrick";
+ break;
+ case 10:
+ name = "San Fernando";
+ break;
+ case 11:
+ name = "Tobago";
+ break;
+ case 12:
+ name = "Victoria";
+ break;
+ }
+ }
+ if (country_code.equals("TW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Fu-chien";
+ break;
+ case 2:
+ name = "Kao-hsiung";
+ break;
+ case 3:
+ name = "T'ai-pei";
+ break;
+ case 4:
+ name = "T'ai-wan";
+ break;
+ }
+ }
+ if (country_code.equals("TZ") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Pwani";
+ break;
+ case 3:
+ name = "Dodoma";
+ break;
+ case 4:
+ name = "Iringa";
+ break;
+ case 5:
+ name = "Kigoma";
+ break;
+ case 6:
+ name = "Kilimanjaro";
+ break;
+ case 7:
+ name = "Lindi";
+ break;
+ case 8:
+ name = "Mara";
+ break;
+ case 9:
+ name = "Mbeya";
+ break;
+ case 10:
+ name = "Morogoro";
+ break;
+ case 11:
+ name = "Mtwara";
+ break;
+ case 12:
+ name = "Mwanza";
+ break;
+ case 13:
+ name = "Pemba North";
+ break;
+ case 14:
+ name = "Ruvuma";
+ break;
+ case 15:
+ name = "Shinyanga";
+ break;
+ case 16:
+ name = "Singida";
+ break;
+ case 17:
+ name = "Tabora";
+ break;
+ case 18:
+ name = "Tanga";
+ break;
+ case 19:
+ name = "Kagera";
+ break;
+ case 20:
+ name = "Pemba South";
+ break;
+ case 21:
+ name = "Zanzibar Central";
+ break;
+ case 22:
+ name = "Zanzibar North";
+ break;
+ case 23:
+ name = "Dar es Salaam";
+ break;
+ case 24:
+ name = "Rukwa";
+ break;
+ case 25:
+ name = "Zanzibar Urban";
+ break;
+ case 26:
+ name = "Arusha";
+ break;
+ case 27:
+ name = "Manyara";
+ break;
+ }
+ }
+ if (country_code.equals("UA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Cherkas'ka Oblast'";
+ break;
+ case 2:
+ name = "Chernihivs'ka Oblast'";
+ break;
+ case 3:
+ name = "Chernivets'ka Oblast'";
+ break;
+ case 4:
+ name = "Dnipropetrovs'ka Oblast'";
+ break;
+ case 5:
+ name = "Donets'ka Oblast'";
+ break;
+ case 6:
+ name = "Ivano-Frankivs'ka Oblast'";
+ break;
+ case 7:
+ name = "Kharkivs'ka Oblast'";
+ break;
+ case 8:
+ name = "Khersons'ka Oblast'";
+ break;
+ case 9:
+ name = "Khmel'nyts'ka Oblast'";
+ break;
+ case 10:
+ name = "Kirovohrads'ka Oblast'";
+ break;
+ case 11:
+ name = "Krym";
+ break;
+ case 12:
+ name = "Kyyiv";
+ break;
+ case 13:
+ name = "Kyyivs'ka Oblast'";
+ break;
+ case 14:
+ name = "Luhans'ka Oblast'";
+ break;
+ case 15:
+ name = "L'vivs'ka Oblast'";
+ break;
+ case 16:
+ name = "Mykolayivs'ka Oblast'";
+ break;
+ case 17:
+ name = "Odes'ka Oblast'";
+ break;
+ case 18:
+ name = "Poltavs'ka Oblast'";
+ break;
+ case 19:
+ name = "Rivnens'ka Oblast'";
+ break;
+ case 20:
+ name = "Sevastopol'";
+ break;
+ case 21:
+ name = "Sums'ka Oblast'";
+ break;
+ case 22:
+ name = "Ternopil's'ka Oblast'";
+ break;
+ case 23:
+ name = "Vinnyts'ka Oblast'";
+ break;
+ case 24:
+ name = "Volyns'ka Oblast'";
+ break;
+ case 25:
+ name = "Zakarpats'ka Oblast'";
+ break;
+ case 26:
+ name = "Zaporiz'ka Oblast'";
+ break;
+ case 27:
+ name = "Zhytomyrs'ka Oblast'";
+ break;
+ }
+ }
+ if (country_code.equals("UG") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Busoga";
+ break;
+ case 8:
+ name = "Karamoja";
+ break;
+ case 12:
+ name = "South Buganda";
+ break;
+ case 18:
+ name = "Central";
+ break;
+ case 20:
+ name = "Eastern";
+ break;
+ case 21:
+ name = "Nile";
+ break;
+ case 22:
+ name = "North Buganda";
+ break;
+ case 23:
+ name = "Northern";
+ break;
+ case 24:
+ name = "Southern";
+ break;
+ case 25:
+ name = "Western";
+ break;
+ case 33:
+ name = "Jinja";
+ break;
+ case 36:
+ name = "Kalangala";
+ break;
+ case 37:
+ name = "Kampala";
+ break;
+ case 42:
+ name = "Kiboga";
+ break;
+ case 52:
+ name = "Mbarara";
+ break;
+ case 56:
+ name = "Mubende";
+ break;
+ case 65:
+ name = "Adjumani";
+ break;
+ case 66:
+ name = "Bugiri";
+ break;
+ case 67:
+ name = "Busia";
+ break;
+ case 69:
+ name = "Katakwi";
+ break;
+ case 71:
+ name = "Masaka";
+ break;
+ case 73:
+ name = "Nakasongola";
+ break;
+ case 74:
+ name = "Sembabule";
+ break;
+ case 77:
+ name = "Arua";
+ break;
+ case 78:
+ name = "Iganga";
+ break;
+ case 79:
+ name = "Kabarole";
+ break;
+ case 80:
+ name = "Kaberamaido";
+ break;
+ case 81:
+ name = "Kamwenge";
+ break;
+ case 82:
+ name = "Kanungu";
+ break;
+ case 83:
+ name = "Kayunga";
+ break;
+ case 84:
+ name = "Kitgum";
+ break;
+ case 85:
+ name = "Kyenjojo";
+ break;
+ case 86:
+ name = "Mayuge";
+ break;
+ case 87:
+ name = "Mbale";
+ break;
+ case 88:
+ name = "Moroto";
+ break;
+ case 89:
+ name = "Mpigi";
+ break;
+ case 90:
+ name = "Mukono";
+ break;
+ case 91:
+ name = "Nakapiripirit";
+ break;
+ case 92:
+ name = "Pader";
+ break;
+ case 93:
+ name = "Rukungiri";
+ break;
+ case 94:
+ name = "Sironko";
+ break;
+ case 95:
+ name = "Soroti";
+ break;
+ case 96:
+ name = "Wakiso";
+ break;
+ case 97:
+ name = "Yumbe";
+ break;
+ }
+ }
+ if (country_code.equals("UY") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Artigas";
+ break;
+ case 2:
+ name = "Canelones";
+ break;
+ case 3:
+ name = "Cerro Largo";
+ break;
+ case 4:
+ name = "Colonia";
+ break;
+ case 5:
+ name = "Durazno";
+ break;
+ case 6:
+ name = "Flores";
+ break;
+ case 7:
+ name = "Florida";
+ break;
+ case 8:
+ name = "Lavalleja";
+ break;
+ case 9:
+ name = "Maldonado";
+ break;
+ case 10:
+ name = "Montevideo";
+ break;
+ case 11:
+ name = "Paysandu";
+ break;
+ case 12:
+ name = "Rio Negro";
+ break;
+ case 13:
+ name = "Rivera";
+ break;
+ case 14:
+ name = "Rocha";
+ break;
+ case 15:
+ name = "Salto";
+ break;
+ case 16:
+ name = "San Jose";
+ break;
+ case 17:
+ name = "Soriano";
+ break;
+ case 18:
+ name = "Tacuarembo";
+ break;
+ case 19:
+ name = "Treinta y Tres";
+ break;
+ }
+ }
+ if (country_code.equals("UZ") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Andijon";
+ break;
+ case 2:
+ name = "Bukhoro";
+ break;
+ case 3:
+ name = "Farghona";
+ break;
+ case 4:
+ name = "Jizzakh";
+ break;
+ case 5:
+ name = "Khorazm";
+ break;
+ case 6:
+ name = "Namangan";
+ break;
+ case 7:
+ name = "Nawoiy";
+ break;
+ case 8:
+ name = "Qashqadaryo";
+ break;
+ case 9:
+ name = "Qoraqalpoghiston";
+ break;
+ case 10:
+ name = "Samarqand";
+ break;
+ case 11:
+ name = "Sirdaryo";
+ break;
+ case 12:
+ name = "Surkhondaryo";
+ break;
+ case 13:
+ name = "Toshkent";
+ break;
+ case 14:
+ name = "Toshkent";
+ break;
+ }
+ }
+ if (country_code.equals("VC") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Charlotte";
+ break;
+ case 2:
+ name = "Saint Andrew";
+ break;
+ case 3:
+ name = "Saint David";
+ break;
+ case 4:
+ name = "Saint George";
+ break;
+ case 5:
+ name = "Saint Patrick";
+ break;
+ case 6:
+ name = "Grenadines";
+ break;
+ }
+ }
+ if (country_code.equals("VE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Amazonas";
+ break;
+ case 2:
+ name = "Anzoategui";
+ break;
+ case 3:
+ name = "Apure";
+ break;
+ case 4:
+ name = "Aragua";
+ break;
+ case 5:
+ name = "Barinas";
+ break;
+ case 6:
+ name = "Bolivar";
+ break;
+ case 7:
+ name = "Carabobo";
+ break;
+ case 8:
+ name = "Cojedes";
+ break;
+ case 9:
+ name = "Delta Amacuro";
+ break;
+ case 11:
+ name = "Falcon";
+ break;
+ case 12:
+ name = "Guarico";
+ break;
+ case 13:
+ name = "Lara";
+ break;
+ case 14:
+ name = "Merida";
+ break;
+ case 15:
+ name = "Miranda";
+ break;
+ case 16:
+ name = "Monagas";
+ break;
+ case 17:
+ name = "Nueva Esparta";
+ break;
+ case 18:
+ name = "Portuguesa";
+ break;
+ case 19:
+ name = "Sucre";
+ break;
+ case 20:
+ name = "Tachira";
+ break;
+ case 21:
+ name = "Trujillo";
+ break;
+ case 22:
+ name = "Yaracuy";
+ break;
+ case 23:
+ name = "Zulia";
+ break;
+ case 24:
+ name = "Dependencias Federales";
+ break;
+ case 25:
+ name = "Distrito Federal";
+ break;
+ case 26:
+ name = "Vargas";
+ break;
+ }
+ }
+ if (country_code.equals("VN") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "An Giang";
+ break;
+ case 2:
+ name = "Bac Thai";
+ break;
+ case 3:
+ name = "Ben Tre";
+ break;
+ case 4:
+ name = "Binh Tri Thien";
+ break;
+ case 5:
+ name = "Cao Bang";
+ break;
+ case 6:
+ name = "Cuu Long";
+ break;
+ case 7:
+ name = "Dac Lac";
+ break;
+ case 9:
+ name = "Dong Thap";
+ break;
+ case 11:
+ name = "Ha Bac";
+ break;
+ case 12:
+ name = "Hai Hung";
+ break;
+ case 13:
+ name = "Hai Phong";
+ break;
+ case 14:
+ name = "Ha Nam Ninh";
+ break;
+ case 15:
+ name = "Ha Noi";
+ break;
+ case 16:
+ name = "Ha Son Binh";
+ break;
+ case 17:
+ name = "Ha Tuyen";
+ break;
+ case 19:
+ name = "Hoang Lien Son";
+ break;
+ case 20:
+ name = "Ho Chi Minh";
+ break;
+ case 21:
+ name = "Kien Giang";
+ break;
+ case 22:
+ name = "Lai Chau";
+ break;
+ case 23:
+ name = "Lam Dong";
+ break;
+ case 24:
+ name = "Long An";
+ break;
+ case 25:
+ name = "Minh Hai";
+ break;
+ case 26:
+ name = "Nghe Tinh";
+ break;
+ case 27:
+ name = "Nghia Binh";
+ break;
+ case 28:
+ name = "Phu Khanh";
+ break;
+ case 29:
+ name = "Quang Nam-Da Nang";
+ break;
+ case 30:
+ name = "Quang Ninh";
+ break;
+ case 31:
+ name = "Song Be";
+ break;
+ case 32:
+ name = "Son La";
+ break;
+ case 33:
+ name = "Tay Ninh";
+ break;
+ case 34:
+ name = "Thanh Hoa";
+ break;
+ case 35:
+ name = "Thai Binh";
+ break;
+ case 36:
+ name = "Thuan Hai";
+ break;
+ case 37:
+ name = "Tien Giang";
+ break;
+ case 38:
+ name = "Vinh Phu";
+ break;
+ case 39:
+ name = "Lang Son";
+ break;
+ case 40:
+ name = "Dong Nai";
+ break;
+ case 43:
+ name = "An Giang";
+ break;
+ case 44:
+ name = "Dac Lac";
+ break;
+ case 45:
+ name = "Dong Nai";
+ break;
+ case 46:
+ name = "Dong Thap";
+ break;
+ case 47:
+ name = "Kien Giang";
+ break;
+ case 48:
+ name = "Minh Hai";
+ break;
+ case 49:
+ name = "Song Be";
+ break;
+ case 50:
+ name = "Vinh Phu";
+ break;
+ case 51:
+ name = "Ha Noi";
+ break;
+ case 52:
+ name = "Ho Chi Minh";
+ break;
+ case 53:
+ name = "Ba Ria-Vung Tau";
+ break;
+ case 54:
+ name = "Binh Dinh";
+ break;
+ case 55:
+ name = "Binh Thuan";
+ break;
+ case 56:
+ name = "Can Tho";
+ break;
+ case 57:
+ name = "Gia Lai";
+ break;
+ case 58:
+ name = "Ha Giang";
+ break;
+ case 59:
+ name = "Ha Tay";
+ break;
+ case 60:
+ name = "Ha Tinh";
+ break;
+ case 61:
+ name = "Hoa Binh";
+ break;
+ case 62:
+ name = "Khanh Hoa";
+ break;
+ case 63:
+ name = "Kon Tum";
+ break;
+ case 64:
+ name = "Quang Tri";
+ break;
+ case 65:
+ name = "Nam Ha";
+ break;
+ case 66:
+ name = "Nghe An";
+ break;
+ case 67:
+ name = "Ninh Binh";
+ break;
+ case 68:
+ name = "Ninh Thuan";
+ break;
+ case 69:
+ name = "Phu Yen";
+ break;
+ case 70:
+ name = "Quang Binh";
+ break;
+ case 71:
+ name = "Quang Ngai";
+ break;
+ case 72:
+ name = "Quang Tri";
+ break;
+ case 73:
+ name = "Soc Trang";
+ break;
+ case 74:
+ name = "Thua Thien";
+ break;
+ case 75:
+ name = "Tra Vinh";
+ break;
+ case 76:
+ name = "Tuyen Quang";
+ break;
+ case 77:
+ name = "Vinh Long";
+ break;
+ case 78:
+ name = "Da Nang";
+ break;
+ case 79:
+ name = "Hai Duong";
+ break;
+ case 80:
+ name = "Ha Nam";
+ break;
+ case 81:
+ name = "Hung Yen";
+ break;
+ case 82:
+ name = "Nam Dinh";
+ break;
+ case 83:
+ name = "Phu Tho";
+ break;
+ case 84:
+ name = "Quang Nam";
+ break;
+ case 85:
+ name = "Thai Nguyen";
+ break;
+ case 86:
+ name = "Vinh Puc Province";
+ break;
+ case 87:
+ name = "Can Tho";
+ break;
+ case 88:
+ name = "Dak Lak";
+ break;
+ case 89:
+ name = "Lai Chau";
+ break;
+ case 90:
+ name = "Lao Cai";
+ break;
+ case 91:
+ name = "Dak Nong";
+ break;
+ case 92:
+ name = "Dien Bien";
+ break;
+ case 93:
+ name = "Hau Giang";
+ break;
+ }
+ }
+ if (country_code.equals("VU") == true) {
+ switch (region_code2) {
+ case 5:
+ name = "Ambrym";
+ break;
+ case 6:
+ name = "Aoba";
+ break;
+ case 7:
+ name = "Torba";
+ break;
+ case 8:
+ name = "Efate";
+ break;
+ case 9:
+ name = "Epi";
+ break;
+ case 10:
+ name = "Malakula";
+ break;
+ case 11:
+ name = "Paama";
+ break;
+ case 12:
+ name = "Pentecote";
+ break;
+ case 13:
+ name = "Sanma";
+ break;
+ case 14:
+ name = "Shepherd";
+ break;
+ case 15:
+ name = "Tafea";
+ break;
+ case 16:
+ name = "Malampa";
+ break;
+ case 17:
+ name = "Penama";
+ break;
+ case 18:
+ name = "Shefa";
+ break;
+ }
+ }
+ if (country_code.equals("WS") == true) {
+ switch (region_code2) {
+ case 2:
+ name = "Aiga-i-le-Tai";
+ break;
+ case 3:
+ name = "Atua";
+ break;
+ case 4:
+ name = "Fa";
+ break;
+ case 5:
+ name = "Gaga";
+ break;
+ case 6:
+ name = "Va";
+ break;
+ case 7:
+ name = "Gagaifomauga";
+ break;
+ case 8:
+ name = "Palauli";
+ break;
+ case 9:
+ name = "Satupa";
+ break;
+ case 10:
+ name = "Tuamasaga";
+ break;
+ case 11:
+ name = "Vaisigano";
+ break;
+ }
+ }
+ if (country_code.equals("YE") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Abyan";
+ break;
+ case 2:
+ name = "Adan";
+ break;
+ case 3:
+ name = "Al Mahrah";
+ break;
+ case 4:
+ name = "Hadramawt";
+ break;
+ case 5:
+ name = "Shabwah";
+ break;
+ case 6:
+ name = "Al Ghaydah";
+ break;
+ case 8:
+ name = "Al Hudaydah";
+ break;
+ case 10:
+ name = "Al Mahwit";
+ break;
+ case 11:
+ name = "Dhamar";
+ break;
+ case 14:
+ name = "Ma'rib";
+ break;
+ case 15:
+ name = "Sa";
+ break;
+ case 16:
+ name = "San";
+ break;
+ case 20:
+ name = "Al Bayda'";
+ break;
+ case 21:
+ name = "Al Jawf";
+ break;
+ case 22:
+ name = "Hajjah";
+ break;
+ case 23:
+ name = "Ibb";
+ break;
+ case 24:
+ name = "Lahij";
+ break;
+ case 25:
+ name = "Ta";
+ break;
+ }
+ }
+ if (country_code.equals("ZA") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "North-Western Province";
+ break;
+ case 2:
+ name = "KwaZulu-Natal";
+ break;
+ case 3:
+ name = "Free State";
+ break;
+ case 5:
+ name = "Eastern Cape";
+ break;
+ case 6:
+ name = "Gauteng";
+ break;
+ case 7:
+ name = "Mpumalanga";
+ break;
+ case 8:
+ name = "Northern Cape";
+ break;
+ case 9:
+ name = "Limpopo";
+ break;
+ case 10:
+ name = "North-West";
+ break;
+ case 11:
+ name = "Western Cape";
+ break;
+ }
+ }
+ if (country_code.equals("ZM") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Western";
+ break;
+ case 2:
+ name = "Central";
+ break;
+ case 3:
+ name = "Eastern";
+ break;
+ case 4:
+ name = "Luapula";
+ break;
+ case 5:
+ name = "Northern";
+ break;
+ case 6:
+ name = "North-Western";
+ break;
+ case 7:
+ name = "Southern";
+ break;
+ case 8:
+ name = "Copperbelt";
+ break;
+ case 9:
+ name = "Lusaka";
+ break;
+ }
+ }
+ if (country_code.equals("ZW") == true) {
+ switch (region_code2) {
+ case 1:
+ name = "Manicaland";
+ break;
+ case 2:
+ name = "Midlands";
+ break;
+ case 3:
+ name = "Mashonaland Central";
+ break;
+ case 4:
+ name = "Mashonaland East";
+ break;
+ case 5:
+ name = "Mashonaland West";
+ break;
+ case 6:
+ name = "Matabeleland North";
+ break;
+ case 7:
+ name = "Matabeleland South";
+ break;
+ case 8:
+ name = "Masvingo";
+ break;
+ case 9:
+ name = "Bulawayo";
+ break;
+ case 10:
+ name = "Harare";
+ break;
+ }
+ }
+ return name;
+ }
+}
diff --git a/EssentialsGeoIP/src/com/maxmind/geoip/timeZone.java b/EssentialsGeoIP/src/com/maxmind/geoip/timeZone.java
new file mode 100644
index 000000000..c47802a8e
--- /dev/null
+++ b/EssentialsGeoIP/src/com/maxmind/geoip/timeZone.java
@@ -0,0 +1,1403 @@
+package com.maxmind.geoip;
+// generated automatically from admin/generate_timeZone.pl
+public class timeZone {
+ static public String timeZoneByCountryAndRegion(String country,String region) {
+ String timezone = null;
+ if (country == null) {
+ return null;
+ }
+ if (region == null) {
+ region = "";
+ }
+ if (country.equals("US") == true) {
+ if (region.equals("AL") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("AK") == true) {
+ timezone = "America/Anchorage";
+ } else if (region.equals("AZ") == true) {
+ timezone = "America/Phoenix";
+ } else if (region.equals("AR") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("CA") == true) {
+ timezone = "America/Los_Angeles";
+ } else if (region.equals("CO") == true) {
+ timezone = "America/Denver";
+ } else if (region.equals("CT") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("DE") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("DC") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("FL") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("GA") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("HI") == true) {
+ timezone = "Pacific/Honolulu";
+ } else if (region.equals("ID") == true) {
+ timezone = "America/Denver";
+ } else if (region.equals("IL") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("IN") == true) {
+ timezone = "America/Indianapolis";
+ } else if (region.equals("IA") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("KS") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("KY") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("LA") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("ME") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("MD") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("MA") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("MI") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("MN") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("MS") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("MO") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("MT") == true) {
+ timezone = "America/Denver";
+ } else if (region.equals("NE") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("NV") == true) {
+ timezone = "America/Los_Angeles";
+ } else if (region.equals("NH") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("NJ") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("NM") == true) {
+ timezone = "America/Denver";
+ } else if (region.equals("NY") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("NC") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("ND") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("OH") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("OK") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("OR") == true) {
+ timezone = "America/Los_Angeles";
+ } else if (region.equals("PA") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("RI") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("SC") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("SD") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("TN") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("TX") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("UT") == true) {
+ timezone = "America/Denver";
+ } else if (region.equals("VT") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("VA") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("WA") == true) {
+ timezone = "America/Los_Angeles";
+ } else if (region.equals("WV") == true) {
+ timezone = "America/New_York";
+ } else if (region.equals("WI") == true) {
+ timezone = "America/Chicago";
+ } else if (region.equals("WY") == true) {
+ timezone = "America/Denver";
+ }
+ } else if (country.equals("CA") == true) {
+ if (region.equals("AB") == true) {
+ timezone = "America/Edmonton";
+ } else if (region.equals("BC") == true) {
+ timezone = "America/Vancouver";
+ } else if (region.equals("MB") == true) {
+ timezone = "America/Winnipeg";
+ } else if (region.equals("NB") == true) {
+ timezone = "America/Halifax";
+ } else if (region.equals("NL") == true) {
+ timezone = "America/St_Johns";
+ } else if (region.equals("NT") == true) {
+ timezone = "America/Yellowknife";
+ } else if (region.equals("NS") == true) {
+ timezone = "America/Halifax";
+ } else if (region.equals("NU") == true) {
+ timezone = "America/Rankin_Inlet";
+ } else if (region.equals("ON") == true) {
+ timezone = "America/Rainy_River";
+ } else if (region.equals("PE") == true) {
+ timezone = "America/Halifax";
+ } else if (region.equals("QC") == true) {
+ timezone = "America/Montreal";
+ } else if (region.equals("SK") == true) {
+ timezone = "America/Regina";
+ } else if (region.equals("YT") == true) {
+ timezone = "America/Whitehorse";
+ }
+ } else if (country.equals("AU") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Australia/Canberra";
+ } else if (region.equals("02") == true) {
+ timezone = "Australia/NSW";
+ } else if (region.equals("03") == true) {
+ timezone = "Australia/North";
+ } else if (region.equals("04") == true) {
+ timezone = "Australia/Queensland";
+ } else if (region.equals("05") == true) {
+ timezone = "Australia/South";
+ } else if (region.equals("06") == true) {
+ timezone = "Australia/Tasmania";
+ } else if (region.equals("07") == true) {
+ timezone = "Australia/Victoria";
+ } else if (region.equals("08") == true) {
+ timezone = "Australia/West";
+ }
+ } else if (country.equals("AS") == true) {
+ timezone = "US/Samoa";
+ } else if (country.equals("CI") == true) {
+ timezone = "Africa/Abidjan";
+ } else if (country.equals("GH") == true) {
+ timezone = "Africa/Accra";
+ } else if (country.equals("DZ") == true) {
+ timezone = "Africa/Algiers";
+ } else if (country.equals("ER") == true) {
+ timezone = "Africa/Asmera";
+ } else if (country.equals("ML") == true) {
+ timezone = "Africa/Bamako";
+ } else if (country.equals("CF") == true) {
+ timezone = "Africa/Bangui";
+ } else if (country.equals("GM") == true) {
+ timezone = "Africa/Banjul";
+ } else if (country.equals("GW") == true) {
+ timezone = "Africa/Bissau";
+ } else if (country.equals("CG") == true) {
+ timezone = "Africa/Brazzaville";
+ } else if (country.equals("BI") == true) {
+ timezone = "Africa/Bujumbura";
+ } else if (country.equals("EG") == true) {
+ timezone = "Africa/Cairo";
+ } else if (country.equals("MA") == true) {
+ timezone = "Africa/Casablanca";
+ } else if (country.equals("GN") == true) {
+ timezone = "Africa/Conakry";
+ } else if (country.equals("SN") == true) {
+ timezone = "Africa/Dakar";
+ } else if (country.equals("DJ") == true) {
+ timezone = "Africa/Djibouti";
+ } else if (country.equals("SL") == true) {
+ timezone = "Africa/Freetown";
+ } else if (country.equals("BW") == true) {
+ timezone = "Africa/Gaborone";
+ } else if (country.equals("ZW") == true) {
+ timezone = "Africa/Harare";
+ } else if (country.equals("ZA") == true) {
+ timezone = "Africa/Johannesburg";
+ } else if (country.equals("UG") == true) {
+ timezone = "Africa/Kampala";
+ } else if (country.equals("SD") == true) {
+ timezone = "Africa/Khartoum";
+ } else if (country.equals("RW") == true) {
+ timezone = "Africa/Kigali";
+ } else if (country.equals("NG") == true) {
+ timezone = "Africa/Lagos";
+ } else if (country.equals("GA") == true) {
+ timezone = "Africa/Libreville";
+ } else if (country.equals("TG") == true) {
+ timezone = "Africa/Lome";
+ } else if (country.equals("AO") == true) {
+ timezone = "Africa/Luanda";
+ } else if (country.equals("ZM") == true) {
+ timezone = "Africa/Lusaka";
+ } else if (country.equals("GQ") == true) {
+ timezone = "Africa/Malabo";
+ } else if (country.equals("MZ") == true) {
+ timezone = "Africa/Maputo";
+ } else if (country.equals("LS") == true) {
+ timezone = "Africa/Maseru";
+ } else if (country.equals("SZ") == true) {
+ timezone = "Africa/Mbabane";
+ } else if (country.equals("SO") == true) {
+ timezone = "Africa/Mogadishu";
+ } else if (country.equals("LR") == true) {
+ timezone = "Africa/Monrovia";
+ } else if (country.equals("KE") == true) {
+ timezone = "Africa/Nairobi";
+ } else if (country.equals("TD") == true) {
+ timezone = "Africa/Ndjamena";
+ } else if (country.equals("NE") == true) {
+ timezone = "Africa/Niamey";
+ } else if (country.equals("MR") == true) {
+ timezone = "Africa/Nouakchott";
+ } else if (country.equals("BF") == true) {
+ timezone = "Africa/Ouagadougou";
+ } else if (country.equals("ST") == true) {
+ timezone = "Africa/Sao_Tome";
+ } else if (country.equals("LY") == true) {
+ timezone = "Africa/Tripoli";
+ } else if (country.equals("TN") == true) {
+ timezone = "Africa/Tunis";
+ } else if (country.equals("AI") == true) {
+ timezone = "America/Anguilla";
+ } else if (country.equals("AG") == true) {
+ timezone = "America/Antigua";
+ } else if (country.equals("AW") == true) {
+ timezone = "America/Aruba";
+ } else if (country.equals("BB") == true) {
+ timezone = "America/Barbados";
+ } else if (country.equals("BZ") == true) {
+ timezone = "America/Belize";
+ } else if (country.equals("CO") == true) {
+ timezone = "America/Bogota";
+ } else if (country.equals("VE") == true) {
+ timezone = "America/Caracas";
+ } else if (country.equals("KY") == true) {
+ timezone = "America/Cayman";
+ } else if (country.equals("CR") == true) {
+ timezone = "America/Costa_Rica";
+ } else if (country.equals("DM") == true) {
+ timezone = "America/Dominica";
+ } else if (country.equals("SV") == true) {
+ timezone = "America/El_Salvador";
+ } else if (country.equals("GD") == true) {
+ timezone = "America/Grenada";
+ } else if (country.equals("FR") == true) {
+ timezone = "Europe/Paris";
+ } else if (country.equals("GP") == true) {
+ timezone = "America/Guadeloupe";
+ } else if (country.equals("GT") == true) {
+ timezone = "America/Guatemala";
+ } else if (country.equals("GY") == true) {
+ timezone = "America/Guyana";
+ } else if (country.equals("CU") == true) {
+ timezone = "America/Havana";
+ } else if (country.equals("JM") == true) {
+ timezone = "America/Jamaica";
+ } else if (country.equals("BO") == true) {
+ timezone = "America/La_Paz";
+ } else if (country.equals("PE") == true) {
+ timezone = "America/Lima";
+ } else if (country.equals("NI") == true) {
+ timezone = "America/Managua";
+ } else if (country.equals("MQ") == true) {
+ timezone = "America/Martinique";
+ } else if (country.equals("UY") == true) {
+ timezone = "America/Montevideo";
+ } else if (country.equals("MS") == true) {
+ timezone = "America/Montserrat";
+ } else if (country.equals("BS") == true) {
+ timezone = "America/Nassau";
+ } else if (country.equals("PA") == true) {
+ timezone = "America/Panama";
+ } else if (country.equals("SR") == true) {
+ timezone = "America/Paramaribo";
+ } else if (country.equals("PR") == true) {
+ timezone = "America/Puerto_Rico";
+ } else if (country.equals("KN") == true) {
+ timezone = "America/St_Kitts";
+ } else if (country.equals("LC") == true) {
+ timezone = "America/St_Lucia";
+ } else if (country.equals("VC") == true) {
+ timezone = "America/St_Vincent";
+ } else if (country.equals("HN") == true) {
+ timezone = "America/Tegucigalpa";
+ } else if (country.equals("YE") == true) {
+ timezone = "Asia/Aden";
+ } else if (country.equals("JO") == true) {
+ timezone = "Asia/Amman";
+ } else if (country.equals("TM") == true) {
+ timezone = "Asia/Ashgabat";
+ } else if (country.equals("IQ") == true) {
+ timezone = "Asia/Baghdad";
+ } else if (country.equals("BH") == true) {
+ timezone = "Asia/Bahrain";
+ } else if (country.equals("AZ") == true) {
+ timezone = "Asia/Baku";
+ } else if (country.equals("TH") == true) {
+ timezone = "Asia/Bangkok";
+ } else if (country.equals("LB") == true) {
+ timezone = "Asia/Beirut";
+ } else if (country.equals("KG") == true) {
+ timezone = "Asia/Bishkek";
+ } else if (country.equals("BN") == true) {
+ timezone = "Asia/Brunei";
+ } else if (country.equals("IN") == true) {
+ timezone = "Asia/Calcutta";
+ } else if (country.equals("MN") == true) {
+ timezone = "Asia/Choibalsan";
+ } else if (country.equals("LK") == true) {
+ timezone = "Asia/Colombo";
+ } else if (country.equals("BD") == true) {
+ timezone = "Asia/Dhaka";
+ } else if (country.equals("AE") == true) {
+ timezone = "Asia/Dubai";
+ } else if (country.equals("TJ") == true) {
+ timezone = "Asia/Dushanbe";
+ } else if (country.equals("HK") == true) {
+ timezone = "Asia/Hong_Kong";
+ } else if (country.equals("TR") == true) {
+ timezone = "Asia/Istanbul";
+ } else if (country.equals("IL") == true) {
+ timezone = "Asia/Jerusalem";
+ } else if (country.equals("AF") == true) {
+ timezone = "Asia/Kabul";
+ } else if (country.equals("PK") == true) {
+ timezone = "Asia/Karachi";
+ } else if (country.equals("NP") == true) {
+ timezone = "Asia/Katmandu";
+ } else if (country.equals("KW") == true) {
+ timezone = "Asia/Kuwait";
+ } else if (country.equals("MO") == true) {
+ timezone = "Asia/Macao";
+ } else if (country.equals("PH") == true) {
+ timezone = "Asia/Manila";
+ } else if (country.equals("OM") == true) {
+ timezone = "Asia/Muscat";
+ } else if (country.equals("CY") == true) {
+ timezone = "Asia/Nicosia";
+ } else if (country.equals("KP") == true) {
+ timezone = "Asia/Pyongyang";
+ } else if (country.equals("QA") == true) {
+ timezone = "Asia/Qatar";
+ } else if (country.equals("MM") == true) {
+ timezone = "Asia/Rangoon";
+ } else if (country.equals("SA") == true) {
+ timezone = "Asia/Riyadh";
+ } else if (country.equals("KR") == true) {
+ timezone = "Asia/Seoul";
+ } else if (country.equals("SG") == true) {
+ timezone = "Asia/Singapore";
+ } else if (country.equals("TW") == true) {
+ timezone = "Asia/Taipei";
+ } else if (country.equals("GE") == true) {
+ timezone = "Asia/Tbilisi";
+ } else if (country.equals("BT") == true) {
+ timezone = "Asia/Thimphu";
+ } else if (country.equals("JP") == true) {
+ timezone = "Asia/Tokyo";
+ } else if (country.equals("LA") == true) {
+ timezone = "Asia/Vientiane";
+ } else if (country.equals("AM") == true) {
+ timezone = "Asia/Yerevan";
+ } else if (country.equals("BM") == true) {
+ timezone = "Atlantic/Bermuda";
+ } else if (country.equals("CV") == true) {
+ timezone = "Atlantic/Cape_Verde";
+ } else if (country.equals("FO") == true) {
+ timezone = "Atlantic/Faeroe";
+ } else if (country.equals("IS") == true) {
+ timezone = "Atlantic/Reykjavik";
+ } else if (country.equals("GS") == true) {
+ timezone = "Atlantic/South_Georgia";
+ } else if (country.equals("SH") == true) {
+ timezone = "Atlantic/St_Helena";
+ } else if (country.equals("CL") == true) {
+ timezone = "Chile/Continental";
+ } else if (country.equals("NL") == true) {
+ timezone = "Europe/Amsterdam";
+ } else if (country.equals("AD") == true) {
+ timezone = "Europe/Andorra";
+ } else if (country.equals("GR") == true) {
+ timezone = "Europe/Athens";
+ } else if (country.equals("YU") == true) {
+ timezone = "Europe/Belgrade";
+ } else if (country.equals("DE") == true) {
+ timezone = "Europe/Berlin";
+ } else if (country.equals("SK") == true) {
+ timezone = "Europe/Bratislava";
+ } else if (country.equals("BE") == true) {
+ timezone = "Europe/Brussels";
+ } else if (country.equals("RO") == true) {
+ timezone = "Europe/Bucharest";
+ } else if (country.equals("HU") == true) {
+ timezone = "Europe/Budapest";
+ } else if (country.equals("DK") == true) {
+ timezone = "Europe/Copenhagen";
+ } else if (country.equals("IE") == true) {
+ timezone = "Europe/Dublin";
+ } else if (country.equals("GI") == true) {
+ timezone = "Europe/Gibraltar";
+ } else if (country.equals("FI") == true) {
+ timezone = "Europe/Helsinki";
+ } else if (country.equals("SI") == true) {
+ timezone = "Europe/Ljubljana";
+ } else if (country.equals("GB") == true) {
+ timezone = "Europe/London";
+ } else if (country.equals("LU") == true) {
+ timezone = "Europe/Luxembourg";
+ } else if (country.equals("MT") == true) {
+ timezone = "Europe/Malta";
+ } else if (country.equals("BY") == true) {
+ timezone = "Europe/Minsk";
+ } else if (country.equals("MC") == true) {
+ timezone = "Europe/Monaco";
+ } else if (country.equals("NO") == true) {
+ timezone = "Europe/Oslo";
+ } else if (country.equals("CZ") == true) {
+ timezone = "Europe/Prague";
+ } else if (country.equals("LV") == true) {
+ timezone = "Europe/Riga";
+ } else if (country.equals("IT") == true) {
+ timezone = "Europe/Rome";
+ } else if (country.equals("SM") == true) {
+ timezone = "Europe/San_Marino";
+ } else if (country.equals("BA") == true) {
+ timezone = "Europe/Sarajevo";
+ } else if (country.equals("MK") == true) {
+ timezone = "Europe/Skopje";
+ } else if (country.equals("BG") == true) {
+ timezone = "Europe/Sofia";
+ } else if (country.equals("SE") == true) {
+ timezone = "Europe/Stockholm";
+ } else if (country.equals("EE") == true) {
+ timezone = "Europe/Tallinn";
+ } else if (country.equals("AL") == true) {
+ timezone = "Europe/Tirane";
+ } else if (country.equals("LI") == true) {
+ timezone = "Europe/Vaduz";
+ } else if (country.equals("VA") == true) {
+ timezone = "Europe/Vatican";
+ } else if (country.equals("AT") == true) {
+ timezone = "Europe/Vienna";
+ } else if (country.equals("LT") == true) {
+ timezone = "Europe/Vilnius";
+ } else if (country.equals("PL") == true) {
+ timezone = "Europe/Warsaw";
+ } else if (country.equals("HR") == true) {
+ timezone = "Europe/Zagreb";
+ } else if (country.equals("IR") == true) {
+ timezone = "Asia/Tehran";
+ } else if (country.equals("MG") == true) {
+ timezone = "Indian/Antananarivo";
+ } else if (country.equals("CX") == true) {
+ timezone = "Indian/Christmas";
+ } else if (country.equals("CC") == true) {
+ timezone = "Indian/Cocos";
+ } else if (country.equals("KM") == true) {
+ timezone = "Indian/Comoro";
+ } else if (country.equals("MV") == true) {
+ timezone = "Indian/Maldives";
+ } else if (country.equals("MU") == true) {
+ timezone = "Indian/Mauritius";
+ } else if (country.equals("YT") == true) {
+ timezone = "Indian/Mayotte";
+ } else if (country.equals("RE") == true) {
+ timezone = "Indian/Reunion";
+ } else if (country.equals("FJ") == true) {
+ timezone = "Pacific/Fiji";
+ } else if (country.equals("TV") == true) {
+ timezone = "Pacific/Funafuti";
+ } else if (country.equals("GU") == true) {
+ timezone = "Pacific/Guam";
+ } else if (country.equals("NR") == true) {
+ timezone = "Pacific/Nauru";
+ } else if (country.equals("NU") == true) {
+ timezone = "Pacific/Niue";
+ } else if (country.equals("NF") == true) {
+ timezone = "Pacific/Norfolk";
+ } else if (country.equals("PW") == true) {
+ timezone = "Pacific/Palau";
+ } else if (country.equals("PN") == true) {
+ timezone = "Pacific/Pitcairn";
+ } else if (country.equals("CK") == true) {
+ timezone = "Pacific/Rarotonga";
+ } else if (country.equals("WS") == true) {
+ timezone = "Pacific/Samoa";
+ } else if (country.equals("KI") == true) {
+ timezone = "Pacific/Tarawa";
+ } else if (country.equals("TO") == true) {
+ timezone = "Pacific/Tongatapu";
+ } else if (country.equals("WF") == true) {
+ timezone = "Pacific/Wallis";
+ } else if (country.equals("TZ") == true) {
+ timezone = "Africa/Dar_es_Salaam";
+ } else if (country.equals("VN") == true) {
+ timezone = "Asia/Phnom_Penh";
+ } else if (country.equals("KH") == true) {
+ timezone = "Asia/Phnom_Penh";
+ } else if (country.equals("CM") == true) {
+ timezone = "Africa/Lagos";
+ } else if (country.equals("DO") == true) {
+ timezone = "America/Santo_Domingo";
+ } else if (country.equals("ET") == true) {
+ timezone = "Africa/Addis_Ababa";
+ } else if (country.equals("FX") == true) {
+ timezone = "Europe/Paris";
+ } else if (country.equals("HT") == true) {
+ timezone = "America/Port-au-Prince";
+ } else if (country.equals("CH") == true) {
+ timezone = "Europe/Zurich";
+ } else if (country.equals("AN") == true) {
+ timezone = "America/Curacao";
+ } else if (country.equals("BJ") == true) {
+ timezone = "Africa/Porto-Novo";
+ } else if (country.equals("EH") == true) {
+ timezone = "Africa/El_Aaiun";
+ } else if (country.equals("FK") == true) {
+ timezone = "Atlantic/Stanley";
+ } else if (country.equals("GF") == true) {
+ timezone = "America/Cayenne";
+ } else if (country.equals("IO") == true) {
+ timezone = "Indian/Chagos";
+ } else if (country.equals("MD") == true) {
+ timezone = "Europe/Chisinau";
+ } else if (country.equals("MP") == true) {
+ timezone = "Pacific/Saipan";
+ } else if (country.equals("MW") == true) {
+ timezone = "Africa/Blantyre";
+ } else if (country.equals("NA") == true) {
+ timezone = "Africa/Windhoek";
+ } else if (country.equals("NC") == true) {
+ timezone = "Pacific/Noumea";
+ } else if (country.equals("PG") == true) {
+ timezone = "Pacific/Port_Moresby";
+ } else if (country.equals("PM") == true) {
+ timezone = "America/Miquelon";
+ } else if (country.equals("PS") == true) {
+ timezone = "Asia/Gaza";
+ } else if (country.equals("PY") == true) {
+ timezone = "America/Asuncion";
+ } else if (country.equals("SB") == true) {
+ timezone = "Pacific/Guadalcanal";
+ } else if (country.equals("SC") == true) {
+ timezone = "Indian/Mahe";
+ } else if (country.equals("SJ") == true) {
+ timezone = "Arctic/Longyearbyen";
+ } else if (country.equals("SY") == true) {
+ timezone = "Asia/Damascus";
+ } else if (country.equals("TC") == true) {
+ timezone = "America/Grand_Turk";
+ } else if (country.equals("TF") == true) {
+ timezone = "Indian/Kerguelen";
+ } else if (country.equals("TK") == true) {
+ timezone = "Pacific/Fakaofo";
+ } else if (country.equals("TT") == true) {
+ timezone = "America/Port_of_Spain";
+ } else if (country.equals("VG") == true) {
+ timezone = "America/Tortola";
+ } else if (country.equals("VI") == true) {
+ timezone = "America/St_Thomas";
+ } else if (country.equals("VU") == true) {
+ timezone = "Pacific/Efate";
+ } else if (country.equals("RS") == true) {
+ timezone = "Europe/Belgrade";
+ } else if (country.equals("ME") == true) {
+ timezone = "Europe/Podgorica";
+ } else if (country.equals("AX") == true) {
+ timezone = "Europe/Mariehamn";
+ } else if (country.equals("GG") == true) {
+ timezone = "Europe/Guernsey";
+ } else if (country.equals("IM") == true) {
+ timezone = "Europe/Isle_of_Man";
+ } else if (country.equals("JE") == true) {
+ timezone = "Europe/Jersey";
+ } else if (country.equals("BL") == true) {
+ timezone = "America/St_Barthelemy";
+ } else if (country.equals("MF") == true) {
+ timezone = "America/Marigot";
+ } else if (country.equals("AR") == true) {
+ if (region.equals("01") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("02") == true) {
+ timezone = "America/Argentina/Catamarca";
+ } else if (region.equals("03") == true) {
+ timezone = "America/Argentina/Tucuman";
+ } else if (region.equals("04") == true) {
+ timezone = "America/Argentina/Rio_Gallegos";
+ } else if (region.equals("05") == true) {
+ timezone = "America/Argentina/Cordoba";
+ } else if (region.equals("06") == true) {
+ timezone = "America/Argentina/Tucuman";
+ } else if (region.equals("07") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("08") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("09") == true) {
+ timezone = "America/Argentina/Tucuman";
+ } else if (region.equals("10") == true) {
+ timezone = "America/Argentina/Jujuy";
+ } else if (region.equals("11") == true) {
+ timezone = "America/Argentina/San_Luis";
+ } else if (region.equals("12") == true) {
+ timezone = "America/Argentina/La_Rioja";
+ } else if (region.equals("13") == true) {
+ timezone = "America/Argentina/Mendoza";
+ } else if (region.equals("14") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("15") == true) {
+ timezone = "America/Argentina/San_Luis";
+ } else if (region.equals("16") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("17") == true) {
+ timezone = "America/Argentina/Salta";
+ } else if (region.equals("18") == true) {
+ timezone = "America/Argentina/San_Juan";
+ } else if (region.equals("19") == true) {
+ timezone = "America/Argentina/San_Luis";
+ } else if (region.equals("20") == true) {
+ timezone = "America/Argentina/Rio_Gallegos";
+ } else if (region.equals("21") == true) {
+ timezone = "America/Argentina/Buenos_Aires";
+ } else if (region.equals("22") == true) {
+ timezone = "America/Argentina/Catamarca";
+ } else if (region.equals("23") == true) {
+ timezone = "America/Argentina/Ushuaia";
+ } else if (region.equals("24") == true) {
+ timezone = "America/Argentina/Tucuman";
+ }
+ } else if (country.equals("BR") == true) {
+ if (region.equals("01") == true) {
+ timezone = "America/Rio_Branco";
+ } else if (region.equals("02") == true) {
+ timezone = "America/Maceio";
+ } else if (region.equals("03") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("04") == true) {
+ timezone = "America/Manaus";
+ } else if (region.equals("05") == true) {
+ timezone = "America/Bahia";
+ } else if (region.equals("06") == true) {
+ timezone = "America/Fortaleza";
+ } else if (region.equals("07") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("08") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("11") == true) {
+ timezone = "America/Campo_Grande";
+ } else if (region.equals("13") == true) {
+ timezone = "America/Belem";
+ } else if (region.equals("14") == true) {
+ timezone = "America/Cuiaba";
+ } else if (region.equals("15") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("16") == true) {
+ timezone = "America/Belem";
+ } else if (region.equals("17") == true) {
+ timezone = "America/Recife";
+ } else if (region.equals("18") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("20") == true) {
+ timezone = "America/Fortaleza";
+ } else if (region.equals("21") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("22") == true) {
+ timezone = "America/Recife";
+ } else if (region.equals("23") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("24") == true) {
+ timezone = "America/Porto_Velho";
+ } else if (region.equals("25") == true) {
+ timezone = "America/Boa_Vista";
+ } else if (region.equals("26") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("27") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("28") == true) {
+ timezone = "America/Maceio";
+ } else if (region.equals("29") == true) {
+ timezone = "America/Sao_Paulo";
+ } else if (region.equals("30") == true) {
+ timezone = "America/Recife";
+ } else if (region.equals("31") == true) {
+ timezone = "America/Araguaina";
+ }
+ } else if (country.equals("CD") == true) {
+ if (region.equals("02") == true) {
+ timezone = "Africa/Kinshasa";
+ } else if (region.equals("05") == true) {
+ timezone = "Africa/Lubumbashi";
+ } else if (region.equals("06") == true) {
+ timezone = "Africa/Kinshasa";
+ } else if (region.equals("08") == true) {
+ timezone = "Africa/Kinshasa";
+ } else if (region.equals("10") == true) {
+ timezone = "Africa/Lubumbashi";
+ } else if (region.equals("11") == true) {
+ timezone = "Africa/Lubumbashi";
+ } else if (region.equals("12") == true) {
+ timezone = "Africa/Lubumbashi";
+ }
+ } else if (country.equals("CN") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("04") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("05") == true) {
+ timezone = "Asia/Harbin";
+ } else if (region.equals("06") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("07") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("08") == true) {
+ timezone = "Asia/Harbin";
+ } else if (region.equals("09") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("10") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("11") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("12") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Urumqi";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("15") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("16") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("18") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("19") == true) {
+ timezone = "Asia/Harbin";
+ } else if (region.equals("20") == true) {
+ timezone = "Asia/Harbin";
+ } else if (region.equals("21") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("22") == true) {
+ timezone = "Asia/Harbin";
+ } else if (region.equals("23") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("24") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("25") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("26") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("28") == true) {
+ timezone = "Asia/Shanghai";
+ } else if (region.equals("29") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("30") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("31") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("32") == true) {
+ timezone = "Asia/Chongqing";
+ } else if (region.equals("33") == true) {
+ timezone = "Asia/Chongqing";
+ }
+ } else if (country.equals("EC") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Pacific/Galapagos";
+ } else if (region.equals("02") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("03") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("04") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("05") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("06") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("07") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("08") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("09") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("10") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("11") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("12") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("13") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("14") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("15") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("17") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("18") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("19") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("20") == true) {
+ timezone = "America/Guayaquil";
+ } else if (region.equals("22") == true) {
+ timezone = "America/Guayaquil";
+ }
+ } else if (country.equals("ES") == true) {
+ if (region.equals("07") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("27") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("29") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("31") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("32") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("34") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("39") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("51") == true) {
+ timezone = "Africa/Ceuta";
+ } else if (region.equals("52") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("53") == true) {
+ timezone = "Atlantic/Canary";
+ } else if (region.equals("54") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("55") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("56") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("57") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("58") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("59") == true) {
+ timezone = "Europe/Madrid";
+ } else if (region.equals("60") == true) {
+ timezone = "Europe/Madrid";
+ }
+ } else if (country.equals("GL") == true) {
+ if (region.equals("01") == true) {
+ timezone = "America/Thule";
+ } else if (region.equals("02") == true) {
+ timezone = "America/Godthab";
+ } else if (region.equals("03") == true) {
+ timezone = "America/Godthab";
+ }
+ } else if (country.equals("ID") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Asia/Pontianak";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("04") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("05") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("06") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("07") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("08") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("09") == true) {
+ timezone = "Asia/Jayapura";
+ } else if (region.equals("10") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("11") == true) {
+ timezone = "Asia/Pontianak";
+ } else if (region.equals("12") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("15") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("16") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("17") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("18") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("19") == true) {
+ timezone = "Asia/Pontianak";
+ } else if (region.equals("20") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("21") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("22") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("23") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("24") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("25") == true) {
+ timezone = "Asia/Pontianak";
+ } else if (region.equals("26") == true) {
+ timezone = "Asia/Pontianak";
+ } else if (region.equals("30") == true) {
+ timezone = "Asia/Jakarta";
+ } else if (region.equals("31") == true) {
+ timezone = "Asia/Makassar";
+ } else if (region.equals("33") == true) {
+ timezone = "Asia/Jakarta";
+ }
+ } else if (country.equals("KZ") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Asia/Almaty";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Almaty";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("04") == true) {
+ timezone = "Asia/Aqtobe";
+ } else if (region.equals("05") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("06") == true) {
+ timezone = "Asia/Aqtau";
+ } else if (region.equals("07") == true) {
+ timezone = "Asia/Oral";
+ } else if (region.equals("08") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("09") == true) {
+ timezone = "Asia/Aqtau";
+ } else if (region.equals("10") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("11") == true) {
+ timezone = "Asia/Almaty";
+ } else if (region.equals("12") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Aqtobe";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Qyzylorda";
+ } else if (region.equals("15") == true) {
+ timezone = "Asia/Almaty";
+ } else if (region.equals("16") == true) {
+ timezone = "Asia/Aqtobe";
+ } else if (region.equals("17") == true) {
+ timezone = "Asia/Almaty";
+ }
+ } else if (country.equals("MX") == true) {
+ if (region.equals("01") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("02") == true) {
+ timezone = "America/Tijuana";
+ } else if (region.equals("03") == true) {
+ timezone = "America/Hermosillo";
+ } else if (region.equals("04") == true) {
+ timezone = "America/Merida";
+ } else if (region.equals("05") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("06") == true) {
+ timezone = "America/Chihuahua";
+ } else if (region.equals("07") == true) {
+ timezone = "America/Monterrey";
+ } else if (region.equals("08") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("09") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("10") == true) {
+ timezone = "America/Mazatlan";
+ } else if (region.equals("11") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("12") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("13") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("14") == true) {
+ timezone = "America/Mazatlan";
+ } else if (region.equals("15") == true) {
+ timezone = "America/Chihuahua";
+ } else if (region.equals("16") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("17") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("18") == true) {
+ timezone = "America/Mazatlan";
+ } else if (region.equals("19") == true) {
+ timezone = "America/Monterrey";
+ } else if (region.equals("20") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("21") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("22") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("23") == true) {
+ timezone = "America/Cancun";
+ } else if (region.equals("24") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("25") == true) {
+ timezone = "America/Mazatlan";
+ } else if (region.equals("26") == true) {
+ timezone = "America/Hermosillo";
+ } else if (region.equals("27") == true) {
+ timezone = "America/Merida";
+ } else if (region.equals("28") == true) {
+ timezone = "America/Monterrey";
+ } else if (region.equals("29") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("30") == true) {
+ timezone = "America/Mexico_City";
+ } else if (region.equals("31") == true) {
+ timezone = "America/Merida";
+ } else if (region.equals("32") == true) {
+ timezone = "America/Monterrey";
+ }
+ } else if (country.equals("MY") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("04") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("05") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("06") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("07") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("08") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("09") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("11") == true) {
+ timezone = "Asia/Kuching";
+ } else if (region.equals("12") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Kuala_Lumpur";
+ } else if (region.equals("15") == true) {
+ timezone = "Asia/Kuching";
+ } else if (region.equals("16") == true) {
+ timezone = "Asia/Kuching";
+ }
+ } else if (country.equals("NZ") == true) {
+ if (region.equals("85") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("E7") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("E8") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("E9") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F1") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F2") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F3") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F4") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F5") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F7") == true) {
+ timezone = "Pacific/Chatham";
+ } else if (region.equals("F8") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("F9") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("G1") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("G2") == true) {
+ timezone = "Pacific/Auckland";
+ } else if (region.equals("G3") == true) {
+ timezone = "Pacific/Auckland";
+ }
+ } else if (country.equals("PT") == true) {
+ if (region.equals("02") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("03") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("04") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("05") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("06") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("07") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("08") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("09") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("10") == true) {
+ timezone = "Atlantic/Madeira";
+ } else if (region.equals("11") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("13") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("14") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("16") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("17") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("18") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("19") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("20") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("21") == true) {
+ timezone = "Europe/Lisbon";
+ } else if (region.equals("22") == true) {
+ timezone = "Europe/Lisbon";
+ }
+ } else if (country.equals("RU") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Novokuznetsk";
+ } else if (region.equals("04") == true) {
+ timezone = "Asia/Novosibirsk";
+ } else if (region.equals("05") == true) {
+ timezone = "Asia/Vladivostok";
+ } else if (region.equals("06") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("07") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("08") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("09") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("10") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("11") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("15") == true) {
+ timezone = "Asia/Anadyr";
+ } else if (region.equals("16") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("17") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("18") == true) {
+ timezone = "Asia/Krasnoyarsk";
+ } else if (region.equals("20") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("21") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("22") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("23") == true) {
+ timezone = "Europe/Kaliningrad";
+ } else if (region.equals("24") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("25") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("26") == true) {
+ timezone = "Asia/Kamchatka";
+ } else if (region.equals("27") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("28") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("29") == true) {
+ timezone = "Asia/Novokuznetsk";
+ } else if (region.equals("30") == true) {
+ timezone = "Asia/Vladivostok";
+ } else if (region.equals("31") == true) {
+ timezone = "Asia/Krasnoyarsk";
+ } else if (region.equals("32") == true) {
+ timezone = "Asia/Omsk";
+ } else if (region.equals("33") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("34") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("35") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("36") == true) {
+ timezone = "Asia/Anadyr";
+ } else if (region.equals("37") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("38") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("39") == true) {
+ timezone = "Asia/Krasnoyarsk";
+ } else if (region.equals("40") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("41") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("42") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("43") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("44") == true) {
+ timezone = "Asia/Magadan";
+ } else if (region.equals("45") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("46") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("47") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("48") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("49") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("50") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("51") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("52") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("53") == true) {
+ timezone = "Asia/Novosibirsk";
+ } else if (region.equals("54") == true) {
+ timezone = "Asia/Omsk";
+ } else if (region.equals("55") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("56") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("57") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("58") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("59") == true) {
+ timezone = "Asia/Vladivostok";
+ } else if (region.equals("60") == true) {
+ timezone = "Europe/Kaliningrad";
+ } else if (region.equals("61") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("62") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("63") == true) {
+ timezone = "Asia/Yakutsk";
+ } else if (region.equals("64") == true) {
+ timezone = "Asia/Sakhalin";
+ } else if (region.equals("65") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("66") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("67") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("68") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("69") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("70") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("71") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("72") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("73") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("74") == true) {
+ timezone = "Asia/Krasnoyarsk";
+ } else if (region.equals("75") == true) {
+ timezone = "Asia/Novosibirsk";
+ } else if (region.equals("76") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("77") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("78") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("79") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("80") == true) {
+ timezone = "Asia/Yekaterinburg";
+ } else if (region.equals("81") == true) {
+ timezone = "Europe/Samara";
+ } else if (region.equals("82") == true) {
+ timezone = "Asia/Irkutsk";
+ } else if (region.equals("83") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("84") == true) {
+ timezone = "Europe/Volgograd";
+ } else if (region.equals("85") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("86") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("87") == true) {
+ timezone = "Asia/Novosibirsk";
+ } else if (region.equals("88") == true) {
+ timezone = "Europe/Moscow";
+ } else if (region.equals("89") == true) {
+ timezone = "Asia/Vladivostok";
+ }
+ } else if (country.equals("UA") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("02") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("03") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("04") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("05") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("06") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("07") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("08") == true) {
+ timezone = "Europe/Simferopol";
+ } else if (region.equals("09") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("10") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("11") == true) {
+ timezone = "Europe/Simferopol";
+ } else if (region.equals("13") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("14") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("15") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("16") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("17") == true) {
+ timezone = "Europe/Simferopol";
+ } else if (region.equals("18") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("19") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("20") == true) {
+ timezone = "Europe/Simferopol";
+ } else if (region.equals("21") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("22") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("23") == true) {
+ timezone = "Europe/Kiev";
+ } else if (region.equals("24") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("25") == true) {
+ timezone = "Europe/Uzhgorod";
+ } else if (region.equals("26") == true) {
+ timezone = "Europe/Zaporozhye";
+ } else if (region.equals("27") == true) {
+ timezone = "Europe/Kiev";
+ }
+ } else if (country.equals("UZ") == true) {
+ if (region.equals("01") == true) {
+ timezone = "Asia/Tashkent";
+ } else if (region.equals("02") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("03") == true) {
+ timezone = "Asia/Tashkent";
+ } else if (region.equals("06") == true) {
+ timezone = "Asia/Tashkent";
+ } else if (region.equals("07") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("08") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("09") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("10") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("12") == true) {
+ timezone = "Asia/Samarkand";
+ } else if (region.equals("13") == true) {
+ timezone = "Asia/Tashkent";
+ } else if (region.equals("14") == true) {
+ timezone = "Asia/Tashkent";
+ }
+ } else if (country.equals("TL") == true) {
+ timezone = "Asia/Dili";
+ } else if (country.equals("PF") == true) {
+ timezone = "Pacific/Marquesas";
+ }
+ return timezone;
+ }
+}
diff --git a/EssentialsGeoIP/src/config.yml b/EssentialsGeoIP/src/config.yml
new file mode 100644
index 000000000..70d7a51ba
--- /dev/null
+++ b/EssentialsGeoIP/src/config.yml
@@ -0,0 +1,10 @@
+database:
+ show-cities: false
+ download-if-missing: true
+ # Url for country
+ download-url: "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"
+ # Url for cities
+ download-url-city: "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
+
+show-on-login: true
+show-on-whois: true \ No newline at end of file
diff --git a/EssentialsGeoIP/src/plugin.yml b/EssentialsGeoIP/src/plugin.yml
new file mode 100644
index 000000000..26d75ce77
--- /dev/null
+++ b/EssentialsGeoIP/src/plugin.yml
@@ -0,0 +1,8 @@
+# This determines the command prefix when there are conflicts (/name:home, /name:help, etc.)
+name: EssentialsGeoIP
+main: com.earth2me.essentials.geoip.EssentialsGeoIP
+# Note to developers: This next line cannot change, or the automatic versioning system will break.
+version: TeamCity
+website: http://www.earth2me.net:8001/
+description: Shows the country or city of a user on login and /whois.
+authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo] \ No newline at end of file