# /**********************************************************************************************
# * 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. 
# ************************************************************************************************/

# CHAD_names.properties # Level 0
TCD = Chad

# Level 1 (admin 1 = e.g., state)
TD-BA = Batha                 
TD-BI = Biltine               
TD-BET = Borkou-Ennedi-Tibesti
TD-CB = Chari-Baguirmi        
TD-GR = Guera                 
TD-KA = Kanem                 
TD-LC = Lake                  
TD-LO = Logone Occiden        
TD-LR = Logone Orienta        
TD-MK = Mayo-Kebbi            
TD-MC = Moyen-Chari           
TD-OD = Ouaddai               
TD-SA = Salamat               
TD-TA = Tandjile              

# Level 2 (admin 2 = e.g., country)
# Generated key Details :  Level 1 ( TD-BET = BORKOU ENNEDI TIBESTI ). Level 2 ( 030001 = TIBESTI ). 
TD-BET-G030001 = Tibesti  
# Generated key Details :  Level 1 ( TD-KA = KANEM ). Level 2 ( 060001 = NOKOU ). 
TD-KA-G060001 = Nokou     
# Generated key Details :  Level 1 ( TD-BA = BATHA ). Level 2 ( 010001 = DJEDAA ). 
TD-BA-G010001 = Djedaa    
# Generated key Details :  Level 1 ( TD-BI = BILTINE ). Level 2 ( 020001 = IRIBA ). 
TD-BI-G020001 = Iriba     
# Generated key Details :  Level 1 ( TD-LC = LAKE ). Level 2 ( 070001 = BOL ). 
TD-LC-G070001 = Bol       
# Generated key Details :  Level 1 ( TD-OD = OUADDAI ). Level 2 ( 120001 = ABECHE ). 
TD-OD-G120001 = Abeche    
# Generated key Details :  Level 1 ( TD-CB = CHARI BAGUIRMI ). Level 2 ( 040001 = MASSAKORY ). 
TD-CB-G040001 = Massakory 
# Generated key Details :  Level 1 ( TD-GR = GUERA ). Level 2 ( 050001 = MANGALME ). 
TD-GR-G050001 = Mangalme  
# Generated key Details :  Level 1 ( TD-SA = SALAMAT ). Level 2 ( 130001 = ABOU DEIA ). 
TD-SA-G130001 = Abou Deia 
# Generated key Details :  Level 1 ( TD-MK = MAYO KEBBI ). Level 2 ( 100001 = BONGOR ). 
TD-MK-G100001 = Bongor    
# Generated key Details :  Level 1 ( TD-MC = MOYEN CHARI ). Level 2 ( 110001 = KYABE ). 
TD-MC-G110001 = Kyabe     
# Generated key Details :  Level 1 ( TD-TA = TANDJILE ). Level 2 ( 140001 = LAI ). 
TD-TA-G140001 = Lai       
# Generated key Details :  Level 1 ( TD-LO = LOGONE OCCIDEN ). Level 2 ( 080001 = BENOYE ). 
TD-LO-G080001 = Benoye    
# Generated key Details :  Level 1 ( TD-LR = LOGONE ORIENTA ). Level 2 ( 090001 = DOBA ). 
TD-LR-G090001 = Doba      
