# AFG_2_area.properties 
# This file contains area values for AFGHANISTAN
# /*********************************************************************************************
# * Copyright (c) 2006 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# ***********************************************************************************************/

# /**********************************************************************************************
# * Key Format: 
# * 
# * 	 For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: 
# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.
# *
# * 	 For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate
# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County
# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the
# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.
# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within 
# * a level 1 administration. 
# ************************************************************************************************/

# This is the name of the class that will interpret the rest of the file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.geography.specifications.CountryAreaLabelPropertyFileSpecification

# The ISO-3166-1 alpha3 code for the country
ISOKEY = AFG

# The administration level of the area data
ADMIN_LEVEL = 2

# This is the date range for which the area values in this file are valid 
# See http://purl.org/dc/terms/1.1/valid
VALID = start=1900-01-01;

# This is the source of the data
SOURCE = https://www.cia.gov/library/publications/the-world-factbook/
# SOURCE = https://www.cia.gov/library/publications/the-world-factbook/

# Level 1 (admin 1 = e.g., state)
# Level 2 (admin 2 = e.g., county)

# Generated key details :  Level 1 ( AF-BDS = BADAKHSHAN ). Level 2 ( 010001 = AFG.L2.1 ). 
AF-BDS-G010001 = 44059.3
# Generated key details :  Level 1 ( AF-TAK = TAKHAR ). Level 2 ( 320001 = AFG.L2.2 ). 
AF-TAK-G320001 = 30784.5
# Generated key details :  Level 1 ( AF-JOW = JOWZJAN ). Level 2 ( 130001 = AFG.L2.3 ). 
AF-JOW-G130001 = 11798.3
# Generated key details :  Level 1 ( AF-BAL = BALKH ). Level 2 ( 040001 = AFG.L2.4 ). 
AF-BAL-G040001 = 17248.5
# Generated key details :  Level 1 ( AF-KDZ = KONDOZ [KUNDUZ] [KONDUZ] ). Level 2 ( 190001 = AFG.L2.5 ). 
AF-KDZ-G190001 = 8039.7
# Generated key details :  Level 1 ( AF-SAM = SAMANGAN ). Level 2 ( 300001 = AFG.L2.6 ). 
AF-SAM-G300001 = 15999.2
# Generated key details :  Level 1 ( AF-FYB = FARYAB ). Level 2 ( 080001 = AFG.L2.7 ). 
AF-FYB-G080001 = 20292.8
# Generated key details :  Level 1 ( AF-BGL = BAGHLAN [BAGHIAN] ). Level 2 ( 030001 = AFG.L2.8 ). 
AF-BGL-G030001 = 21118.4
# Generated key details :  Level 1 ( AF-KNR = KONAR [KUNAR] ). Level 2 ( 180001 = AFG.L2.9 ). 
AF-KNR-G180001 = 4941.5
# Generated key details :  Level 1 ( AF-BDG = BADGHIS ). Level 2 ( 020001 = AFG.L2.10 ). 
AF-BDG-G020001 = 20590.6
# Generated key details :  Level 1 ( AF-KAP = KAPISA ). Level 2 ( 160001 = AFG.L2.11 ). 
AF-KAP-G160001 = 1842.1
# Generated key details :  Level 1 ( AF-LAG = LAGHMAN ). Level 2 ( 200001 = AFG.L2.12 ). 
AF-LAG-G200001 = 3842.6
# Generated key details :  Level 1 ( AF-HER = HERAT ). Level 2 ( 120001 = AFG.L2.13 ). 
AF-HER-G120001 = 54778.0
# Generated key details :  Level 1 ( AF-BAM = BAMIAN ). Level 2 ( 050001 = AFG.L2.14 ). 
AF-BAM-G050001 = 14175.3
# Generated key details :  Level 1 ( AF-PAR = PARWAN [PARVAN] ). Level 2 ( 290001 = AFG.L2.15 ). 
AF-PAR-G290001 = 11261.9
# Generated key details :  Level 1 ( AF-GHO = GHOWR ). Level 2 ( 100001 = AFG.L2.16 ). 
AF-GHO-G100001 = 36478.8
# Generated key details :  Level 1 ( AF-KAB = KABUL [KABOL] ). Level 2 ( 140001 = AFG.L2.17 ). 
AF-KAB-G140001 = 4461.6
# Generated key details :  Level 1 ( AF-NAN = NANGRAHAR [NANGARHAR] [NANGARHA] ). Level 2 ( 220001 = AFG.L2.18 ). 
AF-NAN-G220001 = 7727.4
# Generated key details :  Level 1 ( AF-WAR = WARDAK [WARDAG] [VARDAK] ). Level 2 ( 330001 = AFG.L2.19 ). 
AF-WAR-G330001 = 8938.1
# Generated key details :  Level 1 ( AF-LOW = LOWGAR ). Level 2 ( 210001 = AFG.L2.20 ). 
AF-LOW-G210001 = 3879.8
# Generated key details :  Level 1 ( AF-ORU = ORUZGAN [URUZGAN] ). Level 2 ( 250001 = AFG.L2.21 ). 
AF-ORU-G250001 = 19482.4
# Generated key details :  Level 1 ( AF-FRA = FARAH ). Level 2 ( 070001 = AFG.L2.22 ). 
AF-FRA-G070001 = 48470.9
# Generated key details :  Level 1 ( AF-HEL = HELMAND ). Level 2 ( 110001 = AFG.L2.23 ). 
AF-HEL-G110001 = 58583.7
# Generated key details :  Level 1 ( AF-ZAB = ZABOL [ZABUL] ). Level 2 ( 340001 = AFG.L2.24 ). 
AF-ZAB-G340001 = 17343.5
# Generated key details :  Level 1 ( AF-KAN = KANDAHAR ). Level 2 ( 150001 = AFG.L2.25 ). 
AF-KAN-G150001 = 54022.0
# Generated key details :  Level 1 ( AF-NIM = NIMRUZ ). Level 2 ( 230001 = AFG.L2.26 ). 
AF-NIM-G230001 = 41005.4
# Generated key details :  Level 1 ( AF-GHA = GHAZNI [GHAZN] ). Level 2 ( 090001 = AFG.L2.27 ). 
AF-GHA-G090001 = 22914.6
# Generated key details :  Level 1 ( AF-PIA = PAKTIA ). Level 2 ( 260001 = AFG.L2.28 ). 
AF-PIA-G260001 = 6431.7
