################################################################################################################################################
#
# ********** CONFIGURATION FILE FOR AREA GENERATOR **********
#
# TO CHANGE DEFAULT CONFIGURATION VALUES, MODIFY ORG.ECLIPSE.STEM.UTILITY.GENERATORS\GenConstants.java
#
# CONFIGURATION VARIABLES SET IN THIS FILE OVERRIDE THE DEFAULTS
#
# The WORKSPACE VARIABLE IS REQUIRED, ALL OTHER VARIABLES ARE OPTIONAL (i.e. WORKSPACE=C:\stemII\)
WORKSPACE=C:\stemII\
#
# ISO3166-1 file (i.e. ISO3166_1=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-1\ISO3166_1_list.txt)
#IS03166_1=
#
# ISO3166-2 file (i.e. ISO3166_2=C:\stemII\org.eclipse.stem.utility\parameters\ISO3166-2\ISO3166_2_list.txt)
#ISO3166_2=
#
# ISO fix  file (i.e. ISO_FIX=C:\stemII\org.eclipse.stem.utility\parameters\ISOFIX\ISO_FIX.txt)
#ISO_FIX=
#
# File with target countries we want to process (i.e. TARGET_LIST=C:\stemII\org.eclipse.stem.utility\parameters\targets\groupedDataFiles.txt)
#TARGET_LIST =
#
# Population profile for this country (i.e. POP_PROFILES=C:\stemII\org.eclipse.stem.utility\parameters\profiles\)
#POP_PROFILES=
#
# Path to areas in polygon units - used only for computing approximate area of level 2 regions (i.e. POLYGON_AREAS=C:\stemII\org.eclipse.stem.utility\parameters\PolygonAreas\)
#POLYGON_AREAS=
#
# Path to area and population files (i.e. AREA_POP=C:\stemII\org.eclipse.stem.utility\parameters\AreaPopulationData\)
#AREA_POP=
#
# Path to folder with lexicographically sorted files (i.e. LEX_DIR=C:\stemII\org.eclipse.stem.utility\parameters\sort\)
#LEX_DIR=
#
# Output directory for new files (i.e. PROPERTIES_OUTPUT=C:\stemII\org.eclipse.stem.internal.data\resources\data\country\)
PROPERTIES_OUTPUT= C:\tempout\
#
# ********** END OF CONFIGURATION FILE FOR AREA GENERATOR **********
#
################################################################################################################################################