#
# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
#

#
# COPYRIGHT AND PERMISSION NOTICE
#
# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of the Unicode data files and any associated documentation (the "Data
# Files") or Unicode software and any associated documentation (the
# "Software") to deal in the Data Files or Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, and/or sell copies of the Data Files or Software, and
# to permit persons to whom the Data Files or Software are furnished to do
# so, provided that (a) the above copyright notice(s) and this permission
# notice appear with all copies of the Data Files or Software, (b) both the
# above copyright notice(s) and this permission notice appear in associated
# documentation, and (c) there is clear notice in each modified Data File or
# in the Software as well as in the documentation associated with the Data
# File(s) or Software that the data or software has been modified.
#
# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder shall not
# be used in advertising or otherwise to promote the sale, use or other
# dealings in these Data Files or Software without prior written
# authorization of the copyright holder.
#
 
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!

cs=checo
et=est\u00f3nio
pl=polaco
sl=esloveno
AE=Emiratos \u00c1rabes Unidos
AM=Arm\u00e9nia
AQ=Ant\u00e1rctica
AZ=Azerbeij\u00e3o
BA=B\u00f3snia-Herzegovina
BJ=Benim
BY=Bielorr\u00fassia
CM=Camar\u00f5es
CX=Ilha do Natal
CZ=Rep\u00fablica Checa
EE=Est\u00f3nia
EG=Egipto
EH=Sahara Ocidental
ER=Eritreia
FK=Ilhas Falkland
GL=Gronel\u00e2ndia
GS=Ilhas South Georgia e South Sandwich
GW=Guin\u00e9-Bissau
HK=Hong Kong - Regi\u00e3o Administrativa Especial da China
KE=Qu\u00e9nia
KG=Quirguizist\u00e3o
KN=Saint Kitts e Nevis
KP=Coreia do Norte
KR=Coreia do Sul
KY=Ilhas Caim\u00e3o
KZ=Cazaquist\u00e3o
LA=Lao, Rep\u00fablica Popular Democr\u00e1tica
LV=Let\u00f3nia
MC=M\u00f3naco
MD=Mold\u00e1via, Rep\u00fablica da
MG=Madag\u00e1scar
MK=Maced\u00f3nia, Rep\u00fablica da
MO=Macau - Regi\u00e3o Administrativa Especial da China
MP=Ilhas Mariana do Norte
MU=Maur\u00edcias
NC=Nova Caled\u00f3nia
PG=Papua Nova Guin\u00e9
PL=Pol\u00f3nia
PS=Territ\u00f3rio Palestiniano
RE=Reunion
RO=Rom\u00e9nia
SC=Seicheles
SG=Singapura
SI=Eslov\u00e9nia
SM=S\u00e3o Marino
TC=Ilhas Turcas e Caicos
TD=Tchade
TF=Territ\u00f3rios Franceses a Sul
TJ=Tajiquist\u00e3o
TM=Turquemenist\u00e3o
UM=Ilhas Minor Outlying (E.U.A)
UZ=Uzbaquist\u00e3o
VA=Santa S\u00e9 (Estado da Cidade do Vaticano)
VC=Saint Vincent e Grenadines
VG=Ilhas Virgin Brit\u00e2nicas
VI=Ilhas Virgin E.U.A.
VN=Vietname
YE=I\u00e9men
