# 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 = Dirham Uni Emirat Arab
AFN = Afghani Afganistan||0
ALL = Lek Albania||0
AMD = Dram Armenia
ANG = Guilder Antilla Walanda
AOA = Kwanza Angola
ARS = Peso Argentina
AUD = Dolar Australia|A$
AWG = Florin Aruban
AZN = Manat Azerbaijan
BAM = Mark Konvertibel Bosnia-Herzegovina
BBD = Dolar Barbadian
BDT = Taka Bangladesh
BGN = Lev Bulgaria
BHD = Bahrain Dinar||3
BIF = Franc Burundi||0
BMD = Dolar Bermuda
BND = Dolar Brunai
BOB = Boliviano Bolivia
BRL = Real Brasil|R$
BSD = Dolar Bahamian
BTN = Ngultrum Bhutan
BWP = Pula Botswana
BYN = Ruble Belarusia
BZD = Dolar Belise
CAD = Dolar Kanada|CA$
CDF = Franc Kongo
CHF = Franc Swiss
CLP = Peso Chili||0
CNH = Yuan Cina (Jaban Rangkah)|||1
CNY = Yuan Cina|CN¥
COP = Peso Kolumbia
CRC = Colon Kosta Rika
CUC = Peso Konvertibel Kuba
CUP = Peso Kuba
CVE = Escudo Tanjung Verde
CZK = Koruna Czech
DJF = Franc Djibouti||0
DKK = Krone Denmark
DOP = Peso Dominika
DZD = Dinar Algeria
EGP = Pound Mesir
ERN = Nakfa Eritrea
ETB = Birr Ethiopia
EUR = Euro|€
FJD = Dolar Fiji
FKP = Pound Kepuloan Falkland
GBP = Pound Inggris|£
GEL = Lari Georgia
GHS = Cedi Ghana
GIP = Pound Gibraltar
GMD = Dalasi Gambia
GNF = Franc Guinea||0
GTQ = Quetzal Guatemala
GYD = Dolar Guyana
HKD = Dolar Hong Kong|HK$
HNL = Lempira Honduras
HRK = Kuna Kroasia
HTG = Gourde Haiti
HUF = Forint Hungaria
IDR = Rupiah Indonesia|Rp
ILS = Shekel Anyar Israel|₪
INR = Rupee India|₹
IQD = Dinar Irak||0
IRR = Rial Iran||0
ISK = Krona Islandia||0
JMD = Dolar Jamaika
JOD = Dinar Yordania||3
JPY = Yen Jepang|JP¥|0
KES = Shilling Kenya
KGS = Som Kirgistan
KHR = Riel Kamboja
KMF = Franc Komoro||0
KPW = Won Korea Lor||0
KRW = Won Korea Kidul|₩|0
KWD = Dinar Kuwait||3
KYD = Dolar Kepuloan Caiman
KZT = Tenge Kasakhstan
LAK = Kip Laos||0
LBP = Pound Libanon||0
LKR = Rupee Sri Lanka
LRD = Dolar Liberia
LYD = Dinar Libya||3
MAD = Dirham Maroko
MDL = Leu Moldova
MGA = Ariary Malagasi||0
MKD = Denar Masedonia
MMK = Kyat Myanmar||0
MNT = Tugrik Mongol
MOP = Pataca Macau
MRO = Ouguiya Mauritania (1973 - 2017)||0|1
MRU = Ouguiya Mauritania
MUR = Rupee Mauritius
MVR = Rufiyaa Maladewa
MWK = Kwacha Malawi
MXN = Peso Meksiko|MX$
MYR = Ringgit Malaysia
MZN = Metical Mosambik
NAD = Dolar Namibia
NGN = Naira Nigeria
NIO = Cordoba Nikaragua
NOK = Krone Norwegia
NPR = Rupee Nepal
NZD = Dolar Selandia Anyar|NZ$
OMR = Rial Oman||3
PAB = Balboa Panama
PEN = Sol Peru
PGK = Kina Papua Nugini
PHP = Piso Filipina
PKR = Rupee Pakistan
PLN = Zloty Polandia
PYG = Guarani Paraguay||0
QAR = Rial Qatar
RON = Leu Rumania
RSD = Dinar Serbia||0
RUB = Rubel Rusia
RWF = Franc Rwanda||0
SAR = Riyal Saudi
SBD = Dolar Kepuloan Solomon
SCR = Rupee Seichelles
SDG = Pound Sudan
SEK = Krona Swedia
SGD = Dolar Singapura
SHP = Pound Santa Helena
SLL = Leone Sierra Leone||0
SOS = Shilling Somalia||0
SRD = Dolar Suriname
SSP = Pound Sudan Kidul
STN = Dobra Sao Tome lan Principe
SYP = Pound Siria||0
SZL = Lilangeni Swasi
THB = Baht Thai
TJS = Somoni Tajikistan
TMT = Manat Turmenistan
TND = Dinar Tunisia||3
TOP = Paʻanga Tonga
TRY = Lira Turki|TL
TTD = Dolar Trinidad lan Tobago
TWD = Dolar Anyar Taiwan|NT$
TZS = Shilling Tansania
UAH = Hryvnia Ukrania
UGX = Shilling Uganda||0
USD = Dolar Amerika Serikat|US$
UYU = Peso Uruguay
UZS = Som Usbekistan
VEF = Bolivar Venezuela (2008 - 2018)|||1
VES = Bolivar Venezuela
VND = Dong Vietnam|₫|0
VUV = Vatu Vanuatu||0
WST = Tala Samoa
XAF = CFA Franc Afrika Tengah|FCFA|0
XCD = Dolar Karibia Wetan|EC$
XOF = CFA Franc Afrika Kulon|CFA|0
XPF = Franc CFP|CFPF|0
XXX = Dhuwit Ora Dikenali|¤||1
YER = Rial Yaman||0
ZAR = Rand Afrika Kidul
ZMW = Kwacha Sambia
