# 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 = AED
AFN = AFN||0
ALL = ALL||0
AMD = AMD
ANG = Голланд Антил гульдени
AOA = AOA
ARS = Аргентина песоси
AUD = AUD|A$
AWG = Аруба флорини
AZN = AZN
BAM = BAM
BBD = Барбадос доллари
BDT = BDT
BGN = BGN
BHD = BHD||3
BIF = BIF||0
BMD = Бермуда доллари
BND = BND
BOB = Боливия болвиани
BRL = Бразил реали|R$
BSD = Багама доллари
BTN = BTN
BWP = BWP
BYN = BYN
BYR = BYR||0|1
BZD = Белиз доллари
CAD = Канада доллари|CA$
CDF = CDF
CHF = CHF
CLP = Чили песоси||0
CNY = Хитой юани|CN¥
COP = Колумбия песоси
CRC = Коста-Рика колони
CUC = Куба Айирбошлаш песоси
CUP = Куба песоси
CVE = CVE
CZK = CZK
DJF = DJF||0
DKK = DKK
DOP = Доминикан песоси
DZD = Жазоир динори
EGP = Миср фунти
ERN = ERN
ETB = ETB
EUR = Евро|€
FJD = FJD
FKP = Фолькленд ороли фунти
GBP = Инглиз фунт|£
GEL = GEL
GHS = GHS
GIP = GIP
GMD = GMD
GNF = GNF||0
GTQ = Гватемала кветзали
GYD = Гаяна доллари
HKD = HKD|HK$
HNL = Гондурас лемпираси
HRK = HRK
HTG = Гаити гурдаси
HUF = HUF
IDR = IDR
ILS = ILS|₪
INR = Ҳинд рупияси|₹
IQD = IQD||0
IRR = IRR||0
ISK = ISK||0
JMD = Ямайка доллари
JOD = JOD||3
JPY = Япон йенаси|JP¥|0
KES = KES
KGS = KGS
KHR = KHR
KMF = KMF||0
KPW = KPW||0
KRW = KRW|₩|0
KWD = KWD||3
KYD = Кайман ороли Доллари
KZT = KZT
LAK = LAK||0
LBP = LBP||0
LKR = LKR
LRD = LRD
LTL = LTL|||1
LVL = LVL|||1
LYD = Ливия динори||3
MAD = Марокаш дирҳами
MDL = MDL
MGA = MGA||0
MKD = MKD
MMK = MMK||0
MNT = MNT
MOP = MOP
MRO = MRO||0|1
MRU = MRU
MUR = MUR
MVR = MVR
MWK = MWK
MXN = Мексика песоси|MX$
MYR = MYR
MZN = MZN
NAD = NAD
NGN = NGN
NIO = Никарагуа кордобаси
NOK = NOK
NPR = NPR
NZD = NZD|NZ$
OMR = OMR||3
PAB = Панама бальбоаси
PEN = Перу сол
PGK = PGK
PHP = PHP
PKR = PKR
PLN = PLN
PYG = Парагвай гуарани||0
QAR = QAR
RON = RON
RSD = RSD||0
RUB = Рус рубли
RWF = RWF||0
SAR = SAR
SBD = SBD
SCR = SCR
SDG = SDG
SEK = SEK
SGD = SGD
SHP = SHP
SLL = SLL||0
SOS = SOS||0
SRD = Суринам доллари
SSP = SSP
STD = STD||0|1
STN = STN
SYP = SYP||0
SZL = SZL
THB = THB|฿
TJS = TJS
TMT = TMT
TND = TND||3
TOP = TOP
TRY = TRY|TL
TTD = Тринидад ва Тобаго доллари
TWD = TWD|NT$
TZS = TZS
UAH = UAH
UGX = UGX||0
USD = АҚШ доллари|US$
UYU = Уругвай песоси
UZS = Ўзбекистон сўм|сўм
VEF = Венесуэла боливари (2008–2018)|||1
VES = Венесуэла боливари
VND = VND|₫|0
VUV = VUV||0
WST = WST
XAF = XAF|FCFA|0
XCD = Шарқий Кариб доллари|EC$
XOF = XOF|CFA|0
XPF = XPF|CFPF|0
XXX = XXX|¤||1
YER = YER||0
ZAR = ZAR
ZMW = ZMW
