# 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 = Adirham n Tgeldunin Taɛrabin Yedduklen
AOA = Akwanza n Ungula
AUD = Adular n Lusṭrali|A$
BHD = Adinar Abaḥrini||3
BIF = Afrank Aburandi||0
BWP = Apula Abusṭwanan
CAD = Adular Akanadi|CA$
CDF = Afrank Akunguli
CHF = Afrank Aswis
CNY = Ayuwan Renminbi Acinwa|CN¥
CVE = Akabuviradinu Askudi
DJF = Afrank Ajibuti||0
DZD = Adinar Azzayri|DA
EGP = Apund Amaṣri
ERN = Anakfa Iritiri
ETB = Abir Utyupi
EUR = Uru|€
GBP = Apund Sterling Aglizi|£
GHC = Asidi Aɣani|||1
GMD = Adalasi Agambi
GNS = Afrank Aɣini|||1
INR = Arupi Ahendi|Rs.
JPY = Ayen Ajappuni|JP¥|0
KES = Aciling Akini
KMF = Afrank Akamiruni||0
LRD = Adular Alibiri
LSL = Aluṭi Alizuṭi
LYD = Adinar Alibi||3
MAD = Adirham Amerruki
MGA = Aryari Amalgac||0
MRO = Agiya Amuriṭani||0
MUR = Arupi Amurisi||0
MWK = Akwaca Amalawi
MZM = Amitikal Amuzembiqi|||1
NAD = Adular Anamibi
NGN = Anayra Anijiri
RWF = Afrank Aruwandi||0
SAR = Aryal Asuɛudi
SCR = Arupi Aseycili
SDG = Apund Asudani
SHP = Apund Asant Ilini
SLL = Alyun||0
SOS = Aciling Aṣumali||0
STD = Asw Ṭum d Udubra Amenzay||0
SZL = Alilangini
TND = Adinar Atunsi||3
TZS = Aciling Aṭanẓani||0
UGX = Aciling Awgandi||0
USD = Adular WD|US$
XAF = Afrank BCEA CFA|FCFA|0
XOF = Afrank BCEAO CFA|CFA|0
ZAR = Arand Afriqi n Wadda
ZMK = Akwaca Azambi (1968–2012)||0|1
ZMW = Akwaca Azambi
ZWD = Adular Azimbabwi||0|1
