# Copyright 2012 Google Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA
AED = BAE dirhemi
AFN = Owgan afganisi||0
ALL = Alban leki||0
AMD = Ermeni dramy||0
ANG = Niderland antil guldeni
AOA = Angol kwanzasy
ARS = Argentin pesosy
AUD = Awstraliýa dollary|A$
AWG = Aruba florini
AZN = Azerbaýjan manady
BAM = Konwertirlenýän Bosniýa we Gersogowina markasy
BBD = Barbados dollary
BDT = Bangladeş takasy
BGN = Bolgar lewi
BHD = Bahreýn dinary||3
BIF = Burundi franky||0
BMD = Bermuda dollary
BND = Bruneý dollary
BOB = Boliwiýa boliwianosy
BRL = Brazil realy|R$
BSD = Bagama dollary
BTN = Butan ngultrumy
BWP = Botswana pulasy
BYN = Belarus rubly
BYR = Belorus rubly (2000–2016)||0|1
BZD = Beliz dollary
CAD = Kanada dollary|CA$
CDF = Kongo franky
CHF = Şweýsar franky
CLP = Çili pesosy||0
CNY = Hytaý ýuany|CN¥
COP = Kolumbiýa pesosy||0
CRC = Kosta-Rika kolony
CUC = Konwertirlenýän kuba pesosy
CUP = Kuba pesosy
CVE = Kabo-Werde eskudosy
CZK = Çeh kronasy
DJF = Jibuti franky||0
DKK = Daniýa kronasy
DOP = Dominikan pesosy
DZD = Alžir dinary
EGP = Müsür funty
ERN = Eritreýa nakfasy
ETB = Efiopiýa byry
EUR = Ýewro
FJD = Fiji dollary
FKP = Folklend adalarynyň funty
GBP = Britan funt sterlingi
GEL = Gruzin larisi|₾
GHS = Gano sedisi
GIP = Gibraltar funty
GMD = Gambiýa dalasisi
GNF = Gwineý franky||0
GTQ = Gwatemala ketsaly
GYD = Gaýana dollary||0
HKD = Gonkong dollary|HK$
HNL = Gonduras lempirasy
HRK = Horwat kunasy
HTG = Gaiti gurdy
HUF = Wenger forinti
IDR = Indoneziýa rupiýasy||0
ILS = Täze Ysraýyl şekeli|₪
INR = Hindi rupiýasy|₹
IQD = Yrak dinary||0
IRR = Eýran rialy||0
ISK = Islandiýa kronasy||0
JMD = Ýamaýka dollary
JOD = Iordan dinary||3
JPY = Ýapon ýeni|JP¥|0
KES = Keniýa şillingi
KGS = Gyrgyz somy
KHR = Kamboja riýeli
KMF = Komor adalarynyň franky||0
KPW = Demirgazyk Koreý wony||0
KRW = Günorta Koreý wony|₩|0
KWD = Kuweýt dinary||3
KYD = Kaýman adalarynyň dollary
KZT = Gazak teňňesi
LAK = Laos kipi||0
LBP = Liwan funty||0
LKR = Şri-Lanka rupiýasy
LRD = Liberiýa dollary
LYD = Liwiýa dinary||3
MAD = Marokko dirhamy
MDL = Moldaw leýi
MGA = Malagasiý ariarisi||0
MKD = Makedon dinary
MMK = Mýanma kýaty||0
MNT = Mongol tugrigi||0
MOP = Makao patakasy
MRO = Mawritan ugiýasy||0
MUR = Mawrikiý rupiýasy||0
MVR = Maldiw rufiýasy
MWK = Malawi kwaçasy
MXN = Meksikan pesosy|MX$
MYR = Malaýziýa ringgiti
MZN = Mozambik metikaly
NAD = Namibiýa dollary
NGN = Nigeriýa naýrasy
NIO = Nikaragua kordobasy
NOK = Norwegiýa kronasy
NPR = Nepal rupiýasy
NZD = Täze Zelandiýa dollary|NZ$
OMR = Oman rialy||3
PAB = Panama balboasy
PEN = Peru soly
PGK = Papua - Täze Gwineýa kinasy
PHP = Filippin pesosy
PKR = Päkistan rupiýasy||0
PLN = Polýak zlotysy
PYG = Paragwaý guaranisi||0
QAR = Katar rialy
RON = Rumyn leýi
RSD = Serb dinary||0
RUB = Rus rubly
RWF = Ruanda franky||0
SAR = Saud rialy
SBD = Solomon adalarynyň dollary
SCR = Seýşel rupiýasy
SDG = Sudan funty
SEK = Şwed kronasy
SGD = Singapur dollary
SHP = Keramatly Ýelena adasynyň funty
SLL = Sýerra-Leone leony||0
SOS = Somali şillingi||0
SRD = Surinam dollary
SSP = Günorta Sudan funty
STD = San-Tome we Prinsipi dobrasy||0|1
SYP = Siriýa funty||0
SZL = Swazi lilangeni
THB = Taýland baty
TJS = Täjik somonisy
TMT = Türkmen manady
TND = Tunis dinary||3
TOP = Tonga paangasy
TRY = Türk lirasy|TL
TTD = Trininad we Tobago dollary
TWD = Täze Taýwan dollary|NT$
TZS = Tanzaniýa şillingi||0
UAH = Ukrain griwnasy
UGX = Uganda şillingi||0
USD = ABŞ dollary|US$
UYU = Urugwaý pesosy
UZS = Özbek somy||0
VEF = Wenesuela boliwary
VND = Wýetnam dongy|₫|0
VUV = Wanuatu watusy||0
WST = Samoa talasy
XAF = KFA BEAC franky|FCFA|0
XCD = Gündogar karib dollary|EC$
XOF = KFA BCEAO franky|CFA|0
XPF = Fransuz ýuwaş umman franky|CFPF|0
XXX = Näbelli pul birligi|||1
YER = Ýemen rialy||0
ZAR = Günorta Afrika rendi
ZMW = Zambiýa kwaçasy
