# *   Copyright (C) 1998-2014, International Business Machines
# *   Corporation and others.  All Rights Reserved.
CURR_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  CURR_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  CURR_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
CURR_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt ha_GH.txt ha_Latn_NE.txt\
 ha_Latn_NG.txt ha_NE.txt ha_NG.txt he_IL.txt id_ID.txt\
 in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\
 ja_JP_TRADITIONAL.txt kk_Cyrl_KZ.txt kk_KZ.txt ks_Arab_IN.txt ks_IN.txt\
 ky_Cyrl_KG.txt ky_KG.txt mn_Cyrl_MN.txt mn_MN.txt mo.txt\
 ms_BN.txt ms_Latn_MY.txt ms_MY.txt ms_SG.txt nb_NO.txt\
 nn_NO.txt no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt\
 pa_Guru_IN.txt pa_IN.txt pa_PK.txt sh.txt sh_BA.txt\
 sh_CS.txt sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt\
 sr_CS.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt sr_ME.txt\
 sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt th_TH_TRADITIONAL.txt\
 tl.txt tl_PH.txt tzm_Latn_MA.txt tzm_MA.txt ug_Arab_CN.txt\
 ug_CN.txt uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt\
 vai_LR.txt vai_Vaii_LR.txt zh_CN.txt zh_HK.txt zh_Hans_CN.txt\
 zh_Hant_TW.txt zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS)


# Ordinary resources
CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\
 am.txt ar.txt ar_AE.txt ar_DJ.txt ar_ER.txt\
 ar_LB.txt ar_SO.txt ar_SS.txt as.txt asa.txt\
 az.txt az_Cyrl.txt az_Latn.txt bas.txt be.txt\
 bem.txt bez.txt bg.txt bm.txt bm_Latn.txt\
 bn.txt bo.txt bo_IN.txt br.txt brx.txt\
 bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt ca_FR.txt\
 cgg.txt chr.txt cs.txt cy.txt da.txt\
 dav.txt de.txt de_CH.txt de_LU.txt dje.txt\
 dsb.txt dua.txt dyo.txt dz.txt ebu.txt\
 ee.txt el.txt en.txt en_001.txt en_150.txt\
 en_AG.txt en_AI.txt en_AU.txt en_BB.txt en_BE.txt\
 en_BM.txt en_BS.txt en_BW.txt en_BZ.txt en_CA.txt\
 en_CC.txt en_CK.txt en_CM.txt en_CX.txt en_DG.txt\
 en_DM.txt en_ER.txt en_FJ.txt en_FK.txt en_FM.txt\
 en_GB.txt en_GD.txt en_GG.txt en_GH.txt en_GI.txt\
 en_GM.txt en_GY.txt en_HK.txt en_IE.txt en_IM.txt\
 en_IN.txt en_IO.txt en_JE.txt en_JM.txt en_KE.txt\
 en_KI.txt en_KN.txt en_KY.txt en_LC.txt en_LR.txt\
 en_LS.txt en_MG.txt en_MO.txt en_MS.txt en_MT.txt\
 en_MU.txt en_MW.txt en_MY.txt en_NA.txt en_NF.txt\
 en_NG.txt en_NR.txt en_NU.txt en_NZ.txt en_PG.txt\
 en_PH.txt en_PK.txt en_PN.txt en_PW.txt en_RW.txt\
 en_SB.txt en_SC.txt en_SD.txt en_SG.txt en_SH.txt\
 en_SL.txt en_SS.txt en_SX.txt en_SZ.txt en_TC.txt\
 en_TK.txt en_TO.txt en_TT.txt en_TV.txt en_TZ.txt\
 en_UG.txt en_VC.txt en_VG.txt en_VU.txt en_WS.txt\
 en_ZA.txt en_ZM.txt en_ZW.txt eo.txt es.txt\
 es_419.txt es_AR.txt es_BO.txt es_CL.txt es_CO.txt\
 es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GQ.txt\
 es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
 es_PE.txt es_PH.txt es_PR.txt es_PY.txt es_SV.txt\
 es_US.txt es_UY.txt es_VE.txt et.txt eu.txt\
 ewo.txt fa.txt fa_AF.txt ff.txt ff_GN.txt\
 ff_MR.txt fi.txt fil.txt fo.txt fr.txt\
 fr_BI.txt fr_CA.txt fr_CD.txt fr_DJ.txt fr_DZ.txt\
 fr_GN.txt fr_HT.txt fr_KM.txt fr_LU.txt fr_MG.txt\
 fr_MR.txt fr_MU.txt fr_RW.txt fr_SC.txt fr_SY.txt\
 fr_TN.txt fr_VU.txt fur.txt fy.txt ga.txt\
 gd.txt gl.txt gsw.txt gu.txt guz.txt\
 gv.txt ha.txt ha_Latn.txt ha_Latn_GH.txt haw.txt\
 he.txt hi.txt hr.txt hr_BA.txt hsb.txt\
 hu.txt hy.txt id.txt ig.txt ii.txt\
 is.txt it.txt ja.txt jgo.txt jmc.txt\
 ka.txt kab.txt kam.txt kde.txt kea.txt\
 khq.txt ki.txt kk.txt kk_Cyrl.txt kkj.txt\
 kl.txt kln.txt km.txt kn.txt ko.txt\
 kok.txt ks.txt ks_Arab.txt ksb.txt ksf.txt\
 ksh.txt kw.txt ky.txt ky_Cyrl.txt lag.txt\
 lb.txt lg.txt lkt.txt ln.txt ln_AO.txt\
 lo.txt lt.txt lu.txt luo.txt luy.txt\
 lv.txt mas.txt mas_TZ.txt mer.txt mfe.txt\
 mg.txt mgh.txt mgo.txt mk.txt ml.txt\
 mn.txt mn_Cyrl.txt mr.txt ms.txt ms_Latn.txt\
 ms_Latn_BN.txt ms_Latn_SG.txt mt.txt mua.txt my.txt\
 naq.txt nb.txt nd.txt ne.txt ne_IN.txt\
 nl.txt nl_AW.txt nl_BQ.txt nl_CW.txt nl_SR.txt\
 nl_SX.txt nmg.txt nn.txt nnh.txt nus.txt\
 nyn.txt om.txt om_KE.txt or.txt os.txt\
 os_RU.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\
 ps.txt pt.txt pt_AO.txt pt_CV.txt pt_GW.txt\
 pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt\
 qu.txt qu_BO.txt qu_EC.txt rm.txt rn.txt\
 ro.txt ro_MD.txt rof.txt ru.txt ru_BY.txt\
 ru_KG.txt ru_KZ.txt ru_MD.txt rw.txt rwk.txt\
 sah.txt saq.txt sbp.txt se.txt se_SE.txt\
 seh.txt ses.txt sg.txt shi.txt shi_Latn.txt\
 shi_Tfng.txt si.txt sk.txt sl.txt smn.txt\
 sn.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\
 sq.txt sq_MK.txt sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt\
 sr_Latn.txt sr_Latn_BA.txt sv.txt sw.txt sw_UG.txt\
 swc.txt ta.txt ta_LK.txt ta_MY.txt ta_SG.txt\
 te.txt teo.txt teo_KE.txt th.txt ti.txt\
 ti_ER.txt to.txt tr.txt twq.txt tzm.txt\
 tzm_Latn.txt ug.txt ug_Arab.txt uk.txt ur.txt\
 ur_IN.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
 vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
 wae.txt xog.txt yav.txt yi.txt yo.txt\
 yo_BJ.txt zgh.txt zh.txt zh_Hans.txt zh_Hans_HK.txt\
 zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt\
 zu.txt

