# *   Copyright (C) 1998-2015, International Business Machines
# *   Corporation and others.  All Rights Reserved.
UNIT_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:
#    _____________________________________________________
#    |  UNIT_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  UNIT_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)
UNIT_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_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_BN.txt ms_Latn_MY.txt ms_Latn_SG.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 ro_MD.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_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_BA.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.
UNIT_ALIAS_SOURCE = $(UNIT_SYNTHETIC_ALIAS)


# Ordinary resources
UNIT_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.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\
 br.txt brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt\
 ca.txt cgg.txt chr.txt cs.txt cy.txt\
 da.txt dav.txt de.txt de_CH.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_GT.txt\
 es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.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\
 ff.txt fi.txt fil.txt fo.txt fr.txt\
 fr_CA.txt fur.txt fy.txt ga.txt gd.txt\
 gl.txt gsw.txt gu.txt guz.txt gv.txt\
 ha.txt ha_Latn.txt haw.txt he.txt hi.txt\
 hr.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 lo.txt lt.txt lu.txt luo.txt\
 luy.txt lv.txt mas.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\
 mt.txt mua.txt my.txt naq.txt nb.txt\
 nd.txt ne.txt nl.txt nmg.txt nn.txt\
 nnh.txt nus.txt nyn.txt om.txt or.txt\
 os.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 rm.txt rn.txt ro.txt rof.txt\
 ru.txt rw.txt rwk.txt sah.txt saq.txt\
 sbp.txt 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 sq.txt\
 sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt sv_FI.txt\
 sw.txt ta.txt te.txt teo.txt th.txt\
 ti.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\
 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

